GNU/Linux >> Tutoriels Linux >  >> Fedora

Comment installer et configurer Nextcloud sur Fedora 32

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.


Fedora
  1. Comment installer Phorum avec Nginx sur Fedora 30

  2. Comment installer et configurer Redis 6 sur Fedora 34

  3. Comment installer et configurer Ansible sur Fedora 35

  4. Comment installer et configurer Mariadb dans Fedora 35

  5. Comment installer PHP 8 sur Fedora 35

Comment installer Nginx avec PHP et MariaDB (pile LEMP) sur Fedora 31

Comment installer et configurer Caddy Web Server avec PHP sur Fedora 34 / CentOS 8

Comment installer et configurer Drupal sur Fedora 35/34

Comment installer et configurer Git sur Fedora 35

Comment installer et utiliser Telnet sur Fedora 35

Comment installer Redis et configurer sur Fedora 35