Nextcloud est le fork d’ownCloud lancé par son propre créateur  Frank Karlitschek. Le projet se veut plus ouvert que son prédécesseur et apporte de nouvelles fonctionnalités jusqu’ici disponibles uniquement dans la version entreprise d’ownCloud. Suivez le guide pour installer Nextcloud sur votre serveur !

Pré-requis

  • Un serveur sous Debian/Ubuntu
  • LEMP en place et configuré (voir ce tuto)
  • Un peu de patience…

Création de la base de données

On se connecte à notre base de données en ligne de commande avec l’utilisateur root :

mysql -u root -p

On va maintenant créer une base de données nextcloud ainsi que l’utilisateur associé. Pensez à modifier le mot de passe par celui de votre choix.

CREATE DATABASE nextcloud;
GRANT ALL PRIVILEGES ON nextcloud.*
TO 'nextcloud'@'localhost'
IDENTIFIED BY 'mot_de_passe';
FLUSH PRIVILEGES;
exit;

Retenez bien les informations indiquées car elles seront nécessaires lors de la mise en route de votre installation Nextcloud.

Configuration de nginx

Nous allons partir du principe que la configuration de base de votre serveur nginx est faite. Voici donc un exemple de vhost pour Nextcloud, basé sur les recommandations de la documentation officielle. Nous installons ici Nextcloud sur un sous-domaine cloud.domain.tld avec un certificat généré via Let’s Encrypt.

nano /etc/nginx/sites-enabled/owncloud.conf
upstream php-handler {
    #server 127.0.0.1:9000;
    server unix:/run/php/php7.0-fpm.sock;
}

server {
    listen 80;
    server_name cloud.domain.tld;
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl;
    server_name cloud.domain.tld;

    ssl_certificate /etc/letsencrypt/live/domain.tld/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/domain.tld/privkey.pem;

    add_header X-Content-Type-Options nosniff;
    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Robots-Tag none;
    add_header X-Download-Options noopen;
    add_header X-Permitted-Cross-Domain-Policies none;

    root /var/www/nextcloud/;

    location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
    }

    location = /.well-known/carddav {
      return 301 $scheme://$host/remote.php/dav;
    }
    location = /.well-known/caldav {
      return 301 $scheme://$host/remote.php/dav;
    }

    client_max_body_size 512M;
    fastcgi_buffers 64 4K;

    gzip off;

    error_page 403 /core/templates/403.php;
    error_page 404 /core/templates/404.php;

    location / {
        rewrite ^ /index.php$uri;
    }

    location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)/ {
        deny all;
    }
    location ~ ^/(?:\.|autotest|occ|issue|indie|db_|console) {
        deny all;
    }

    location ~ ^/(?:index|remote|public|cron|core/ajax/update|status|ocs/v[12]|updater/.+|ocs-provider/.+|core/templates/40[34])\.php(?:$|/) {
        include fastcgi_params;
        fastcgi_split_path_info ^(.+\.php)(/.*)$;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_param HTTPS on;
        fastcgi_param modHeadersAvailable true;
        fastcgi_param front_controller_active true;
        fastcgi_pass php-handler;
        fastcgi_intercept_errors on;
        fastcgi_request_buffering off;
    }

    location ~ ^/(?:updater|ocs-provider)(?:$|/) {
        try_files $uri/ =404;
        index index.php;
    }

    location ~* \.(?:css|js)$ {
        try_files $uri /index.php$uri$is_args$args;
        add_header Cache-Control "public, max-age=7200";
        add_header X-Content-Type-Options nosniff;
        add_header X-Frame-Options "SAMEORIGIN";
        add_header X-XSS-Protection "1; mode=block";
        add_header X-Robots-Tag none;
        add_header X-Download-Options noopen;
        add_header X-Permitted-Cross-Domain-Policies none;
        access_log off;
    }

    location ~* \.(?:svg|gif|png|html|ttf|woff|ico|jpg|jpeg)$ {
        try_files $uri /index.php$uri$is_args$args;
        access_log off;
    }
}

Sans oublier de redémarrer nginx pour prendre en compte les modifications :

service nginx restart

Installation de Nextcloud

Nous allons maintenant passer à l’installation de Nextcloud. On va se placer dans le répertoire /var/www, télécharger l’archive de la dernière version et l’extraire. Pensez à vérifier si une nouvelle version est disponible directement sur le site et adaptez les commandes en conséquence.

cd /var/www
wget https://download.nextcloud.com/server/releases/nextcloud-10.0.0.zip
unzip nextcloud-10.0.0.zip

