2

Installer un serveur Nextcloud sous Debian

Un mémo sur comment installer Nextcloud, le fork de OwnCloud sur un serveur Debian.
Dans cet article deux méthode sont proposées, l’une avec un serveur web basé sur Nginx et PHP7 et l’autre basé sur Apache2 et PHP5 avec une installation simplifiée.

Installation et configuration de MariaDB

Pour les deux méthodes d’installation du serveur web pour Nextcloud, il faut au préalable installer le serveur de base de données et créer la future base pour Nextcloud.

  • Installation du serveur de base de données MariaDB :
  • apt install mariadb-server
  • Exécuter la commande mysql_secure_installation, pour sécuriser à minima l’installtion de MariaDB :
  • mysql_secure_installation
  • Ajout de la base de données pour le futur NexCloud :
    • Se connecter au serveur MariaDB :
    • mysql -u root -p
    • Créer la base de données pour Nextcloud :
    • CREATE DATABASE nextcloud; 
    • Ajouter un utilisateur pour cette base de données :
    • GRANT ALL PRIVILEGES ON nextcloud.* TO 'USER'@'localhost' IDENTIFIED BY 'SuperMDP';
    • Recharger les privilèges :
    • FLUSH PRIVILEGES;
    • Quitter :
    • quit

Installer Nextcloud sous Debian avec Nginx et PHP 7

Dans cette première partie, le serveur Nextcloud est installé sur un serveur web basé sur Nginx et PHP7.

Installation du serveur web Nginx

Pour le serveur web Nginx, il est possible d’installer la version présente dans les dépôts officiels mais dans cet article, la version de Nginx sera la dernière version stable disponible à partir des dépôts de Nginx.

  • Ajout du dépôts Nginx :
    • Pour Debian Jessie :
    • echo "deb http://nginx.org/packages/mainline/debian/ jessie nginx" > /etc/apt/sources.list.d/nginx.list
    • Pour Debian Stretch :
    • echo "deb http://nginx.org/packages/mainline/debian/ stretch nginx" > /etc/apt/sources.list.d/nginx.list
  • Téléchargement de la clé :
  • wget http://nginx.org/keys/nginx_signing.key
  • Ajout de la clé :
  • apt-key add nginx_signing.key
  • Mise à jour :
  • apt update
  • Installation du serveur web Nginx :
  • apt install nginx

    Installation de PHP 7

  • Installation de PHP 7:
  • Configuration de PHP 7 :
    • Modification de php.ini :
    • nano /etc/php/7.0/fpm/php.ini
    • Dé-commenter la ligne :
    • cgi.fix_pathinfo=0
    • Copie de www.conf vers nextcloud.conf :
    • cp /etc/php/7.0/fpm/pool.d/www.conf /etc/php/7.0/fpm/pool.d/nextcloud.conf
    • Renommer www.conf en www.old :
    • mv /etc/php/7.0/fpm/pool.d/www.conf /etc/php/7.0/fpm/pool.d/www.old
    • Mofifier la ligne du fichier nextcloud.conf :
    • listen = /run/php/php7.0-fpm.sock

      par

      listen = 127.0.0.1:9000

      et

      user=www-data

      par

      user=nextcloud

Certificat TLS Let’s Encrypt

Pour créer un certificat TLS pour son domaine, voir cet article : https://memo-linux.com/installer-certbot-sous-debian/

Configuration du server block pour NexCloud

  • Exemple de server block inspiré de la documentation officielle de Nextcloud :
  • nano /etc/nginx/conf.d/nextcloud.conf
    upstream php-handler {
        server 127.0.0.1:9000;
        }
    
    server {
        listen 80;
        server_name cloud.example.com;
        # enforce https
        return 301 https://$server_name$request_uri;
    }
    
    server {
        listen 443 ssl http2;
        server_name cloud.example.com;
     
        ###certificat Let's Encrypt
        ssl_certificate /etc/letsencrypt/live/cloud.exemple.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/cloud.exemple.com/privkey.pem;
        ###ajout perso
        ssl_protocols TLSv1.2;
        ssl_dhparam  /etc/ssl/certs/dhparams.pem;
        ssl_session_tickets off;
        ssl_stapling on;
        ssl_stapling_verify on;
        ssl_trusted_certificate /etc/letsencrypt/live/cloud.exemple.com/fullchain.pem;
        resolver 127.0.0.1 9.9.9.9;##j'ai mon propre serveur dns en local
        
        add_header Strict-Transport-Security "max-age=15768000;
        includeSubDomains; preload;";
        add_header X-Content-Type-Options nosniff;
        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;
    
        # Path to the root of your installation
        root /var/www/html/nextcloud/;
    
        location = /robots.txt {
            allow all;
            log_not_found off;
            access_log off;
        }
    
        # The following 2 rules are only needed for the user_webfinger app.
        # Uncomment it if you're planning to use this app.
        #rewrite ^/.well-known/host-meta /public.php?service=host-meta last;
        #rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json
        # last;
    
        location = /.well-known/carddav {
          return 301 $scheme://$host/remote.php/dav;
        }
        location = /.well-known/caldav {
          return 301 $scheme://$host/remote.php/dav;
        }
    
        # set max upload size
        client_max_body_size 512M;
        fastcgi_buffers 64 4K;
    
        # Enable gzip but do not remove ETag headers
        gzip on;
        gzip_vary on;
        gzip_comp_level 4;
        gzip_min_length 256;
        gzip_proxied expired no-cache no-store private no_last_modified no_etag auth;
        gzip_types application/atom+xml application/javascript application/json application/ld+json application/manifest+json application/rss+xml application/vnd.geo+json application/vnd.ms-fontobject application/x-font-ttf application/x-web-app-manifest+json application/xhtml+xml application/xml font/opentype image/bmp image/svg+xml image/x-icon text/cache-manifest text/css text/plain text/vcard text/vnd.rim.location.xloc text/vtt text/x-component text/x-cross-domain-policy;
    
            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/.+)\.php(?:$|/) {
            fastcgi_split_path_info ^(.+\.php)(/.*)$;
            include fastcgi_params;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            fastcgi_param PATH_INFO $fastcgi_path_info;
            fastcgi_param HTTPS on;
            #Avoid sending the security headers twice
            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;
        }
    
        # Adding the cache control header for js and css files
        # Make sure it is BELOW the PHP block
        location ~ \.(?:css|js|woff|svg|gif)$ {
            try_files $uri /index.php$uri$is_args$args;
            add_header Cache-Control "public, max-age=15778463";
            add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;";
            add_header X-Content-Type-Options nosniff;
            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;
            # Optional: Don't log access to assets
            access_log off;
        }
    
        location ~ \.(?:png|html|ttf|ico|jpg|jpeg)$ {
            try_files $uri /index.php$uri$is_args$args;
            # Optional: Don't log access to other assets
            access_log off;
        }
    }
    

    Installation de NexCloud

    La première parie est le téléchargement du fichier zip de Nextcloud, puis l’installation proprement dite.

    Mise ne place de Nexcloud

  • Ajouter un utilisateur dédié à NexCloud et l’ajouter au groupe www-data :
