{"id":46476814,"url":"https://github.com/hololinked-dev/vps-kubernetes-cluster","last_synced_at":"2026-03-06T07:11:54.740Z","repository":{"id":296277941,"uuid":"992560491","full_name":"hololinked-dev/vps-kubernetes-cluster","owner":"hololinked-dev","description":"scripts to maintain hololinked related VPS-es","archived":false,"fork":false,"pushed_at":"2025-07-06T12:51:32.000Z","size":46,"stargazers_count":1,"open_issues_count":3,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-07-06T13:44:30.039Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/hololinked-dev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-05-29T10:58:17.000Z","updated_at":"2025-07-06T12:51:35.000Z","dependencies_parsed_at":"2025-05-31T05:05:11.159Z","dependency_job_id":"3c442fee-57b4-4edf-854d-25b13b95858d","html_url":"https://github.com/hololinked-dev/vps-kubernetes-cluster","commit_stats":null,"previous_names":["hololinked-dev/vps-maintenance","hololinked-dev/vps-kubernetes-cluster"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/hololinked-dev/vps-kubernetes-cluster","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hololinked-dev%2Fvps-kubernetes-cluster","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hololinked-dev%2Fvps-kubernetes-cluster/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hololinked-dev%2Fvps-kubernetes-cluster/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hololinked-dev%2Fvps-kubernetes-cluster/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hololinked-dev","download_url":"https://codeload.github.com/hololinked-dev/vps-kubernetes-cluster/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hololinked-dev%2Fvps-kubernetes-cluster/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30165066,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-06T04:43:31.446Z","status":"ssl_error","status_checked_at":"2026-03-06T04:40:30.133Z","response_time":250,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-03-06T07:11:54.106Z","updated_at":"2026-03-06T07:11:54.725Z","avatar_url":"https://github.com/hololinked-dev.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Self Managed Kubernetes in a Datacentre (VPS or Bare Metal)\n\nTemplate repository that helps to autosetup VPS(-es) or nodes with Kubernetes.\nIntended for getting started with fullstack applications faster, porting the installation from one cloud provider to another and automating the whole setup while doing so.\n\nThe following components can be installed:\n- public facing load balancer\n- kubernetes dashboard\n- letsencrypt for SSL certificates\n- plausible analytics\n- email server (mailcow) (outside kubernetes - intended to be used in a separate node/machine)\n- authentication manager (keycloak) (TODO)\n- database (postgres or mongo) (TODO)\n- docker registry (harbor) (TODO)\n- helm charts for deploying custom applications by modifying image name, tags and environment variables\n\n## Setup\n\nAdd your SSH public key to the `authorized_keys` file on the VPS (Optional).\n\nCreate a dotenv file with environment variables as secrets:\n\n```dotenv\nMAIN_NODE_IP=\u003cyour vps ip\u003e\nMAIN_NODE_SSH_PORT=\u003cyour vps ssh port\u003e\nTOP_LEVEL_DOMAIN=\u003cyour domain example.com\u003e\nADMIN_EMAIL=\u003cyour admin email \u003e\n```\n\nTo install docker and kubernetes:\n\n```bash\ncd cluster\nchmod +x install.sh\n./install.sh docker\n./install.sh kubernetes\nsudo reboot\n```\n\nEnsure `cri-dockerd` (which is installed with docker install sequence) is working correctly before proceeding with Kubernetes setup.\nCurrently the version of `cri-dockerd` is not pinned, so it may change in the future. If you encounter issues, please check the [cri-dockerd repository](https://github.com/Mirantis/cri-dockerd.git). \n\nAfter installing Kubernetes, setup the cluster:\n\nTo export credentials: \n```bash\nexport KUBECONFIG=/etc/kubernetes/admin.conf\n```\n\n1) Remove node taint to allow scheduling of pods in the control plane node, if necessary (especially for single-node clusters):\n```bash\nkubectl taint nodes \u003cnode-name\u003e node-role.kubernetes.io/control-plane:NoSchedule-\n```\n\n2) Install the Calico CNI plugin for networking:\n```bash\nkubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml\n```\n\n3) To install all tools at once:\n\n```bash\nskaffold run\n```\n\n4) Adding nodes to the cluster (untested):\n```bash\nkubeadm token create --print-join-command\n```\nand run the command on the new node to join it to the cluster.\n\n## Installing Specific Components\n\n| Component                | Installation Command                           | Notes                                        |\n|--------------------------|------------------------------------------------|----------------------------------------------|\n| External Load Balancer   | `skaffold run --module external-load-balancer` |                                              |\n| Kubernetes Dashboard     | `skaffold run --module kubernetes-dashboard`   |                                              |\n| SSL (Let's Encrypt)      | `skaffold run --module cert-manager`           |                                              |\n| mailcow (Email Server)   | `./install.sh mailcow`                         | Outside Kubernetes, intended for a separate node machine as it will expose its own server |\n| Plausible Analytics      | `skaffold run --module plausible-analytics`    | Not fully ready yet, does not work correctly |\n| Keycloak (Auth Manager)  | `skaffold run --module keycloak`               | TODO, see issues                             |\n| Postgres Database        | `skaffold run --module postgres`               | TODO, see issues                             |\n| Mongo Database           | `skaffold run --module mongo`                  | TODO                                         |\n| Harbor (Docker Registry) | `skaffold run --module harbor`                 | TODO, see issues                             |\n\n## Skaffold\n\nTo use this repository with skaffold, see examples here:\n\n- [material mkdocs documentation](https://github.com/hololinked-dev/docs-v2)\n\nEssentially,\n\n1. submodule this repository into your project\n2. create a `skaffold.yaml` file in your project root\n3. Use the helm charts:\n    - `cluster/manifests/helm/apps` for your app (specify `image.repository`, `image.tag`, env variables etc.)\n    - `cluster/manifests/helm/ingress` for an ingress (paths `hosts`, `tls` etc.)\n4. If you need an ingress controller apart from the public facing load balancer, you could change the ingress class name in the `skaffold.yaml` file. \n5. Integrate skaffold in your pipeline and do `skaffold build` for building the images and `skaffold deploy` for deploying them.\n\n`skaffold-apps.yaml` and `apps` folder will be removed in the future, as they are not needed anymore.\n\n## Nodes Setup\n\n#### Changing SSH port\n\nGoto: \n```\nnano /etc/ssh/sshd_config\n```\nand uncomment the port line and change it to your desired port, e.g. `Port 2222`.\n\n\n\n\n\n\n\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhololinked-dev%2Fvps-kubernetes-cluster","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhololinked-dev%2Fvps-kubernetes-cluster","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhololinked-dev%2Fvps-kubernetes-cluster/lists"}