Ubuntu 22.04 - Installation de Nextcloud 24 (Hub II) avec Nginx, PHP7-FPM, MariaDB et SSL/TLS

Article écrit par • créé le • mis à jour le 15 janvier 2024
← Partie 1
Installation de Nextcloud et Nginx

7 - Création de la base de données sous MariaDB

7.1 - Installation de MariaDB

Installez les paquets suivants :
sudo apt-get install -y mariadb-server mariadb-client

7.2 - Configuration de MariaDB

Lancez le script de configuration (recommandé) avec la commande sudo mysql_secure_installation :
sudo mysql_secure_installation

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user.  If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none): [Touche Entrée]
OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.

You already have your root account protected, so you can safely answer 'n'.

Switch to unix_socket authentication [Y/n] n
... skipping.

You already have your root account protected, so you can safely answer 'n'.

Change the root password? [Y/n] Y
New password: 
Re-enter new password: 
Password updated successfully!
Reloading privilege tables..
 ... Success!


By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] Y
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] Y
 ... Success!

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] Y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] Y
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

7.3 - Création de la base de données nextcloud

  • Tout d'abord, connectez-vous sur l'interface MySQL avec l'utilisateur root et grâce au mot de passe saisi lors de la configuration de MariaDB :
    sudo mysql -u root -p
    Enter password: 
    Welcome to the MariaDB monitor.  Commands end with ; or \g.
    Your MariaDB connection id is 42
    Server version: 10.6.7-MariaDB-2ubuntu1 Ubuntu 22.04
    
    Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
    
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
  • Créez la base de données nextcloud :
    CREATE DATABASE nextcloud;
    Query OK, 1 row affected (0.000 sec)
    Tout comme pour la gestion du répertoire nextcloud et pour plus de sécurité, vous allez tout d'abord créer un utilisateur MySQL nextcloud dédié à la base de données nextcloud, renseigner un mot de passe et ensuite lui donner les droits sur cette base de données. Exécutez les commandes suivantes en remplaçant mon_mot_de_passe par le vôtre (attention deux commandes sont à modifier) :
    CREATE USER "nextcloud"@"localhost";
    Query OK, 0 rows affected (0.002 sec)
    
    SET password FOR "nextcloud"@"localhost" = password('mon_mot_de_passe');
    Query OK, 0 rows affected (0.030 sec)
    
    GRANT ALL PRIVILEGES ON nextcloud.* TO "nextcloud"@"localhost" IDENTIFIED BY "mon_mot_de_passe";
    Query OK, 0 rows affected (0.001 sec)
    
    FLUSH PRIVILEGES;
    Query OK, 0 rows affected (0.001 sec)
    
    EXIT;
    Bye

8 - Nom de domaine & virtual host

