Nextcloud All-In-One (alias « AIO ») est une version packagée de Nextcloud en version Docker, permettant essentiellement de déployer cette application facilement avec des modules permettant d’optimiser ses performances en cas de montée en charge d’utilisation, notamment avec des modules comme PostgreSQL, Redis et Imaginary. Ces différents conteneurs sont automatiquement générés, configurés, mis à jour, démarrés, arrêtés et sauvegardés en fonction de ce que fait l’utilisateur, qui n’a dès lors qu’à faire un minimum de clics pour gérer l’ensemble.
Il s’agit d’un bon outil si on n’a pas envie de s’embêter à composer son conteneur et ce qui tourne autour, et il faut reconnaître que ça fonctionne plutôt bien. Cela dit, comme toutes les solutions packagées, celle-ci porte en elle l’inconvénient d’occulter la complexité inhérente de l’ensemble, et donc de dégager une fausse impression de simplicité, qui peut finir par se payer au prix fort le jour où survient un dysfonctionnement. D’autre part, et là il s’agit beaucoup plus d’un choix de ses concepteurs qu’autre chose : la montée en version des conteneurs est rendue obligatoire à partir du moment où on les arrête et où une mise à jour est disponible.
C’est pour ces deux raisons que j’ai décidé, sur mon NAS Synology, de basculer vers une version Docker plus classique, appuyée par les modules suivants :
J’ai ainsi utilisé la fonction « docker-compose » en lui donnant le fichier suivant :
version: '3.8'
services:
db:
image: postgres:17-alpine
container_name: nextcloud-db
volumes:
- /volume1/docker/nextcloud/db:/var/lib/postgresql/data
environment:
- POSTGRES_DB=nextcloud_db
- POSTGRES_USER=nextcloud_user
- POSTGRES_PASSWORD=UN_MOT_DE_PASSE
restart: unless-stopped
redis:
image: redis:7-alpine
container_name: nextcloud-redis
restart: unless-stopped
app:
image: nextcloud:31
container_name: nextcloud-app
ports:
- "XXXX:80"
volumes:
- /volume1/docker/nextcloud/data:/var/www/html/data/
- /volume1/docker/nextcloud/config:/var/www/html/config/
- /volume1/docker/nextcloud/custom_apps:/var/www/html/custom_apps/
- /volume1/docker/nextcloud/themes:/var/www/html/themes/
environment:
- POSTGRES_HOST=db
- POSTGRES_DB=nextcloud_db
- POSTGRES_USER=nextcloud_user
- POSTGRES_PASSWORD=rwbgdo2njrg2A5y7vqGZ
- REDIS_HOST=redis
- NEXTCLOUD_ADMIN_USER=admin
- NEXTCLOUD_ADMIN_PASSWORD=UN_LONG_MOT_DE_PASSE
- NEXTCLOUD_TRUSTED_DOMAINS=cloud.mondomaine.com
- PREVIEW_IMAGINARY_URL=http://imaginary:9000
depends_on:
- db
- redis
restart: unless-stopped
Une chose à savoir concernant les volumes montées par Nextcloud et PostgreSQL : les dossiers correspondants ont besoin de de droits et d’autorisations bien spécifiques. J’ai mis au point un script qui permet de créer ces dossiers avec les bons propriétaires et les droits correspondants :
- r
m -rf config custom_apps data db themes mkdir config custom_apps data db themeschown 33:33 config custom_apps data db themeschmod 750 config custom_apps data db themes
Une fois ces dossiers créés, on peut procéder à la création des conteneurs et à leur lancement : « docker compose up -d », et on peut dès lors s’y connecter (après avoir fait le bon réglage dans son reverse-proxy), en utilisant l’URL : https://cloud.mondomaine.com
Concernant la migration des données de l’ancienne instance, c’est un peu plus compliqué. Il y a deux points essentiels : la base de données et les fichiers des utilisateurs.
Partie base de données
Le schéma n’est pas très compliqué mais implique plusieurs manipulations : dumper la base existante, puis la ré-importer dans une base toute neuve créée au moment du premier démarrage du conteneur nextcoud-db. Ensuite, il faut s’assurer que le user créé pour la nouvelle base (« nextcloud_user ») dispose bien des droits pour accéder à cette base et la modifier :
docker exec -t nextcloud-aio-database pg_dump -U oc_nextcloud nextcloud_database > /volume1/docker/nextcloud/db.sqldocker exec -it nextcloud-db psql -U nextcloud_user -d postgres -c "DROP DATABASE IF EXISTS nextcloud_db;"docker exec -it nextcloud-db psql -U nextcloud_user -d postgres -c "CREATE DATABASE nextcloud_db;"docker exec -it nextcloud-db psql -U nextcloud_user -d nextcloud_db -c "\du"sed -i 's/OWNER TO oc_nextcloud/OWNER TO nextcloud_user/g' /volume1/docker/nextcloud/db.sqlcat /volume1/docker/nextcloud/db.sql | docker exec -i nextcloud-db psql -U nextcloud_user nextcloud_dbdocker exec -it nextcloud-db psql -U nextcloud_user -d nextcloud_db
--> GRANT ALL PRIVILEGES ON SCHEMA public TO nextcloud_user;
--> GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO nextcloud_user;
--> GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO nextcloud_user;-
Partie fichiers des utilisateurs
Là aussi, pas de grande difficulté : on copie le dossier « data » de la précédente installation vers celui de la nouvelle. Il faut juste ensuite faire un « cc files:scan --all » qui permet de scanner tous les fichiers dudit dossier et s’assurer qu’il est bien connu dans la base de données afin d’être affiché correctement dans Nextcloud et pris en compte lors des opérations de synchronisation de fichiers :
cp -r -p DataDir/ /volume1/docker/nextcloud/mv /volume1/docker/nextcloud/DataDir /volume1/docker/nextcloud/datadocker exec -u www-data nextcloud-app php occ files:scan --all
Derniers réglages
Une fois la DB en place et les fichiers utilisateurs récupérés, le plus gros du travail est fait, et on passe à la dernière phase de la migration. On peut normalement se connecter en utilisant le compte « admin » avec le mot de passe <UN_LONG_MOT_DE_PASSE> pour vérifier que ça fonctionne. Les autres utilisateurs doivent également pouvoir se reconnecter et retrouver toutes les données. A noter que s’ils utilisent une appli « desktop » (synchro de fichier sur Mac/PC), elle ne se reconnectera pas automatiquement, et il faudra forcer une reconnexion. Idéalement, il faudrait déconnecter ces applis avant la migration pour faire plus propre.
Il faut aussi veiller à ce que le contenu du dossier « custom_apps » de l’ancienne installation soit bien copié dans le nouveau, sinon les applications installées via l’app store ne fonctionneront pas alors même qu’elles seront marquées comme « enabled », auquel cas il faudra les désactiver et les réinstaller (leurs réglages doivent normalement être conservés).