Services
Retrouvez une fiche par nom, rôle ou machine. Les composants internes, les accès et les détails Docker sont regroupés après le catalogue.
Services et acces
Le statut décrit l’usage documenté du service, sans mesure de disponibilité en temps réel.
25 services en cours · 5 retirés
| Service | Rôle | Machine | Statut |
|---|---|---|---|
| AdGuard Home | Résolution DNS et filtrage du réseau | penny | En service |
| AdGuard secondaire | DNS de secours et sonde de penny | galahad | En service |
| Alloy + Loki HA | Collecte et réplication des logs | penny, galahad, lancelot | En service |
| Authelia | Authentification unique et MFA | penny | En service |
| Claude Remote | Accès à penny depuis l’application Claude | penny | En service |
| CrowdSec | Détection et blocage à partir des logs Traefik | penny | En service |
| CyberChef | Encodage, hachage et décodage de données | penny | En service |
| Dozzle | Consultation des logs Docker | penny | En service |
| Forgejo | Forge Git et gestion des dépôts | penny | En service |
| Grafana | Exploration des logs et tableaux de bord | lancelot | En service |
| Homepage | Tableau de bord du lab | penny | En service |
| IPTV | Télévision dans le navigateur | galahad | En service |
| ntfy | Notifications et alertes | penny | En service |
| Outline | Rédaction de la documentation | penny | En service |
| Proxmox Backup Server | Sauvegarde des conteneurs Proxmox | lancelot | En service |
| Proxmox VE | Virtualisation et cluster des deux nœuds | galahad, lancelot | En service |
| Pulse | Supervision Proxmox et Docker, analyse Patrol | galahad | En service |
| Runner Forgejo Actions | Exécution des workflows CI | lancelot | En service |
| Stack logs | Loki, Grafana, Prometheus et relais ntfy | lancelot | En service |
| Status | Page d’état statique | penny | En service |
| Stirling PDF | Manipulation de fichiers PDF | penny | En service |
| Tailscale | Accès distant au réseau et SSH | penny, galahad, lancelot | En service |
| Traefik | Reverse proxy et certificats TLS | penny | En service |
| Vaultwarden | Gestionnaire de mots de passe | galahad | En service |
| Waterline | Serveur de test du mod naval | galahad | En test |
Services retirés
Fiches conservées pour l’historique. Les machines indiquées sont celles de l’ancien déploiement.
| Service | Rôle | Anciennes machines | Statut |
|---|---|---|---|
| Beszel | Ancienne supervision, remplacée par Pulse | penny, galahad, lancelot | Retiré |
| Homelable | Ancienne cartographie réseau | penny | Retiré |
| Paperclip | Ancienne orchestration d’agents | penny | Retiré |
| Portainer | Ancienne interface de gestion Docker | penny | Retiré |
| Project Zomboid | Ancien serveur de jeu, LXC démantelé | galahad | Retiré |
Accès et détails techniques : Docker, LXC, réseaux et configuration
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 la fiche Grafana.
Vaultwarden est migre sur LXC 102 vault (galahad, 192.168.1.32). Voir la fiche Vaultwarden.
Tailscale tourne sur l'host (pas en container) — SSH natif activé.
Exposés derrière Traefik
| Service | Image | URL | Host | Réseau Docker |
|---|---|---|---|---|
| Traefik | traefik:latest | traefik.home… | penny | proxy, socket |
| Authelia | authelia/authelia:latest | auth.home… | penny | proxy |
| AdGuard Home | adguard/adguardhome:latest | dns.home… | penny (host net) | host |
| Homepage | ghcr.io/gethomepage/homepage:latest | home.gabin-simond.fr | penny | proxy, socket |
| Forgejo | codeberg.org/forgejo/forgejo:13-rootless | git.home… | penny | proxy |
| Outline | outlinewiki/outline:latest | wiki.home… | penny | outline, proxy |
| ntfy | binwiederhier/ntfy:latest | ntfy.home… + Funnel | penny | proxy |
| Dozzle | amir20/dozzle:latest | dozzle.home… | penny | proxy, socket |
| CyberChef | ghcr.io/gchq/cyberchef:latest | cyberchef.home… | penny | proxy |
| Stirling PDF | ghcr.io/stirling-tools/s-pdf:latest-ultra-lite | pdf.home… | penny | proxy |
Sans URL — internes ou agents
| Service | Image | Rôle |
|---|---|---|
| socket-proxy | lscr.io/linuxserver/socket-proxy:3.4.2-r0-ls88 | Filtre l'API Docker pour Traefik, Homepage, Dozzle, autoheal |
| autoheal | willfarrell/autoheal:latest | Redémarre les conteneurs unhealthy |
| CrowdSec | crowdsecurity/crowdsec:latest | Détection + bouncer Traefik |
| loki-replica | grafana/loki:latest | Réplica du Loki de la LXC 101 — survit à la perte de lancelot |
| status | busybox:1.38 | Page d'état statique |
| outline-db / outline-redis | postgres:16-alpine / redis:7-alpine | Base et cache d'Outline |
Sur l'hôte penny, hors Docker
| Service | Rôle |
|---|---|
| Tailscale | Installé nativement (pas en conteneur) — SSH natif activé, Funnel pour ntfy |
| claude-remote | Mode serveur claude remote-control : penny est un appareil dans l'app Claude |
| AdGuard Home | Tourne bien en conteneur, mais sur le réseau host (ports 53/3000 sur l'hôte) |
homelab_monitor.sh | Cron chaque minute — voir monitoring |
| Les 30 timers systemd | Sondes planifiées — voir monitoring |
Hors penny
| Service | URL | Où |
|---|---|---|
| Grafana | logs.home… | LXC 101 logs / lancelot |
| Vaultwarden | vault.home… | LXC 102 vault / galahad |
| PBS | backup.home… | LXC 103 pbs / lancelot |
| Pulse | pulse.home… | LXC 106 pulse / galahad |
| IPTV | iptv.home… | LXC 109 iptv / galahad — depuis le 2026-10-26 |
| AdGuard secondaire | dns-failover.home… | LXC 100 dns-failover / galahad |
| Proxmox | galahad.home… / lancelot.home… | Les deux nœuds, bare metal |
| Docs | homelab.gabin-simond.fr | GitHub Pages, hors infra — seul service public sans Authelia |
Le relevé du 2026-09-24 comptait 22 conteneurs et 10 LXC. Ces nombres décrivent ce relevé, pas le parc actuel après les retraits de novembre. Le catalogue ci-dessus reflète les statuts documentés dans les fiches de services.
Le relevé du 2026-08-26 comptait 24 conteneurs : kroki et kroki-mermaid ont été
retirés le 2026-08-31.
À cette date, 109 avait porté Firefly III, retiré le 2026-09-19, et 110 portait
Securo. Les LXC 104, 105 et 110 ont depuis été détruits : voir le tableau LXC
plus bas. Les composants beszel-agent et homelable-backend ont été retirés avec
leurs services le 2026-11-03.
Avant le 26/08 le tableau en listait 16 et en oubliait 11 — dont ntfy, forgejo,
outline et crowdsec, tous cités des dizaines de fois ailleurs dans cette
documentation. Une page d'inventaire qui n'est pas régénérée devient un piège : on y
croit. Pour la redériver :
docker ps -a --format '{{.Names}}\t{{.Image}}' # sur penny
pct list # sur galahad, puis lancelot
Les accès web internes passent par *.home.gabin-simond.fr (reverse proxy Traefik). La plupart utilisent Authelia (OIDC ou ForwardAuth) ; Vaultwarden reste volontairement indépendant du SSO. La documentation publique est hébergée hors du lab sur GitHub Pages. Voir la configuration Authelia pour les clients OIDC et la configuration.
Les tableaux donnent le tag pour la lisibilité. Au relevé du 2026-09-24, les 22
images étaient épinglées @sha256:… dans le compose. Ce constat est daté ; il ne
vaut pas nouvelle vérification du parc actuel. pulse était la
dernière exception, épinglée le 2026-09-02.
Conséquence pratique : un docker compose pull ne met rien à jour, il retélécharge le
digest déjà épinglé. Mettre à jour se fait en changeant le digest dans le dépôt. L'écart
entre le digest épinglé et le :latest amont est surveillé par digest-drift-check
(le 1er du mois).
grep -E '^\s+image:' /mnt/ssd/config/docker/docker-compose.yml
Attention au piège : un digest n'identifie pas un contenu de façon comparable entre registres. Voir comparer les ID d'image, jamais les digests.
Architecture Docker (penny)
Le répertoire dynamic/ porte aussi les fichiers qui ne déclarent aucun backend mais des
middlewares partagés : crowdsec-bouncer.yml, rate-limit.yml, security-headers.yml,
tls-options.yml.
DNS interne
Les containers sur proxy qui doivent résoudre *.home.gabin-simond.fr (pour contacter Authelia OIDC) utilisent dns: 192.168.1.28 (AdGuard) : Homepage. Voir dépannage si un container ne resout pas les domaines locaux.
Réseaux Docker
| Réseau | Type | Usage |
|---|---|---|
proxy | bridge | Services reverse-proxies par Traefik |
socket | bridge (internal) | Clients de socket-proxy (Traefik, Homepage, autoheal) |
host | host | AdGuard (Tailscale est sur l'host natif, pas Docker) |
outline | bridge | Outline avec sa base Postgres et son Redis |
Pour les implications sécurité (ICC, surface d'attaque inter-containers), voir hardening — réseaux Docker.
Socket proxy — isolation Docker API
Presque tout passe par socket-proxy sur le réseau socket (internal, pas d'internet).
Plus aucun conteneur ne monte /var/run/docker.sock en direct depuis le 2026-11-03 :
les deux exceptions relevées le 2026-09-24, portainer et beszel-agent, ont été
retirées avec leurs services.
Pour la liste détaillée des endpoints autorises/bloques et l'analyse de surface d'attaque, voir hardening — socket proxy.
LXC Proxmox
| ID | Nom | Host | IP LAN | Rôle |
|---|---|---|---|---|
| 100 | dns-failover | galahad | 192.168.1.30 | AdGuard secondaire + sonde penny — Tailscale guardian |
| 101 | logs | lancelot | 192.168.1.31 | Loki + Grafana + Prometheus + relais ntfy |
| 102 | vault | galahad | 192.168.1.32 | Vaultwarden |
| 103 | pbs | lancelot | 192.168.1.33 | Proxmox Backup Server |
| 104 | zomboid | galahad | — | Détruit le 2026-11-01 (serveur Project Zomboid inutilisé, sauvegarde finale protégée sur PBS) |
| 105 | sucre | lancelot | — | Détruit le 2026-11-03 (arrêté depuis le 2026-08-25, remplacé par Pulse Patrol) — voir Bilan et arrêt |
| 106 | pulse | galahad | 192.168.1.34 | Pulse (supervision Proxmox + Docker) |
| 107 | waterline | galahad | DHCP | Serveur de test du mod Waterline |
| 108 | ci-runner | lancelot | DHCP | Runner Forgejo Actions (aarch64) |
| 109 | iptv | galahad | 192.168.1.37 | IPTVnator + passerelle Freebox → HLS (GPU passé au LXC) |
| 110 | securo | lancelot | — | Détruit le 2026-11-03 : évaluation de Securo (agrégateur financier) abandonnée pour le moment |
Les LXC 105 et 110 ont chacun une sauvegarde finale protégée sur PBS
(ct/105/2026-11-03T09:50:19Z, ct/110/2026-11-03T09:50:44Z) : les relancer,
c'est restaurer cette sauvegarde et reprendre leur déclaration Terraform dans
l'historique de homelab-config.
Note d'isolement : vault et logs sont sur des hosts différents (galahad vs lancelot) — si un node tombe, on ne perd pas simultanement les secrets ET les logs.
Acces distant
| Méthode | Détail |
|---|---|
| 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 exposé |
Services réseau (ports ouverts)
Relevé sur penny le 2026-09-24 (iptables -L INPUT -n), sauf les deux lignes SSH des
nœuds PVE qui concernent leurs propres pare-feux.
| Service | Port | Protocole | Scope firewall |
|---|---|---|---|
| AdGuard DNS | 53 | TCP/UDP | Tous |
| AdGuard DoT | 853 | TCP | Tous — mais rien n'écoute derrière, voir ci-dessous |
| Traefik HTTP → HTTPS | 80 | TCP | Tous |
| Traefik HTTPS | 443 | TCP | Tous |
| SSH penny | 2806 | TCP | Tous (clé obligatoire) |
| SSH galahad | 2807 | TCP | Tous (clé obligatoire, pare-feu de galahad) |
| SSH lancelot | 2808 | TCP | Tous (clé obligatoire, pare-feu de lancelot) |
| AdGuard UI | 3000 | TCP | LAN + Tailscale |
| node-exporter | 9100 | TCP | LAN (scrape par le Prometheus de la LXC 101) |
| NFS rpcbind | 111 | TCP/UDP | LAN + Tailscale (export du datastore PBS) |
| NFS | 2049 | TCP | LAN + Tailscale (export du datastore PBS) |
| corosync-qnetd | 5403 | TCP | LAN + Tailscale — voir cluster et QDevice |
La politique de la chaîne INPUT est bien DROP : tout le reste est refusé.
La règle existe, mais AdGuard ne sert pas DNS-over-TLS : tls.enabled: false dans
AdGuardHome.yaml, et rien n'écoute sur 853.
Deux conséquences, opposées et toutes deux gênantes. Un client configuré en DoT vers penny échouera, sans que le tableau ci-dessus l'ait laissé prévoir. Et une règle ouverte sans service derrière est une ligne de pare-feu qu'on croit justifiée : le jour où quelque chose se met à écouter sur 853, il est exposé sans décision.
Volumes et configuration
Bind mounts (configs versionnees), relevés le 2026-09-24 :
/mnt/ssd/config/traefik/ → /config (Traefik)
/mnt/ssd/config/authelia/ → /config (Authelia)
/mnt/ssd/config/homepage/ → /app/config (Homepage)
/mnt/ssd/config/crowdsec/ → /etc/crowdsec (CrowdSec)
/mnt/ssd/config/adguard/adguard-prod-1/ → /opt/adguardhome/conf (AdGuard)
/mnt/ssd/config/ntfy/server.yml → /etc/ntfy/server.yml ro (ntfy)
/mnt/ssd/config/logs/logs-replica-1/loki-config.yml → /etc/loki/local-config.yaml ro
Le chemin est adguard/adguard-prod-1/, pas adguard/ — le sous-répertoire distingue
l'instance primaire de la config du secondaire (LXC 100). Un sed lancé sur adguard/
en croyant viser la config touche les deux.
Docker volumes (données) réellement montés :
traefik-certs / traefik-data — Certificats + logs d'acces (lus aussi par CrowdSec)
adguard-data — Donnees AdGuard
crowdsec-data — Base des decisions CrowdSec
ntfy-data — Messages et jetons ntfy
loki-replica-data — Replica du Loki de la LXC 101
docker volume ls rend les mêmes noms sous deux préfixes, config_ et docker_ :
une trace d'un changement de nom de projet Compose. Les volumes vivants sont les
config_* — sauf CrowdSec, qui tourne sur docker_crowdsec-data pendant que
config_crowdsec-data traîne à vide.
Le danger n'est pas docker volume prune, qui ne touche que les volumes inutilisés et
laisserait donc docker_crowdsec-data tranquille. C'est le ménage manuel : quelqu'un
qui voit deux préfixes, en déduit que les docker_* sont l'ancienne série et lance
docker volume rm docker_… détruit la base CrowdSec, seule exception de la série.
Toujours vérifier le nom réellement monté avant de supprimer :
docker inspect crowdsec --format '{{range .Mounts}}{{.Name}} {{end}}'
Variables d'environnement
Les secrets ne vivent pas en clair dans le dépôt. /mnt/ssd/config/.env est un
lien symbolique vers /run/homelab/.env — donc sur un tmpfs, donc perdu à
chaque redémarrage, ce qui est voulu. La source de vérité est
/mnt/ssd/config/.env.enc, scellé par sops (clé age sur penny), et
scripts/homelab-unseal.sh le matérialise au démarrage.
.env.enc → versionné, chiffré (la source)
.env → /run/…/.env → tmpfs, en clair, éphémère (ce que Compose lit)
Conséquence pratique : un docker compose lancé avant le descellement voit un
.env vide, et les conteneurs démarrent sans leurs variables. En cas de doute,
vérifier par docker exec <conteneur> printenv, jamais en lisant le fichier.
env_fileDepuis Compose 2.24, un $ dans une valeur d'env_file est interprété. Un hash
bcrypt y perd un segment en silence — doubler les $.
Ce que le fichier porte : les identifiants Cloudflare du challenge DNS de Traefik, la clé d'enrôlement Tailscale, et les jetons de lecture des widgets Homepage (AdGuard, Proxmox, Pulse). L'inventaire nominatif est dans la politique de sécurité — cette page ne le duplique pas, pour n'avoir qu'un seul endroit à tenir à jour.