1 Services
pepper edited this page 2026-06-27 03:07:48 +00:00

📦 Services

🚪 Front / accès public

SWAG

  • Image : lscr.io/linuxserver/swag
  • Ports : 443, 80
  • Rôle : Reverse proxy nginx. Termine le TLS (Let's Encrypt via DNS challenge Cloudflare). Seul service exposé à Internet.
  • Mods chargés : swag-crowdsec (bouncer lua CrowdSec), swag-authelia (forward-auth)
  • Config nginx : ./swag/conf/nginx/ — un fichier par sous-domaine

WireGuard

  • Image : lscr.io/linuxserver/wireguard
  • Port : 51820/udp
  • Rôle : VPN accès distant. Peers générés dans ./wireguard/config/peer*/.
  • Interface : wg0 — réseau 10.13.13.0/24

🖥 Applications

Nextcloud

  • Image : nextcloud:34
  • URL : nextcloud.molok.fr
  • DB : PostgreSQL (nextcloud_db)
  • Cache : Redis dédié (redis-nextcloud)
  • Données : ./nextcloud/data/
  • SSO : login natif (pas encore câblé OIDC)

Nextcloud-cron

  • Image : nextcloud:34
  • Rôle : Lance /cron.php toutes les 5 minutes (tâches planifiées Nextcloud). Partage le même montage que nextcloud.

Forgejo

  • Image : codeberg.org/forgejo/forgejo:10
  • URL : forgejo.molok.fr
  • DB : PostgreSQL (forgejo_db)
  • Données : ./forgejo/data/
  • SSO : OIDC natif (Authentik) — ENABLE_AUTO_REGISTRATION=true crée le compte à la première connexion
  • Port interne : 3000

Jellyfin

  • Image : lscr.io/linuxserver/jellyfin
  • URL : jellyfin.molok.fr
  • Config : ./jellyfin/config/
  • Cache : ./jellyfin/cache/
  • SSO : OIDC via plugin jellyfin-plugin-sso (configuré par jellyfin-sso-init)
  • Médias : montage ./qbittorrent/downloads/ (lecture)

Jellyfin-sso-init

  • Rôle : Conteneur jetable (restart: no). Configure le plugin SSO de Jellyfin au premier démarrage via l'API REST, puis s'arrête définitivement.
  • Dépendance : attend que Jellyfin réponde sur le healthcheck

qBittorrent

  • Image : lscr.io/linuxserver/qbittorrent
  • URL : qbittorrent.molok.fr
  • Ports : 6881 tcp/udp (trafic torrent), 8080 (WebUI interne)
  • Auth : forward-auth Authentik (pas de SSO natif)
  • Downloads : ./qbittorrent/downloads/
  • Config : ./qbittorrent/config/

🔐 Identité

Authentik-server

  • Image : ghcr.io/goauthentik/server:2026.x
  • URL : auth.molok.fr
  • DB : PostgreSQL (authentik_db)
  • Cache/sessions : Redis (AOF, persistant)
  • Rôle : Fournisseur d'identité SSO. Gère : login, MFA, flows, tokens OIDC, groupes.

Authentik-worker

  • Image : idem serveur (command: worker)
  • Rôle : Tâches de fond (emails, certificats, sessions expirées).
  • Réseau : seul service avec accès outbound (sortie Internet) pour les webhooks et les emails.

🗄 Données

PostgreSQL

  • Image : postgres:18-alpine
  • Version : 18 (données dans ./postgres/data/18/docker/)
  • 3 bases : authentik_db, forgejo_db, nextcloud_db
  • Création : postgres-init/init.sh (s'exécute une seule fois, lit les secrets)
  • Tuning : shared_buffers, work_mem, max_connections dans .env

Redis (Authentik)

  • Image : valkey/valkey:8-alpine
  • Persistance : AOF (appendonly yes) — données dans ./authentik/redis/
  • Usage : sessions Authentik, cache

Redis-nextcloud

  • Image : valkey/valkey:8-alpine
  • Persistance : aucune (LRU cache pur) — données dans ./nextcloud/redis/
  • Usage : cache APCu Nextcloud

📊 Supervision

Service Port interne Rôle
Prometheus 9090 Collecte et stocke les métriques (rétention 30j / 10 GB)
Loki 3100 Agrège les logs
Alloy Agent de collecte : logs conteneurs (Loki) + métriques cAdvisor (Prometheus)
Node-exporter 9100 Métriques machine hôte (CPU, RAM, disque, réseau)
Grafana 3000 Tableaux de bord — SSO Authentik (AUTO_LOGIN=true)

🛡 Sécurité

CrowdSec

  • Image : crowdsecurity/crowdsec
  • LAPI : port 8080 interne
  • Collections actives : nginx, http-bf, Authentik events
  • Données : ./crowdsec/config/ + ./crowdsec/data/

🔄 Mise à jour / infra

Watchtower

  • Mode : opt-in (label com.centurylinklabs.watchtower.enable=true)
  • Socket : passe par watchtower-socket-proxy (API Docker filtrée)

Watchtower-socket-proxy / Docker-socket-proxy

Deux proxies séparés pour deux usages distincts :

Proxy Pour Accès
watchtower-socket-proxy Watchtower Lecture + recréation (filtré)
docker-socket-proxy Alloy + CrowdSec Lecture seule stricte (POST=0)