{"id":95,"date":"2021-03-08T14:59:00","date_gmt":"2021-03-08T13:59:00","guid":{"rendered":"https:\/\/www.webdot.fr\/blog\/?p=95"},"modified":"2021-03-31T11:04:11","modified_gmt":"2021-03-31T09:04:11","slug":"installation-de-nextcloud-sur-un-nas-asustor","status":"publish","type":"post","link":"https:\/\/www.webdot.fr\/blog\/2021\/03\/installation-de-nextcloud-sur-un-nas-asustor\/","title":{"rendered":"Installation de Nextcloud sur un NAS ASUSTOR"},"content":{"rendered":"\n<p>Vraiment, les ing\u00e9nieurs d&rsquo;Asus ne sont pas s\u00e9rieux. Nous en sommes fin f\u00e9vrier \u00e0 la version 21 de Nextcloud, qui n&rsquo;est compatible qu&rsquo;avec la version 10.2 de MariaDB. Or :<\/p>\n\n\n\n<ol><li>le docker propos\u00e9 dans AppCentral est bas\u00e9 sur l&rsquo;image nextcloud:latest ==&gt; version 21<\/li><li>la version de MariaDB reste \u00e0 10.0.x ==&gt; Probl\u00e8me<\/li><\/ol>\n\n\n\n<p>Donc il est fortement d\u00e9conseill\u00e9 d&rsquo;utiliser la version de Nextcloud par AppCentral, car si vous vous amusez \u00e0 \u00e9diter le docker dans Portainer, il se mettra automatiquement \u00e0 jour sur la version 21.<\/p>\n\n\n\n<p>Du coup, apr\u00e8s r\u00e9flexion, il est <strong>vraiment <\/strong>pr\u00e9f\u00e9rable d&rsquo;utiliser une version Docker personnelle de Nextcloud.  J&rsquo;ai donc r\u00e9\u00e9crit la proc\u00e9dure d&rsquo;installation de Nextcloud. <\/p>\n\n\n\n<h4 class=\"wp-block-heading\"> Installation de Nextcloud<\/h4>\n\n\n\n<p>J&rsquo;ai ainsi r\u00e9cup\u00e9r\u00e9 le fichier dockerfile de Nextcloud sur Docker Hub : <a rel=\"noreferrer noopener\" href=\"https:\/\/raw.githubusercontent.com\/nextcloud\/docker\/f1ca6dbfab022e44b8aed9909939a4c43726d2f2\/20.0\/apache\/Dockerfile\" target=\"_blank\">dockerfile<\/a>, mais l&rsquo;image nextcloud:stable, pas nextcloud:latest !<\/p>\n\n\n\n<p>On peut alors g\u00e9n\u00e9rer le container avec le code suivant :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>docker run -d \\\n  --name Nextcloud \\\n  --restart always \\\n  -v nextcloud:\/var\/www\/html \\\n  -v \/volume1\/Nextcloud:\/var\/www\/html\/data \\\n  -p 32690:80\n  nextcloud:stable<\/code><\/pre>\n\n\n\n<p>Nextcloud est alors g\u00e9n\u00e9r\u00e9 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\u00e9es (\/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&rsquo;acc\u00e8s a Nextcloud).<\/p>\n\n\n\n<p>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\u00e9marrage : https:\/\/cloud.example.com\/ et choisir l&rsquo;installation souhait\u00e9e. Il faut d\u00e9finir l&#8217;emplacement des donn\u00e9es \u00e0 \/var\/www\/html\/data (c&rsquo;est un volume persistant d\u00e9fini dans le d\u00e9marrage de Nextcloud, cf. code ci-dessus) et choisir MariaDB pour la base de donn\u00e9es.<\/p>\n\n\n\n<p>Il faut penser \u00e0 ajouter le code suivant dans le fichier config.php g\u00e9n\u00e9r\u00e9 par l&rsquo;installation de Nextcloud :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>  'overwriteprotocol' =&gt; 'https',\n  'trusted_proxies' =&gt;\n  array (\n    0 =&gt; '172.17.0.7',\n  ),<\/code><\/pre>\n\n\n\n<p>Adaptez 172.17.0.7 \u00e0 l&rsquo;IP virtuelle de votre docker Traefik. Il faut \u00e9galement enrichir le code docker de Traefik que j&rsquo;ai donn\u00e9 dans un post pr\u00e9c\u00e9dent. J&rsquo;ai mis les lignes \u00e0 ajouter en gras dans docker-compose.yml : <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Nextcloud service\n- \"traefik.http.routers.cloud.rule=Host(`cloud.webdot.fr`)\"\n- \"traefik.http.routers.cloud.entrypoints=https\"\n- \"traefik.http.routers.cloud.middlewares=https_redirect\"\n- \"traefik.http.routers.cloud.service=cloud@file\"\n- \"traefik.http.routers.cloud.tls=true\"\n- \"traefik.http.routers.cloud.tls.certresolver=letsencrypt\"\n<strong>- \"traefik.http.routers.cloud.middlewares=cloud-dav,secHeaders@file\"\n- \"traefik.http.middlewares.cloud-dav.replacepathregex.regex=^\/.well-known\/ca(l|rd)dav\"\n- \"traefik.http.middlewares.cloud-dav.replacepathregex.replacement=\/remote.php\/dav\/\"<\/strong><\/code><\/pre>\n\n\n\n<p>Il faut modifier le fichier services.toml \u00e9galement en y ajoutant le bloc en fin de fichier : il fait r\u00e9f\u00e9rence au routeur d\u00e9fini dans le docker-compose.yml (la ligne traefik.http.routers.cloud.middlewares=cloud-dav,<strong>secHeaders@file<\/strong>\u00ab\u00a0).<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><strong>&#91;http.middlewares]\n    &#91;http.middlewares.secHeaders]\n    &#91;http.middlewares.secHeaders.headers]\n    browserXssFilter = true\n    contentTypeNosniff = true\n    frameDeny = true\n    sslRedirect = true\n    #HSTS Configuration\n    stsIncludeSubdomains = true\n    stsPreload = true\n    stsSeconds = 31536000.0\n    customFrameOptionsValue = \"SAMEORIGIN\"\n<\/strong><\/code><\/pre>\n\n\n\n<p>Ces trois modifications permettront d&rsquo;\u00e9viter l&rsquo;apparition de warnings dans la vue d&rsquo;ensemble de la partie administration. En th\u00e9orie, avec tous ces ajouts, il n&rsquo;y aura plus de messages d&rsquo;avertissement. Ces modifications compensent les modifications d\u00e9crites ci-dessous qui n&rsquo;ont normalement plus lieu d&rsquo;\u00eatre. <\/p>\n\n\n\n<p>Pour l&rsquo;avertissement concernant les \u00ab\u00a0missing-indices, Nextcloud \u00e9tant dans un container, il faut utiliser la commande suivante :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>docker exec --user www-data CONTAINER_ID php occ db:add-missing-indices<\/code><\/pre>\n\n\n\n<p>Le container ID est retrouv\u00e9 tr\u00e8s facilement dans Portainer :<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.webdot.fr\/blog\/wp-content\/uploads\/2021\/03\/image-1.png\" alt=\"\" class=\"wp-image-371\" width=\"829\" height=\"328\" srcset=\"https:\/\/www.webdot.fr\/blog\/wp-content\/uploads\/2021\/03\/image-1.png 994w, https:\/\/www.webdot.fr\/blog\/wp-content\/uploads\/2021\/03\/image-1-300x119.png 300w, https:\/\/www.webdot.fr\/blog\/wp-content\/uploads\/2021\/03\/image-1-768x304.png 768w, https:\/\/www.webdot.fr\/blog\/wp-content\/uploads\/2021\/03\/image-1-590x233.png 590w\" sizes=\"(max-width: 829px) 100vw, 829px\" \/><\/figure><\/div>\n\n\n\n<p><s>Le plus simple est d&rsquo;utiliser l&rsquo;image docker de AppCentral. L&rsquo;image se retrouve dans Portainer :<\/s><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" loading=\"lazy\" width=\"1024\" height=\"28\" src=\"https:\/\/www.webdot.fr\/blog\/wp-content\/uploads\/2021\/02\/image-7-1024x28.png\" alt=\"\" class=\"wp-image-96\" srcset=\"https:\/\/www.webdot.fr\/blog\/wp-content\/uploads\/2021\/02\/image-7-1024x28.png 1024w, https:\/\/www.webdot.fr\/blog\/wp-content\/uploads\/2021\/02\/image-7-300x8.png 300w, https:\/\/www.webdot.fr\/blog\/wp-content\/uploads\/2021\/02\/image-7-768x21.png 768w, https:\/\/www.webdot.fr\/blog\/wp-content\/uploads\/2021\/02\/image-7-590x16.png 590w, https:\/\/www.webdot.fr\/blog\/wp-content\/uploads\/2021\/02\/image-7.png 1335w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><s>Je ne pr\u00e9cise ici que certaines sp\u00e9cificit\u00e9s par rapport \u00e0 l&rsquo;utilisation de docker, sinon il s&rsquo;agit d&rsquo;une installation \u00ab\u00a0standard\u00a0\u00bb de Nextcloud avec l&rsquo;utilisation de mysql que vous aurez install\u00e9 \u00e9videmment.<\/s><\/p>\n\n\n\n<p>Avant de d\u00e9marrer l&rsquo;installation, j&rsquo;ai cr\u00e9\u00e9 un r\u00e9pertoire Nextcloud \u00e0 la racine du volume2 (le disque dur de stockage). <s>A l&rsquo;installation du docker \u00e0 partir de AppCentral, il est cr\u00e9\u00e9 un r\u00e9pertoire \/volume1\/Docker\/Nextcloud qui est li\u00e9 au r\u00e9pertoire \/var\/www\/html de l&rsquo;image, si bien que les modifications qu&rsquo;on fait dans le r\u00e9pertoire \/volume1\/Docker\/Nextcloud sont persistantes. Il faut aussi cr\u00e9er (on peut le faire facilement dans portainer) un lien entre le r\u00e9pertoire \/volume2\/Nextcloud et le r\u00e9pertoire de l&rsquo;image \/var\/www\/html\/data.<\/s><\/p>\n\n\n\n<p>Il faut bien penser \u00e0 red\u00e9finir les droits dans le r\u00e9pertoire <s>\/volume1\/Docker\/Nextcloud et dans<\/s> \/volume2\/Nextcloud car ils vont \u00eatre attaqu\u00e9s par le serveur du container, qui par d\u00e9faut \u00e0 un identifiant user:group fix\u00e9 \u00e0 33:33, alors que le r\u00e9pertoire ci-dessus, au niveau du NAS, est fix\u00e9 \u00e0 admin:administrators soit 999:999. Il faut donc faire :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>root@astorus:\/volume1\/Docker\/Traefik# <s>chown -R 33:33 \/volume1\/Docker\/Nextcloud &amp;&amp; <\/s>chown -R 33:33 \/volume2\/Nextcloud<\/code><\/pre>\n\n\n\n<p><s>Il y a un autre pi\u00e8ge qui n\u00e9cessite la modification suivante sur le fichier de configuration. En effet on va obtenir un mauvais fonctionnement \u00e0 l&rsquo;utilisation de traefik\/https en l&rsquo;\u00e9tat. Cette erreur est r\u00e9solue en ajoutant les lignes suivantes dans le fichier config.php (situ\u00e9 dans \/volume1\/Docker\/Nextcloud\/config\/config.php) : <\/s><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><s>  'forwarded_for_headers' =&gt;                          \n  array (                                             \n    0 =&gt; 'HTTP_X_FORWARDED_FOR',                      \n  ),                                                  \n  'overwriteprotocol' =&gt; 'https',                     \n<\/s><\/code><\/pre>\n\n\n\n<p>Et normalement, une fois logg\u00e9 avec les identifiants donn\u00e9s au d\u00e9marrage (je ne d\u00e9taille pas toute la partie MySQL \u00e0 configurer aussi sp\u00e9cifiquement pour Nextcloud), on arrive sur la page principale de Nextcloud :<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.webdot.fr\/blog\/wp-content\/uploads\/2021\/03\/nextc-1024x732.png\" alt=\"\" class=\"wp-image-365\" width=\"840\" height=\"600\" srcset=\"https:\/\/www.webdot.fr\/blog\/wp-content\/uploads\/2021\/03\/nextc-1024x732.png 1024w, https:\/\/www.webdot.fr\/blog\/wp-content\/uploads\/2021\/03\/nextc-300x214.png 300w, https:\/\/www.webdot.fr\/blog\/wp-content\/uploads\/2021\/03\/nextc-768x549.png 768w, https:\/\/www.webdot.fr\/blog\/wp-content\/uploads\/2021\/03\/nextc-420x300.png 420w, https:\/\/www.webdot.fr\/blog\/wp-content\/uploads\/2021\/03\/nextc.png 1259w\" sizes=\"(max-width: 840px) 100vw, 840px\" \/><\/figure><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Vraiment, les ing\u00e9nieurs d&rsquo;Asus ne sont pas s\u00e9rieux. Nous en sommes fin f\u00e9vrier \u00e0 la version 21 de Nextcloud, qui n&rsquo;est compatible qu&rsquo;avec la version 10.2 de MariaDB. Or : le docker propos\u00e9 dans AppCentral &hellip;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6,7],"tags":[],"_links":{"self":[{"href":"https:\/\/www.webdot.fr\/blog\/wp-json\/wp\/v2\/posts\/95"}],"collection":[{"href":"https:\/\/www.webdot.fr\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.webdot.fr\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.webdot.fr\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.webdot.fr\/blog\/wp-json\/wp\/v2\/comments?post=95"}],"version-history":[{"count":28,"href":"https:\/\/www.webdot.fr\/blog\/wp-json\/wp\/v2\/posts\/95\/revisions"}],"predecessor-version":[{"id":400,"href":"https:\/\/www.webdot.fr\/blog\/wp-json\/wp\/v2\/posts\/95\/revisions\/400"}],"wp:attachment":[{"href":"https:\/\/www.webdot.fr\/blog\/wp-json\/wp\/v2\/media?parent=95"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.webdot.fr\/blog\/wp-json\/wp\/v2\/categories?post=95"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.webdot.fr\/blog\/wp-json\/wp\/v2\/tags?post=95"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}