Nextcloud est un logiciel open source pour stocker et synchroniser vos données sur plusieurs appareils. Vous pouvez le considérer comme votre propre clone Dropbox. Mais en plus de stocker des fichiers, il fournit également des fonctionnalités supplémentaires telles que le calendrier, les contacts, les tâches planifiées, le streaming multimédia, etc.
Nextcloud fournit des applications pour Windows, Linux, MacOS et des applications mobiles pour Android et iOS que vous pouvez utiliser pour synchroniser des fichiers sur vos différents appareils.
Dans ce tutoriel, nous allons apprendre à installer et configurer Nextcloud sur un serveur basé sur Fedora 32. Nous installerons également le serveur Web Nginx avec PHP 7.4 et MariaDB
Prérequis
-
Un serveur exécutant Fedora 32.
-
Un utilisateur sudo non root.
-
Assurez-vous que tout est mis à jour.
$ sudo dnf update
-
Forfaits essentiels.
$ sudo dnf install wget curl bzip2 nano unzip policycoreutils-python-utils -y
Certains de ces packages sont peut-être déjà sur votre système.
Configurer le pare-feu
La première étape consiste à configurer le pare-feu. Le serveur Fedora est livré avec le pare-feu Firewalld préinstallé.
Vérifiez si le pare-feu est en cours d'exécution.
$ sudo firewall-cmd --state
running
Vérifiez les services/ports actuellement autorisés.
$ sudo firewall-cmd --permanent --list-services
Il devrait afficher la sortie suivante.
dhcpv6-client mdns ssh
Autoriser les ports HTTP et HTTPS.
$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd --permanent --add-service=https
Vérifiez à nouveau l'état du pare-feu.
$ sudo firewall-cmd --permanent --list-services
Vous devriez voir une sortie similaire.
dhcpv6-client http https mdns ssh
Rechargez le pare-feu.
$ sudo systemctl reload firewalld
Installer PHP
Fedora 32 est livré par défaut avec PHP 7.4 mais pour avoir un référentiel PHP mis à jour, nous ajouterons le référentiel REMI.
Installez le référentiel REMI qui est le référentiel Fedora officiel pour l'installation des packages PHP.
$ sudo dnf -y install https://rpms.remirepo.net/fedora/remi-release-32.rpm
Activer le remi
référentiel et désactiver le remi-modular
dépôt. Cela active le référentiel requis pour installer les packages PHP 7.4.
$ sudo dnf config-manager --set-enabled remi
$ sudo dnf config-manager --set-disabled remi-modular
Installez PHP 7.4 avec quelques packages supplémentaires.
$ sudo dnf install php-fpm php-cli php-gd php-mbstring php-intl php-mysqlnd php-imagick php-zip php-json php-process php-xml php-bcmath php-gmp php-ftp php-smbclient php-opcache
Vérifiez si PHP fonctionne correctement.
$ php --version
PHP 7.4.11 (cli) (built: Sep 29 2020 10:17:06) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
with Zend OPcache v7.4.11, Copyright (c), by Zend Technologies
Configurer PHP
Ouvrez le fichier /etc/php-fpm.d/www.conf
.
$ sudo nano /etc/php-fpm.d/www.conf
Nous devons définir l'utilisateur/groupe Unix de processus PHP sur nginx . Trouvez le user=apache
et group=apache
lignes dans le fichier et changez-les en nginx.
...
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
; will be used.
; RPM: apache user chosen to provide access to the same directories as httpd
user = nginx
; RPM: Keep a group allowed to write in log dir.
group = nginx
...
Décommentez les variables 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 le fichier en appuyant sur Ctrl + X et en saisissant Y lorsque vous y êtes invité.
Modifiez maintenant la configuration PHP opcache /etc/php.d/10-opcache.ini
.
$ sudo nano /etc/php.d/10-opcache.ini
Modifiez la configuration comme ci-dessous.
opcache.enable=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.revalidate_freq=1
opcache.save_comments=1
Enregistrez le fichier en appuyant sur Ctrl + X et en saisissant Y lorsque vous y êtes invité.
Exécutez les commandes suivantes pour augmenter les limites de téléchargement de fichiers et de mémoire pour PHP.
$ sudo cp /etc/php.ini /etc/php.ini.bak
$ sudo sed -i "s/memory_limit = 128M/memory_limit = 512M/" /etc/php.ini
$ sudo sed -i "s/post_max_size = 8M/post_max_size = 100M/" /etc/php.ini
$ sudo sed -i "s/upload_max_filesize = 2M/upload_max_filesize = 100M/" /etc/php.ini
Par défaut, il y a 3 fichiers dans /var/lib/php/
répertoire dont le propriétaire du groupe est défini sur apache
, mais nous utilisons Nginx. Nous devons donc donner à l'utilisateur nginx les autorisations de lecture et d'écriture dans les 3 répertoires avec setfacl
.
$ sudo setfacl -R -m u:nginx:rwx /var/lib/php/opcache/
$ sudo setfacl -R -m u:nginx:rwx /var/lib/php/session/
$ sudo setfacl -R -m u:nginx:rwx /var/lib/php/wsdlcache/
Activez et démarrez le processus php-fpm.
$ sudo systemctl enable php-fpm
$ sudo systemctl start php-fpm
Installer Nginx
Fedora 32 est livré par défaut avec la dernière version stable de Nginx.
Installez Nginx.
$ sudo dnf install nginx -y
Vérifiez s'il fonctionne correctement.
$ nginx -v
nginx version: nginx/1.18.0
Démarrez et activez Nginx.
$ sudo systemctl start nginx
$ sudo systemctl enable nginx
Ouvrez l'adresse IP de votre serveur dans un navigateur pour voir la page suivante. Cela signifie que Nginx fonctionne correctement.
Installer MariaDB
MariaDB remplace MySQL, ce qui signifie que les commandes pour exécuter et faire fonctionner MariaDB sont les mêmes que celles de MySQL.
Fedora 32 est livré par défaut avec MariaDB 10.4 qui est celui que nous utiliserons.
Installez le serveur MariaDB.
$ sudo dnf install mariadb-server
Vérifiez si MariaDB est installé correctement.
$ mysql --version
mysql Ver 15.1 Distrib 10.4.14-MariaDB, for Linux (x86_64) using EditLine wrapper
Activez et démarrez le service MariaDB.
$ sudo systemctl enable mariadb
$ sudo systemctl start mariadb
Exécutez la commande suivante pour effectuer la configuration par défaut, par exemple en donnant un mot de passe root, en supprimant les utilisateurs anonymes, en interdisant la connexion root à distance et en supprimant les tables de test.
$ sudo mysql_secure_installation
Appuyer sur Entrée choisit l'option par défaut (celle qui est en majuscule, Y dans ce cas).
Enter current password for root (enter for none): [PRESS ENTER]
Switch to unix_socket authentication [Y/n] [PRESS ENTER]
Change the root password? [Y/n] [ANSWER n]
Remove anonymous users? [Y/n] [PRESS ENTER]
Disallow root login remotely? [Y/n] [PRESS ENTER]
Remove test database and access to it? [Y/n] [PRESS ENTER]
Reload privilege tables now? [Y/n] [PRESS ENTER]
C'est ça. La prochaine fois que vous voudrez vous connecter à MySQL, utilisez la commande suivante
$ sudo mysql
Entrez votre mot de passe root lorsque vous y êtes invité.
Configurer MariaDB
Entrez la commande suivante pour entrer dans le shell MySQL.
$ sudo mysql
Créez un utilisateur MySQL pour gérer la base de données NextCloud.
mysql> CREATE USER 'nextuser'@'localhost' IDENTIFIED BY 'yourpassword';
Créez la base de données NextCloud.
mysql> CREATE DATABASE nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
Accordez tous les privilèges à la base de données Nextcloud à l'utilisateur que nous avons créé.
mysql> GRANT ALL PRIVILEGES ON nextcloud.* TO 'nextuser'@'localhost';
Quittez le shell MySQL.
mysql> exit
Télécharger Nextcloud
Il est temps de télécharger et de configurer les dossiers Nextcloud.
$ wget https://download.nextcloud.com/server/releases/latest.tar.bz2
$ tar -jxvf latest.tar.bz2
$ sudo mv nextcloud /var/www/html/
Ensuite, nous devons créer un dossier de données.
$ sudo mkdir /var/www/html/nextcloud/data
$ sudo chown -R nginx:nginx /var/www/html/nextcloud
Installer SSL
Nous allons installer SSL en utilisant le service Let's Encrypt.
Pour cela, installez Certbot.
$ sudo dnf install certbot
Arrêtez Nginx car cela interférera avec le processus Certbot.
$ sudo systemctl stop nginx
Générez le certificat. Nous créons également un certificat DHCParams.
$ export LDOMAIN="nextcloud.example.com"
$ export LEMAIL="[email protected]"
$ sudo certbot certonly --standalone -d $LDOMAIN --preferred-challenges http --agree-tos -n -m $LEMAIL --keep-until-expiring
$ sudo systemctl start nginx
$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
Nous devons également configurer une tâche cron pour renouveler automatiquement le SSL. Pour ouvrir l'éditeur crontab, exécutez la commande suivante
$ sudo EDITOR=nano crontab -e
La commande ci-dessus ouvre Crontab avec l'éditeur Nano au lieu de l'éditeur Vim par défaut.
Collez la ligne suivante en bas.
25 2 * * * /usr/bin/certbot renew --quiet --pre-hook “systemctl stop nginx” --post-hook “systemctl start nginx”
Le travail cron ci-dessus exécutera certbot à 2h25 tous les jours. Vous pouvez le changer en tout ce que vous voulez.
Enregistrez le fichier en appuyant sur Ctrl + X et en saisissant Y lorsque vous y êtes invité.
Configurer SELinux/Autorisations
SELinux doit être configuré pour faire fonctionner Nextcloud sur Fedora. Entrez les commandes suivantes pour les paramètres de base de SELinux qui devraient fonctionner pour tout le monde.
Assurez-vous d'ajuster les chemins d'accès aux fichiers s'ils sont différents dans votre cas.
$ sudo semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/nextcloud/data(/.*)?'
$ sudo semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/nextcloud/config(/.*)?'
$ sudo semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/nextcloud/apps(/.*)?'
$ sudo semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/nextcloud/.user.ini'
$ sudo semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/nextcloud/3rdparty/aws/aws-sdk-php/src/data/logs(/.*)?'
$ sudo restorecon -Rv '/var/www/html/nextcloud/'
Pour activer les mises à jour via l'interface Web de Nextcloud, exécutez également la commande suivante.
$ sudo setsebool -P httpd_unified on
Configurer Nginx pour Nextcloud
Ensuite, nous devons configurer Nginx pour héberger Nextcloud.
Pour notre propos, Nextcloud sera hébergé sur le domaine http://nextcloud.example.com
,
Configurez les répertoires où vivront les blocs du serveur.
$ sudo mkdir /etc/nginx/sites-available
$ sudo mkdir /etc/nginx/sites-enabled
Ouvrez le /etc/nginx/nginx.conf
fichier à éditer.
$ sudo nano /etc/nginx/nginx.conf
Collez les lignes suivantes après la ligne include /etc/nginx/conf.d/*.conf
include /etc/nginx/sites-enabled/*.conf;
server_names_hash_bucket_size 64;
Appuyez sur Ctrl + X pour fermer l'éditeur et appuyez sur Y lorsque vous êtes invité à enregistrer le fichier.
Créez le fichier /etc/nginx/sites-available/nextcloud.conf
en utilisant l'éditeur Nano.
$ sudo nano /etc/nginx/sites-available/nextcloud.conf
Collez le code suivant dans l'éditeur. Assurez-vous de remplacer l'exemple de domaine par votre domaine réel avant de le coller.
upstream php-handler {
#server 127.0.0.1:9000;
server unix:/run/php-fpm/www.sock;
}
server {
listen 80;
listen [::]:80;
server_name nextcloud.example.com;
# enforce https
return 301 https://$server_name:443$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name nextcloud.example.com;
access_log /var/log/nginx/nextcloud.access.log;
error_log /var/log/nginx/nextcloud.error.log;
# 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/letsencrypt/live/nextcloud.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/nextcloud.example.com/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_session_timeout 1d;
ssl_session_cache shared:MozSSL:10m; # about 40000 sessions
ssl_session_tickets off;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
ssl_dhparam /etc/ssl/certs/dhparam.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/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;
# 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 100M;
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 build 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\/.+|.+\/richdocumentscode\/proxy)\.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_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|mp4|webm)$ {
try_files $uri /index.php$request_uri;
# Optional: Don't log access to other assets
access_log off;
}
}
Appuyez sur Ctrl + X pour fermer l'éditeur et appuyez sur Y lorsque vous êtes invité à enregistrer le fichier.
Activez ce fichier de configuration en le liant au sites-enabled
répertoire.
$ sudo ln -s /etc/nginx/sites-available/nextcloud.conf /etc/nginx/sites-enabled/
Testez la configuration Nginx.
$ sudo nginx -t
Rechargez le service Nginx si tout va bien.
$ sudo systemctl reload nginx
Installer Nextcloud
Il existe deux façons de configurer Nextcloud - via la ligne de commande ou via l'interface graphique. Nous opterons pour la méthode de la ligne de commande.
Entrez dans le répertoire Nextcloud.
$ cd /var/www/html/nextcloud
Exécutez la commande suivante pour installer Nextcloud.
$ sudo -u nginx php occ maintenance:install --database "mysql" --database-name "nextcloud" --database-user "nextuser" --database-pass "yourpassword" --admin-user "admin" --admin-pass "password"
Cette commande est exécutée en tant que nginx
utilisateur car il dispose des autorisations d'écriture sur le dossier Nextcloud.
Ensuite, nous devons ajouter notre domaine à la liste des domaines de confiance. Ouvrez le /var/www/html/nextcloud/config/config.php
fichier.
$ sudo nano config/config.php
Modifier la valeur de trusted_domains
variable en ajoutant l'adresse IP de votre serveur et votre domaine Nextcloud nextcloud.example.com
afin que vous puissiez accéder à votre installation depuis votre domaine.
'trusted_domains' =>
array (
0 => 'localhost',
1 => '167.172.35.56',
2 => 'nextcloud.example.com',
),
Appuyez sur Ctrl + X pour fermer l'éditeur et appuyez sur Y lorsque vous êtes invité à enregistrer le fichier.
Lancez votre installation Nextcloud en ouvrant https://nextcloud.example.com
dans votre navigateur et vous verrez l'écran suivant.
Entrez vos informations de connexion d'administration. Faites défiler les bannières d'introduction Nextcloud, définissez votre emplacement et votre statut météo et choisissez un fond d'écran et une fois que vous avez terminé, vous devriez être accueilli avec un écran similaire.
Conclusion
Ceci conclut notre tutoriel sur l'installation de Nextcloud sur le serveur Fedora 32. Si vous avez des questions, postez-les dans les commentaires ci-dessous.