Code source wiki de Serveur principal
Afficher les derniers auteurs
| author | version | line-number | content |
|---|---|---|---|
| 1 | = Serveur principal = | ||
| 2 | |||
| 3 | {{info}} | ||
| 4 | Pages détaillées : [[Reverse proxy>>Wiki Batcave John.Infrastructure.ServeurPrincipal.ReverseProxy.WebHome]] · [[docker-socket-proxy>>Wiki Batcave John.Infrastructure.ServeurPrincipal.DockerSocketProxy.WebHome]] · [[Nextcloud>>Wiki Batcave John.Infrastructure.ServeurPrincipal.Nextcloud.WebHome]] · [[XWiki>>Wiki Batcave John.Infrastructure.ServeurPrincipal.Xwiki.WebHome]] · [[Passbolt>>Wiki Batcave John.Infrastructure.ServeurPrincipal.Passbolt.WebHome]] · [[Joplin>>Wiki Batcave John.Infrastructure.ServeurPrincipal.Joplin.WebHome]] · [[SearXNG>>Wiki Batcave John.Infrastructure.ServeurPrincipal.SearXNG.WebHome]] · [[Dawarich>>Wiki Batcave John.Infrastructure.ServeurPrincipal.Dawarich.WebHome]] · [[Immich>>Wiki Batcave John.Infrastructure.ServeurPrincipal.Immich.WebHome]] · [[n8n>>Wiki Batcave John.Infrastructure.ServeurPrincipal.n8n.WebHome]] · [[Dépannage>>Wiki Batcave John.Infrastructure.ServeurPrincipal.Depannage.WebHome]] | ||
| 5 | {{/info}} | ||
| 6 | |||
| 7 | == Système == | ||
| 8 | |||
| 9 | |=Élément|=Valeur | ||
| 10 | |OS|Debian 13 | ||
| 11 | |Noyau|Mainline (dépôt Zabbly) | ||
| 12 | |Disque système|NVMe | ||
| 13 | |Exposition|Internet, via SWAG | ||
| 14 | |||
| 15 | == Services == | ||
| 16 | |||
| 17 | === Infrastructure === | ||
| 18 | |||
| 19 | |=Service|=Rôle | ||
| 20 | |SWAG|Reverse proxy, certificat wildcard Let's Encrypt | ||
| 21 | |Authelia|Authentification unique | ||
| 22 | |CrowdSec|Détection d'attaques, bouncer nginx, captcha Turnstile | ||
| 23 | |DuckDNS|Mise à jour du DNS dynamique | ||
| 24 | |Portainer CE (LTS)|Gestion des stacks | ||
| 25 | |docker-socket-proxy|Accès filtré à l'API Docker | ||
| 26 | |Watchtower|Mise à jour automatique des images | ||
| 27 | |Glances|Supervision | ||
| 28 | |||
| 29 | === Productivité === | ||
| 30 | |||
| 31 | |=Service|=Rôle | ||
| 32 | |Nextcloud|Notes, veille | ||
| 33 | |XWiki|Wiki | ||
| 34 | |Joplin Server + client web|Notes | ||
| 35 | |Passbolt|Mots de passe | ||
| 36 | |Vikunja|Tâches | ||
| 37 | |n8n|Automatisation | ||
| 38 | |code-server|Éditeur dans le navigateur | ||
| 39 | |Wallos|Suivi des abonnements | ||
| 40 | |||
| 41 | === Veille et lecture === | ||
| 42 | |||
| 43 | |=Service|=Rôle | ||
| 44 | |SearXNG|Métamoteur | ||
| 45 | |Flus|Veille RSS | ||
| 46 | |Wallabag|Lecture différée | ||
| 47 | |changedetection.io|Surveillance de pages | ||
| 48 | |||
| 49 | === Médias === | ||
| 50 | |||
| 51 | |=Service|=Rôle | ||
| 52 | |Immich|Photos et vidéos, sans machine-learning | ||
| 53 | |Jellystat|Statistiques Jellyfin | ||
| 54 | |Castopod|Podcast (test) | ||
| 55 | |aax2mp3|Conversion de livres audio | ||
| 56 | |||
| 57 | === Localisation === | ||
| 58 | |||
| 59 | |=Service|=Rôle | ||
| 60 | |Dawarich|Historique de localisation | ||
| 61 | |Photon|Géocodage inverse local pour Dawarich | ||
| 62 | |||
| 63 | === Réseau et outils === | ||
| 64 | |||
| 65 | |=Service|=Rôle | ||
| 66 | |web-check|Analyse de sites | ||
| 67 | |networking-toolbox|Outils réseau | ||
| 68 | |Sshwifty|Client SSH web | ||
| 69 | |copyparty|Partage de fichiers | ||
| 70 | |Dashy|Tableau de bord | ||
| 71 | |github-readme-stats|Statistiques GitHub pour Dashy | ||
| 72 | |||
| 73 | == Outils système == | ||
| 74 | |||
| 75 | Plakar, Lynis, tmux, htop, fzf, zoxide, yazi, ripgrep, fd-find, jq, glow, ffmpeg, 7zip, poppler-utils, ImageMagick, mkcert. | ||
| 76 | |||
| 77 | == Configuration == | ||
| 78 | |||
| 79 | === Réseau Docker partagé === | ||
| 80 | |||
| 81 | Tous les services publiés sont sur un réseau externe commun avec SWAG : | ||
| 82 | |||
| 83 | {{code language="bash"}} | ||
| 84 | docker network create proxy | ||
| 85 | {{/code}} | ||
| 86 | |||
| 87 | Dans chaque stack : | ||
| 88 | |||
| 89 | {{code language="yaml"}} | ||
| 90 | networks: | ||
| 91 | proxy: | ||
| 92 | external: true | ||
| 93 | {{/code}} | ||
| 94 | |||
| 95 | === SWAG === | ||
| 96 | |||
| 97 | * 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 ». | ||
| 98 | * Pour une API appelée par une application mobile, séparer un bloc ##location /api## sans l'include Authelia. | ||
| 99 | |||
| 100 | === CrowdSec : captcha Turnstile === | ||
| 101 | |||
| 102 | Les variables se placent sur le service **swag** (le bouncer est un mod de SWAG), pas sur le service crowdsec : | ||
| 103 | |||
| 104 | {{code language="yaml"}} | ||
| 105 | environment: | ||
| 106 | - CROWDSEC_CAPTCHA_PROVIDER=turnstile | ||
| 107 | - CROWDSEC_SITE_KEY=<SITE_KEY> | ||
| 108 | - CROWDSEC_SECRET_KEY=<SECRET_KEY> | ||
| 109 | {{/code}} | ||
| 110 | |||
| 111 | === Authelia === | ||
| 112 | |||
| 113 | Authelia ne recharge pas sa configuration à chaud : | ||
| 114 | |||
| 115 | {{code language="bash"}} | ||
| 116 | docker restart authelia | ||
| 117 | {{/code}} | ||
| 118 | |||
| 119 | === Watchtower === | ||
| 120 | |||
| 121 | === Watchtower === | ||
| 122 | |||
| 123 | Fork maintenu ##nickfedor/watchtower## : le projet d'origine est archivé depuis décembre 2025. Même stack sur les deux machines : | ||
| 124 | |||
| 125 | {{code language="yaml"}} | ||
| 126 | services: | ||
| 127 | watchtower: | ||
| 128 | image: nickfedor/watchtower:latest | ||
| 129 | container_name: watchtower | ||
| 130 | restart: always | ||
| 131 | volumes: | ||
| 132 | - /var/run/docker.sock:/var/run/docker.sock | ||
| 133 | command: | ||
| 134 | - --cleanup | ||
| 135 | - --schedule=0 0 5 * * * | ||
| 136 | environment: | ||
| 137 | - TZ=Europe/Paris | ||
| 138 | {{/code}} | ||
| 139 | |||
| 140 | * Passage chaque nuit à 5 h, après la sauvegarde de 3 h 30. | ||
| 141 | * Pas de ##~-~-rolling-restart## : ce fork refuse de démarrer avec cette option dès qu'un conteneur a un ##depends_on##. | ||
| 142 | * 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. | ||
| 143 | |||
| 144 | Exclure un conteneur de la mise à jour automatique : | ||
| 145 | |||
| 146 | {{code language="yaml"}} | ||
| 147 | labels: | ||
| 148 | - com.centurylinklabs.watchtower.enable=false | ||
| 149 | {{/code}} | ||
| 150 | |||
| 151 | 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 ». | ||
| 152 | |||
| 153 | Les bases épinglées sur une version majeure restent en mise à jour automatique : elles ne reçoivent que des correctifs mineurs. | ||
| 154 | |||
| 155 | === Portainer === | ||
| 156 | |||
| 157 | * 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. | ||
| 158 | * 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##. | ||
| 159 | |||
| 160 | ==== Modèles d'applications ==== | ||
| 161 | |||
| 162 | Portainer utilise la liste de modèles de Lissy93, plus fournie que celle d'origine. Réglage : Settings > General > App Templates, URL : | ||
| 163 | |||
| 164 | {{code}} | ||
| 165 | https://raw.githubusercontent.com/Lissy93/portainer-templates/main/templates.json | ||
| 166 | {{/code}} | ||
| 167 | |||
| 168 | 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 : | ||
| 169 | |||
| 170 | {{code language="bash"}} | ||
| 171 | docker inspect <CONTENEUR> | ||
| 172 | {{/code}} | ||
| 173 | |||
| 174 | Conteneurs déployés ainsi : SearXNG, Glances, DuckDNS, Wallos, aax2mp3. Leur page de documentation reprend leur configuration relevée avec ##docker inspect##. | ||
| 175 | |||
| 176 | === Services système inutiles === | ||
| 177 | |||
| 178 | Sur un serveur sans NFS, iSCSI ni bureau : | ||
| 179 | |||
| 180 | {{code language="bash"}} | ||
| 181 | sudo systemctl disable --now rpcbind open-iscsi nvmf-autoconnect cups bluetooth ModemManager | ||
| 182 | {{/code}} | ||
| 183 | |||
| 184 | Ne garder qu'un seul gestionnaire de profils d'énergie : ##tuned## ou ##power-profiles-daemon##. |