{"id":15151565,"url":"https://github.com/tillstuder/homelab","last_synced_at":"2026-02-21T23:08:15.730Z","repository":{"id":257014667,"uuid":"848780391","full_name":"tillstuder/homelab","owner":"tillstuder","description":"🏡 Playground for testing and learning about self-hosted applications.","archived":false,"fork":false,"pushed_at":"2024-11-10T16:26:17.000Z","size":1039,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-26T06:37:14.292Z","etag":null,"topics":["ansible","cloud-init","homelab","opentofu","terraform"],"latest_commit_sha":null,"homepage":"","language":"Jinja","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tillstuder.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}},"created_at":"2024-08-28T11:53:10.000Z","updated_at":"2025-06-06T12:27:26.000Z","dependencies_parsed_at":"2024-09-14T10:32:06.126Z","dependency_job_id":"71b7763c-4497-4072-85af-ffd4b48a72c4","html_url":"https://github.com/tillstuder/homelab","commit_stats":{"total_commits":1,"total_committers":1,"mean_commits":1.0,"dds":0.0,"last_synced_commit":"d001c652e85cf237f4f4282a58028d40619e1029"},"previous_names":["tillstuder/homelab"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/tillstuder/homelab","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tillstuder%2Fhomelab","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tillstuder%2Fhomelab/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tillstuder%2Fhomelab/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tillstuder%2Fhomelab/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tillstuder","download_url":"https://codeload.github.com/tillstuder/homelab/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tillstuder%2Fhomelab/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29697188,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-21T18:18:25.093Z","status":"ssl_error","status_checked_at":"2026-02-21T18:18:22.435Z","response_time":107,"last_error":"SSL_read: 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":["ansible","cloud-init","homelab","opentofu","terraform"],"created_at":"2024-09-26T15:04:23.194Z","updated_at":"2026-02-21T23:08:15.712Z","avatar_url":"https://github.com/tillstuder.png","language":"Jinja","funding_links":[],"categories":[],"sub_categories":[],"readme":"# HomeLab  \u003c!-- omit in toc --\u003e\n\nThis repository contains a collection of scripts and templates to help automate the deployment of various services in my home lab.\n\n\u003e [!NOTE]\n\u003e **Why have this home lab configuration public?**\n\u003e\n\u003e Well… I'd like to think that I have something to contribute to the community, and if my scripts are useful, I'd like to share them.\n\u003e Obviously, this will reveal how I'm configuring my home lab and network, but I would still like to share as much as possible.\n\n- [Showcase](#showcase)\n- [Prepare](#prepare)\n  - [Your Host](#your-host)\n  - [Proxmox Virtual Environment](#proxmox-virtual-environment)\n- [Deploy](#deploy)\n  - [VMs \\\u0026 LXCs](#vms--lxcs)\n  - [Services](#services)\n- [Credits](#credits)\n\n## Showcase\n\n![homer](./assets/homer.png)\n![adguardhome](./assets/adguardhome.png)\n![gatus](./assets/gatus.png)\n![ntfy](./assets/ntfy.png)\n\n## Prepare\n\n### Your Host\n\nCreate a `.env` file to store your sensitive variables.\n\n```bash\ncp .env.example .env\n```\n\nUpdate all the variables in the `.env` file you already know will need to be changed, like:\n\n- `NETWORK_SHORT`\n- `NETWORK_CIDR`\n- `TF_VAR_IP_*` (Make sure they  on't overlap with your current network)\n- `TF_VAR_SSH_PUBLIC_KEY`\n- `ANSIBLE_TAILSCALE_TAILNET` (Head to your [Tailscale Admin \u003e DNS](https://login.tailscale.com/admin/dns) to get your Tailnet name)\n- `ANSIBLE_TAILSCALE_API_TOKEN_SECRET` (Head to your [Tailscale Admin \u003e Settings \u003e Keys](https://login.tailscale.com/admin/settings/keys) to get your API access token)\n- `ANSIBLE_ADGUARDHOME_USERNAME`\n- `ANSIBLE_ADGUARDHOME_PASSWORD`\n- ...\n\nInstall the following tools on the device you will want to control the deployment from (e.g.: your laptop):\n\n- [Terraform](https://developer.hashicorp.com/terraform/install)\n- [Ansible](https://docs.ansible.com/ansible/latest/installation_guide/installation_distros.html)\n- Ansible requirements: `ansible-galaxy install -r ./ansible/requirements.yml`\n\nAdd your SSH key to the Proxmox Virtual Environment:\n\n```bash\nssh-copy-id -i ~/.ssh/id_rsa.pub root@\u003cYOUR_PVE_ADDRESS\u003e\n```\n\n### Proxmox Virtual Environment\n\nPreparing the Proxmox Virtual Environment is automated by the following playbook, but in order for it to run it needs some environment variables.\n\nSo you need to run the following commands:\n\n```bash\nset -a ; source .env ; set +a\nansible-playbook -b ./ansible/playbooks/prep.yml\n```\n\n\u003e [!IMPORTANT]\n\u003e Make sure you copy the Terraform API token from the playbook output and store it in your `.env` file.\n\u003e **It will only be displayed once!**\n\n## Deploy\n\n### VMs \u0026 LXCs\n\nNow that our platform is ready, we can deploy the VMs and LXCs:\n\n```bash\nset -a ; source .env ; set +a\ncd ./terraform\nterraform init\nterraform plan\nterraform apply\n```\n\n\u003e [!TIP]\n\u003e You can take down the infrastructure by running:\n\u003e - All the resources: `terraform destroy`\n\u003e - Only specific resources: `terraform destroy -target=\"module.\u003cSERVICE_NAME\u003e\"`\n\n### Services\n\nOnce the VMs and LXCs are up and running, we can deploy the services:\n\n```bash\nansible-playbook -b ./ansible/playbooks/run.yml\n```\n\n\u003e [!TIP]\n\u003e You might need to confirm the SSH fingerprint the first time you connect to a new host.\n\u003e You can do this either by:\n\u003e 1. Connecting to the host manually and confirming the fingerprint\n\u003e 2. Enter `yes` as **many times as the number of hosts you are connecting** to.\n\u003e 3. **TEMPORARILY** disable SSH fingerprint checking by modifying the `ansible.cfg` file to: `host_key_checking=False`\n\n## Credits\n\nI've tried to include most of the sources I've used directly in the files as a comment, usually at the top of the file with `Original Source: ...`.\nBut in the beginning of this project, I didn't write them down, so I might have missed some.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftillstuder%2Fhomelab","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftillstuder%2Fhomelab","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftillstuder%2Fhomelab/lists"}