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
mysql_secure_installation
- Se connecter au serveur MariaDB :
mysql -u root -p
CREATE DATABASE nextcloud;
GRANT ALL PRIVILEGES ON nextcloud.* TO 'USER'@'localhost' IDENTIFIED BY 'SuperMDP';
FLUSH PRIVILEGES;
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
wget http://nginx.org/keys/nginx_signing.key
apt-key add nginx_signing.key
apt update
apt install nginx
Installation de PHP 7
- Installation de PHP 7:
- Pour installer PHP 7 sous Debian 8, suivre cette procédure : https://memo-linux.com/debian-8-installer-php7-simplement-avec-les-depots-dotdeb/
- Sous Debian Stretch :
apt install php7.0-fpm php7.0
- Installation des dépendances PHP pour NexCloud :
apt install php7.0-gd php7.0-json php7.0-mysql php7.0-curl php7.0-mbstring php7.0-intl php7.0-mcrypt php7.0-xml php7.0-zip
- Modification de php.ini :
nano /etc/php/7.0/fpm/php.ini
cgi.fix_pathinfo=0
cp /etc/php/7.0/fpm/pool.d/www.conf /etc/php/7.0/fpm/pool.d/nextcloud.conf
mv /etc/php/7.0/fpm/pool.d/www.conf /etc/php/7.0/fpm/pool.d/www.old
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 en place de Nexcloud
- Ajouter un utilisateur dédié à NexCloud et l’ajouter au groupe www-data :
useradd nextcloud usermod -a -G www-data nextcloud
/var/www/html/
cd /var/www/html/
wget https://download.nextcloud.com/server/releases/nextcloud-12.0.4.zip
unzip nextcloud-12.0.4.zip
chown -R nextcloud:www-data nextcloud/
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
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
wget -q http://apt.jurisic.org/Release.key -O- | apt-key add -
apt update
apt install nextcloud-server
apt install nextcloud-client
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
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;
Bonsoir, Ayant suivi votre tuto à la lattre.
lorsque je tape https://cloud.mondomaine.fr j’ai une page qui me dis :
Impossible de trouver l’adresse IP du serveur de cloud.mondomaine.fr.
Essayez d’exécuter les diagnostics réseau de Windows.
DNS_PROBE_FINISHED_NXDOMAIN
Bonjour,
Super tuto ! Felicitations!
Cependant le site n’est pas accessible si on lais le ` addheader … includeSubDomains; preload;preload` dans le fichier `/etc/nginx/conf.d/nextcloud.conf`.
Sinon dans la doc, il est mentionné d’utiliser un système de cache comme `opcache`, dans le tuto on ne mentionne rien à ce sujet ?
En tout cas cela m’as bien aidé, merci!
Mise ne place de Nexcloud
Ajouter un utilisateur dédié à NexCloud et l’ajouter au groupe www-data :
à rectifier Mise en place de Nexcloud