Comment installer Nextcloud avec Nginx et PHP 7.3 sur CentOS 8

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, Oracle database et SQLite.

Pour garder tes fichiers synchronisés entre le bureau et le serveur, Nextcloud propose des applications pour les ordinateurs de bureau Windows, Linux et Mac et une application mobile pour Android et iOS.

Dans ce tutoriel, nous te 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 installerons Nextcloud et le sécuriserons avec un certificat SSL gratuit de Let’s Encrypt.

Conditions préalables

Pour ce guide, nous installerons Nextcloud sur le serveur CentOS 8 avec 2 Go de RAM, 25 Go d’espace libre et 2CPU.

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écharge 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 le port HTTP et HTTPS sur le firewalld.

Installe Nginx à partir du référentiel AppStream en utilisant la commande dnf ci-dessous.

sudo dnf install nginx

Une fois l’installation terminée, démarre le service nginx et ajoute-le au démarrage du système.

systemctl start nginx
systemctl enable nginx

Vérifie maintenant l’état du service nginx à l’aide de la commande ci-dessous.

systemctl status nginx

Tu obtiendras que le service nginx est en place et fonctionne sur le serveur CentOS 8.

Démarre Nginx avec systemd

Ensuite, nous allons ajouter les services HTTP et HTTPS au firewalld.

Ajoute 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

Ensuite, recharge les services du firewalld.

firewall-cmd --reload

Tu as donc 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 du système 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 dépôt 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écute 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érifie maintenant tous les référentiels disponibles sur le système.

dnf repolist

Et tu obtiendras le résultat ci-dessous.

Vérifier les dépôts de DNF

Tu as 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 REMI de PHP 7.3.

Vérifie tous les modules disponibles pour les paquets PHP.

dnf module list php

Active maintenant le module du dépôt REMI de PHP 7.3.

dnf module enable php:remi-7.3

Ajouter le référentiel Remi dans CentOS 8

Après cela, installe les paquets 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 tu as 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 le déploiement de PHP-FPM pour Nextcloud.

Modifie la configuration de ‘php.ini’ à l’aide de la commande suivante.

vim /etc/php.ini

Décommente et modifie la configuration comme ci-dessous.

memory_limit = 512M
date.timezone = Asia/Jakarta
cgi.fixpathinfo = 0

Sauvegarde et ferme.

Modifie maintenant la configuration de PHP opcache ‘/etc/php.d/10-opcache.ini’.

vim /etc/php.d/10-opcache.ini

Modifie 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

Sauvegarde et ferme.

Ensuite, modifie la configuration de PHP-FPM ‘/etc/php-fpm.d/www.conf’.

vim /etc/php-fpm.d/www.conf

Change l »utilisateur’ et le ‘groupe’ en ‘nginx’.

user = nginx
group = nginx

Change la configuration ‘listen’ pour le fichier sock comme ci-dessous.

listen = /run/php-fpm/www.sock

Décompose 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écommente la configuration opcache sur la dernière ligne.

php_value[opcache.file_cache] = /var/lib/php/opcache

Sauvegarde et ferme.

Crée maintenant un nouveau répertoire pour la session PHP et opcache, puis change 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 tu as terminé la configuration de PHP-FPM pour l’installation de Nextcloud.

Démarre le service PHP-FPM et ajoute-le au démarrage du système.

systemctl enable php-fpm
systemctl start php-fpm

Configurer PHP 7.3

Vérifie maintenant le fichier sock de PHP-FPM et l’état du service.

netstat -pl | grep php
systemctl status php-fpm

Tu obtiendras le résultat ci-dessous.

Configurer PHP-FPM

En conséquence, le service PHP-FPM est opérationnel sous le fichier sock ‘/run/php-fpm/www.sock’.

Étape 4 – Installe et configure MariaDB

Dans cette étape, nous allons installer le serveur de base de données MariaDB, configurer l’authentification du mot de passe root et créer une nouvelle base de données et un nouvel utilisateur pour Nextcloud.

Installe 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émarre le service MariaDB et ajoute-le au démarrage du système.

systemctl start mariadb
systemctl enable mariadb

Le service MariaDB est maintenant opérationnel.

Configure MariaDB

Ensuite, nous allons configurer l’authentification du mot de passe root à l’aide de la commande ‘mysql_secure_installation’ ci-dessous.

mysql_secure_installation

Tape ton mot de passe root et tape ‘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é.

Connecte-toi maintenant au shell MySQL à l’aide de la commande mysql ci-dessous.

mysql -u root -p
TYPE YOUR ROOT PASSWORD