useradd nextcloud
usermod -a -G www-data nextcloud
  • Se placer dans le répertoire /var/www/html/
  • cd /var/www/html/
  • Télécharger lu fichier zip :
  • wget https://download.nextcloud.com/server/releases/nextcloud-12.0.4.zip
  • Décompression du zip :
  • unzip nextcloud-12.0.4.zip
  • Changer les droits d’appartenance au répertoire nextcloud :
  • chown -R nextcloud:www-data nextcloud/
  • Supprimer le fichier zip :
  • rm nextcloud-12.0.4.zip

    Installation de Nextcloud

    • Relancer les service Nginx et php7.0-fpm :
    • systemctl restart nginx
      systemctl restart php7.0-fp
    • Ouvrir un navigateur internet puis saisir l’url du serveur : https://cloud.exemple.com
    • Renseigner les différents champs puis cliquer sur « Finish Setup » :
    • Le serveur Nextcloud est opérationnel :
    • Installation simplifiée de Nextcloud via apt

      Cette installation de Nextcloud est basée sur le serveur web Apache2 et PHP5 et installé via apt.

    • Ajout du dépôt pour Nextcloud :
      • Ajout du dépôt pour Debian Jessie :
      • echo "deb http://apt.jurisic.org/debian/ jessie main contrib non-free" > /etc/apt/sources.list.d/nextcloud.list
      • Ajout du dépôt pour Debian Strecth :
      • echo "deb http://apt.jurisic.org/debian/ stretch main contrib non-free" > /etc/apt/sources.list.d/nextcloud.list
    • Récupération de la clé :
    • wget -q http://apt.jurisic.org/Release.key -O- | apt-key add -
    • Mise à jour des dépôts :
    • apt update
    • Installation du serveur Nexcloud :
    • apt install nextcloud-server
    • Pour installer le client Nexcloud :
    • apt install nextcloud-client

    Partager l'article :





    fred

    "Dire que l'on s'en fiche du droit à la vie privée sous prétexte qu'on a rien à cacher, c'est comme déclarer que l'on se fiche du droit à la liberté d'expression sous prétexte qu'on a rien à dire." Edward Snowden

    2 Comments

    1. De mon côté tout se passe bien jusqu’au moment d’ouvrir l’URL, je tombe sur un message ‘No Input file Specified »
      J’ai récupéré ci-dessus la conf pour Nginx, et modifier comme il se soit avec mon domaine.
      Par contre mon dossier nextcloud est à la racine de /root/ j’ai donc modifié le chemin pour root.
      J’ai du coup un doute sur la partie php:
      location ~ ^/(?:index|remote|public|cron|core/ajax/update|status|ocs/v[12]|updater/.+|ocs-provider/.+)\.php(?:$|/) {
      fastcgi_split_path_info ^(.+\.php)(/.*)$;
      include fastcgi_params;
      fastcgi_param SCRIPT_FILENAME /root/nextcloud/index.php;
      fastcgi_param PATH_INFO $fastcgi_path_info;
      fastcgi_param HTTPS on;
      #Avoid sending the security headers twice
      fastcgi_param modHeadersAvailable true;
      fastcgi_param front_controller_active true;
      fastcgi_pass php-handler;
      fastcgi_intercept_errors on;
      fastcgi_request_buffering off;
      Merci pour votre aide

    2. Bonjour Dany,
      il faut éviter de travailler dans le répertoire /root car c’est le répertoire personnel de l’utilisateur root. Soit déplacer le répertoire nextcloud dans /var/www/ ou dans /home/$user et appliquer les droits adéquats.
      Je pense que le problème vient de cette ligne :
      fastcgi_param SCRIPT_FILENAME /root/nextcloud/index.php;
      faut laisser :
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

    Laisser un commentaire

    Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *