GNU/Linux >> Tutoriels Linux >  >> Cent OS

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, 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.


Cent OS
  1. Comment installer et configurer Nginx sur CentOS 7

  2. Comment installer WordPress avec Nginx sur CentOS 7

  3. Comment installer phpMyAdmin avec Nginx sur CentOS 7

  4. Comment installer et configurer OpenLiteSpeed ​​avec PHP 7.4 sur CentOS 8

  5. Comment installer Phorum avec Nginx sur CentOS 7

Comment installer Shopware avec NGINX et Lets Encrypt sur CentOS 7

Comment installer Pico CMS avec Nginx et Lets Encrypt sur CentOS 7

Comment installer DokuWiki avec Nginx et chiffrer SSL sur CentOS 8

Comment installer le framework PHP Laravel avec Nginx sur CentOS 8

Comment installer OwnCloud 8 avec Nginx et PHP-FPM sur CentOS 6

Comment installer le framework PHP Laravel avec Nginx sur CentOS 8