Installation de Nextcloud sur un NAS ASUSTOR

Installation de Nextcloud sur un NAS ASUSTOR

Vraiment, les ingénieurs d’Asus ne sont pas sérieux. Nous en sommes fin février à la version 21 de Nextcloud, qui n’est compatible qu’avec la version 10.2 de MariaDB. Or :

  1. le docker proposé dans AppCentral est basé sur l’image nextcloud:latest ==> version 21
  2. la version de MariaDB reste à 10.0.x ==> Problème

Donc il est fortement déconseillé d’utiliser la version de Nextcloud par AppCentral, car si vous vous amusez à éditer le docker dans Portainer, il se mettra automatiquement à jour sur la version 21.

Du coup, après réflexion, il est vraiment préférable d’utiliser une version Docker personnelle de Nextcloud. J’ai donc réécrit la procédure d’installation de Nextcloud.

Installation de Nextcloud

J’ai ainsi récupéré le fichier dockerfile de Nextcloud sur Docker Hub : dockerfile, mais l’image nextcloud:stable, pas nextcloud:latest !

On peut alors générer le container avec le code suivant :

docker run -d \
  --name Nextcloud \
  --restart always \
  -v nextcloud:/var/www/html \
  -v /volume1/Nextcloud:/var/www/html/data \
  -p 32690:80
  nextcloud:stable

Nextcloud est alors généré avec un volume persistant (dans /usr/local/AppCentral/docker-ce/docker_lib/volumes/) dans lequel on trouvera la distribution Nextcloud, et un autre volume persistant pour la conservation des données (/volume1/Nextcloud pour moi). Le port 32690 du NAS pointe sur le port interne 80 du container ( sur lequel tourne le serveur Apache du container qui permet l’accès a Nextcloud).

Nextcloud apparait dans Portainer sous une version qui est bien compatible avec la version de MySQL 10.0.x (ceci est en tous cas valable au 8 mars 2021). On peut aller sur la page de démarrage : https://cloud.example.com/ et choisir l’installation souhaitée. Il faut définir l’emplacement des données à /var/www/html/data (c’est un volume persistant défini dans le démarrage de Nextcloud, cf. code ci-dessus) et choisir MariaDB pour la base de données.

Il faut penser à ajouter le code suivant dans le fichier config.php généré par l’installation de Nextcloud :

  'overwriteprotocol' => 'https',
  'trusted_proxies' =>
  array (
    0 => '172.17.0.7',
  ),

Adaptez 172.17.0.7 à l’IP virtuelle de votre docker Traefik. Il faut également enrichir le code docker de Traefik que j’ai donné dans un post précédent. J’ai mis les lignes à ajouter en gras dans docker-compose.yml :

# Nextcloud service
- "traefik.http.routers.cloud.rule=Host(`cloud.webdot.fr`)"
- "traefik.http.routers.cloud.entrypoints=https"
- "traefik.http.routers.cloud.middlewares=https_redirect"
- "traefik.http.routers.cloud.service=cloud@file"
- "traefik.http.routers.cloud.tls=true"
- "traefik.http.routers.cloud.tls.certresolver=letsencrypt"
- "traefik.http.routers.cloud.middlewares=cloud-dav,secHeaders@file"
- "traefik.http.middlewares.cloud-dav.replacepathregex.regex=^/.well-known/ca(l|rd)dav"
- "traefik.http.middlewares.cloud-dav.replacepathregex.replacement=/remote.php/dav/"

Il faut modifier le fichier services.toml également en y ajoutant le bloc en fin de fichier : il fait référence au routeur défini dans le docker-compose.yml (la ligne traefik.http.routers.cloud.middlewares=cloud-dav,secHeaders@file« ).

[http.middlewares]
    [http.middlewares.secHeaders]
    [http.middlewares.secHeaders.headers]
    browserXssFilter = true
    contentTypeNosniff = true
    frameDeny = true
    sslRedirect = true
    #HSTS Configuration
    stsIncludeSubdomains = true
    stsPreload = true
    stsSeconds = 31536000.0
    customFrameOptionsValue = "SAMEORIGIN"

Ces trois modifications permettront d’éviter l’apparition de warnings dans la vue d’ensemble de la partie administration. En théorie, avec tous ces ajouts, il n’y aura plus de messages d’avertissement. Ces modifications compensent les modifications décrites ci-dessous qui n’ont normalement plus lieu d’être.

Pour l’avertissement concernant les « missing-indices, Nextcloud étant dans un container, il faut utiliser la commande suivante :

docker exec --user www-data CONTAINER_ID php occ db:add-missing-indices

Le container ID est retrouvé très facilement dans Portainer :

Le plus simple est d’utiliser l’image docker de AppCentral. L’image se retrouve dans Portainer :

Je ne précise ici que certaines spécificités par rapport à l’utilisation de docker, sinon il s’agit d’une installation « standard » de Nextcloud avec l’utilisation de mysql que vous aurez installé évidemment.

Avant de démarrer l’installation, j’ai créé un répertoire Nextcloud à la racine du volume2 (le disque dur de stockage). A l’installation du docker à partir de AppCentral, il est créé un répertoire /volume1/Docker/Nextcloud qui est lié au répertoire /var/www/html de l’image, si bien que les modifications qu’on fait dans le répertoire /volume1/Docker/Nextcloud sont persistantes. Il faut aussi créer (on peut le faire facilement dans portainer) un lien entre le répertoire /volume2/Nextcloud et le répertoire de l’image /var/www/html/data.

Il faut bien penser à redéfinir les droits dans le répertoire /volume1/Docker/Nextcloud et dans /volume2/Nextcloud car ils vont être attaqués par le serveur du container, qui par défaut à un identifiant user:group fixé à 33:33, alors que le répertoire ci-dessus, au niveau du NAS, est fixé à admin:administrators soit 999:999. Il faut donc faire :

root@astorus:/volume1/Docker/Traefik# chown -R 33:33 /volume1/Docker/Nextcloud && chown -R 33:33 /volume2/Nextcloud

Il y a un autre piège qui nécessite la modification suivante sur le fichier de configuration. En effet on va obtenir un mauvais fonctionnement à l’utilisation de traefik/https en l’état. Cette erreur est résolue en ajoutant les lignes suivantes dans le fichier config.php (situé dans /volume1/Docker/Nextcloud/config/config.php) :

  'forwarded_for_headers' =>                          
  array (                                             
    0 => 'HTTP_X_FORWARDED_FOR',                      
  ),                                                  
  'overwriteprotocol' => 'https',                     

Et normalement, une fois loggé avec les identifiants donnés au démarrage (je ne détaille pas toute la partie MySQL à configurer aussi spécifiquement pour Nextcloud), on arrive sur la page principale de Nextcloud :

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.