Crée maintenant une nouvelle base de données ‘nextcloud_db’ et crée 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 voilà, tu as créé la base de données et l’utilisateur pour l’installation de Nextcloud.

Configure la base de données Nextcloud

Étape 4 – Générer le SSL Letsencrypt

Dans cette étape, nous allons générer le SSL letsencrypt à l’aide de ‘certbot’. Les certificats SSL seront utilisés pour sécuriser l’accès à Nextcloud.

Installe certbot depuis le dépôt EPEL à l’aide de la commande dnf ci-dessous.

sudo dnf install certbot

Une fois l’installation terminée, génère les certificats SSL pour le nom de domaine Nextcloud à l’aide de la commande ci-dessous et assure-toi de changer le nom de domaine et l’adresse e-mail par les tiens.

certbot certonly --webroot --webroot-path /usr/share/nginx/html --agree-tos -m [email protected] -d cloud.hakase-labs.io

Une fois l’installation terminée, tous les certificats SSL générés se trouvent dans le répertoire ‘/etc/letsencrypt/live/cloud.hakase-labs.io’.

Vérifie-le à l’aide de la commande suivante.

ls -lah /etc/letsencrypt/live/cloud.hakase-labs.io/

Et tu as généré le SSL letsencrypt à l’aide de l’outil certbot.

Étape 5 – Télécharge et installe 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, installe le paquet zip sur le système.

sudo dnf install unzip

Va maintenant dans le répertoire ‘/var/www/’ et télécharge 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

Extrais le code source de Nextcloud à l’aide de la commande ci-dessous.

unzip nextcloud-17.0.2.zip

Tu obtiendras un nouveau répertoire appelé ‘nextcloud’.

Crée maintenant un nouveau répertoire ‘data’ pour Nextcloud. Le répertoire ‘data’ sera utilisé pour stocker les données des utilisateurs.

mkdir -p /var/www/nextcloud/data/

Ensuite, change le propriétaire du répertoire ‘nextcloud’ en l’utilisateur et le groupe ‘nginx’.

sudo chown -R nginx:nginx /var/www/nextcloud

Et tu as téléchargé la dernière version de Nextcloud 17 dans le répertoire ‘/var/www’.

Télécharger NextCloud

Étape 6 – Configurer l’hôte virtuel Nginx pour Nextcloud

Après avoir téléchargé le code source de Nextcloud, nous allons configurer l’hôte virtuel Nginx pour Nextcloud.

Va dans le répertoire ‘/etc/nginx/conf.d’ et crée une nouvelle configuration ‘nextcloud.conf’.

cd /etc/nginx/conf.d/
vim nextcloud.conf

Change maintenant le nom de domaine et le chemin du certificat SSL avec les tiens et colle la configuration suivante dedans.

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;
}
}

Sauvegarde et ferme.

Après cela, teste la configuration de Nginx et redémarre le service Nginx. Et vérifie 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érifie-le à l’aide de la commande suivante.

netstat -plntu

Et tu obtiendras le résultat ci-dessous.

Configurer Nginx pour Nextcloud

Tu as donc ajouté la configuration de l’hôte virtuel Nginx pour Nextcloud et activé le HTTPS sécurisé par-dessus.

Étape 7 – Configurer SELinux pour Nextcloud

Pour ce tutoriel, nous allons utiliser SELinux en mode ‘enforcing’. Et nous allons configurer SELinux pour l’installation de Nextcloud.

Installe l’outil de gestion SELinux à l’aide de la commande dnf ci-dessous.

sudo dnf install policycoreutils-python-utils

Maintenant, exécute la commande suivante en tant que root sur ton 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.

Configure SELinux for Nextcloud

Étape 8 – Assistant d’installation de Nextcloud

Ouvre maintenant ton navigateur Web et tape le nom de ton domaine Nextcloud dans la barre d’adresse.

https://cloud.hakase-labs.io/

Tu obtiendras maintenant la page d’installation de Nextcloud comme ci-dessous.

Installateur web de Nextcloud

Tape ton nom d’utilisateur et ton mot de passe d’administrateur, puis choisis ‘MySQL/MariaDB’ comme base de données et tape les détails de la base de données que tu as créée en haut.

Clique maintenant sur le bouton « Terminer l’installation » et l’installation commencera.

Une fois l’installation terminée, tu obtiendras le tableau de bord Nextcloud comme ci-dessous.

NextCloud sur CentOS 8

Tu as donc installé avec succès la dernière version de Nextcloud 17 avec le serveur Web Nginx, PHP-FPM 7.3 et la base de données MariaDB sur le serveur CentOS 8.

Référence

Vous aimerez aussi...