My homelab/homeprod deployed with Ansible
  • Jinja 50.3%
  • HCL 40.3%
  • Nix 7.6%
  • Just 1.7%
  • Shell 0.1%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-07-24 10:30:49 +03:00
.github fix(docs): github update time 2026-07-10 14:57:25 +03:00
ansible Revert "Merge pull request 'chore(deps): update docker.io/library/mongo docker tag to v8.0.28' (#836) from renovate/docker.io-library-mongo-8.x into devel" 2026-07-23 10:16:15 +03:00
opentofu feat(opentofu): add monitoring vms 2026-07-21 23:35:23 +03:00
.envrc feat: add flake-based dev environment 2025-09-27 09:58:18 +03:00
.gitignore feat: add variables file for services 2026-07-12 14:48:00 +03:00
.yamllint fix: setup .yamllint according to ansible-lint recommendations 2026-02-21 13:35:03 +02:00
flake.lock chore(deps): lock file maintenance 2026-07-12 04:12:24 +00:00
flake.nix chore: bump python to 3.14 2026-07-13 11:49:15 +03:00
Justfile feat: deploy tailscale_subnet_router with OpenTofu 2026-07-06 22:02:14 +03:00
README.md chore: add files from main branch 2026-07-09 21:59:15 +03:00
renovate.json feat(mongodb): attempt with allowedVersions 2026-07-21 10:04:01 +03:00

Artur's Homelab

This repo contains Ansible roles to deploy my homelab/self-hosted stack with Ansible.

Overview

I like the idea of Infrastructure of Code, Automations, and reproducible builds. This is my attempt to achieve this for my homelab.

What's a homelab?

It's a hardware and software experimental laboratory for you to test and break > bleeding-edge technologies. And learn, learn so much about how the internet works, what's behind the scenes of common cloud services and large websites, and much more.

At the same time, a homelab can be your production environment to run self-hosted services to enhance your quality of life, while achieving maximum privacy, because all of you data is under your control.

To learn more, consult /c/selfhosted, /r/homelab, and /r/selfhosted.

Hardware

  • Intel NUC11ATKC4:

    • CPU: Intel Celeron N5105 @ 2.00GHz
    • RAM: 32GB
    • SSD: 1TB
  • Dell OptiPlex 3000 Micro:

    • CPU: Intel(R) Core(TM) i5-12500T @ 4.40GHz
    • RAM: 64GB
    • SSD: 2TB

Software

All the services are deployed via Podman Quadlets.

Software Purpose
Actual Budget Budgeting
Authentik Single-Sign On
Changedetection Detect website changes
FreshRSS Follow RSS feeds
Librechat API access to multiple LLMs
Paperless-ngx Document management
Readeck Read-it-later
Stirling-PDF PDF manipulation
Grafana Observe homelab with nice charts
Homepage ...Homepage
Prometheus Collect data for Grafana
Speedtest-tracker Measure Internet speed
Uptime Kuma Monitor uptime
Infisical Secret management

I also deploy Forgejo for version control and Immich for photos with Nix. See my NixOS repo here.

Bitwarden and ansible-vault

This article explains how to retrieve ansible-vault password from Bitwarden.

Add to ansible.cfg:

[defaults]
vault_password_file = ./vault-pass.sh

Then ./vault-pass.sh:

#!/usr/bin/env bash

set -e

rbw get "ansible-vault"

If rbw does not have a password cached, it will ask you.

caddy reverse proxy

See details in roles/deploy_caddy/README.md.

Tailscale deployment

  1. export TAILSCALE_KEY=<tailscale_key>.
  2. ansible-playbook playbooks/install_tailscale.yaml.
  3. To reauth a Tailscale node run the first command and then ansible-playbook playbooks/reauth_tailscale.yaml.

Proxmox Backup Server

See details in roles/setup_pbs/README.md.

LibreChat Troubleshooting

See details in roles/deploy_services/README.md.

Roadmap

  • Implement Hashicorp Vault/Infisical or other external secret management to remove my reliance on Ansible Vault. Update: partially implemented. I now deploy Infisical on a separate VM.
  • Tailscale deployment
  • Merge this repo with my Caddy deployment

Availability

The repo is available on my personal Forgejo instance, Codeberg and GitHub.

The GitHub repo is updated every 168 hours. Codeberg repo is updated every 8 hours.

Thanks

  1. Ansible Collection - devsec.hardening. I used their code to dynamically generate my sshd configuration.