Avant de lancer le setup, nous allons mettre en place les bonnes permissions sur les fichiers de Nextcloud. Pour cela, la documentation officielle propose un petit script à lancer avant d’accéder à la page d’installation.

nano /tmp/nextcloudperms.sh
#!/bin/bash
ocpath='/var/www/nextcloud'
htuser='www-data'
htgroup='www-data'
rootuser='root'

printf "Creating possible missing Directories\n"
mkdir -p $ocpath/data
mkdir -p $ocpath/assets
mkdir -p $ocpath/updater

printf "chmod Files and Directories\n"
find ${ocpath} -type f -print0 | xargs -0 chmod 0640
find ${ocpath} -type d -print0 | xargs -0 chmod 0750

printf "chown Directories\n"
chown -R ${rootuser}:${htgroup} ${ocpath}/
chown -R ${htuser}:${htgroup} ${ocpath}/apps/
chown -R ${htuser}:${htgroup} ${ocpath}/assets/
chown -R ${htuser}:${htgroup} ${ocpath}/config/
chown -R ${htuser}:${htgroup} ${ocpath}/data/
chown -R ${htuser}:${htgroup} ${ocpath}/themes/
chown -R ${htuser}:${htgroup} ${ocpath}/updater/

chmod +x ${ocpath}/occ

printf "chmod/chown .htaccess\n"
if [ -f ${ocpath}/.htaccess ]
 then
  chmod 0644 ${ocpath}/.htaccess
  chown ${rootuser}:${htgroup} ${ocpath}/.htaccess
fi
if [ -f ${ocpath}/data/.htaccess ]
 then
  chmod 0644 ${ocpath}/data/.htaccess
  chown ${rootuser}:${htgroup} ${ocpath}/data/.htaccess
fi
cd /tmp
chmod +x nextcloudperms.sh && ./nextcloudperms.sh

Les permissions sont maintenant mises en place sur les fichiers de l’application et nous pouvons passer à la phase finale de l’installation en lançant le wizard d’installation. On se rend donc sur https://cloud.domain.tld pour créer l’utilisateur administrateur et indiquer les paramètres de la base de données créée plus haut.

Nextcloud Wizard


Votre installation de Nextcloud est maintenant terminée. Si vous êtres un habitué d’ownCloud, vous ne devrez pas être trop dépaysé puisque l’interface est strictement identique. Seul un léger refresh graphique a été effectué. N’hésitez pas à parcourir les différents menus pour découvrir les quelques fonctions exclusives à Nextcloud.