ⓘ Si vous souhaitez accéder à votre Nextcloud de l'extérieur (et non seulement via localhost), il est nécessaire de faire pointer votre domaine ou sous-domaine vers l'IP de votre serveur. Pour cela, commencez par modifier les règles DNS dans l'interface administrateur du fournisseur de votre nom de domaine.
  • Créez le fichier suivant /etc/nginx/sites-available/nextcloud et modifiez les lignes en surbrillance en fonction de votre configuration :
    upstream php-nextcloud {
        server                        unix:/var/run/nextcloud.sock;
    }
    
    server {
        listen                        80;
        listen                        [::]:80;
        server_name                   cloud.mondomaine.com;
    
        # Path to the root of your installation
        root                          /var/www/nextcloud/;
    
        # Add headers to serve security related headers
        add_header                    X-Frame-Options "SAMEORIGIN";
        add_header                    X-Content-Type-Options nosniff;
        add_header                    X-XSS-Protection "1; mode=block";
        add_header                    X-Robots-Tag none;
        add_header                    X-Download-Options noopen;
        add_header                    X-Permitted-Cross-Domain-Policies none;
        add_header                    Strict-Transport-Security 'max-age=31536000; includeSubDomains;';
        add_header                    Referrer-Policy no-referrer always;
    
        location = /robots.txt {
            allow                     all;
            log_not_found             off;
            access_log                off;
        }
    
        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;
        }
    
        location = /.well-known/webfinger {
            return                    301 $scheme://$host:$server_port/index.php/.well-known/webfinger;
        }
    
        location = /.well-known/nodeinfo {
            return                    301 $scheme://$host:$server_port/index.php/.well-known/nodeinfo;
        }
    
    
        # 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;
    
        location / {
            rewrite                   ^ /index.php$uri;
        }
    
        location ~ ^/.well-known/acme-challenge/* {
            allow                     all;
        }
    
        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/.+|ocs-provider/.+).php(?:$|/) {
            fastcgi_split_path_info   ^(.+.php)(/.*)$;
            include                   fastcgi_params;
            fastcgi_param             SCRIPT_FILENAME $document_root$fastcgi_script_name;
            fastcgi_param             PATH_INFO $fastcgi_path_info;
            fastcgi_param             modHeadersAvailable true;
            fastcgi_param             front_controller_active true;
            fastcgi_pass              php-nextcloud;
            fastcgi_intercept_errors  on;
            fastcgi_request_buffering off;
        }
    
        location ~ ^/(?:updater|ocs-provider)(?:$|/) {
            try_files                 $uri/ =404;
            index                     index.php;
        }
    
        # Adding the cache control header for js and css files
        # Make sure it is BELOW the PHP block
        location ~* .(?:css|js|woff|svg|gif)$ {
            try_files                 $uri /index.php$uri$is_args$args;
            add_header                Cache-Control "public, max-age=15778463";
            add_header                X-Content-Type-Options nosniff;
            add_header                X-XSS-Protection "1; mode=block";
            add_header                X-Robots-Tag none;
            add_header                X-Download-Options noopen;
            add_header                X-Permitted-Cross-Domain-Policies none;
            # Optional: Don't log access to assets
            access_log                off;
        }
    
        location ~* .(?:png|html|ttf|ico|jpg|jpeg)$ {
            try_files                 $uri /index.php$uri$is_args$args;
            # Optional: Don't log access to other assets
            access_log                off;
        }
    }
  • Activez le virtual host :
    sudo ln -s /etc/nginx/sites-available/nextcloud /etc/nginx/sites-enabled/nextcloud
  • La nouvelle configuration sera prise en compte après redémarrage des services Nginx et PHP-FPM :
    sudo systemctl restart nginx.service
    sudo systemctl restart php8.1-fpm.service

9 - SSL/TLS avec Let's Encrypt

Let's Encrypt est une autorité de certification libre, automatisée et ouverte. Cette autorité fournit des certificats gratuits X.509 pour le protocole cryptographique SSL/TLS au moyen d'un processus automatisé destiné à se passer du processus complexe actuel impliquant la création manuelle, la validation, la signature, l'installation et le renouvellement des certificats pour la sécurisation des sites internet. Depuis sa création, Let's Encrypt a livré plus de 100 millions de certificats.

9.1 - Installation

Installez les paquets software-properties-common et certbot :
sudo apt-get install -y software-properties-common
sudo apt-get install -y certbot

9.2 - Génération des certificats

Let's Encrypt permet de générer de différentes façons plus ou moins automatisées un certificat. La méthode standalone permet de générer simplement un certificat. En revanche, celle-ci demande d'arrêter le serveur Nginx et ceci est valable à chaque renouvellement dudit certificat. Il existe aussi des plugins Apache et Nginx entièrement automatisés. Ces plugins mettent à jour automatiquement la configuration des virtual hosts mais le plugin Nginx est encore expérimental. Dans cet article, nous recommandons d'utiliser le plugin webroot pour Nginx qui permet de générer et renouveler son certificat sans interrompre le serveur Nginx.

Le plugin webroot crée un fichier temporaire /var/www/nextcloud/.well-known/acme-challenge dans le dossier racine de votre Nextcloud, celui-ci permettra aux serveurs de Let's Encrypt de valider votre certificat en appelant ce fichier temporaire.

  • Générez votre certificat en remplaçant [email protected] et cloud.mondomaine.com par vos informations personnelles :
    sudo certbot certonly --webroot -w /var/www/nextcloud --agree-tos --no-eff-email --email [email protected] -d cloud.mondomaine.com --rsa-key-size 4096
    Saving debug log to /var/log/letsencrypt/letsencrypt.log
    Requesting a certificate for cloud.mondomaine.com
    
    Successfully received certificate.
    Certificate is saved at: /etc/letsencrypt/live/cloud.mondomaine.com/fullchain.pem
    Key is saved at:         /etc/letsencrypt/live/cloud.mondomaine.com/privkey.pem
    This certificate expires on 20XX-XX-XX.
    These files will be updated when the certificate renews.
    Certbot has set up a scheduled task to automatically renew this certificate in the background.
    
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    If you like Certbot, please consider supporting our work by:
     * Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
     * Donating to EFF:                    https://eff.org/donate-le
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Vous obtiendrez 4 fichiers dans le répertoire /etc/letsencrypt/live/cloud.mondomaine.com :
    • cert.pem : le certificat de votre domaine cloud.mondomaine.com
    • chain.pem : le certificat Let's Encrypt
    • fullchain.pem : les certificats cert.pem et chain.pem combinés
    • privkey.pem : la clé privée du certificat.
  • SSL/TLS utilise un système de chiffrement asymétrique (comme RSA ou Diffie-Hellman) afin de sécuriser les échanges de vos flux. Par défaut, Nginx utilise une clé de 1048 bits. En augmentant la longueur de la clé à 4096 bits, vous augmenterez ainsi la sécurité de votre protocole SSL/TLS.Générez une nouvelle clé Diffie-Hellman (DH) de 4096 bits et attribuez-lui un minimum de permissions. La première commande peut prendre plusieurs heures en fonction de la puissance de votre système :
    sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 4096
    sudo chmod 600 /etc/ssl/certs/dhparam.pem
  • Ajoutez ou modifiez les lignes en surbrillance dans votre virtual host (/etc/nginx/sites-available/nextcloud) en remplaçant les chemins des directives ssl_certificate, ssl_certificate_key, ssl_trusted_certificate et ssl_dhparam par l'emplacement de vos certificats et de la clé DH précédemment générés :
    upstream php-nextcloud {
        server                        unix:/var/run/nextcloud.sock;
    }
    
    server {
        listen                        80;
        listen                        [::]:80;
        server_name                   cloud.mondomaine.com;
        return                        301 https://$server_name$request_uri;
    }
    
    server {
        listen                        443 ssl;
        listen                        [::]:443 ssl;
        server_name                   cloud.mondomaine.com;
    
        # Path to the root of your installation
        root                          /var/www/nextcloud/;
    
        ssl_certificate               /etc/letsencrypt/live/cloud.mondomaine.com/fullchain.pem;
        ssl_certificate_key           /etc/letsencrypt/live/cloud.mondomaine.com/privkey.pem;
        ssl_trusted_certificate       /etc/letsencrypt/live/cloud.mondomaine.com/chain.pem;
        ssl_dhparam                   /etc/ssl/certs/dhparam.pem;
    
        ssl_session_cache             shared:SSL:1m;
        ssl_session_timeout           1440m;
        ssl_buffer_size               8k;
        ssl_protocols                 TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
        ssl_ciphers                   TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256:TLS_AES_128_CCM_8_SHA256:TLS_AES_128_CCM_SHA256: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     on;
        ssl_stapling                  on;
        ssl_stapling_verify           on;
    
        # Add headers to serve security related headers
        add_header                    X-Frame-Options "SAMEORIGIN";
        add_header                    X-Content-Type-Options nosniff;
        add_header                    X-XSS-Protection "1; mode=block";
        add_header                    X-Robots-Tag none;
        add_header                    X-Download-Options noopen;
        add_header                    X-Permitted-Cross-Domain-Policies none;
        add_header                    Strict-Transport-Security 'max-age=31536000; includeSubDomains;';
        add_header                    Referrer-Policy no-referrer always;
    
        location = /robots.txt {
            allow                     all;
            log_not_found             off;
            access_log                off;
        }
    
        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;
        }
    
        location = /.well-known/webfinger {
            return                    301 $scheme://$host:$server_port/index.php/.well-known/webfinger;
        }
    
        location = /.well-known/nodeinfo {
            return                    301 $scheme://$host:$server_port/index.php/.well-known/nodeinfo;
        }
    
        # 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;
    
        location / {
            rewrite                   ^ /index.php$uri;
        }
    
        location ~ ^/.well-known/acme-challenge/* {
            allow                     all;
        }
    
        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/.+|ocs-provider/.+).php(?:$|/) {
            fastcgi_split_path_info   ^(.+.php)(/.*)$;
            include                   fastcgi_params;
            fastcgi_param             SCRIPT_FILENAME $document_root$fastcgi_script_name;
            fastcgi_param             PATH_INFO $fastcgi_path_info;
            fastcgi_param             HTTPS on;
            #Avoid sending the security headers twice
            fastcgi_param             modHeadersAvailable true;
            fastcgi_param             front_controller_active true;
            fastcgi_pass              php-nextcloud;
            fastcgi_intercept_errors  on;
            fastcgi_request_buffering off;
        }
    
        location ~ ^/(?:updater|ocs-provider)(?:$|/) {
            try_files                 $uri/ =404;
            index                     index.php;
        }
    
        # Adding the cache control header for js and css files
        # Make sure it is BELOW the PHP block
        location ~* .(?:css|js|woff|svg|gif)$ {
            try_files                 $uri /index.php$uri$is_args$args;
            add_header                Cache-Control "public, max-age=15778463";
            add_header                X-Content-Type-Options nosniff;
            add_header                X-XSS-Protection "1; mode=block";
            add_header                X-Robots-Tag none;
            add_header                X-Download-Options noopen;
            add_header                X-Permitted-Cross-Domain-Policies none;
            # Optional: Don't log access to assets
            access_log                off;
        }
    
        location ~* .(?:png|html|ttf|ico|jpg|jpeg)$ {
            try_files                 $uri /index.php$uri$is_args$args;
            # Optional: Don't log access to other assets
            access_log                off;
        }
    }
  • Rechargez votre configuration Nginx :
    sudo systemctl reload nginx.service

9.3 - Renouvellement automatique du certificat

Les certificats délivrés par Let's Encrypt sont valides 90 jours. Une tâche planifiée permettant de renouveler l'ensemble des certificats présents sur votre serveur est fournie avec le paquet certbot. Celle-ci est exécutée deux fois par jour et les renouvelle si et seulement si vos certificats expirent dans un délai inférieur à 30 jours.

Testez si le renouvellement automatique est fonctionnel avec la commande suivante :
sudo certbot renew --dry-run

10 - HTTP2

Je vous conseille vivement d'activer le nouveau protocole HTTP2 qui augmentera la sécurité et la rapidité de votre Nextcloud.

HTTP2 permet notamment :
  • la compression des headers des requêtes et des réponses qui permet de réduire la bande passante lorsque les headers (comme les cookies) sont similaires
  • le multiplexage des requêtes au serveur consistant à faire passer de multiples informations via un seul tuyau de transmission. Ainsi, on économise les multiples connexions entre le client et le serveur. Les requêtes, quant à elles, sont effectuées simultanément par le navigateur. Les requêtes ne se suivent donc plus les unes derrière les autres (HTTP1) et les plus prioritaires (CSS par exemple) ne sont plus bloquées par les moins prioritaires (images par exemple)
  • le push des ressources du serveur au navigateur. Désormais, le serveur pourra envoyer l’ensemble des ressources référencées dans une même page (CSS, JS…), avant même que le navigateur n’ait analysé celle-ci.

L'activation du protocole HTTP2 est très simple et consiste en l'ajout de la directive http2 dans votre virtual host.

  • Modifiez votre virtual host (/etc/nginx/sites-available/nextcloud) et ajoutez la directive http2 à la suite de la directive ssl :
    upstream php-nextcloud {
        server                        unix:/var/run/nextcloud.sock;
    }
    
    server {
        listen                        80;
        listen                        [::]:80;
        server_name                   cloud.mondomaine.com;
        return                        301 https://$server_name$request_uri;
    }
    
    server {
        listen                        443 ssl http2;
        listen                        [::]:443 ssl http2;
        server_name                   cloud.mondomaine.com;
    
        # Path to the root of your installation
        root                          /var/www/nextcloud/;
    
    ...
    
  • Une fois la modification effectuée, n'oubliez pas de recharger votre configuration Nginx :
    sudo systemctl reload nginx.service

11 - Nextcloud

Vous risquez d'obtenir un timeout lors du premier lancement de Nextcloud dans votre navigateur (dû aux processus en arrière-plan permettant la création du filesystem pour votre utilisateur, la création du schéma de la base données Nextcloud, etc.). Il est donc nécessaire d'augmenter le temps de réponse dans la configuration de PHP-FPM et Nginx.

  • Éditez le fichier /etc/php/8.1/fpm/pool.d/nextcloud.conf et ajoutant le paramètre request_terminate_timeout (valeur en secondes) :
    [nextcloud]
    listen = /var/run/nextcloud.sock
    
    listen.owner = nextcloud
    listen.group = www-data
    
    user = nextcloud
    group = www-data
    
    pm = ondemand
    pm.max_children = 56
    pm.process_idle_timeout = 60s
    pm.max_requests = 500
    
    env[HOSTNAME] = $HOSTNAME
    env[PATH] = /usr/local/bin:/usr/bin:/bin
    env[TMP] = /tmp
    env[TMPDIR] = /tmp
    env[TEMP] = /tmp
    
    request_terminate_timeout = 3600
    
  • Éditez le virtual host /etc/nginx/sites-available/nextcloud et ajoutant le paramètre fastcgi_read_timeout (valeur en secondes) :
    upstream php-nextcloud {
        server                        unix:/var/run/nextcloud.sock;
    }
    
    server {
        listen                        80;
        listen                        [::]:80;
        server_name                   cloud.mondomaine.com;
        return                        301 https://$server_name$request_uri;
    }
    
    server {
        listen                        443 ssl http2;
        listen                        [::]:443 ssl http2;
        server_name                   cloud.mondomaine.com;
    
        # Path to the root of your installation
        root                          /var/www/nextcloud/;
    
        ssl_certificate               /etc/letsencrypt/live/cloud.mondomaine.com/fullchain.pem;
        ssl_certificate_key           /etc/letsencrypt/live/cloud.mondomaine.com/privkey.pem;
        ssl_trusted_certificate       /etc/letsencrypt/live/cloud.mondomaine.com/chain.pem;
        ssl_dhparam                   /etc/ssl/certs/dhparam.pem;
    
        ssl_session_cache             shared:SSL:1m;
        ssl_session_timeout           1440m;
        ssl_buffer_size               8k;
        ssl_protocols                 TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
        ssl_ciphers                   TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256:TLS_AES_128_CCM_8_SHA256:TLS_AES_128_CCM_SHA256: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     on;
        ssl_stapling                  on;
        ssl_stapling_verify           on;
    
        # Add headers to serve security related headers
        add_header                    X-Frame-Options "SAMEORIGIN";
        add_header                    X-Content-Type-Options nosniff;
        add_header                    X-XSS-Protection "1; mode=block";
        add_header                    X-Robots-Tag none;
        add_header                    X-Download-Options noopen;
        add_header                    X-Permitted-Cross-Domain-Policies none;
        add_header                    Strict-Transport-Security 'max-age=31536000; includeSubDomains;';
        add_header                    Referrer-Policy no-referrer always;
    
        location = /robots.txt {
            allow                     all;
            log_not_found             off;
            access_log                off;
        }
    
        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;
        }
    
        location = /.well-known/webfinger {
            return                    301 $scheme://$host:$server_port/index.php/.well-known/webfinger;
        }
    
        location = /.well-known/nodeinfo {
            return                    301 $scheme://$host:$server_port/index.php/.well-known/nodeinfo;
        }
    
        # 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;
    
        location / {
            rewrite                   ^ /index.php$uri;
        }
    
        location ~ ^/.well-known/acme-challenge/* {
            allow                     all;
        }
    
        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/.+|ocs-provider/.+).php(?:$|/) {
            fastcgi_split_path_info   ^(.+.php)(/.*)$;
            include                   fastcgi_params;
            fastcgi_param             SCRIPT_FILENAME $document_root$fastcgi_script_name;
            fastcgi_param             PATH_INFO $fastcgi_path_info;
            fastcgi_param             HTTPS on;
            #Avoid sending the security headers twice
            fastcgi_param             modHeadersAvailable true;
            fastcgi_param             front_controller_active true;
            fastcgi_pass              php-nextcloud;
            fastcgi_intercept_errors  on;
            fastcgi_request_buffering off;
            fastcgi_read_timeout      3600;
        }
    
        location ~ ^/(?:updater|ocs-provider)(?:$|/) {
            try_files                 $uri/ =404;
            index                     index.php;
        }
    
        # Adding the cache control header for js and css files
        # Make sure it is BELOW the PHP block
        location ~* .(?:css|js|woff|svg|gif)$ {
            try_files                 $uri /index.php$uri$is_args$args;
            add_header                Cache-Control "public, max-age=15778463";
            add_header                X-Content-Type-Options nosniff;
            add_header                X-XSS-Protection "1; mode=block";
            add_header                X-Robots-Tag none;
            add_header                X-Download-Options noopen;
            add_header                X-Permitted-Cross-Domain-Policies none;
            # Optional: Don't log access to assets
            access_log                off;
        }
    
        location ~* .(?:png|html|ttf|ico|jpg|jpeg)$ {
            try_files                 $uri /index.php$uri$is_args$args;
            # Optional: Don't log access to other assets
            access_log                off;
        }
    }
  • La nouvelle configuration sera prise en compte après redémarrage des services Nginx et PHP-FPM :
    sudo systemctl restart nginx.service
    sudo systemctl restart php8.1-fpm.service

Lancez votre navigateur et rendez-vous à l'adresse suivante : https://cloud.mondomaine.com/.

Configurez votre compte administrateur et les informations de votre base de données nécessaires à Nextcloud :

Nextcloud

Vérifiez la force de votre protocole SSL/TLS en vérifiant votre Nextcloud sur SSL Labs. Avec une telle configuration, vous devriez obtenir un A+.

12 - Améliorer les performances de votre Nextcloud avec le cache

12.1 - Cache PHP : OPcache

OPcache (qui signifie Optimizer Plus Cache) est introduit depuis la version 5.5.0 de PHP. Il sert à cacher l'opcode de PHP, c’est-à-dire les instructions de bas niveau générées par la machine virtuelle PHP lors de l’exécution d’un script. Autrement dit, le code pré-compilé est stocké en mémoire. Cela évite ainsi l'étape de compilation à chaque requête PHP. De plus, OPcache va optimiser l'exécution du code afin d'en améliorer les performances.

  • Dans le fichier /etc/php/8.1/fpm/php.ini, décommentez (en supprimant le caractère « ; » en début de ligne) et modifiez les valeurs des propriétés suivantes dans la section [opcache] se trouvant autour de la ligne 1766 :
    [opcache]
    opcache.enable=1
    opcache.enable_cli=1
    opcache.memory_consumption=128
    opcache.interned_strings_buffer=32
    opcache.max_accelerated_files=10000
    opcache.revalidate_freq=1
    opcache.save_comments=1
  • La nouvelle configuration sera prise en compte après redémarrage du service PHP-FPM :
    sudo systemctl restart php8.1-fpm.service

12.2 - Cache de données : APCu & Redis

APCu permet notamment de mettre en cache les variables PHP et de les stocker en mémoire vive. Redis est un système de gestion de base de données NoSQL avec un système de clef-valeur scalable (s'adapte à la charge). Une des principales caractéristiques de Redis est de conserver l'intégralité des données en RAM. Cela permet d'obtenir d'excellentes performances en évitant les accès disques, particulièrement coûteux.

  • Installez les paquets APCu et Redis :
    sudo apt-get install php-apcu redis-server php-redis -y
  • Ajoutez la ligne suivante dans le fichier /etc/php/8.1/mods-available/apcu.ini :
    extension=apcu.so
    apc.enable_cli=1
    
  • Connectez-vous sous l'utilisateur nextcloud afin de pouvoir modifier le fichier de configuration de votre Nextcloud :
    su nextcloud
  • Ajoutez les lignes suivantes dans le fichier /var/www/nextcloud/config/config.php :
    <!--?php
    $CONFIG = array (
      'instanceid' =--> '*****secret*****',
      'passwordsalt' => '*****secret*****',
      'secret' => '*****secret*****',
      'trusted_domains' =>
      array (
        0 => 'cloud.mondomaine.com',
      ),
      'datadirectory' => '/var/www/nextcloud/data',
      'overwrite.cli.url' => 'https://cloud.mondomaine.com',
      'dbtype' => 'mysql',
      'version' => '24.0.0.12',
      'dbname' => 'nextcloud',
      'dbhost' => 'localhost',
      'dbport' => '',
      'dbtableprefix' => 'oc_',
      'dbuser' => 'nextcloud',
      'dbpassword' => '*****secret*****',
      'installed' => true,
      'memcache.local' => '\\OC\\Memcache\\APCu',
      'memcache.locking' => '\\OC\\Memcache\\Redis',
      'redis' => array(
        'host' => 'localhost',
        'port' => 6379,
      ),
    );
    
  • Revenez sous votre super-utilisateur :
    exit
  • La nouvelle configuration sera prise en compte après redémarrage du service PHP-FPM :
    sudo systemctl restart php8.1-fpm.service

13 - Améliorer la sécurité de votre Nextcloud

Développé en langage Python, Fail2Ban est un outil permettant d'analyser des fichiers de logs et de déclencher des actions si certaines activités suspectes sont détectées. Fail2ban est capable de détecter des connexions non autorisées et de bannir (via iptables) l'adresse IP de l'attaquant. Les attaques de type brute force (tests de différentes combinaisons nom d'utilisateur / mot de passe) seront ainsi bloquées.

Fail2Ban se base sur un système de prisons (jails) que l'on peut définir, activer ou désactiver dans un simple fichier de configuration.

Fail2ban « écoute » les logs générés par Nextcloud. Si Fail2ban détecte plus de 3 tentatives d'accès frauduleuses provenant d'une même IP sur la page de login, celui-ci bloque automatiquement cette IP pour une durée que nous préciserons dans le fichier de configuration.

  • Connectez-vous sous l'utilisateur nextcloud afin de pouvoir modifier le fichier de configuration de votre Nextcloud :
    su nextcloud
  • Activez les logs en ajoutant les lignes suivantes dans le fichier de configuration de Nextcloud /var/www/nextcloud/config/config.php :
    <!--?php
    $CONFIG = array (
      'instanceid' =--> '*****secret*****',
      'passwordsalt' => '*****secret*****',
      'secret' => '*****secret*****',
      'trusted_domains' =>
      array (
        0 => 'cloud.mondomaine.com',
      ),
      'datadirectory' => '/var/www/nextcloud/data',
      'overwrite.cli.url' => 'https://cloud.mondomaine.com',
      'dbtype' => 'mysql',
      'version' => '24.0.0.12',
      'dbname' => 'nextcloud',
      'dbhost' => 'localhost',
      'dbport' => '',
      'dbtableprefix' => 'oc_',
      'dbuser' => 'nextcloud',
      'dbpassword' => '*****secret*****',
      'installed' => true,
      'memcache.local' => '\\OC\\Memcache\\APCu',
      'memcache.locking' => '\\OC\\Memcache\\Redis',
      'redis' => array(
        'host' => 'localhost',
        'port' => 6379,
      ),
      'loglevel' => 2,
      'logtimezone' => 'Europe/Paris',
      'logfile' => '/var/log/nextcloud/nextcloud.log',
      'log_rotate_size' => '104857600',
    );

    Le paramètre log_rotate_size permet d'activer la rotation des logs et limite la taille maximale du fichier de log. Dans cet exemple, lorsque le fichier atteindra 100 Mo (104857600 = 100 * 1024 * 1024 bytes), un nouveau fichier sera créé et l'ancien écrasé.

  • Revenez sous votre super-utilisateur :
    exit
  • Créez le répertoire /var/log/nextcloud et attribuez-le à l'utilisateur nextcloud et au groupe www-data :
    sudo mkdir /var/log/nextcloud
    sudo chown nextcloud:www-data /var/log/nextcloud
  • Installez le paquet fail2ban :
    sudo apt-get -y install fail2ban
  • Créez le filtre /etc/fail2ban/filter.d/nextcloud.conf et ajoutez les lignes suivantes :
    [Definition]
    failregex=^{"reqId":".*","remoteAddr":".*","app":"core","message":"Login failed: '.*' \(Remote IP: '<HOST>'\)","level":2,"time":".*"}$
              ^{"reqId":".*","level":2,"time":".*","remoteAddr":".*","user,:".*","app":"no app in context".*","method":".*","message":"Login failed: '.*' \(Remote IP: '<HOST>'\)".*}$
              ^{"reqId":".*","level":2,"time":".*","remoteAddr":".*","user":".*","app":".*","method":".*","url":".*","message":"Login failed: .* \(Remote IP: <HOST>\).*}$
  • Créez le jail /etc/fail2ban/jail.local dédié à Nextcloud et ajoutez les lignes suivantes :
    [nextcloud]
    enabled = true
    port = 80,443
    protocol = tcp
    filter = nextcloud
    maxretry = 3
    bantime = 3600
    logpath = /var/log/nextcloud/nextcloud.log

    Avec cette configuration, une machine sera bloquée pendant 60min (3600 secondes) au bout de 3 tentatives de connexion échouées.

  • Redémarrez le service fail2ban :
    sudo systemctl restart fail2ban.service

Vous pourrez vérifier périodiquement les IP bloquées dans le fichier de log de Fail2ban : /var/log/fail2ban.log.

14 - Suivre les recommandations de Nextcloud

Votre instance Nextcloud effectue automatiquement des vérifications sur la sécurité et la configuration. Il est possible de consulter les avertissements liés à votre configuration dans les paramètres de votre Nextcloud (Administration → Vue d'ensemble) :

Nextcloud Recommandations

14.1 - Augmenter la mémoire PHP

  • Éditez le fichier /etc/php/8.1/fpm/php.ini et modifiez la valeur de la variable memory_limit (ligne 409) :
    memory_limit=512M
  • Redémarrez le service php-fpm :
    sudo systemctl restart php8.1-fpm.service

14.2 - Création d'index supplémentaires

Cette opération permet d'améliorer la vitesse des requêtes SQL et par conséquent la navigation, l'affichage et la recherche de vos fichiers.

  • Connectez-vous sous l'utilisateur nextcloud et placez-vous à la racine du répertoire de Nextcloud :
    su nextcloud
    cd /var/www/nextcloud
  • Lancez une nouvelle indexation :
    php occ db:add-missing-indices

14.3 - Modification du type de données dans les tables Nextcloud

Certaines colonnes de la base de données n'ont pas été converties automatiquement en big int. Il est nécessaire de réaliser cette opération manuellement.

  • Toujours connecté avec l'utilisateur nextcloud et dans le répertoire /var/www/nextcloud, lancez la conversion :
    php occ db:convert-filecache-bigint

14.4 - Définition du code pays pour la gestion des téléphones

  • Toujours connecté avec l'utilisateur nextcloud, ajoutez la ligne suivante dans le fichier de configuration de Nextcloud /var/www/nextcloud/config/config.php :
    <!--?php
    $CONFIG = array (
      'instanceid' =--> '*****secret*****',
      'passwordsalt' => '*****secret*****',
      'secret' => '*****secret*****',
      'trusted_domains' =>
      array (
        0 => 'cloud.mondomaine.com',
      ),
      'datadirectory' => '/var/www/nextcloud/data',
      'overwrite.cli.url' => 'https://cloud.mondomaine.com',
      'dbtype' => 'mysql',
      'version' => '24.0.0.12',
      'dbname' => 'nextcloud',
      'dbhost' => 'localhost',
      'dbport' => '',
      'dbtableprefix' => 'oc_',
      'dbuser' => 'nextcloud',
      'dbpassword' => '*****secret*****',
      'installed' => true,
      'memcache.local' => '\\OC\\Memcache\\APCu',
      'memcache.locking' => '\\OC\\Memcache\\Redis',
      'redis' => array(
        'host' => 'localhost',
        'port' => 6379,
      ),
      'loglevel' => 2,
      'logtimezone' => 'Europe/Paris',
      'logfile' => '/var/log/nextcloud/nextcloud.log',
      'log_rotate_size' => '104857600',
      'default_phone_region' => 'FR',
    );

14.5 - Configuration de l'envoi d'email

  • Renseignez votre email à l'adresse suivante : https://[URL_DE_VOTRE_CLOUD]/settings/user
    Nextcloud configuration email 1
  • Rendez-vous à l'adresse suivante : https://[URL_DE_VOTRE_CLOUD]/settings/admin et saisissez les informations du serveur SMTP utilisé. Dans la capture suivante, les informations renseignées sont celles du serveur SMTP Free mais il est tout à fait possible d'utiliser le serveur SMTP Gmail, Outlook, ou autre... Chaque serveur SMTP dispose de sa propre configuration. Je vous invite donc à consulter les informations à renseigner pour le serveur SMTP utilisé.
    Nextcloud configuration email 2
  • Testez la configuration en cliquant sur Envoyer un e-mail. Un message E-mail envoyé s'affichera en cas de succès.

Vous pouvez maintenant recharger la page et constater que la sécurité et la configuration suivent désormais les recommandations officielles :

Nextcloud Recommandations Succès

15 - Installation de la suite Collabora Online

Nextcloud Collabora Online

Collabora Online est une puissante suite bureautique en ligne basée sur LibreOffice avec édition collaborative. Elle prend en charge tous les principaux documents, formats de feuille de calcul et de présentation, et fonctionne avec tous les navigateurs modernes.

  • Toujours connecté avec l'utilisateur nextcloud et dans le répertoire /var/www/nextcloud, lancez la commande suivante :
    php -d memory_limit=512M occ app:install richdocumentscode
  • Revenez sous votre super-utilisateur :
    exit
  • Remplacez la ligne suivante dans votre virtual host par celle-ci :
    ...
        location ~ ^/(?:\.|autotest|occ|issue|indie|db_|console) {
            deny                      all;
        }
    
        location ~ ^/(?:index|remote|public|cron|core/ajax/update|status|ocs/v[12]|updater/.+|ocs-provider/.+|.+\/richdocumentscode\/proxy).php(?:$|/) {
            fastcgi_split_path_info   ^(.+.php)(/.*)$;
            include                   fastcgi_params;
            fastcgi_param             SCRIPT_FILENAME $document_root$fastcgi_script_name;
            fastcgi_param             PATH_INFO $fastcgi_path_info;
            fastcgi_param             HTTPS on;
    ...
    
  • Rechargez votre configuration Nginx :
    sudo systemctl reload nginx.service

16 - Accéder à votre Nextcloud à partir de votre réseau local

Si votre Nextcloud est hébergé chez vous, l'accès à votre cloud via votre réseau local peut être intéressant. Nous allons créer un nom de domaine accessible uniquement à partir de votre réseau local.

  • Ajoutez un nom de domaine dans le fichier /etc/hosts pointant vers votre réseau local (127.0.0.1) :
    127.0.0.1   localhost
    127.0.0.1   cloud.local
    
  • Ajoutez le nom de domaine dans le virtual host de votre Nextcloud (/etc/nginx/sites-available/nextcloud) :
    upstream php-nextcloud {
        server                        unix:/var/run/nextcloud.sock;
    }
    
    server {
        listen                        80;
        listen                        [::]:80;
        server_name                   cloud.mondomaine.com cloud.local;
        return                        301 https://$server_name$request_uri;
    }
    
    server {
        listen                        443 ssl http2;
        listen                        [::]:443 ssl http2;
        server_name                   cloud.mondomaine.com cloud.local;
    
        ...
  • Rechargez la configuration Nginx :
    sudo systemctl reload nginx.service
  • Connectez-vous sous l'utilisateur nextcloud afin de pouvoir modifier le fichier de configuration de votre Nextcloud :
    su nextcloud
  • Ajoutez la ligne suivante dans le fichier de configuration Nextcloud (/var/www/nextcloud/config/config.php) :
    <!--?php
    $CONFIG = array (
      'instanceid' =--> '*****secret*****',
      'passwordsalt' => '*****secret*****',
      'secret' => '*****secret*****',
      'trusted_domains' =>
      array (
        0 => 'cloud.mondomaine.com',
        1 => 'cloud.local'
      ),
      'datadirectory' => '/var/www/nextcloud/data',
      'overwrite.cli.url' => 'https://cloud.mondomaine.com',
      'dbtype' => 'mysql',
      'version' => '24.0.0.12',
      'dbname' => 'nextcloud',
      'dbhost' => 'localhost',
      'dbport' => '',
      'dbtableprefix' => 'oc_',
      'dbuser' => 'nextcloud',
      'dbpassword' => '*****secret*****',
      'installed' => true,
      'memcache.local' => '\\OC\\Memcache\\APCu',
      'memcache.locking' => '\\OC\\Memcache\\Redis',
      'redis' => array(
        'host' => 'localhost',
        'port' => 6379,
      ),
      'loglevel' => 2,
      'logtimezone' => 'Europe/Paris',
      'logfile' => '/var/log/nextcloud/nextcloud.log',
      'log_rotate_size' => 104857600,
      'default_phone_region' => 'FR',
    );
  • Lancez votre navigateur et rendez-vous à l'adresse suivante : cloud.local
    . Cette adresse ne sera accessible qu'au sein de votre réseau local.

17 - Questions et problèmes rencontrés

  • Où se trouvent mes fichiers ?

    Les fichiers créés dans Nextcloud sont classés par utilisateur et se trouvent dans /var/www/nexcloud/data/[USER]/files.

  • Le téléchargement de gros fichiers échoue au bout d'une heure précisément...

    Reprenez la section 11 et augmentez la valeur du paramètre request_terminate_timeout dans le fichier /etc/php/8.1/fpm/pool.d/nextcloud.conf et celle du paramètre fastcgi_read_timeout dans le fichier /etc/nginx/sites-available/nextcloud.

  • Lorsque je dépose des fichiers par FTP ou SMB dans le répertoire de mon Nextcloud, les fichiers ne sont pas visibles dans l'interface web Nextcloud.

    Pour éviter des accès disques permanents, Nextcloud sauvegarde l'emplacement de vos fichiers en base de données. Si pour ajouter un fichier, vous utilisez un autre moyen que l'interface web, Nextcloud doit être notifié. Pour cela, vous disposez de deux solutions :

    Solution 1 : forcer la vérification du filesystem à chaque requête. Cette méthode peut impacter les performances de votre Nextcloud :

    Connecté sous l'utilisateur nextcloud, ajoutez la ligne suivante dans le fichier de configuration Nextcloud (/var/www/nextcloud/config/config.php) :
    <!--?php
    $CONFIG = array (
      'instanceid' =--> '*****secret*****',
      'passwordsalt' => '*****secret*****',
      'secret' => '*****secret*****',
      'trusted_domains' =>
      array (
        0 => 'cloud.mondomaine.com',
        1 => 'cloud.local'
      ),
      'datadirectory' => '/var/www/nextcloud/data',
      'overwrite.cli.url' => 'https://cloud.mondomaine.com',
      'dbtype' => 'mysql',
      'version' => '24.0.0.12',
      'dbname' => 'nextcloud',
      'dbhost' => 'localhost',
      'dbport' => '',
      'dbtableprefix' => 'oc_',
      'dbuser' => 'nextcloud',
      'dbpassword' => '*****secret*****',
      'installed' => true,
      'memcache.local' => '\\OC\\Memcache\\APCu',
      'memcache.locking' => '\\OC\\Memcache\\Redis',
      'redis' => array(
        'host' => 'localhost',
        'port' => 6379,
      ),
      'loglevel' => 2,
      'logtimezone' => 'Europe/Paris',
      'logfile' => '/var/log/nextcloud/nextcloud.log',
      'log_rotate_size' => 104857600,
      'default_phone_region' => 'FR',
      'filesystem_check_changes' => 1,
    );

    N'oubliez pas d'ajouter une virgule à la fin de la ligne précédente !

    Solution 2 : scanner les fichiers avec la commande occ :

    Connecté sous l'utilisateur nextcloud et dans le répertoire /var/www/nextcloud, exécutez la commande suivante :
    php occ files:scan

    Cette solution implique que la commande occ doit être exécutée à chaque modification de votre arborescence de fichiers. Il est tout à fait possible d'automatiser l'opération et de choisir une fréquence d'exécution en créant une tâche cron.

18 - Nextcloud sur Android...


Découvrez l'excellente application officielle Nextcloud sur Android qui vous permettra de synchroniser et de partager vos fichiers sur votre mobile.
Testé sur
Ubuntu Server 22.04 LTS
Auteur
Edouard WATTECAMPS

16 réflexions au sujet de “Ubuntu 22.04 - Installation de Nextcloud 24 (Hub II) avec Nginx, PHP7-FPM, MariaDB et SSL/TLS”

  1. Bonjour,
    Merci pour cette documentation sur Nextcloud. Elle est claire, précise et surtout opérationnelle !!!!

    Cordialement,

    Répondre
  2. Super taf, je ne regrette pas l’inscription! un NC aux petits oignons avec une conf bien plus optimisée que ma précédente plus « classique ».
    Pour info j’ai opté pour un CT Ubuntu sous Proxmox qui accroit d’avantage la fluidité même si je compromets un peu la sécurité.

    Répondre
  3. Perfect tuto qui m’a permis de passer de la location d’un vps ovh au self hosted, avec une config propre, fluide et beaucoup plus rapide (plus de ram, meilleur processeur).

    Merci

    Répondre
  4. Bonjour !

    Un grand merci pour ce travail ! J’ai installé Nextcloud sur un VPS sans aucun soucis et en apprenant beaucoup 🙂

    Juste une petite coquille : au point 13 – Améliorer la sécurité de votre Nextcloud dans la modif du fichier /var/www/nextcloud/config/config.php, il manque une virgule après « ‘log_rotate_size’ => ‘104857600’ » ce qui entraine une Internal Server Error.

    Cordialement.

    Répondre
  5. Super tuto d’installation de NC. Ca fonctionne super bien du premier coup mais sous Debian 10 😉
    Le seul soucis c’est que NC ne voir que mon premier disk sda mais pas le second sdb. C’est un serveur dédié avec 2 x 1TB.

    Répondre
  6. Merci pur ce tuto super clair et bien détaillé. Je l’ai suivi pour installer Nextcloud sur mon serveur perso sous debian buster et tout s’est bien passé. Je ne regrette pas l’inscription non plus.

    Répondre
  7. Bonjour,
    Après l’installation mon Nextcloud fonctionnait correctement alors que j’vais des soucis avec Piwigo. J’ai réglé le problème Piwigo qui provenait d’une mauvaise version de php-fpm (Piwigo n’accepte pas encore la version 8.0). Tout est réglé maintenant mais je n’arrive plus à me connecter à Nextcloud (502 Bad gateway). Encore un problème de socket, nextcloud.sock n’existe pas dans /var/run.
    A quel moment est créé ce socket? Mes connaissances en PHP étant assez limitées, une aide serait la bienvenue.
    Merci par avance.
    Jean Claude

    Répondre
  8. Bonjour,
    Suite à divers problèmes, j’ai décidé de changer l’OS de mon serveur. J’ai donc installé Ubuntu server 20.04 LTS qui fonctionne parfaitement. J’ai installé Nextcloud en suivant votre tuto, par ailleurs très bien fait. Aucun problème si ce n’est au moment de l’installation du cache. En effectuant les modifications que vous indiquez dans /var/www/nextcloud/config/config.php, j’obtenais à chaque fois un message d’erreur lors du rafraîchissement du GUI Nextcloud (Internal server error), erreur qui disparaissait quand j’enlevais les modifs. J’ai finalement réussi à corriger l’incident en doublant les caractères \, donc en codant par exemple \\OC\\Memcache\\Redis, et ce pour toutes les lignes . Et je n’ai plus eu d’erreur serveur et dans les avertissements, la ligne signalant l’absence de mémoire cache a bien disparu.
    Je vous livre l’info pour éventuellement corriger la partie du tuto concernée, si vous le jugez utile.
    Cordialement
    Jean Claude Gourdon

    Répondre
  9. Bonsoir,
    je viens de procéder a la création en suivant de A a Z votre procédure, cependant lors de l’utilisation de Collabora online, je me retrouve avec le message suivant :

    impossible d’établir une connexion au serveur Collabora Online. Cette erreur peut-être due à une erreur de configuration de votre serveur web

    Avez vous une idée ?

    Bien à vous

    Répondre
  10. Bonjour,

    concernant la vérification du filesystem à chaque requête, il ne faudra pas mettre la commande « filesystem_check_changes » à 1 plutot que à 0 ?

    Cordialement

    Répondre
  11. Bonjour,

    j’ai un souci/question concernant le UMask, j’ai l’impression que le paramètre n’est pas prit en compte.

    Avec un UMask 0027, les droits devraient être en 640 (rw-r—–) – 750 (rwxr-x—) mais quand Nextcloud crée des dossiers et/ou fichiers, les droits sont en 644 (rw-r–r–) – 755 (rwxr-xr-x) (0022). Idéalement, j’aimerai un UMask en 0007.

    Cordialement

    Répondre

Laisser un commentaire