0 Votes

Serveur principal

Version 12.1 par john le 2026/09/19 13:11

Serveur principal

Information

Système

ÉlémentValeur
OSDebian 13
NoyauMainline (dépôt Zabbly)
Disque systèmeNVMe
ExpositionInternet, via SWAG

Services

Infrastructure

ServiceRôle
SWAGReverse proxy, certificat wildcard Let's Encrypt
AutheliaAuthentification unique
CrowdSecDétection d'attaques, bouncer nginx, captcha Turnstile
DuckDNSMise à jour du DNS dynamique
Portainer CE (LTS)Gestion des stacks
docker-socket-proxyAccès filtré à l'API Docker
WatchtowerMise à jour automatique des images
GlancesSupervision

Productivité

ServiceRôle
NextcloudNotes, veille
XWikiWiki
Joplin Server + client webNotes
PassboltMots de passe
VikunjaTâches
n8nAutomatisation
code-serverÉditeur dans le navigateur
WallosSuivi des abonnements

Veille et lecture

ServiceRôle
SearXNGMétamoteur
FlusVeille RSS
WallabagLecture différée
changedetection.ioSurveillance de pages

Médias

ServiceRôle
ImmichPhotos et vidéos, sans machine-learning
JellystatStatistiques Jellyfin
CastopodPodcast (test)
aax2mp3Conversion de livres audio

Localisation

ServiceRôle
DawarichHistorique de localisation
PhotonGéocodage inverse local pour Dawarich

Réseau et outils

ServiceRôle
web-checkAnalyse de sites
networking-toolboxOutils réseau
SshwiftyClient SSH web
copypartyPartage de fichiers
DashyTableau de bord
github-readme-statsStatistiques GitHub pour Dashy

Outils système

Plakar, Lynis, tmux, htop, fzf, zoxide, yazi, ripgrep, fd-find, jq, glow, ffmpeg, 7zip, poppler-utils, ImageMagick, mkcert.

Configuration

Réseau Docker partagé

Tous les services publiés sont sur un réseau externe commun avec SWAG :

docker network create proxy

Dans chaque stack :

networks:
 proxy:
   external: true

SWAG

  • Le proxy.conf inclus déclare déjà proxy_http_version, Upgrade, Connection et proxy_read_timeout. Les redéclarer dans un proxy-conf provoque l'erreur nginx « directive is duplicate ».
  • Pour une API appelée par une application mobile, séparer un bloc location /api sans l'include Authelia.

CrowdSec : captcha Turnstile

Les variables se placent sur le service swag (le bouncer est un mod de SWAG), pas sur le service crowdsec :

environment:
  - CROWDSEC_CAPTCHA_PROVIDER=turnstile
  - CROWDSEC_SITE_KEY=<SITE_KEY>
  - CROWDSEC_SECRET_KEY=<SECRET_KEY>

Authelia

Authelia ne recharge pas sa configuration à chaud :

docker restart authelia

Watchtower

Watchtower

Fork maintenu nickfedor/watchtower : le projet d'origine est archivé depuis décembre 2025. Même stack sur les deux machines :

services:
 watchtower:
   image: nickfedor/watchtower:latest
   container_name: watchtower
   restart: always
   volumes:
      - /var/run/docker.sock:/var/run/docker.sock
   command:
      - --cleanup
      - --schedule=0 0 5 * * *
   environment:
      - TZ=Europe/Paris
  • Passage chaque nuit à 5 h, après la sauvegarde de 3 h 30.
  • Pas de --rolling-restart : ce fork refuse de démarrer avec cette option dès qu'un conteneur a un depends_on.
  • Pas d'API HTTP : les notifications de mise à jour viennent d'un workflow n8n qui interroge docker-socket-proxy toutes les 10 minutes et envoie un message Telegram.

Exclure un conteneur de la mise à jour automatique :

labels:
  - com.centurylinklabs.watchtower.enable=false

Conteneurs exclus : SWAG, Authelia, CrowdSec et la base de Nextcloud (image en latest). Ils se mettent à jour à la main, après lecture des notes de version : Portainer > Update the stack, avec « Re-pull image ».

Les bases épinglées sur une version majeure restent en mise à jour automatique : elles ne reçoivent que des correctifs mineurs.

Portainer

  • Portainer ne gère pas build: . dans une stack (le contexte pointe vers un dossier temporaire). Construire l'image sur l'hôte, puis la référencer par son nom.
  • Derrière le reverse proxy, un redéploiement long renvoie un 504 alors qu'il aboutit. Utiliser l'accès direct en local : https://<IP_SERVEUR>:9443.

Modèles d'applications

Portainer utilise la liste de modèles de Lissy93, plus fournie que celle d'origine. Réglage : Settings > General > App Templates, URL :

https://raw.githubusercontent.com/Lissy93/portainer-templates/main/templates.json

Un conteneur déployé depuis un modèle n'est pas une stack : Portainer ne conserve pas de fichier compose. Sa configuration se relit avec :

docker inspect <CONTENEUR>

Conteneurs déployés ainsi : SearXNG.

Services système inutiles

Sur un serveur sans NFS, iSCSI ni bureau :

sudo systemctl disable --now rpcbind open-iscsi nvmf-autoconnect cups bluetooth ModemManager

Ne garder qu'un seul gestionnaire de profils d'énergie : tuned ou power-profiles-daemon.