63 Commentaires

  1. Bonjour,
    Merci pour ce tuto qui est très bien écrit. cependant, je rencontre un problème au redemarrage de nginx après avoir créer le fichier owncloud.conf.
    j’ai bien sûr fait le tuto pour installer LEM. mais je ne comprend pas l’erreur, il faut dire que je suis newbie dans ce domaine, est ce quelqu’un pourrais eclairer ma lanterne Merci pour votre aide. Krzysiu
    ps : je continu de chercher

      • Merci de m’avoir répondu… voici :
        apres le : service nginx restart
        Job for nginx.service failed. See ‘systemctl status nginx.service’ and ‘journalctl -xn’ for details.

        puis je fais :journalctl -xn
        ce qui donne :
        — L’unité (unit) nginx.service a commencé à démarrer.
        déc. 13 13:32:29 debian nginx[2079]: nginx: [emerg] BIO_new_file(« /etc/letsencrypt/live/domain.tld/fullchain.pem ») failed (SSL: error:0200
        déc. 13 13:32:29 debian nginx[2079]: nginx: configuration file /etc/nginx/nginx.conf test failed
        déc. 13 13:32:29 debian systemd[1]: nginx.service: control process exited, code=exited status=1
        déc. 13 13:32:29 debian systemd[1]: Failed to start A high performance web server and a reverse proxy server.
        — Subject: L’unité (unit) nginx.service a échoué
        — Defined-By: systemd
        — Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel

        — L’unité (unit) nginx.service a échoué, avec le résultat failed.
        déc. 13 13:32:29 debian systemd[1]: Unit nginx.service entered failed state.

        Et ce que cela te parles ?

  2. Bonjour, et tout d’abord MERCI pour les tutos mis à disposition !!!
    Deuxièmement, arrivé à la fin de ce tuto, je n’arrive pas à accéder à cloud.nomdomaine.fr … En effet, je suppose qu’il faut faire une manip au niveau des DNS sur ovh mais je ne sais pas lesquelles…

    Pourriez-vous m’éclairer ?

    Merci

      • Bonjour,

        En effet, il suffisait d’attendre la nuit pour la maj des DNS … Quel impatient je suis !

        Merci beaucoup pour votre réponse ! (et super site au passage !)

        • En effet, une propagation DNS peut prendre jusqu’à 48h. Normalement, elle est propagée plus vite. Il faut donc toujours attendre un peu avant de tester.

  3. Bonjour g reussi l’installation de nextcloud avec votre tuto.
    Cependant g utilisé la version 7 de php. J’ai une erreur que je n’arrive pas a resoudre même en utilisant le document d’installation Pouvez vous m’aider? :

    Avertissements de sécurité & configuration

    php ne semble pas être configuré de manière à récupérer les valeurs des variables d’environnement. Le test de la commande getenv(« PATH ») retourne seulement une réponse vide.
    Veuillez consulter la documentation d’installation ↗ pour savoir comment configurer php sur votre serveur, en particulier en cas d’utilisation de php-fpm.

    L’en-tête HTTP « Strict-Transport-Security » n’est pas configurée à « 15552000 » secondes. Pour renforcer la sécurité nous recommandons d’activer HSTS comme décrit dans notre Guide pour le renforcement et la sécurité.

    Aucun cache de la mémoire n’est configuré. Si possible, configurez un « memcache » pour augmenter les performances. Pour plus d’information consultez la documentation.

    Merci

  4. Bonjour j’ai le même probleme que krzyslu , je n’arrive pas à redémarrer Nginx pour qu’il prenne en compte les modifications du fichier de configuration.
    Merci de me dire comment puis-je le résoudre

  5. Bonjour Édouard, j’ai bien suivi ton tuto mais à la dernière étape; après avoir valider les données je me retrouve avec une belle erreur 404 et impossible donc de valider l’installation. Un conseil ?

    • Hello Clu, le problème peut venir de plusieurs choses.
      Un 404 indique que nginx n’arrive pas à trouver le fichier d’index que le navigateur essaye d’atteindre. Peux-tu nous donner un aperçu des logs de nginx ?

      • J’ai effectué un nouveau test avant de te répondre et je tombe bien sur une 404.
        tail -f /var/log/nginx/error.log
        2017/08/22 15:08:37 [error] 15610#15610: *1 FastCGI sent in stderr: « Unable to open primary script: /var/www/info.php (No such file or directory) » while reading response header from upstream, client: 192.168.1.15, server: localhost, request: « GET /info.php HTTP/1.1 », upstream: « fastcgi://unix:/run/php/php7.0-fpm.sock: », host: « 192.168.1.16 »
        2017/08/22 15:11:35 [error] 15610#15610: *7 directory index of « /var/www/ » is forbidden, client: 192.168.1.15, server: localhost, request: « GET / HTTP/1.1 », host: « 192.168.1.16 »
        2017/08/22 15:14:05 [warn] 15711#15711: conflicting server name « localhost » on 0.0.0.0:80, ignored
        2017/08/22 15:14:05 [warn] 15714#15714: conflicting server name « localhost » on 0.0.0.0:80, ignored
        2017/08/22 15:16:58 [error] 15719#15719: *1 directory index of « /var/www/ » is forbidden, client: 192.168.1.15, server: localhost, request: « GET / HTTP/1.1 », host: « 192.168.1.16 »
        2017/08/22 15:17:38 [warn] 416#416: conflicting server name « localhost » on 0.0.0.0:80, ignored
        2017/08/22 15:17:38 [warn] 449#449: conflicting server name « localhost » on 0.0.0.0:80, ignored

        Dans les erreurs je n’ai que ça.

        • Il faudrait que tu ajoutes deux lignes pour loguer les accès à Nextcloud dans ton fichier de configuration nginx :
          access_log /var/log/nginx/nextcloud-access.log combined;
          error_log /var/log/nginx/nextcloud-error.log error;

          Ensuite tu essayes d’accéder et tu cat les logs ici.

          A première je dirais qu’il y a un problème de configuration de ton php. Tu as suivi notre tuto LEMP pour l’installation de celui-ci ?

          • J’ai bien suivi le tuto à la lettre c’est justement ça que je comprend pas, j’ai simplement modifier les « domain.tld » par « localhost » avant la mise en production du serveur. Par contre, vu la sortie de Debian 9 pour Raspberry, ne serait il pas intéressant de faire une m-à-j du tuto LEMP et celui pour Nextcloud ? Je suis même prêt à jouer le tipeur pour motiver les troupes lol

            Voici les logs:
            sudo tail -f /var/log/nginx/error.log
            2017/08/22 15:08:37 [error] 15610#15610: *1 FastCGI sent in stderr: « Unable to open primary script: /var/www/info.php (No such file or directory) » while reading response header from upstream, client: 192.168.1.15, server: localhost, request: « GET /info.php HTTP/1.1 », upstream: « fastcgi://unix:/run/php/php7.0-fpm.sock: », host: « 192.168.1.16 »
            2017/08/22 15:11:35 [error] 15610#15610: *7 directory index of « /var/www/ » is forbidden, client: 192.168.1.15, server: localhost, request: « GET / HTTP/1.1 », host: « 192.168.1.16 »
            2017/08/22 15:14:05 [warn] 15711#15711: conflicting server name « localhost » on 0.0.0.0:80, ignored
            2017/08/22 15:14:05 [warn] 15714#15714: conflicting server name « localhost » on 0.0.0.0:80, ignored
            2017/08/22 15:16:58 [error] 15719#15719: *1 directory index of « /var/www/ » is forbidden, client: 192.168.1.15, server: localhost, request: « GET / HTTP/1.1 », host: « 192.168.1.16 »
            2017/08/22 15:17:38 [warn] 417#417: conflicting server name « localhost » on 0.0.0.0:80, ignored
            2017/08/22 15:17:38 [warn] 455#455: conflicting server name « localhost » on 0.0.0.0:80, ignored
            2017/08/23 20:48:56 [warn] 1155#1155: conflicting server name « localhost » on 0.0.0.0:80, ignored
            2017/08/23 20:48:56 [warn] 1157#1157: conflicting server name « localhost » on 0.0.0.0:80, ignored

          • Hello Clu,

            Pourrais-tu me dire si tu as d’autres services web qui tournent sur cette machine?

            Nous pouvons tout à fait envisager de mettre à jour ce tutoriel pour l’utilisation de Debian 9. Même si au final, cela ne diffère pas beaucoup.

          • C’est une machine nouvellement installer donc il n’y a rien mise à part les services que le tuto LEMP m’a demander d’installer; sur le serveur qui sera en production il y aura un serveur DNS qui tourneras en parallèle mais ma machine de test est entièrement vierge.
            Oui je m’en doute mais vu les nouveautés de Stretch (comme php 7 et mariadb par défaut, etc.), il doit surement y avoir quelques nuances, non ?

          • Cela ne change pratiquement rien de Debian 8 à Debian 9. A part ce que tu as cité.

            Pour le reste, je vois bien le log « Conflicting server name localhost » donc tu dois avoir deux fichiers de configuration avec localhost à mon avis.

          • Les erreurs avec le localhost ne sont pas vraiment la cause à mon sens. J’ai ces erreurs de temps en temps sans que ça perturbe le fonctionnement de mon nginx.

            Lorsque tu suis le tutoriel LEMP, la page info.php s’affiche correctement ?

  6. Bonjour je suid newbie et j’ai suivi vos tutos lemp et celui-ci sur raspbian lite.
    j’ai installé let’s encrypt avec https://www.supinfo.com/articles/single/3558-installer-certificat-ssl-nginx-avec-let-s-encrypt. résultat j’arrive à faire pointer mon domaine en https sur un repertoire dans /var/www/html/nomdurep/index.php dans lequel il y a <?php phpinfo();.
    cela marche sans problème sauf que quand je copie dans ce rep les fichier nextcloud 12
    là ne considère pas le php de index.php et il me propose le téléchargement de index.php…

    à noter que j'ai ajouter les lignes du tuto lemp /etc/nginx/nginx.conf après avoir obtenu un accès fonctionnel à la page index.php dans lequel il y a <?php phpinfo();

    je teste chaque ajout avec
    sudo nginx -t

    puis si c ok
    sudo service nginx restart

    avec cette technique j'ai du commenter

    [code]
    # !!!! déclenche une erreur nginx
    #location / {
    #rewrite ^ /index.php$uri;
    #}
    location ~ ^/(?:index|remote|public|cron|core/ajax/update|status|ocs/v[12]|updater/.+|ocs-provider/.+|core/templates/40[34])\.php(?:$|/) {
    # !!!! déclenche une erreur nginx
    #include fastcgi_params;

    fastcgi_split_path_info ^(.+\.php)(/.*)$;

    # !!!! déclenche une erreur nginx
    #fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

    fastcgi_param PATH_INFO $fastcgi_path_info;
    fastcgi_param HTTPS on;
    fastcgi_param modHeadersAvailable true;
    fastcgi_param front_controller_active true;

    # !!!! déclenche une erreur nginx
    #fastcgi_pass php-handler;

    fastcgi_intercept_errors on;
    fastcgi_request_buffering off;
    }
    [/code]
    les erreurs en lien avec php peuvent venir du fait que j'ai une déclaration php plus bas

    pouvez-vous me dire pourquoi nginx refuse d'interpréter index.php de nextcloud alors qu'il interprète index.php dans lequel il y a <?php phpinfo(); ?

    merci encore pour votre réponse
    green.

    • Hello !
      Je vous recommande d’utiliser directement notre fichier de configuration.
      Ensuite il faut adapter la configuration de php en fonction de votre installation en jouant sur le php handler en début de fichier.

      • merci pour cette réponse j’ai effectivement suivi le tuto, j’ai installé nextcloud,
        j’arrive à me connecter me balader dans l’interface
        mais impossible d’uploader des fichiers « Service Unavaible ».
        je me demande si ce n’est pas juste un pb de droits

        dans
        sudo nano /tmp/nextcloudperms.sh
        est-ce qu’il faut changer
        rootuser=’root’
        par mon nom d’utilisateur raspbian ?
        ?
        car j’ai testé root et mon nom d’utilisateur et j’ai « opération non permise »
        quand j’éxécute
        sudo chmod +x nextcloudperms.sh && ./nextcloudperms.sh
        ?
        est-ce que le problème d’upload et lié aux des droits sur /nextcloud/data/ ?
        et comment modifier ?
        ( note: je suis arrivée à transmettre une note sur le serveur depuis l’appli android notes mais ensuite celle-ci c’est dupliquer indéfiniment)
        avez-vous une solution ?
        merci

          • drwxr-xr-x 11 www-data www-data 4096 oct. 8 17:02 appdata_ocnfgmvmtdzx
            drwxr-xr-x 7 www-data www-data 4096 oct. 10 10:13 cecile
            drwxr-xr-x 2 www-data www-data 4096 oct. 8 16:39 files_external

          • Donc, c’est bien le service web propriétaire du contenu. C’est correct. Il va falloir regarder d’un autre coté. Quel est le contenu du fichier /tmp/nexcloudperms.sh ?

          • « app »: »no app in context », »method »: »PUT », »url »: »\/remote.php\/webdav\/Photos\/temp.jpg », »message »: »Encryption module \ »\ » not found, file will be stored unencrypted (No default encryption module defined) », »userAgent »: »Mozilla\/5.0 (Windows NT 6.1; Win64; x64; rv:57.0) Gecko\/20100101 Firefox\/57.0″, »version »: »12.0.3.3″}

          • « app »: »webdav », »method »: »PUT », »url »: »\/remote.php\/webdav\/Photos\/temp.jpg », »message »: »Exception: {\ »Exception\ »:\ »Sabre\\\\DAV\\\\Exception\\\\ServiceUnavailable\ »,\ »Message\ »:\ »Encryption not ready: No default encryption module defined\ »,\ »Code\ »:0,\ »Trace\ »:\ »#0 \\\/var\\\/www\\\/html\\\/nextcloud\\\/apps\\\/dav\\\/lib\\\/Connector\\\/Sabre\\\/File.php(159): OCA\\\\DAV\\\\Connector\\\\Sabre\\\\File->convertToSabreException(Object(OC\\\\Encryption\\\\Exceptions\\\\ModuleDoesNotExistsException))

          • c’est bon le pb est résolu
            j’ai suivis certains conseils et j’ai trouvé dans nextcloud
            dans administration > chiffrement il était coché « Activer le chiffrement côté serveur « .
            cela ne marche si on a pas activé « Default encryption module  » dans « applications ».
            merci encore.

  7. Est-il possible de modifier l’emplacement des data? Il faut normalement changer le champ directory dans /var/www/nextcloud/config/config.php, mais avec les différents scripts et droits appliqués, comment le changer?

    • Oui tout à fait.
      Deux choix possibles :
      1°) Choisir le répertoire au moment de l’installation (il faut lui mettre les bons droits).
      2°) Créer un lien symbolique sur le répertoire Data qui pointera vers le répertoire voulu.

  8. Bonjour,
    Tout d’abord merci pour le tuto.
    Une petite question cependant. Comment faire pour configurer une adresse de type hhtp://www.mondomaine.fr/nextcloud ?
    D’avance merci 🙂

LAISSER UN COMMENTAIRE

Merci d'entrer votre commentaire !
Merci d'entrer votre nom

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.