Skip to content
maxime.bertrand homelab

Architecture

Architecture overview

The machines, the software layers, and what is exposed and what is not.

#architecture 2 min read

Principles

  1. Everything as code: no VM and no DNS record created by hand. OpenTofu for the infrastructure, Ansible for the configuration.
  2. Minimal exposure: the showcase site goes through Cloudflare Tunnel; personal services and the monitoring page go through a single inbound port, filtered by the firewall and then by a WAF, with single sign-on. Administration is reachable only over the VPN.
  3. Separate zones: the home network (Freebox) and the homelab (OPNsense) are isolated; the homelab is split into VLANs, and each zone can reach only what it needs.
  4. Everything can be restored: an encrypted off-site backup every night, read back and compared automatically; procedures in runbooks/, incidents analysed in postmortems/.

Layers

LayerTools
HardwareDell PowerEdge T330 (single server, GTX 1050 graphics card handed to the applications VM: ADR 0024), Dell PowerEdge R610 (LAB powered on demand, upcoming)
Hypervisor & storageProxmox VE, ZFS RAIDZ2
Network & securityOPNsense (virtualised), VLANs, WireGuard, BunkerWeb (WAF), CrowdSec, Cloudflare (DNS, tunnel for the showcase site)
IdentityLLDAP (directory), Authelia (SSO and two-factor authentication), accounts page (invitations without any password being sent)
ProvisioningOpenTofu (bpg/proxmox, opnsense, cloudflare), Ansible, also run from Semaphore UI
ApplicationsDocker Compose in dedicated VMs, one per zone
SecretsOpenBao vault (SSO, AppRole, audit), SOPS + age for bootstrapping
ObservabilityPrometheus, Alertmanager, custom NOC, Grafana (internal), VictoriaLogs (centralised logs), ntfy (alerts on the phone), login watch (unknown addresses), UptimeRobot external probe
Infrastructure servicesNetBox (source of truth), Semaphore UI (running playbooks)

The structural choices are explained in the ADRs, in particular ADR 0010 (a single server), ADR 0008 (publishing the services), ADR 0014 (monitoring), ADR 0015 (Semaphore), ADR 0016 (secrets vault), ADR 0017 (invitations and the accounts page), ADR 0018 (group-based access and quotas), ADR 0019 (off-site backups) and ADR 0020 (centralised logs).

What is exposed

ServiceDomainAccess
Showcase sitemaximebertrand.netPublic (Cloudflare Tunnel)
NOC (custom monitoring page)noc.maximebertrand.netPublic, behind OPNsense, WAF and SSO; read-only
Alert notifications (ntfy)ntfy.maximebertrand.netPublic, behind OPNsense and WAF; dedicated accounts, everything denied by default
Personal services (photos, files)subdomains of maximebertrand.netPublic, behind OPNsense, WAF and SSO with two-factor authentication
Administration, directory, internal tools*.home.maximebertrand.net (internal DNS only)VPN only; SSO as well for the accounts page