Nextcloud est un logiciel gratuit (open source) de type dropbox, un fork du projet ownCloud. Nextcloud est écrit en PHP et JavaScript, il prend en charge de nombreux systèmes de bases de données comme MySQL/MariaDB, PostgreSQL, la base de données Oracle et SQLite.
Pour garder vos fichiers synchronisés entre le bureau et le serveur, Nextcloud propose des applications pour les bureaux Windows, Linux et Mac et une application mobile pour Android et iOS.
Dans ce tutoriel, nous vous montrons comment installer Nextcloud 17 avec le serveur web Nginx, PHP 7.3 et la base de données MariaDB sur un serveur CentOS 8. Nous allons installer Nextcloud et le sécuriser avec un certificat SSL Let's Encrypt gratuit.
Prérequis
Pour ce guide, nous allons installer Nextcloud sur le serveur CentOS 8 avec 2 Go de RAM, 25 Go d'espace libre et 2 processeurs.
Ce que nous allons faire :
- Installer le serveur Web Nginx
- Installer PHP-FPM 7.3
- Configurer PHP-FPM 7.3
- Installer et configurer la base de données MariaDB
- Générer SSL Letsencrypt
- Télécharger Nextcloud 17
- Configurer Nginx Virtualhost pour Nextcloud
- Configurer SELinux pour Nextcloud
- Post-installation de Nextcloud
Étape 1 - Installer Nginx
Tout d'abord, nous allons installer le serveur Web Nginx sur le serveur CentOS 8 et ouvrir les ports HTTP et HTTPS sur le pare-feu.
Installez Nginx à partir du référentiel AppStream à l'aide de la commande dnf ci-dessous.
sudo dnf install nginx
Une fois l'installation terminée, démarrez le service nginx et ajoutez-le au démarrage du système.
systemctl start nginx
systemctl enable nginx
Vérifiez maintenant l'état du service nginx à l'aide de la commande ci-dessous.
systemctl status nginx
Vous obtiendrez que le service nginx est opérationnel sur le serveur CentOS 8.
Ensuite, nous ajouterons les services HTTP et HTTPS au pare-feu.
Ajoutez les services HTTP et HTTPS au firewalld à l'aide de la commande firewall-cmd ci-dessous.
firewall-cmd --add-service=http --permanent
firewall-cmd --add-service=https --permanent
Après cela, rechargez les services du pare-feu.
firewall-cmd --reload
Par conséquent, vous avez installé avec succès le serveur Web Nginx et ouvert les ports HTTP et HTTPS sur le serveur CentOS 8.
Étape 2 - Installer PHP-FPM
Selon la configuration requise pour Nextcloud, il est recommandé d'utiliser PHP 7.2 ou PHP 7.3 pour son installation.
Pour ce guide, nous utiliserons PHP 7.3 qui peut être installé à partir du référentiel REMI.
Avant d'aller plus loin, nous allons activer le référentiel "PowerTools" et ajouter les référentiels EPEL et REMI pour le serveur CentOS 8.
Exécutez la commande dnf ci-dessous.
sudo dnf config-manager --set-enabled PowerTools
sudo dnf install epel-release
sudo dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm
Vérifiez maintenant tous les référentiels disponibles sur le système.
dnf repolist
Et vous obtiendrez le résultat ci-dessous.
Vous avez activé le référentiel "PowerTools" et ajouté les référentiels EPEL et REMI pour CentOS 8.
Ensuite, nous allons activer le référentiel PHP 7.3 REMI.
Vérifiez tous les modules disponibles pour les packages PHP.
dnf module list php
Activez maintenant le module du référentiel PHP 7.3 REMI.
dnf module enable php:remi-7.3
Après cela, installez les packages PHP et PHP-FPM 7.3 pour Nextcloud à l'aide de la commande dnf ci-dessous.
sudo dnf install php-fpm php-cli php-devel php-gd php-mysqlnd php-pear php-xml php-mbstring php-pdo php-json php-pecl-apcu php-pecl-apcu-devel php-pecl-imagick-devel php-intl php-opcache php-zip
Et vous avez installé PHP et PHP-FPM 7.3 sur le système CentOS 8.
Étape 3 - Configurer PHP-FPM 7.3
Dans cette étape, nous allons configurer PHP-FPM pour le déploiement de Nextcloud.
Modifiez la configuration 'php.ini' à l'aide de la commande suivante.
vim /etc/php.ini
Décommentez et modifiez la configuration comme ci-dessous.
memory_limit = 512M
date.timezone = Asia/Jakarta
cgi.fixpathinfo = 0
Enregistrez et fermez.
Modifiez maintenant la configuration PHP opcache '/etc/php.d/10-opcache.ini'.
vim /etc/php.d/10-opcache.ini
Modifiez la configuration comme ci-dessous.
opcache.enable=1
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.memory_consumption=128
opcache.save_comments=1
opcache.revalidate_freq=1
Enregistrez et fermez.
Ensuite, éditez la configuration PHP-FPM '/etc/php-fpm.d/www.conf'.
vim /etc/php-fpm.d/www.conf
Remplacez 'utilisateur' et 'groupe' par 'nginx'.
user = nginx
group = nginx
Changez la configuration 'listen' pour le fichier chaussette comme ci-dessous.
listen = /run/php-fpm/www.sock
Décommentez la variable d'environnement PHP ci-dessous.
env[HOSTNAME] = $HOSTNAME
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp
Décommentez la configuration opcache sur la dernière ligne.
php_value[opcache.file_cache] = /var/lib/php/opcache
Enregistrez et fermez.
Créez maintenant un nouveau répertoire pour la session PHP et opcache, puis changez le propriétaire de ces répertoires en utilisateur et groupe 'nginx'.
mkdir -p /var/lib/php/{session,opcache}
chown -R nginx:nginx /var/lib/php/{session,opcache}
Et vous avez terminé la configuration de PHP-FPM pour l'installation de Nextcloud.
Démarrez le service PHP-FPM et ajoutez-le au démarrage du système.
systemctl enable php-fpm
systemctl start php-fpm
Vérifiez maintenant le fichier chaussette PHP-FPM et l'état du service.
netstat -pl | grep php
systemctl status php-fpm
Et vous obtiendrez le résultat ci-dessous.
En conséquence, le PHP-FPM est opérationnel sous le fichier sock '/run/php-fpm/www.sock'.
Étape 4 - Installer et configurer MariaDB
Dans cette étape, nous allons installer le serveur de base de données MariaDB, configurer l'authentification par mot de passe root et créer une nouvelle base de données et un nouvel utilisateur pour Nextcloud.
Installez la base de données MariaDB à l'aide de la commande dnf ci-dessous.
sudo dnf install mariadb mariadb-server
Une fois l'installation terminée, démarrez le service MariaDB et ajoutez-le au démarrage du système.
systemctl start mariadb
systemctl enable mariadb
Et le service MariaDB est opérationnel.
Ensuite, nous allons configurer l'authentification par mot de passe root à l'aide de la commande 'mysql_secure_installation' ci-dessous.
mysql_secure_installation
Tapez votre mot de passe root et tapez 'Y' pour le reste de la configuration.
Set a root password? [Y/n] Y
Remove anonymous users? [Y/n] Y
Remove test database and access to it? [Y/n] Y
Reload privilege tables now? [Y/n] Y
Et le mot de passe root MariaDB a été configuré.
Connectez-vous maintenant au shell MySQL à l'aide de la commande mysql ci-dessous.
mysql -u root -p
TYPE YOUR ROOT PASSWORD
Créez maintenant une nouvelle base de données 'nextcloud_db' et créez un nouvel utilisateur 'nextclouduser' avec le mot de passe 'nextcloudpassdb' en utilisant les requêtes ci-dessous.
create database nextcloud_db;
create user [email protected] identified by 'nextcloudpassdb';
grant all privileges on nextcloud_db.* to [email protected] identified by 'nextcloudpassdb';
flush privileges;
Et vous avez créé la base de données et l'utilisateur pour l'installation de Nextcloud.
Étape 4 - Générer SSL Letsencrypt
Dans cette étape, nous allons générer le SSL letsencrypt en utilisant le 'certbot'. Les certificats SSL seront utilisés pour sécuriser l'accès à Nextcloud.
Installez certbot à partir du référentiel EPEL à l'aide de la commande dnf ci-dessous.
sudo dnf install certbot
Une fois l'installation terminée, générez les certificats SSL pour le nom de domaine Nextcloud à l'aide de la commande ci-dessous et assurez-vous de changer le nom de domaine et l'adresse e-mail avec les vôtres.
certbot certonly --webroot --webroot-path /usr/share/nginx/html --agree-tos -m [email protected] -d cloud.hakase-labs.io
Une fois terminé, tous les certificats SSL générés se trouvent dans le répertoire '/etc/letsencrypt/live/cloud.hakase-labs.io'.
Vérifiez-le à l'aide de la commande suivante.
ls -lah /etc/letsencrypt/live/cloud.hakase-labs.io/
Et vous avez généré le SSL letsencrypt à l'aide de l'outil certbot.
Étape 5 - Télécharger et installer Nextcloud
Dans cette étape, nous allons télécharger la dernière version de Nextcloud 17.
Avant de télécharger le code source de nextcloud, installez le package zip sur le système.
sudo dnf install unzip
Allez maintenant dans le répertoire '/var/www/' et téléchargez le code source de Nextcloud en utilisant la commande wget comme ci-dessous.
cd /var/www/
wget https://download.nextcloud.com/server/releases/nextcloud-17.0.2.zip
Extrayez le code source de Nextcloud à l'aide de la commande ci-dessous.
unzip nextcloud-17.0.2.zip
Et vous obtiendrez un nouveau répertoire appelé 'nextcloud'.
Créez maintenant un nouveau répertoire 'data' pour Nextcloud. Le répertoire 'data' sera utilisé pour stocker les données de l'utilisateur.
mkdir -p /var/www/nextcloud/data/
Après cela, changez le propriétaire du répertoire 'nextcloud' en utilisateur et groupe 'nginx'.
sudo chown -R nginx:nginx /var/www/nextcloud
Et vous avez téléchargé le dernier Nextcloud 17 dans le répertoire '/var/www'.
Étape 6 - Configurer l'hôte virtuel Nginx pour Nextcloud
Après avoir téléchargé le code source de Nextcloud, nous configurerons l'hôte virtuel Nginx pour Nextcloud.
Allez dans le répertoire '/etc/nginx/conf.d' et créez une nouvelle configuration 'nextcloud.conf'.
cd /etc/nginx/conf.d/
vim nextcloud.conf
Changez maintenant le nom de domaine et le chemin du certificat SSL avec les vôtres et collez-y la configuration suivante.
upstream php-handler {
#server 127.0.0.1:9000;
server unix:/run/php-fpm/www.sock;
}
server {
listen 80;
listen [::]:80;
server_name cloud.hakase-labs.io;
# enforce https
return 301 https://$server_name:443$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name cloud.hakase-labs.io;
# Use Mozilla's guidelines for SSL/TLS settings
# https://mozilla.github.io/server-side-tls/ssl-config-generator/
# NOTE: some settings below might be redundant
ssl_certificate /etc/ssl/nginx/fullchain.pem;
ssl_certificate_key /etc/ssl/nginx/privkey.pem;
# Add headers to serve security related headers
# Before enabling Strict-Transport-Security headers please read into this
# topic first.
#add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;" always;
#
# WARNING: Only add the preload option once you read about
# the consequences in https://hstspreload.org/. This option
# will add the domain to a hardcoded list that is shipped
# in all major browsers and getting removed from this list
# could take several months.
add_header Referrer-Policy "no-referrer" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-Download-Options "noopen" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Permitted-Cross-Domain-Policies "none" always;
add_header X-Robots-Tag "none" always;
add_header X-XSS-Protection "1; mode=block" always;
# Remove X-Powered-By, which is an information leak
fastcgi_hide_header X-Powered-By;
# Path to the root of your installation
root /var/www/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;
# The following rule is only needed for the Social app.
# Uncomment it if you're planning to use this app.
#rewrite ^/.well-known/webfinger /public.php?service=webfinger last;
location = /.well-known/carddav {
return 301 $scheme://$host:$server_port/remote.php/dav;
}
location = /.well-known/caldav {
return 301 $scheme://$host:$server_port/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;
# Uncomment if your server is built with the ngx_pagespeed module
# This module is currently not supported.
#pagespeed off;
location / {
rewrite ^ /index.php;
}
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\/.+|oc[ms]-provider\/.+)\.php(?:$|\/) {
fastcgi_split_path_info ^(.+?\.php)(\/.*|)$;
set $path_info $fastcgi_path_info;
try_files $fastcgi_script_name =404;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $path_info;
fastcgi_param HTTPS on;
# Avoid sending the security headers twice
fastcgi_param modHeadersAvailable true;
# Enable pretty urls
fastcgi_param front_controller_active true;
fastcgi_pass php-handler;
fastcgi_intercept_errors on;
fastcgi_request_buffering off;
}
location ~ ^\/(?:updater|oc[ms]-provider)(?:$|\/) {
try_files $uri/ =404;
index index.php;
}
# Adding the cache control header for js, css and map files
# Make sure it is BELOW the PHP block
location ~ \.(?:css|js|woff2?|svg|gif|map)$ {
try_files $uri /index.php$request_uri;
add_header Cache-Control "public, max-age=15778463";
# Add headers to serve security related headers (It is intended to
# have those duplicated to the ones above)
# Before enabling Strict-Transport-Security headers please read into
# this topic first.
#add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;" always;
#
# WARNING: Only add the preload option once you read about
# the consequences in https://hstspreload.org/. This option
# will add the domain to a hardcoded list that is shipped
# in all major browsers and getting removed from this list
# could take several months.
add_header Referrer-Policy "no-referrer" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-Download-Options "noopen" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Permitted-Cross-Domain-Policies "none" always;
add_header X-Robots-Tag "none" always;
add_header X-XSS-Protection "1; mode=block" always;
# Optional: Don't log access to assets
access_log off;
}
location ~ \.(?:png|html|ttf|ico|jpg|jpeg|bcmap)$ {
try_files $uri /index.php$request_uri;
# Optional: Don't log access to other assets
access_log off;
}
}
Enregistrez et fermez.
Après cela, testez la configuration nginx et redémarrez le service Nginx. Et assurez-vous qu'il n'y a pas d'erreur.
nginx -t
systemctl restart nginx
Maintenant, le service Nginx va ouvrir un nouveau port HTTPS sur le système, vérifiez-le à l'aide de la commande suivante.
netstat -plntu
Et vous obtiendrez le résultat ci-dessous.
En conséquence, vous avez ajouté la configuration de l'hôte virtuel Nginx pour Nextcloud et activé le HTTPS sécurisé en plus.
Étape 7 - Configurer SELinux pour Nextcloud
Pour ce didacticiel, nous utiliserons SELinux en mode 'enforcing'. Et nous configurerons l'installation de SELinux pour Nextcloud.
Installez l'outil de gestion SELinux à l'aide de la commande dnf ci-dessous.
sudo dnf install policycoreutils-python-utils
Exécutez maintenant la commande suivante en tant que root sur votre serveur.
semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/nextcloud/data(/.*)?'
semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/nextcloud/config(/.*)?'
semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/nextcloud/apps(/.*)?'
semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/nextcloud/assets(/.*)?'
semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/nextcloud/.htaccess'
semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/nextcloud/.user.ini'
restorecon -Rv '/var/www/nextcloud/'
Et la configuration de SELinux pour Nextcloud est terminée.
Étape 8 - Assistant d'installation de Nextcloud
Ouvrez maintenant votre navigateur Web et saisissez votre nom de domaine Nextcloud dans la barre d'adresse.
https://cloud.hakase-labs.io/
Vous obtiendrez maintenant la page d'installation de Nextcloud comme ci-dessous.
Tapez votre utilisateur administrateur et votre mot de passe, puis choisissez 'MySQL/MariaDB' comme base de données et tapez les détails sur la base de données que vous avez créée en haut.
Cliquez maintenant sur le bouton "Terminer l'installation" et l'installation commencera.
Une fois l'installation terminée, vous obtiendrez le tableau de bord Nextcloud comme ci-dessous.
En conséquence, vous avez installé avec succès le dernier Nextcloud 17 avec le serveur Web Nginx, PHP-FPM 7.3 et la base de données MariaDB sur le serveur CentOS 8.