| ... |
... |
@@ -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 |
+ |