Services¶
Vue d'ensemble de tous les services, leurs acces et l'architecture Docker.
Services et acces¶
Tous les conteneurs sur penny tournent depuis un seul /mnt/ssd/config/docker/docker-compose.yml. Docker data-root sur le SSD (/mnt/ssd/docker).
Grafana + Loki ne sont pas sur penny — ils tournent dans le LXC logs sur lancelot. Voir grafana.md.
Vaultwarden est migre sur LXC 102 vault (galahad, 192.168.1.32). Voir vaultwarden.md.
Tailscale tourne sur l'host (pas en container) — SSH natif active.
| Service | Image | URL | Auth | Host | Reseau Docker |
|---|---|---|---|---|---|
| Traefik | traefik:latest |
traefik.home.* |
ForwardAuth Authelia | penny | proxy, socket |
| AdGuard Home | adguard/adguardhome:latest |
adguard.home.* |
ForwardAuth Authelia + bcrypt | penny (host net) | host |
| AdGuard dns-failover | — | dns-failover.home.* |
ForwardAuth Authelia + bcrypt | LXC dns-failover / galahad | — |
| socket-proxy | tecnativa/docker-socket-proxy |
— | — | penny | socket |
| Portainer EE | portainer/portainer-ee:latest |
portainer.home.* |
OIDC Authelia (SSO auto-login, internal hidden) | penny | proxy |
| Homepage | ghcr.io/gethomepage/homepage:latest |
home.* |
ForwardAuth Authelia | penny | proxy, socket |
| Beszel + agent | henrygd/beszel |
monitor.home.* |
OIDC Authelia (one_factor) | penny | proxy / host |
| Watchtower | containrrr/watchtower |
— (headless) | — | penny | socket |
| Authelia | authelia/authelia:latest |
auth.home.* |
MFA TOTP + YubiKey | penny | proxy |
| autoheal | willfarrell/autoheal |
— | — | penny | socket |
| Grafana (logs) | — | logs.home.* |
OIDC Authelia (two_factor + PKCE, auto-login) | LXC logs / lancelot | — |
| Vaultwarden | — | vault.home.* |
Master + TOTP | LXC vault / galahad | — |
| Proxmox galahad | — | galahad.home.* |
OIDC Authelia / root@pam | galahad (bare metal) | — |
| Proxmox lancelot | — | lancelot.home.* |
OIDC Authelia / root@pam | lancelot (bare metal) | — |
| Docs | — | homelab.gabin-simond.fr |
Aucune (publique) | hors infra | — |
Tous les services web sont accessibles via *.home.gabin-simond.fr (reverse proxy Traefik). Tous les services sont proteges par Authelia (OIDC ou ForwardAuth). Voir authelia.md pour les clients OIDC et la configuration.
Architecture Docker (penny)¶
graph TB
subgraph Network proxy
Traefik --> Authelia
Traefik --> Portainer
Traefik --> Homepage
Traefik --> Beszel
end
subgraph Network socket
SP[socket-proxy]
Traefik -.-> SP
Homepage -.-> SP
Watchtower -.-> SP
Autoheal -.-> SP
end
subgraph Host network
AdGuard
BeszelAgent
Tailscale[Tailscale host]
end
subgraph File provider
Traefik -->|dynamic/| PVE1[galahad]
Traefik -->|dynamic/| PVE2[lancelot]
Traefik -->|dynamic/| Logs[Grafana LXC]
Traefik -->|dynamic/| Vault[Vaultwarden LXC]
end
DNS interne¶
Les containers sur proxy qui doivent resoudre *.home.gabin-simond.fr (pour contacter Authelia OIDC) utilisent dns: 192.168.1.28 (AdGuard) : Homepage, Portainer, Beszel. Voir depannage si un container ne resout pas les domaines locaux.
Reseaux Docker¶
| Reseau | Type | Usage |
|---|---|---|
proxy |
bridge | Services reverse-proxies par Traefik |
socket |
bridge (internal) | Clients de socket-proxy (Traefik, Homepage, Watchtower, autoheal) |
host |
host | AdGuard, Beszel Agent (Tailscale est sur l'host natif, pas Docker) |
Pour les implications securite (ICC, surface d'attaque inter-containers), voir hardening — reseaux Docker.
Socket proxy — isolation Docker API¶
Plus aucun container ne mount /var/run/docker.sock directement (sauf Portainer par necessite admin). Tout passe par socket-proxy sur le reseau socket (internal, pas d'internet).
Pour la liste detaillee des endpoints autorises/bloques et l'analyse de surface d'attaque, voir hardening — socket proxy.
LXC Proxmox¶
| ID | Nom | Host | IP LAN | Role |
|---|---|---|---|---|
| 100 | dns-failover | galahad | 192.168.1.30 |
AdGuard secondaire + health check penny |
| 101 | logs | lancelot | 192.168.1.31 |
Loki + Grafana |
| 102 | vault | galahad | 192.168.1.32 |
Vaultwarden |
Note d'isolement : vault et logs sont sur des hosts differents (galahad vs lancelot) — si un node tombe, on ne perd pas simultanement les secrets ET les logs.
Acces distant¶
| Methode | Detail |
|---|---|
| Tailscale | VPN mesh, acces a tous les services via IP Tailscale (100.64.0.0/10) |
| Tailscale SSH | Mode check (navigateur MFA), certs auto-rotated, pas de port 22 expose |
Services reseau (ports ouverts)¶
| Service | Port | Protocole | Scope firewall |
|---|---|---|---|
| AdGuard DNS | 53 | TCP/UDP | Tous |
| AdGuard DoT | 853 | TCP | Tous |
| Traefik HTTP → HTTPS | 80 | TCP | Tous |
| Traefik HTTPS | 443 | TCP | Tous |
| SSH penny | 2806 | TCP | Tous (cle obligatoire) |
| SSH galahad | 2807 | TCP | Tous (cle obligatoire) |
| SSH lancelot | 2808 | TCP | Tous (cle obligatoire) |
| AdGuard UI | 3000 | TCP | LAN + Tailscale |
| Beszel Agent | 45876 | TCP | LAN + Tailscale |
Tout le reste est DROP.
Volumes et configuration¶
Bind mounts (configs versionnees) :
/mnt/ssd/config/traefik/ → /config (Traefik)
/mnt/ssd/config/adguard/ → /opt/adguardhome/conf (AdGuard)
/mnt/ssd/config/homepage/ → /app/config (Homepage)
/mnt/ssd/config/authelia/ → /config (Authelia)
Docker volumes (donnees) :
traefik-certs / traefik-data — Certificats + logs
portainer-data — Donnees Portainer
adguard-data — Donnees AdGuard
beszel-data — Donnees Beszel
Variables d'environnement¶
Le fichier /mnt/ssd/config/.env (non versionne) contient :
CF_API_EMAIL=... # Email Cloudflare (Traefik DNS challenge)
CF_DNS_API_TOKEN=... # Token API Cloudflare
TS_AUTHKEY=... # Auth key Tailscale
HOMEPAGE_VAR_PORTAINER_KEY=... # Widget Portainer
HOMEPAGE_VAR_BESZEL_USER=... # Widget Beszel
HOMEPAGE_VAR_BESZEL_PASS=...
HOMEPAGE_VAR_ADGUARD_USER=... # Widget AdGuard
HOMEPAGE_VAR_ADGUARD_PASS=...
HOMEPAGE_VAR_PVE_TOKEN_ID=... # Widget Proxmox (token readonly)
HOMEPAGE_VAR_PVE_TOKEN_SECRET=...
Tous ces secrets sont aussi stockes dans Vaultwarden. Voir politique de securite pour l'inventaire complet.