Installation de Traefik
7 - Configuration
Veillez à décocher « Installer les applications recommandées » ! L'image officielle Nextcloud présente un bug qui ralentit considérablement l'application si vous laissez cocher cette case. Il est recommandé d'installer les applications dans l'interface de votre cloud une fois la configuration terminée.
Renseignez l'utilisateur et le mot de passe de votre choix et cliquez sur « Terminer l'installation » :
8 - Suivre les recommandations de Nextcloud
Votre instance Nextcloud effectue automatiquement des vérifications sur la sécurité et la configuration. Il est possible de consulter les avertissements liés à votre configuration dans les paramètres (Administration → Vue d'ensemble) :
8.1 - La configuration des en-têtes du reverse proxy
Comme l'indique le message d'avertissement, vous devez définir explicitement les serveurs proxy auxquels Nextcloud doit faire confiance et fournir des en-têtes spécifiques pour des raisons de sécurité.
-
Ajoutez les lignes suivantes dans votre docker-compose.yml :
version: '3.7' services: database: image: mariadb container_name: nextcloud_database restart: unless-stopped command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW environment: - MYSQL_RANDOM_ROOT_PASSWORD=yes - MYSQL_DATABASE=${MYSQL_DATABASE} - MYSQL_USER=${MYSQL_USER} - MYSQL_PASSWORD=${MYSQL_PASSWORD} networks: - lan volumes: - db:/var/lib/mysql nextcloud: depends_on: - database image: nextcloud container_name: nextcloud_app restart: unless-stopped ports: - 8080:80 environment: - MYSQL_HOST=database - MYSQL_DATABASE=${MYSQL_DATABASE} - MYSQL_USER=${MYSQL_USER} - MYSQL_PASSWORD=${MYSQL_PASSWORD} - NEXTCLOUD_TRUSTED_DOMAINS=${NEXTCLOUD_URL} networks: - lan - traefik_network volumes: - html:/var/www/html labels: - "traefik.enable=true" - "traefik.docker.network=traefik_network" - "traefik.http.routers.nextcloud.entrypoints=web,websecure" - "traefik.http.routers.nextcloud.rule=Host(`${NEXTCLOUD_URL}`)" - "traefik.http.services.nextcloud.loadbalancer.server.port=80" - "traefik.http.routers.nextcloud.tls=true" - "traefik.http.routers.nextcloud.tls.certresolver=leresolver" - "traefik.http.routers.nextcloud.middlewares=nextcloud" - "traefik.http.middlewares.nextcloud.headers.stsSeconds=155520011" - "traefik.http.middlewares.nextcloud.headers.stsIncludeSubdomains=true" - "traefik.http.middlewares.nextcloud.headers.stsPreload=true" volumes: db: html: networks: lan: traefik_network: external: true
-
Exécutez les commandes suivantes (attention à bien remplacer cloud.mondomaine.com par le vôtre dans la deuxième commande) :
docker exec -it -u www-data nextcloud_app php occ config:system:set trusted_proxies 1 --value='127.0.0.1' docker exec -it -u www-data nextcloud_app php occ config:system:set overwritehost --value="cloud.mondomaine.com" docker exec -it -u www-data nextcloud_app php occ config:system:set overwriteprotocol --value="https"
-
Redémarrez vos containers pour prendre en compte la nouvelle configuration avec la commande suivante :
docker-compose up -d
8.2 - CalDAV et CardDAV
CalDAV et CardDAV sont des protocoles réseaux permettant de synchroniser respectivement vos calendriers et vos contacts créés au sein de votre cloud vers d'autres appareils (votre smartphone Android par exemple).
Les redirections pour CalDAV ou CardDAV ne fonctionnent pas si Nextcloud s'exécute derrière un reverse proxy (ici Traefik). La solution est de demander à Traefik de réaliser les redirections.
-
Ajoutez le middleware nextcloud_redirect à la ligne 45 et les 3 propriétés de redirections dans votre docker-compose.yml :
version: '3.7' services: database: image: mariadb container_name: nextcloud_database restart: unless-stopped command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW environment: - MYSQL_RANDOM_ROOT_PASSWORD=yes - MYSQL_DATABASE=${MYSQL_DATABASE} - MYSQL_USER=${MYSQL_USER} - MYSQL_PASSWORD=${MYSQL_PASSWORD} networks: - lan volumes: - db:/var/lib/mysql nextcloud: depends_on: - database image: nextcloud container_name: nextcloud_app restart: unless-stopped ports: - 8080:80 environment: - MYSQL_HOST=database - MYSQL_DATABASE=${MYSQL_DATABASE} - MYSQL_USER=${MYSQL_USER} - MYSQL_PASSWORD=${MYSQL_PASSWORD} - NEXTCLOUD_TRUSTED_DOMAINS=${NEXTCLOUD_URL} networks: - lan - traefik_network volumes: - html:/var/www/html labels: - "traefik.enable=true" - "traefik.docker.network=traefik_network" - "traefik.http.routers.nextcloud.entrypoints=web,websecure" - "traefik.http.routers.nextcloud.rule=Host(`${NEXTCLOUD_URL}`)" - "traefik.http.services.nextcloud.loadbalancer.server.port=80" - "traefik.http.routers.nextcloud.tls=true" - "traefik.http.routers.nextcloud.tls.certresolver=leresolver" - "traefik.http.routers.nextcloud.middlewares=nextcloud,nextcloud_redirect" - "traefik.http.middlewares.nextcloud.headers.stsSeconds=155520011" - "traefik.http.middlewares.nextcloud.headers.stsIncludeSubdomains=true" - "traefik.http.middlewares.nextcloud.headers.stsPreload=true" - "traefik.http.middlewares.nextcloud-redirectregex.redirectRegex.permanent=true" - "traefik.http.middlewares.nextcloud_redirect.redirectregex.regex=/.well-known/(card|cal)dav" - "traefik.http.middlewares.nextcloud_redirect.redirectregex.replacement=/remote.php/dav/" volumes: db: html: networks: lan: traefik_network: external: true
-
Redémarrez vos containers pour prendre en compte la nouvelle configuration avec la commande suivante :
docker-compose up -d
8.3 - Index manquants
Ajoutez les index manquants avec la commande suivante :docker exec -it -u www-data nextcloud_app php occ db:add-missing-indices
Vous pouvez maintenant recharger la page et constater que la sécurité et la configuration suivent désormais les recommandations officielles :
9 - Améliorer le temps de réponse avec Redis
En construction...
10 - Installation de la suite Collabora Online
Collabora Online permet d'éditer vos documents en temps réel directement dans Nextcloud, en affichant un rendu WYSIWYG de haute fidélité et en préservant la présentation et le formatage de vos documents.
Les utilisateurs peuvent insérer des commentaires et y répondre, et en inviter d'autres personnes sans compte Nextcloud à se joindre anonymement pour éditer des fichiers se trouvant dans un dossier public partagé par lien.
Collabora Online prend en charge des dizaines de formats de documents dont DOC, DOCX, PPT, PPTX, XLS, XLSX + ODF, Import/View Visio, Publisher et bien plus...
-
Modifiez votre fichier /home/nextcloud/.env et ajoutez les propriétés NEXTCLOUD_URL_ESCAPED, COLLABORA_URL, COLLABORA_USER et COLLABORA_PASSWORD :
MYSQL_DATABASE=nextcloud MYSQL_USER=mysql_user MYSQL_PASSWORD=mysql_password NEXTCLOUD_URL=cloud.mondomaine.com NEXTCLOUD_URL_ESCAPED=cloud\.mondomaine\.com COLLABORA_URL=collabora.mondomaine.com COLLABORA_USER=collabora_admin COLLABORA_PASSWORD=collabora_password
- NEXTCLOUD_URL_ESCAPED : l'URL de votre Nextcloud mais en échappant chaque caractère « . » par un backslash « \ ». Cette valeur sera passée en variable d'environnement à votre Collabora et seules les requêtes venant de cette URL seront autorisées au sein de Collabora. Si vous êtes en local, laissez la valeur vide : NEXTCLOUD_URL_ESCAPED=
- COLLABORA_URL : l'URL de votre Collabora. Si vous êtes en local, cette propriété n'est pas nécessaire.
- COLLABORA_USER : identifiant de l'administrateur de votre Collabora.
- COLLABORA_PASSWORD : mot de passe de l'administrateur de votre Collabora.
-
Ajoutez les lignes suivantes dans votre /home/nextcloud/docker-compose.yml sans rien modifier :
version: '3.7' services: database: image: mariadb container_name: nextcloud_database restart: unless-stopped command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW environment: - MYSQL_RANDOM_ROOT_PASSWORD=yes - MYSQL_DATABASE=${MYSQL_DATABASE} - MYSQL_USER=${MYSQL_USER} - MYSQL_PASSWORD=${MYSQL_PASSWORD} networks: - lan volumes: - db:/var/lib/mysql nextcloud: depends_on: - database image: nextcloud container_name: nextcloud_app restart: unless-stopped ports: - 8080:80 environment: - MYSQL_HOST=database - MYSQL_DATABASE=${MYSQL_DATABASE} - MYSQL_USER=${MYSQL_USER} - MYSQL_PASSWORD=${MYSQL_PASSWORD} - NEXTCLOUD_TRUSTED_DOMAINS=${NEXTCLOUD_URL} networks: - lan - traefik_network volumes: - html:/var/www/html labels: - "traefik.enable=true" - "traefik.docker.network=traefik_network" - "traefik.http.routers.nextcloud.entrypoints=web,websecure" - "traefik.http.routers.nextcloud.rule=Host(`${NEXTCLOUD_URL}`)" - "traefik.http.services.nextcloud.loadbalancer.server.port=80" - "traefik.http.routers.nextcloud.tls=true" - "traefik.http.routers.nextcloud.tls.certresolver=leresolver" - "traefik.http.routers.nextcloud.middlewares=nextcloud,nextcloud_redirect" - "traefik.http.middlewares.nextcloud.headers.stsSeconds=155520011" - "traefik.http.middlewares.nextcloud.headers.stsIncludeSubdomains=true" - "traefik.http.middlewares.nextcloud.headers.stsPreload=true" - "traefik.http.middlewares.nextcloud-redirectregex.redirectRegex.permanent=true" - "traefik.http.middlewares.nextcloud_redirect.redirectregex.regex=/.well-known/(card|cal)dav" - "traefik.http.middlewares.nextcloud_redirect.redirectregex.replacement=/remote.php/dav/" volumes: db: html: collabora: image: collabora/code container_name: nextcloud_collabora restart: unless-stopped ports: - 9980:9980 networks: - lan - traefik_network environment: - "domain=${NEXTCLOUD_URL_ESCAPED}" - "extra_params=--o:ssl.enable=false --o:ssl.termination=true" - "dictionaries=fr" - "username=${COLLABORA_USER}" - "password=${COLLABORA_PASSWORD}" - "SLEEPFORDEBUGGER=0" cap_add: - MKNOD tty: true labels: - "traefik.enable=true" - "traefik.docker.network=traefik_network" - "traefik.http.routers.collabora.entrypoints=web,websecure" - "traefik.http.routers.collabora.rule=Host(`${COLLABORA_URL}`)" - "traefik.http.services.collabora.loadbalancer.server.port=9980" - "traefik.http.routers.collabora.tls=true" - "traefik.http.routers.collabora.tls.certresolver=leresolver" networks: lan: traefik_network: external: true
Si vous êtes en local, les labels Traefik ne sont pas nécessaires. De plus, le network traefik_network déclaré à la ligne 64 n'est nécessaire.
-
Redémarrez vos containers pour prendre en compte la nouvelle configuration avec la commande suivante :
docker-compose up -d
Suivant votre configuration, le container Collabora peut mettre jusqu'à 10 minutes avant d'être opérationnel ! Vous pouvez suivre le démarrage du container avec la commande :
docker-compose logs --follow nextcloud_collabora
Une fois le container opérationnel, il est nécessaire de configurer Nextcloud afin d'accéder à votre Collabora. Pour cela, vous devez télécharger et activer les applications.
Pour information, l'interface d'administration de Collabora Online est accessible via l'URL : https://collabora.mondomaine.com/loleaflet/dist/admin/admin.html ou localhost:9980/loleaflet/dist/admin/admin.html si vous êtes en local.
11 - Nextcloud sur Android...
Découvrez l'excellente application officielle Nextcloud sur Android qui vous permettra de synchroniser et de partager vos fichiers sur votre mobile.
Ubuntu Server 20.04 LTS
Edouard WATTECAMPS
Bonjour,
Lorsque je lance la commande « docker-compose -v », j’ai le message suivant :
« /usr/local/bin/docker-compose: line 1: Not: command not found »
La version de Docker est la suivante : Docker version 19.03.13, build 4484c46
Merci de votre aide
Bonjour!
Attention, depuis les versions récentes dun conteneur de Collabora, la variable d’environnement domain= n’est plus acceptée. Si je reprend l’exemple de ce guide, dans docker-compose.yml il faut remplacer « domain=${NEXTCLOUD_URL_ESCAPED} » par « aliasgroup1=${NEXTCLOUD_URL_ESCAPED} »
Puis dans le fichier .env il faut remplacer NEXTCLOUD_URL_ESCAPED=cloud\.mondomaine\.com par NEXTCLOUD_URL_ESCAPED=https://cloud.mondomaine.com:443,https://cloud\.mondomaine\.com,https://cloud\.mondomaine\.com:443
Voilà, j’espère avoir aidé 🙂