0 Votes

Modifications pour le document Nextcloud

Modifié par john le 2026/09/26 14:58

Depuis la version 1.1
modifié par john
sur 2026/09/18 22:21
Commentaire de modification : Il n'y a aucun commentaire pour cette version
À la version 3.1
modifié par john
sur 2026/09/26 14:58
Commentaire de modification : Il n'y a aucun commentaire pour cette version

Résumé

Détails

Propriétés de la Page
Contenu
... ... @@ -1,87 +1,272 @@
1 -Cloud personnel, utilisé pour les notes et la veille technologique.
1 +{{toc depth="2"/}}
2 2  
3 +Cloud personnel, utilisé pour les notes et la veille technologique. Déployé avec Nextcloud All-in-One (AIO) derrière [[SWAG>>Wiki Batcave John.Infrastructure.ServeurPrincipal.SWAG.WebHome]].
4 +
5 +== Pourquoi AIO ==
6 +
7 +AIO remplace l'image LinuxServer.io et l'image communautaire ##nextcloud## :
8 +
9 +* image maintenue par Nextcloud GmbH, testée avec chaque version de Nextcloud ;
10 +* composants intégrés et configurés automatiquement : sauvegarde Borg, Collabora, serveur Talk haute performance (HPB) avec TURN, Imaginary (aperçus), Whiteboard, notify_push ;
11 +* base PostgreSQL et Redis fournies, sans stack à maintenir à côté ;
12 +* mises à jour de Nextcloud, des conteneurs et des applications pilotées depuis une seule interface, précédées d'une sauvegarde.
13 +
14 +L'image ##nextcloud## ne fournit que l'application : base, cache, bureautique, Talk et sauvegarde restent à assembler et à maintenir à la main.
15 +
3 3  == Architecture ==
4 4  
18 +Un seul conteneur est déclaré dans Portainer : le //mastercontainer//. Il crée et pilote les autres via le socket Docker.
19 +
5 5  |=Conteneur|=Rôle
6 -|nextcloud|Application (image LinuxServer.io)
7 -|nextcloud_db|Base MariaDB (image LinuxServer.io)
21 +|nextcloud-aio-mastercontainer|Interface d'administration AIO, orchestration des autres conteneurs
22 +|nextcloud-aio-apache|Point d'entrée HTTP, cible du reverse proxy (port 11000)
23 +|nextcloud-aio-nextcloud|Application (PHP-FPM)
24 +|nextcloud-aio-database|Base PostgreSQL
25 +|nextcloud-aio-redis|Cache et verrous
26 +|nextcloud-aio-notify-push|Notifications push vers les clients
27 +|nextcloud-aio-collabora|Édition bureautique en ligne
28 +|nextcloud-aio-talk|Serveur Talk HPB et TURN (port 3478)
29 +|nextcloud-aio-imaginary|Génération des aperçus
30 +|nextcloud-aio-whiteboard|Serveur temps réel du tableau blanc
31 +|nextcloud-aio-borgbackup|Sauvegarde Borg, démarré uniquement pendant une sauvegarde ou une restauration
32 +|nextcloud-aio-domaincheck|Vérification du domaine, démarré uniquement avant la première installation
8 8  
34 +Les conteneurs créés par AIO sont reliés au réseau interne ##nextcloud-aio##. ##nextcloud-aio-apache## est en plus relié au réseau du reverse proxy.
35 +
9 9  == Variables d'environnement ==
10 10  
11 -|=Variable|=Rôle
12 -|##PUID##, ##PGID##|Utilisateur propriétaire des fichiers
13 -|##TZ##|Fuseau horaire
14 -|##PORT##|Port d'accès direct en local
15 -|##MYSQL_ROOT_PASSWORD##|Mot de passe root de la base
16 -|##DATABASE_PASSWORD##|Mot de passe de l'utilisateur ##nextcloud##
38 +|=Variable|=Valeur|=Rôle
39 +|##APACHE_PORT##|##11000##|Port d'écoute d'Apache, en HTTP, pour le reverse proxy
40 +|##APACHE_IP_BINDING##|##127.0.0.1##|Apache n'est publié que sur la boucle locale de l'hôte : aucun accès direct depuis le réseau
41 +|##APACHE_ADDITIONAL_NETWORK##|##<RESEAU_SWAG>##|Réseau Docker du reverse proxy, auquel AIO relie ##nextcloud-aio-apache## pour que SWAG l'atteigne par son nom
42 +|##SKIP_DOMAIN_VALIDATION##|##false##|La validation du domaine reste active (elle fonctionne grâce à la correction du hairpin NAT, voir plus bas)
43 +|##NEXTCLOUD_DATADIR##|##<APPDATA>/Nextcloud-AIO/data##|Dossier hôte des fichiers utilisateurs. **Non modifiable après la première installation**
44 +|##NEXTCLOUD_UPLOAD_LIMIT##|##16G##|Taille maximale d'un envoi
45 +|##NEXTCLOUD_MEMORY_LIMIT##|##1024M##|Limite mémoire PHP
17 17  
47 +AIO ne lit ces variables que sur le mastercontainer : les autres conteneurs sont configurés depuis l'interface AIO.
48 +
18 18  == Stack ==
19 19  
20 20  {{code language="yaml"}}
21 21  services:
22 - nextcloud:
23 - image: linuxserver/nextcloud:latest
24 - container_name: nextcloud
25 - environment:
26 - - PUID=${PUID}
27 - - PGID=${PGID}
28 - - TZ=${TZ}
29 - volumes:
30 - - <APPDATA>/Nextcloud/Config:/config
31 - - <APPDATA>/Nextcloud/Data:/data
53 + nextcloud-aio-mastercontainer:
54 + image: ghcr.io/nextcloud-releases/all-in-one:latest
55 + container_name: nextcloud-aio-mastercontainer # nom imposé par AIO
56 + init: true
57 + restart: always
32 32   ports:
33 - - ${PORT}:443
34 - restart: unless-stopped
35 - depends_on:
36 - - nextcloud_db
37 - networks:
38 - - default
39 - - proxy
40 -
41 - nextcloud_db:
42 - image: linuxserver/mariadb:latest
43 - container_name: nextcloud_db
59 + - "<IP_LAN>:<PORT_AIO>:8080" # interface AIO, LAN uniquement
60 + volumes:
61 + - nextcloud_aio_mastercontainer:/mnt/docker-aio-config
62 + - /var/run/docker.sock:/var/run/docker.sock:ro
63 + environment:
64 + APACHE_PORT: 11000
65 + APACHE_IP_BINDING: 127.0.0.1
66 + APACHE_ADDITIONAL_NETWORK: <RESEAU_SWAG>
67 + SKIP_DOMAIN_VALIDATION: "false"
68 + NEXTCLOUD_DATADIR: <APPDATA>/Nextcloud-AIO/data
69 + NEXTCLOUD_UPLOAD_LIMIT: 16G
70 + NEXTCLOUD_MEMORY_LIMIT: 1024M
44 44   labels:
45 45   - com.centurylinklabs.watchtower.enable=false
46 - environment:
47 - - PUID=${PUID}
48 - - PGID=${PGID}
49 - - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
50 - - TZ=${TZ}
51 - - MYSQL_DATABASE=nextcloud_db
52 - - MYSQL_USER=nextcloud
53 - - MYSQL_PASSWORD=${DATABASE_PASSWORD}
54 - volumes:
55 - - <APPDATA>/Nextcloud/DB:/config
56 - restart: unless-stopped
57 - networks:
58 - - default
59 59  
60 -networks:
61 - proxy:
62 - external: true
74 +volumes:
75 + nextcloud_aio_mastercontainer:
76 + name: nextcloud_aio_mastercontainer # nom imposé par AIO
63 63  {{/code}}
64 64  
65 -La base est exclue de la mise à jour automatique : son image est en ##latest## et pourrait changer de version majeure sans prévenir.
79 +* Le nom du conteneur (##nextcloud-aio-mastercontainer##) et celui du volume (##nextcloud_aio_mastercontainer##) sont imposés : AIO les recherche sous ces noms exacts. Sans la clé ##name:##, Compose préfixerait le volume du nom de la stack et AIO refuserait de démarrer.
80 +* Le port interne ##8080## sert l'interface AIO en HTTPS avec un certificat auto-signé. Le port hôte ##<PORT_AIO>## est libre, lié à l'IP LAN pour ne jamais être exposé à Internet.
81 +* ##NEXTCLOUD_DATADIR## doit être fixé **avant le premier démarrage** : AIO l'enregistre à l'installation et ne le change plus ensuite. Le dossier est créé sur l'hôte avant de déployer la stack ; AIO lui applique lui-même le propriétaire ##www-data##.
66 66  
83 +=== Premier démarrage ===
84 +
85 +1. Déployer la stack dans Portainer.
86 +1. Ouvrir ##https:~/~/<IP_LAN>:<PORT_AIO>## et accepter le certificat auto-signé.
87 +1. Noter la phrase de passe AIO affichée (elle protège l'interface AIO) et la ranger dans le gestionnaire de mots de passe.
88 +1. Saisir le domaine ##<DOMAINE_NEXTCLOUD>##. Le conteneur ##nextcloud-aio-domaincheck## vérifie qu'il atteint bien cette instance à travers le reverse proxy : la conf SWAG doit donc être en place avant cette étape.
89 +1. Choisir les composants : Collabora, Talk, Imaginary, Whiteboard. Laisser ClamAV, la recherche plein texte, l'enregistrement Talk et le proxy du socket Docker désactivés s'ils ne servent pas.
90 +1. Régler le fuseau horaire et, pour Collabora, les dictionnaires (##fr_FR##).
91 +1. Si une version majeure est proposée, choisir une version supérieure ou égale à celle de l'ancienne instance (voir [[Pièges>>||anchor="HPiE8gesrencontrE9s"]]).
92 +1. Démarrer les conteneurs, puis noter le mot de passe du compte ##admin## créé par AIO.
93 +
94 +== Reverse proxy (SWAG) ==
95 +
96 +Fichier ##<APPDATA>/swag/config/nginx/proxy-confs/20-nextcloud.subdomain.conf## :
97 +
98 +{{code language="nginx"}}
99 +server {
100 + listen 443 ssl;
101 + listen [::]:443 ssl;
102 + server_name <DOMAINE_NEXTCLOUD>;
103 + include /config/nginx/ssl.conf;
104 + client_max_body_size 0;
105 +
106 + location / {
107 + include /config/nginx/proxy.conf;
108 + include /config/nginx/resolver.conf;
109 + set $upstream_app nextcloud-aio-apache;
110 + set $upstream_port 11000;
111 + set $upstream_proto http;
112 + proxy_pass $upstream_proto://$upstream_app:$upstream_port;
113 + }
114 +}
115 +{{/code}}
116 +
117 +* L'upstream est ##nextcloud-aio-apache:11000## en **HTTP** : SWAG termine le TLS, Apache d'AIO n'écoute qu'en clair derrière lui. Le nom se résout parce que ##APACHE_ADDITIONAL_NETWORK## place ce conteneur sur le réseau de SWAG.
118 +* ##client_max_body_size 0## retire la limite de taille de nginx ; c'est ##NEXTCLOUD_UPLOAD_LIMIT## qui s'applique.
119 +* Pas d'include Authelia : les clients de bureau et mobiles, WebDAV, CalDAV/CardDAV, Collabora et Talk ne savent pas passer une authentification placée devant Nextcloud. La protection repose sur la connexion Nextcloud, la 2FA et l'anti-bruteforce.
120 +
67 67  == Commandes occ ==
68 68  
69 -L'image LinuxServer.io fournit un raccourci ##occ##, qui s'exécute avec le bon utilisateur (##abc##) :
123 +AIO n'a pas de raccourci ##occ## : on appelle PHP dans le conteneur applicatif, avec l'utilisateur ##www-data## :
70 70  
71 71  {{code language="bash"}}
72 -docker exec -it nextcloud occ status # version, besoin de mise à niveau
73 -docker exec -it nextcloud occ upgrade # après une mise à jour de l'image si demandé
74 -docker exec -it nextcloud occ app:update --all # mettre à jour les applications
75 -docker exec -it nextcloud occ db:add-missing-indices # après l'avertissement « index manquants »
76 -docker exec -it nextcloud occ maintenance:mode --on # avant une opération lourde (--off ensuite)
77 -docker exec -it nextcloud occ files:scan --all # fichiers ajoutés hors de Nextcloud
126 +docker exec --user www-data nextcloud-aio-nextcloud php occ status # version, état
127 +docker exec --user www-data nextcloud-aio-nextcloud php occ db:add-missing-indices # après l'avertissement « index manquants »
128 +docker exec --user www-data nextcloud-aio-nextcloud php occ maintenance:mode --on # avant une opération lourde (--off ensuite)
129 +docker exec --user www-data nextcloud-aio-nextcloud php occ files:scan --all # fichiers ajoutés hors de Nextcloud
130 +docker exec --user www-data nextcloud-aio-nextcloud php occ config:system:get trusted_proxies
78 78  {{/code}}
79 79  
133 +Ne pas lancer ##occ upgrade## ni ##app:update --all## à la main : AIO s'en charge lors de ses mises à jour.
134 +
80 80  == Sécurité ==
81 81  
82 -Double authentification TOTP activée (application ##twofactor_totp##).
137 +* Interface AIO accessible uniquement depuis le LAN (port lié à ##<IP_LAN>##), protégée par la phrase de passe AIO.
138 +* Apache publié sur ##127.0.0.1## uniquement : tout le trafic externe passe par SWAG.
139 +* Double authentification TOTP (application ##twofactor_totp##). Elle n'est pas transférée par ##user_migration## : chaque compte doit la réactiver dans //Paramètres personnels > Sécurité// après la migration.
140 +* ##trusted_proxies## contient le sous-réseau Docker du reverse proxy, pour que l'anti-bruteforce voie la vraie IP des clients (voir [[Pièges>>||anchor="HPiE8gesrencontrE9s"]]).
83 83  
84 84  == Sauvegarde ==
85 85  
86 -* Base : dump SQL par l'utilisateur applicatif, fait par le script de [[Sauvegarde>>Wiki Batcave John.Infrastructure.Sauvegarde.WebHome]]. Les fichiers bruts ##Nextcloud/DB## sont exclus.
87 -* Fichiers : ##<APPDATA>/Nextcloud/Data## et ##Config##, sauvegardés tels quels.
144 +* Sauvegarde Borg intégrée à AIO, quotidienne à ##<HEURE>##, vers ##<CHEMIN_BORG>## sur l'hôte. Elle arrête les conteneurs, sauvegarde la base, le dossier de données et la configuration, puis relance tout ; si l'option est cochée dans l'interface AIO, elle applique ensuite les mises à jour disponibles.
145 +* Le mot de passe du dépôt Borg est affiché dans l'interface AIO après la première sauvegarde. **Le conserver hors du serveur** (gestionnaire de mots de passe) : sans lui, le dépôt est illisible et la restauration impossible si le serveur est perdu.
146 +* La restauration se fait depuis l'interface AIO d'une installation neuve : chemin du dépôt, mot de passe Borg, choix de l'archive.
147 +* Le dépôt ##<CHEMIN_BORG>## est copié par le script de [[Sauvegarde>>Wiki Batcave John.Infrastructure.Sauvegarde.WebHome]] externe : un dépôt sur le même disque ne protège pas d'une panne du serveur.
148 +
149 +== Exploitation ==
150 +
151 +* **TURN** : rediriger le port ##3478## en **TCP et UDP** de la box vers le serveur, sinon les appels Talk échouent hors du LAN. ##nextcloud-aio-talk## le publie directement sur l'hôte, sans passer par SWAG.
152 +* **Mises à jour** : gérées par AIO (sauvegarde quotidienne suivie de la mise à jour, ou bouton dans l'interface AIO). Les conteneurs AIO sont exclus de [[Watchtower>>Wiki Batcave John.Infrastructure.ServeurPrincipal.Watchtower.WebHome]].
153 +* **SMTP** : à configurer dans //Administration > Paramètres de base > Serveur de messagerie//. AIO ne lit aucune variable d'environnement SMTP.
154 +* **Avertissements de la vue d'ensemble à ignorer** :
155 +** Talk HPB signalé en retard par rapport à Nextcloud 35 : l'image ##aio-talk## suit avec un décalage, le service fonctionne ;
156 +** passerelle SIP non configurée : non utilisée ;
157 +** serveur d'enregistrement Talk non configuré : composant désactivé volontairement.
158 +
159 +== Migration depuis l'image LinuxServer.io ==
160 +
161 +Faite avec l'application ##user_migration##, compte par compte. Choisie parce que l'instance est petite (deux comptes) : cette méthode évite la conversion de la base MariaDB vers PostgreSQL et n'exige pas la même version de Nextcloud des deux côtés, contrairement à une migration complète (base + dossier de données).
162 +
163 +L'archive contient notamment les fichiers, agendas et contacts du compte. Ne sont pas repris : l'appartenance aux groupes (dont ##admin##), la 2FA, les partages entre comptes.
164 +
165 +=== 1. Export sur l'ancienne instance ===
166 +
167 +Activer ##user_migration## sur l'ancienne instance, puis :
168 +
169 +{{code language="bash"}}
170 +# dossier d'export, créé en root par docker exec : le donner à l'utilisateur du serveur web (abc sur LinuxServer.io)
171 +docker exec <ANCIEN_CONTENEUR> mkdir -p /data/export
172 +docker exec <ANCIEN_CONTENEUR> chown abc:abc /data/export
173 +
174 +# export d'un compte ; php occ appelé directement pour les identifiants contenant un espace
175 +docker exec --user abc <ANCIEN_CONTENEUR> php /app/www/public/occ user:export "<IDENTIFIANT>" /data/export
176 +{{/code}}
177 +
178 +Attendre la fin : l'archive finale est ##<IDENTIFIANT>.zip##. Un fichier ##.zip.part## est un export incomplet.
179 +
180 +=== 2. Création des comptes sur AIO ===
181 +
182 +Créer chaque compte avec **exactement** le même identifiant, casse et espaces compris :
183 +
184 +{{code language="bash"}}
185 +docker exec -it --user www-data nextcloud-aio-nextcloud php occ user:add --display-name="<NOM_AFFICHE>" "<IDENTIFIANT>"
186 +{{/code}}
187 +
188 +=== 3. Import ===
189 +
190 +Copier l'archive dans le dossier de données AIO, puis l'importer dans le compte créé :
191 +
192 +{{code language="bash"}}
193 +mkdir -p <APPDATA>/Nextcloud-AIO/data/import
194 +cp <ARCHIVE>/<IDENTIFIANT>.zip <APPDATA>/Nextcloud-AIO/data/import/
195 +chown -R 33:33 <APPDATA>/Nextcloud-AIO/data/import # www-data dans le conteneur
196 +
197 +docker exec --user www-data nextcloud-aio-nextcloud php occ user:import --user "<IDENTIFIANT>" "/mnt/ncdata/import/<IDENTIFIANT>.zip"
198 +{{/code}}
199 +
200 +##/mnt/ncdata## est le point de montage de ##NEXTCLOUD_DATADIR## dans ##nextcloud-aio-nextcloud##. Supprimer le dossier ##import## une fois les comptes vérifiés.
201 +
202 +=== 4. Après l'import ===
203 +
204 +{{code language="bash"}}
205 +# le groupe admin n'est pas migré
206 +docker exec --user www-data nextcloud-aio-nextcloud php occ group:adduser admin "<IDENTIFIANT>"
207 +{{/code}}
208 +
209 +* Les agendas sont recréés sous le nom ##migrated-<nom_d_origine>## : les renommer si besoin et mettre à jour les abonnements CalDAV des appareils.
210 +* Réactiver la 2FA de chaque compte.
211 +* Reconnecter les clients (bureau, mobile, DAVx⁵) : l'URL ne change pas, mais leurs sessions appartenaient à l'ancienne instance.
212 +* Arrêter l'ancienne stack une fois tout vérifié, puis retirer son dump de la [[Sauvegarde>>Wiki Batcave John.Infrastructure.Sauvegarde.WebHome]].
213 +
214 +== Pièges rencontrés ==
215 +
216 +|=Problème|=Cause|=Solution
217 +|Import dans un compte vide ou dossier introuvable|Les identifiants sont sensibles à la casse : le dossier de données suit la casse exacte de l'identifiant|Créer le compte AIO avec la casse exacte de l'ancien identifiant
218 +|Export d'un identifiant contenant un espace : « user not found »|Le raccourci ##occ## de LinuxServer.io relaie mal les arguments et coupe l'identifiant à l'espace|Appeler ##php /app/www/public/occ## directement, avec ##~-~-user abc## et l'identifiant entre guillemets
219 +|Export en échec : permission refusée|Le dossier d'export créé par ##docker exec## appartient à root|##chown## vers l'utilisateur du serveur web (##abc## côté LinuxServer.io, ##www-data## / uid 33 côté AIO)
220 +|Import en échec ou données tronquées|Un fichier ##.zip.part## est un export encore en cours ou interrompu|Ne jamais importer un ##.zip.part## ; relancer l'export jusqu'à obtenir le ##.zip##
221 +|Import refusé|Archive produite par une version de Nextcloud plus récente que la cible|Installer une version majeure d'AIO supérieure ou égale à celle de l'ancienne instance
222 +|Page d'administration Whiteboard en erreur « Provided key is too short »|EuroOffice embarque sa propre bibliothèque JWT, chargée à la place de celle de Whiteboard|Remplacer EuroOffice par Collabora dans l'interface AIO
223 +|Tableau blanc qui ne se connecte pas|Le secret partagé du serveur Whiteboard n'est pas renseigné côté Nextcloud|Récupérer le secret avec ##docker exec nextcloud-aio-whiteboard printenv JWT_SECRET_KEY## et le saisir dans //Administration > Tableau blanc//
224 +|Collabora, Talk ou Whiteboard injoignables depuis Nextcloud ; validation du domaine en échec|Hairpin NAT : les conteneurs résolvent ##<DOMAINE_NEXTCLOUD>## vers l'IP publique, que la box ne renvoie pas vers le LAN|Voir [[Hairpin NAT>>||anchor="HHairpinNAT"]]
225 +|Connexions lentes pour tout le monde, délais anti-bruteforce|Sans ##trusted_proxies##, toutes les requêtes semblent venir de l'IP de SWAG : un échec de connexion ralentit tous les utilisateurs|Voir [[trusted_proxies>>||anchor="Htrusted_proxies"]]
226 +|Conteneurs AIO mis à jour ou recréés hors d'AIO|Watchtower ne voit pas le label d'exclusion, présent seulement sur le mastercontainer|Voir [[Watchtower>>||anchor="HWatchtower"]]
227 +|Réglages SMTP ignorés|AIO ne lit pas de variables SMTP|Configurer le serveur de messagerie dans //Administration > Paramètres de base//
228 +
229 +=== Hairpin NAT ===
230 +
231 +Le DNS local (voir [[AdGuard Home>>Wiki Batcave John.Infrastructure.RaspberryPi.AdGuard Home.WebHome]]) réécrit ##<DOMAINE_NEXTCLOUD>## vers ##<IP_LAN>## du serveur. Docker est configuré pour l'utiliser comme résolveur de tous les conteneurs, dans ##/etc/docker/daemon.json## :
232 +
233 +{{code language="json"}}
234 +{
235 + "hosts": ["unix:///var/run/docker.sock"],
236 + "log-driver": "json-file",
237 + "log-opts": { "max-size": "50m", "max-file": "3" },
238 + "dns": ["<IP_DNS_LOCAL>", "<DNS_SECOURS>"],
239 + "min-api-version": "1.24"
240 +}
241 +{{/code}}
242 +
243 +La clé ##dns## s'applique après ##systemctl restart docker##, qui redémarre tous les conteneurs. Vérification :
244 +
245 +{{code language="bash"}}
246 +docker exec nextcloud-aio-nextcloud getent hosts <DOMAINE_NEXTCLOUD> # doit renvoyer <IP_LAN>
247 +{{/code}}
248 +
249 +Le DNS de secours n'est interrogé que si le DNS local ne répond pas ; dans ce cas le domaine repasse sur l'IP publique et le problème réapparaît jusqu'au retour du DNS local.
250 +
251 +=== trusted_proxies ===
252 +
253 +Ajouter le sous-réseau du réseau Docker de SWAG, à l'index suivant les entrées déjà posées par AIO :
254 +
255 +{{code language="bash"}}
256 +docker network inspect <RESEAU_SWAG> --format '{{range .IPAM.Config}}{{.Subnet}}{{end}}' # -> <SOUS_RESEAU_PROXY>
257 +docker exec --user www-data nextcloud-aio-nextcloud php occ config:system:get trusted_proxies # repérer le prochain index libre
258 +docker exec --user www-data nextcloud-aio-nextcloud php occ config:system:set trusted_proxies <INDEX> --value="<SOUS_RESEAU_PROXY>"
259 +{{/code}}
260 +
261 +Reprendre le masque exact du réseau : un masque plus large ferait confiance à l'en-tête ##X-Forwarded-For## envoyé par d'autres machines.
262 +
263 +=== Watchtower ===
264 +
265 +AIO crée ses conteneurs sans le label ##com.centurylinklabs.watchtower.enable=false## : il faut les lister nommément dans la variable ##WATCHTOWER_DISABLE_CONTAINERS## de Watchtower :
266 +
267 +{{code language="bash"}}
268 +WATCHTOWER_DISABLE_CONTAINERS=nextcloud-aio-apache,nextcloud-aio-borgbackup,nextcloud-aio-collabora,nextcloud-aio-database,nextcloud-aio-domaincheck,nextcloud-aio-eurooffice,nextcloud-aio-imaginary,nextcloud-aio-mastercontainer,nextcloud-aio-nextcloud,nextcloud-aio-notify-push,nextcloud-aio-redis,nextcloud-aio-talk,nextcloud-aio-whiteboard
269 +{{/code}}
270 +
271 +Ajouter tout nouveau conteneur ##nextcloud-aio-*## à cette liste lors de l'activation d'un composant (ClamAV, recherche plein texte, enregistrement Talk…).
272 +