AR
FR

Homelab

My home server, entirely described in Ansible.

Type
Infrastructure
Context
Personal project
Year
2026
Technologies
Ansible, Proxmox, LXC, Docker, Podman, Nginx, fail2ban, GitLab CI, Python, Bash
proxmox hostinternal network - generated firewallinternet:80 :443mail :25 :465:587 :993nginxTLS, fail2bancountry filterdevGitLabrepos, CIWeb sitesstaticMariaDBphpMyAdmineverydayVaultwardenpasswordsImmichphotos, videosStalwartmail serverAI, gamesRadianceGPU inferenceHermeschat agentAMPgame servers+ debian, docker, podman templatesseparate volumesscheduled backups,restore tested on a copygatusprobes, alertsidle containersgo to sleep,nginx wakes themHome AssistantVM, on the LANansiblemake deploy <service>27 roles, 17 playbookscreates - configuresbacks upfig. homelab - 1 host - about twenty services - rebuilt from the repository

The homelab architecture: a single entry point, isolated services

I host my own services on a Proxmox server: Git forge and continuous integration, photos, password manager, email, home automation, monitoring, databases and game servers. Each one lives in its own container, and everything is created with a single command, for example “make deploy immich”.

In practice it runs a GitLab forge with its image registry and a CI runner, static sites each published on their own subdomain, MariaDB with phpMyAdmin, Vaultwarden for passwords, Immich for photos and videos, and Stalwart, a full mail server. On top of that come Radiance, my AI inference server (text, image, audio) on an AMD graphics card, Hermes, an agent connected to Telegram and Discord, an AMP panel for game servers and Home Assistant for home automation.

A versioned catalogue describes what each service needs: CPU, memory, disks, ports, secrets. The fleet itself is written nowhere. Every container created is tagged in Proxmox, then rediscovered on each run. Re-running a deployment breaks nothing: an existing container is found, never duplicated, and a missing secret stops everything before anything is created.

On the network side, Nginx is the only entry point. Services live on an internal network and are isolated from each other by the firewall, whose rules are generated automatically. Publishing a service takes one option: the subdomain, the TLS certificate, the port forwards and the firewall follow.

Data is kept apart from the system. What cannot be replaced goes on a backed-up volume, what can be downloaded again goes on one that is not, and the system disk can be thrown away and rebuilt. An unused container goes to sleep on its own and wakes up on the first request.

The repository is tested too: the host-side logic runs against a fake Proxmox, and every change goes through yamllint and ansible-lint.

  • About twenty services in the catalogue, 27 Ansible roles, 17 playbooks
  • Nginx as the single entry point: automatic TLS, fail2ban, country filtering
  • Isolated internal network, firewall generated from the catalogue
  • Scheduled backups, restores tested on an isolated copy, snapshot rollback
  • Idle containers are put to sleep automatically
  • AI inference server on GPU, models loaded on demand

What runs on it

Entry and monitoring

Nginx
Single entry point: automatic TLS, fail2ban, country filtering, mail relay
Proxmox firewall
Rules generated from the catalogue, each service isolated from the others
Gatus
Probes across the whole fleet, alerts, backup status

Development

GitLab CE
Repositories, image registry, Docker-in-Docker CI runner
Static sites
One site per subdomain, published with one command
MariaDB
Shared databases, with phpMyAdmin

Everyday

Vaultwarden
Passwords, works with the Bitwarden apps
Immich
Photos and videos, on a dedicated backed-up volume
Stalwart
Full mail server: SMTP, IMAP, Sieve filters
Home Assistant
Home automation, as a virtual machine on the local network

AI and games

Radiance
Model inference (text, image, audio) on an AMD GPU with ROCm, loaded on demand
Hermes
Agent connected to Telegram and Discord
AMP
Game server management panel

Base

Debian, Docker, Podman
Ready-made container templates to test or host anything else
Next projectAcrofy