{"id":16780530,"url":"https://github.com/monolithprojects/home.base","last_synced_at":"2026-03-18T22:13:00.823Z","repository":{"id":115679639,"uuid":"475834711","full_name":"MonolithProjects/home.base","owner":"MonolithProjects","description":"Base repository for my Home System","archived":false,"fork":false,"pushed_at":"2023-08-21T19:59:44.000Z","size":1268,"stargazers_count":1,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-01-23T06:45:17.343Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"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/MonolithProjects.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}},"created_at":"2022-03-30T10:48:26.000Z","updated_at":"2022-03-30T11:08:50.000Z","dependencies_parsed_at":null,"dependency_job_id":"b536a873-bad8-4dc1-a792-da2c8208d5d8","html_url":"https://github.com/MonolithProjects/home.base","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MonolithProjects%2Fhome.base","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MonolithProjects%2Fhome.base/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MonolithProjects%2Fhome.base/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MonolithProjects%2Fhome.base/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/MonolithProjects","download_url":"https://codeload.github.com/MonolithProjects/home.base/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243925990,"owners_count":20369914,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":"2024-10-13T07:35:22.289Z","updated_at":"2026-01-02T19:45:20.553Z","avatar_url":"https://github.com/MonolithProjects.png","language":"HCL","funding_links":[],"categories":[],"sub_categories":[],"readme":"# My Home system - Base\n\nThis repo contains the IaC for my home system. It's based on KVM/libvirt VM(s). Applications are running in containers using the Docker runtime (for now). Application stacks (docker-compose) are being synchronized with git repository (home.apps) using Portainer.\n\n## What's behind this\n\nI tried to create an infrastructure for my home system to be as simple as possible but still to have some level of automation. Before i endedup with this simple design i was elaborating RKE2, K3s and Nomad... but since at work i am managing large K8s sclusters, to have a complex cluster also at home was my last intention (in addition to few hardware limitations).\n\n## How it works\n\nThe IaC is located in the `code` directory. Most likely you will not need to change it. The directory `env` contains the variables for environments where you want to deploy this system. The content looks like this:\n\n```sh\n├── example               \u003c\u003c\u003c # the name of the environment\n│   ├── group_vars        \u003c\u003c\u003c # group wars dir\n│   │   └── all.yml       \u003c\u003c\u003c # group wars file for all nodes\n│   ├── hosts.ini         \u003c\u003c\u003c # Ansible inventory file (will be generated during the run)\n│   ├── backend.hcl       \u003c\u003c\u003c # Terraform backend config (encrypted)\n│   ├── secrets.tfvars    \u003c\u003c\u003c # Terraform secret variables (encrypted)\n│   └── terraform.tfvars  \u003c\u003c\u003c # Terraform variables\n```\n\n\u003e don't forget to export `ANSIBLE_VAULT_PASSWORD_FILE`\n\nTo deploy the system, run:\n\n```sh\nansible-playbook -i env/example/hosts.ini site.yml --extra-vars \"deployment=present\"\n```\n\nTo only configure the system, and do not tun `terraform apply` (but still it will run the `terraform plan`):\n\n```sh\nansible-playbook -i env/example/hosts.ini site.yml --extra-vars \"only_tf_plan=true\"\n```\n\nTo destroy the system, run:\n\n```sh\nansible-playbook -i env/example/hosts.ini site.yml --extra-vars \"deployment=absent\"\n```\n\nTo update Terraform cache, run:\n\n```sh\nansible-playbook -i env/example/hosts.ini site.yml --tags decrypt\ncd code/terraform/\nterraform init -backend-config=../../env/example/decrypted.backend.hcl -reconfigure\n```\n\nTo manually run the terraform (prep steps are the same as above):\n\n```sh\nterraform plan -var-file=../../env/prod/terraform.tfvars -var-file=../../env/prod/decrypted.secrets.tfvars\n```\n\nSome facts:\n- Secrets are encrypted using Ansible-vault (so you need to provide `--ask-vault-pass` option or `ANSIBLE_VAULT_PASSWORD_FILE` environment variable)\n- I am using Terraform cloud to store the state file\n\n## Deployment workflow\n\n![](./workflow.png)\n\n## Design\n\n![](./architecture.png)\n\n### Compute nodes\n\n- Mini PCs\n  - Prod - 4xCPU Intel i3, 8 GB RAM, 120GB SSD, 4TB external HDD, 60GB USB flash drive\n  - Dev - 2xCPU Pentium-D, 8 GB RAM, 120GB SSD\n- Ubuntu 20.04 LTS\n- KVM/libvirt 4.0.0\n\n## TO DO list\n\n- Automated backup of heimdall, Home Assistant and Portainer configs\n- Use the second compute node for dev environment\n- CI/CD using Github Actions","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmonolithprojects%2Fhome.base","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmonolithprojects%2Fhome.base","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmonolithprojects%2Fhome.base/lists"}