{"id":38845279,"url":"https://github.com/mradigen/selfhosted","last_synced_at":"2026-01-17T14:04:33.051Z","repository":{"id":275706845,"uuid":"926930539","full_name":"mradigen/selfhosted","owner":"mradigen","description":"My homelab, defined in code","archived":false,"fork":false,"pushed_at":"2025-12-02T14:04:53.000Z","size":1026,"stargazers_count":10,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-12-05T11:53:07.760Z","etag":null,"topics":["ansible","homelab","iac","packer","selfhosted","terraform"],"latest_commit_sha":null,"homepage":"","language":"HCL","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mradigen.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-02-04T05:21:08.000Z","updated_at":"2025-12-02T14:04:57.000Z","dependencies_parsed_at":null,"dependency_job_id":"8691254f-e724-4e3d-9587-1f1cb07e0172","html_url":"https://github.com/mradigen/selfhosted","commit_stats":null,"previous_names":["mradigen/selfhosted"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/mradigen/selfhosted","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mradigen%2Fselfhosted","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mradigen%2Fselfhosted/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mradigen%2Fselfhosted/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mradigen%2Fselfhosted/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mradigen","download_url":"https://codeload.github.com/mradigen/selfhosted/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mradigen%2Fselfhosted/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28509861,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-17T13:38:16.342Z","status":"ssl_error","status_checked_at":"2026-01-17T13:37:44.060Z","response_time":85,"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","homelab","iac","packer","selfhosted","terraform"],"created_at":"2026-01-17T14:04:32.984Z","updated_at":"2026-01-17T14:04:33.039Z","avatar_url":"https://github.com/mradigen.png","language":"HCL","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n# Homelab\n\n[![Baikal](https://img.shields.io/badge/-Baikal-black?style=for-the-badge\u0026logo=googlecalendar)](https://sabre.io/baikal/) [![Balti](https://img.shields.io/badge/-Balti-black?style=for-the-badge\u0026logo=bitbucket)](https://github.com/mradigen/balti) [![MinIO](https://img.shields.io/badge/-Balti%20MinIO-black?style=for-the-badge\u0026logo=minio)](https://min.io/) [![Borgmatic](https://img.shields.io/badge/-Borgmatic-black?style=for-the-badge\u0026logo=borgbackup)](https://torsion.org/borgmatic/) [![Chota](https://img.shields.io/badge/-Chota-black?style=for-the-badge\u0026logo=curl)](https://github.com/mradigen/chota) [![Flatnotes](https://img.shields.io/badge/-Flatnotes-black?style=for-the-badge\u0026logo=markdown)](https://github.com/dullage/flatnotes) [![Syncthing](https://img.shields.io/badge/-Syncthing-black?style=for-the-badge\u0026logo=syncthing)](https://syncthing.net/) [![Headscale](https://img.shields.io/badge/-Headscale-black?style=for-the-badge\u0026logo=tailscale)](https://headscale.net/) [![HomeAssistant](https://img.shields.io/badge/-HomeAssistant-black?style=for-the-badge\u0026logo=homeassistant)](\u003c[https://github.com/dani-garcia/vaultwarden](https://www.home-assistant.io/)\u003e) [![Immich](https://img.shields.io/badge/-Immich-black?style=for-the-badge\u0026logo=immich)](https://immich.app/) [![Kachra](https://img.shields.io/badge/-Kachra-black?style=for-the-badge\u0026logo=pastebin)](https://github.com/mradigen/kachra) [![n8n](https://img.shields.io/badge/-n8n-black?style=for-the-badge\u0026logo=n8n)](https://n8n.io/) [![Paperless NGX](https://img.shields.io/badge/-Paperless%20NGX-black?style=for-the-badge\u0026logo=paperlessngx)](https://docs.paperless-ngx.com/) [![Traefik](https://img.shields.io/badge/-Traefik-black?style=for-the-badge\u0026logo=traefikproxy)](https://traefik.io/) [![TUI Suite](https://img.shields.io/badge/-TUI%20Suite-black?style=for-the-badge\u0026logo=termius)](https://github.com/) [![Vaultwarden](https://img.shields.io/badge/-Vaultwarden-black?style=for-the-badge\u0026logo=bitwarden)](https://github.com/dani-garcia/vaultwarden)\n\n| **Hypervisor**                                                                                                      | **OS**                                                                                                           | **Tools**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 | **Networking**                                                                                                        |\n| ------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- |\n| [![Proxmox](https://img.shields.io/badge/-Proxmox-black?style=for-the-badge\u0026logo=Proxmox)](https://www.proxmox.com) | [![Debian](https://img.shields.io/badge/-Debian-black?style=for-the-badge\u0026logo=debian)](https://www.debian.org/) | [![Ansible](https://img.shields.io/badge/-Ansible-black?style=for-the-badge\u0026logo=ansible\u0026logoColor=red)](https://www.ansible.com/) [![Docker](https://img.shields.io/badge/-Docker-black?style=for-the-badge\u0026logo=docker)](https://www.docker.com/) [![Kubernetes](https://img.shields.io/badge/-Kubernetes-black?style=for-the-badge\u0026logo=kubernetes)](https://k3s.io/) \u003cbr\u003e [![Packer](https://img.shields.io/badge/-Packer-black?style=for-the-badge\u0026logo=packer)](https://www.packer.io/) [![Terraform](https://img.shields.io/badge/-Terraform-black?style=for-the-badge\u0026logo=terraform)](https://developer.hashicorp.com/terraform) [![Vault](https://img.shields.io/badge/-Vault-black?style=for-the-badge\u0026logo=vault)](https://developer.hashicorp.com/terraform) | [![TP-Link](https://img.shields.io/badge/-TP--Link-black?style=for-the-badge\u0026logo=tp-link)](https://www.tp-link.com/) |\n\n\u003c/div\u003e\n\n\u003ch2\u003e📐 \u003cb\u003eDiagram\u003c/b\u003e \u003c/h2\u003e\n\n![Architecture](.github/architecture.webp?id=2)\n\n## 📖 **Overview**\n\nThis repository contains the IaC ([Infrastructure as Code](https://en.wikipedia.org/wiki/Infrastructure_as_code)) configuration for my homelab.\n\nMy homelab runs on **Proxmox** across three physical hosts, with VMs managed and maintained using [Terraform](https://www.terraform.io/). All VMs are provisioned from templates created with [Packer](https://www.packer.io/).\n\nAs of now, all services are **containerized** using **Docker Compose**. I plan to migrate them all to a **Kubernetes ([K3S](https://k3s.io/))** cluster for orchestration. The infrastructure is managed through **Ansible** playbooks for configuration management and automation.\n\nAll environment variables and secrets and stored in **HashiCorp's Vault**, and is hosted on an external server that is manually managed as of now. An **Ansible** playbook fetches the required environment variables and sets them in `.env` files for **Docker Compose**. Refer to `external/` for further details.\n\n## 🛠 **Infrastructure Stack**\n\n### **Tools \u0026 Automation**\n\n- **[Terraform](https://www.terraform.io/)** - Infrastructure provisioning\n- **[Packer](https://www.packer.io/)** - VM template creation\n- **[Ansible](https://www.ansible.com/)** - Configuration management and automation\n- **[Docker](https://www.docker.com/)** - Container orchestration\n- **[Kubernetes (K3s)](https://k3s.io/)** - Container orchestration platform\n- **[Vault](https://developer.hashicorp.com/vault)** - Environment variables and secrets management\n\n### **Services**\n\n| Purpose               | Service                                                                                   |\n| --------------------- | ----------------------------------------------------------------------------------------- |\n| Smart Home Monitoring | [HomeAssistant](https://www.home-assistant.io/)                                           |\n| Backups               | [Borgmatic](https://torsion.org/borgmatic/)                                               |\n| Tailscale VPN Server  | [Headscale](https://github.com/juanfont/headscale)                                        |\n| Photo Management      | [Immich](https://github.com/immich-app/immich)                                            |\n| Password Manager      | [Vaultwarden](https://github.com/dani-garcia/vaultwarden)                                 |\n| Reverse Proxy         | [Traefik](https://traefik.io/)                                                            |\n| Automation            | [n8n](https://n8n.io/)                                                                    |\n| Note-taking           | [Flatnotes](https://github.com/gedulis12/flatnotes) + [Syncthing](https://syncthing.net/) |\n| Document Storage      | [Paperless-ngx](https://paperless-ngx.readthedocs.io/)                                    |\n| DAV Server            | [Baïkal](https://sabre.io/baikal/)                                                        |\n| File Sharing          | [Balti](https://github.com/mradigen/balti)                                                |\n| URL Shortener         | [Chota](https://github.com/mradigen/chota)                                                |\n| Pastebin              | [Kachra](https://github.com/mradigen/kachra)                                              |\n\n## 📁 **Repository Structure**\n\n```\n.\n├── ansible/     # Ansible playbooks and configurations\n├── docker/      # Docker Compose files and configurations\n├── external/    # External service configurations that require uptime\n├── packer/      # VM template definitions\n└── terraform/   # Terraform infrastructure code\n```\n\nEach directory contains its own README with detailed information about the configurations and usage.\n\n## 🖥️ **Hardware**\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cstrong\u003eSetup\u003c/strong\u003e\u003c/summary\u003e\n\n![Setup](.github/setup.webp)\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cstrong\u003ePhysical Hosts\u003c/strong\u003e\u003c/summary\u003e\n\n| Host      | CPU               | Threads | RAM   | Storage         |\n| --------- | ----------------- | ------- | ----- | --------------- |\n| **Vyria** | AMD Ryzen 5 5600X | 12      | 16 GB | 480 GB NVMe     |\n| **Alpha** | Intel i5-6200U    | 4       | 8 GB  | 128 GB SATA SSD |\n| **Beta**  | Intel i5-7300U    | 4       | 8 GB  | 256 GB SATA SSD |\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cstrong\u003eVirtual Machines\u003c/strong\u003e\u003c/summary\u003e\n\n### Vyria\n\n| VM              | Cores | RAM  | Storage | Purpose          |\n| --------------- | ----- | ---- | ------- | ---------------- |\n| **Vyria**       | 4     | 8 GB | 260 GB  | Main services    |\n| **Kubernetes1** | 2     | 2 GB | 10 GB   | K3s cluster node |\n\n### Beta\n\n| VM                     | Cores | RAM  | Storage | Purpose          |\n| ---------------------- | ----- | ---- | ------- | ---------------- |\n| **Kubernetes2 (TODO)** | 2     | 2 GB | 10 GB   | K3s cluster node |\n| **Home Assistant**     | 2     | 2 GB | 32 GB   | Home automation  |\n\n### Alpha\n\n| VM                     | Cores | RAM  | Storage | Purpose          |\n| ---------------------- | ----- | ---- | ------- | ---------------- |\n| **Kubernetes3 (TODO)** | 2     | 2 GB | 10 GB   | K3s cluster node |\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cstrong\u003eNetworking\u003c/strong\u003e\u003c/summary\u003e\n\n| Device                | Purpose          | Notes                                           |\n| --------------------- | ---------------- | ----------------------------------------------- |\n| **ISP Router**        | Internet gateway | Default configuration                           |\n| **TP Link WR840N v6** | Network access   | Access Point mode, DHCP disabled, WiFi disabled |\n\n\u003c/details\u003e\n\n## 📌 **To-Do**\n\n- [x] Readme\n- [x] Setup basic o11y\n- [ ] Add metrics to Proxmox\n- [ ] Make Terraform and Packer fetch secrets from Vault\n- [ ] Setup a CI/CD pipeline\n- [ ] Migrate services to k3s\n\n## **Credits**\n\n- Inspired by [mafyuh](https://github.com/Mafyuh)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmradigen%2Fselfhosted","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmradigen%2Fselfhosted","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmradigen%2Fselfhosted/lists"}