GNU/Linux >> Tutoriels Linux >  >> Ubuntu

Comment installer Nextcloud avec Nginx et Lets Encrypt SSL sur Ubuntu 20.04 LTS

Nextcloud est un logiciel gratuit (Open Source) de type Dropbox, un fork du projet ownCloud. Nextcloud est écrit en PHP et JavaScript, il prend en charge de nombreux systèmes de bases de données tels que MySQL/MariaDB, PostgreSQL, Oracle Database et SQLite.

Afin de garder vos fichiers synchronisés entre Desktop et votre propre serveur, Nextcloud fournit des applications pour les ordinateurs de bureau Windows, Linux et Mac et une application mobile pour Android et iOS. Nextcloud n'est pas seulement un clone de Dropbox, il fournit des fonctionnalités supplémentaires telles que le calendrier, les contacts, la planification de tâches et le streaming multimédia avec Ampache, etc.

Dans ce tutoriel, nous allons vous montrer comment installer et configurer la dernière version de Nextcloud (au moment d'écrire ces lignes, la dernière version est la 18) sur un serveur Ubuntu 20.04. Nous exécuterons Nextcloud avec un serveur Web Nginx et PHP7.4-FPM et utiliserons le serveur MariaDB comme système de base de données.

Prérequis

  • Ubuntu 20.04
  • Privilèges root

Ce que nous allons faire

  1. Installer le serveur Web Nginx
  2. Installer et configurer PHP7.4-FPM
  3. Installer et configurer le serveur MySQL
  4. Générer SSL Letsencrypt
  5. Télécharger Nextcloud 18
  6. Configurer l'hôte virtuel Nginx pour Nextcloud
  7. Configuration du pare-feu UFW
  8. Post-installation de Nextcloud

Étape 1 - Installer le serveur Web Nginx

La première étape que nous ferons dans ce guide nextcloud consiste à installer le serveur Web Nginx. Nous utiliserons le serveur Web Nginx au lieu du serveur Web Apache.

Connectez-vous au serveur et mettez à jour le référentiel, puis installez le serveur Web Nginx à l'aide de la commande apt comme indiqué ci-dessous.

sudo apt update
sudo apt install nginx -y

Une fois l'installation terminée, démarrez le service Nginx et activez le service pour qu'il se lance à chaque démarrage du système à l'aide de systemctl.

systemctl start nginx
systemctl enable nginx

Le service Nginx est opérationnel, vérifiez-le à l'aide de la commande suivante.

systemctl status nginx

Et vous obtiendrez le résultat ci-dessous.

En conséquence, le serveur Web Nginx a été installé sur Ubuntu 20.04.

Étape 2 - Installer et configurer PHP7.4-FPM

Par défaut, Ubuntu 20.04 est livré avec la version par défaut de PHP 7.4.

Installez les packages PHP et PHP-FPM requis par Nextcloud à l'aide de la commande apt ci-dessous.

sudo apt install php-fpm php-curl php-cli php-mysql php-gd php-common php-xml php-json php-intl php-pear php-imagick php-dev php-common php-mbstring php-zip php-soap php-bz2 -y

Une fois l'installation terminée, nous allons configurer les fichiers php.ini pour php-fpm et php-cli.

Allez dans le répertoire '/etc/php/7.4'.

cd /etc/php/7.4/

Modifiez les fichiers php.ini pour php-fpm et php-cli à l'aide de vim.

vim fpm/php.ini
vim cli/php.ini

Décommentez la ligne 'date.timezone' et modifiez la valeur avec votre propre fuseau horaire.

date.timezone = Asia/Jakarta

Décommentez la ligne 'cgi.fix_pathinfo' et remplacez la valeur par '0'.

cgi.fix_pathinfo=0

Enregistrez et quittez.

Ensuite, modifiez la configuration du pool php-fpm 'www.conf'.

vim fpm/pool.d/www.conf

Décommentez ces lignes ci-dessous.

env[HOSTNAME] = $HOSTNAME
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp

Enregistrez et quittez.

Redémarrez le service PHP7.4-FPM et activez-le pour qu'il se lance à chaque démarrage du système.

systemctl restart php7.4-fpm
systemctl enable php7.4-fpm

Vérifiez maintenant le service PHP-FPM à l'aide de la commande suivante.

ss -xa | grep php
systemctl status php7.4-fpm

Et vous obtiendrez le php-fpm est opérationnel sous le fichier sock '/run/php/php7.4-fpm.sock'.

Étape 3 - Installer et configurer le serveur MariaDB

Dans cette étape, nous allons installer la dernière version de MariaDB et créer une nouvelle base de données pour l'installation de nextcloud. La dernière version des packages MariaDB est disponible sur le référentiel par défaut.

Installez la dernière version du serveur MariaDB à l'aide de la commande apt ci-dessous.

sudo apt install mariadb-server -y

Une fois l'installation terminée, démarrez le service MariaDB et activez-le pour qu'il se lance à chaque démarrage du système.

systemctl start mariadb
systemctl enable mariadb

Vérifiez maintenant le service MySQL à l'aide de la commande suivante.

systemctl status mariadb

Le serveur MariaDB est opérationnel sur Ubuntu 20.04.

Ensuite, nous allons configurer le mot de passe root de MariaDB à l'aide de la commande 'mysql_secure_installation'.

Exécutez la commande suivante.

mysql_secure_installation

Et il vous sera demandé une configuration de MariaDB Server. Saisissez également le nouveau mot de passe root pour MariaDB Server.

Enter current password for root (enter for none): Press Enter
Set root password? [Y/n] Y
Remove anonymous users? [Y/n] Y
Disallow root login remotely? [Y/n] Y
Remove test database and access to it? [Y/n] Y
Reload privilege tables now? [Y/n] Y

Et le mot de passe root MariaDB a été configuré.

Ensuite, nous allons créer une nouvelle base de données pour l'installation de nextcloud. Nous allons créer une nouvelle base de données nommée 'nextcloud_db' avec l'utilisateur 'nextclouduser' et le mot de passe '[email protected]'.

Connectez-vous au shell MySQL en tant qu'utilisateur root avec la commande mysql.

mysql -u root -p
TYPE THE MYSQL ROOT PASSWORD

Créez maintenant la base de données et l'utilisateur avec le mot de passe en exécutant les requêtes MySQL suivantes.

create database nextcloud_db;
create user [email protected] identified by '[email protected]';
grant all privileges on nextcloud_db.* to [email protected] identified by '[email protected]';
flush privileges;

Et la nouvelle base de données et l'utilisateur pour l'installation de nextcloud ont été créés.

L'installation et la configuration de MariaDB pour nextcloud sont terminées.

Étape 4 - Générer SSL Letsencrypt

Dans ce tutoriel, nous allons sécuriser nextcloud en utilisant le SSL gratuit de Letsencrypt, et nous allons générer des fichiers de certificats à l'aide de l'outil Letsencrypt.

Si vous n'avez pas de nom de domaine ou si vous n'installez pas nextcloud sur l'ordinateur local, vous pouvez générer le certificat auto-signé à l'aide d'OpenSSL.

Installez l'outil 'letsencrypt' en utilisant la commande apt ci-dessous.

sudo apt install certbot -y

Une fois l'installation terminée, arrêtez le service nginx.

systemctl stop nginx

Ensuite, nous allons générer les certificats SSL pour notre nom de domaine 'nextcloud.hakase-labs.io' en utilisant la ligne de commande cerbot. Exécutez la commande ci-dessous.

certbot certonly --standalone -d cloud.hakase-labs.io

L'adresse e-mail vous sera demandée et elle sera utilisée pour la notification de renouvellement. Pour l'accord Letsencrypt TOS, tapez 'A' pour accepter et pour l'adresse e-mail de partage, vous pouvez taper 'N' pour Non.

Une fois terminé, vous obtiendrez le résultat comme indiqué ci-dessous.

Les certificats SSL Letsencrypt pour le nom de domaine netxcloud ont été générés, tous situés dans le répertoire '/etc/letsencrypt/live/votre-domaine'.

Étape 5 - Télécharger Nextcloud

Avant de télécharger le code source de nextcloud, assurez-vous que le package de décompression est installé sur le système. Si vous n'avez pas le package, installez-le à l'aide de la commande apt ci-dessous.

sudo apt install wget unzip zip -y

Allez maintenant dans le répertoire '/var/www' et téléchargez la dernière version de Nextcloud en utilisant la commande suivante.

cd /var/www/
wget -q https://download.nextcloud.com/server/releases/latest.zip

Extrayez le code source Nextcloud et vous obtiendrez un nouveau répertoire 'netxcloud', changez la propriété du répertoire nextcloud en utilisateur 'www-data'.

unzip -qq latest.zip
sudo chown -R www-data:www-data /var/www/nextcloud

En conséquence, Nextcloud a été téléchargé sous le répertoire '/var/www/nextcloud', et ce sera le répertoire racine Web.

Étape 6 - Configurer l'hôte virtuel Nginx pour Nextcloud

Dans cette étape, nous allons configurer l'hôte virtuel nginx pour nextcloud. Nous configurerons nextcloud pour qu'il s'exécute sous la connexion HTTPS et forcerons automatiquement la connexion HTTP vers la connexion HTTPS sécurisée.

Allez maintenant dans le répertoire '/etc/nginx/sites-available' et créez un nouveau fichier d'hôte virtuel 'nextcloud'.

cd /etc/nginx/sites-available/
vim nextcloud

Là, collez la configuration d'hôte virtuel nextcloud suivante.

upstream php-handler {
    #server 127.0.0.1:9000;
    server unix:/var/run/php/php7.4-fpm.sock;
}

server {
    listen 80;
    listen [::]:80;
    server_name cloud.hakase-labs.io;
    # enforce https
    return 301 https://$server_name:443$request_uri;
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name cloud.hakase-labs.io;

    # Use Mozilla's guidelines for SSL/TLS settings
    # https://mozilla.github.io/server-side-tls/ssl-config-generator/
    # NOTE: some settings below might be redundant
    ssl_certificate /etc/letsencrypt/live/cloud.hakase-labs.io/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/cloud.hakase-labs.io/privkey.pem;

    # Add headers to serve security related headers
    # Before enabling Strict-Transport-Security headers please read into this
    # topic first.
    #add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;" always;
    #
    # WARNING: Only add the preload option once you read about
    # the consequences in https://hstspreload.org/. This option
    # will add the domain to a hardcoded list that is shipped
    # in all major browsers and getting removed from this list
    # could take several months.
    add_header Referrer-Policy "no-referrer" always;
    add_header X-Content-Type-Options "nosniff" always;
    add_header X-Download-Options "noopen" always;
    add_header X-Frame-Options "SAMEORIGIN" always;
    add_header X-Permitted-Cross-Domain-Policies "none" always;
    add_header X-Robots-Tag "none" always;
    add_header X-XSS-Protection "1; mode=block" always;

    # Remove X-Powered-By, which is an information leak
    fastcgi_hide_header X-Powered-By;

    # Path to the root of your installation
    root /var/www/nextcloud;

    location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
    }

    # The following 2 rules are only needed for the user_webfinger app.
    # Uncomment it if you're planning to use this app.
    #rewrite ^/.well-known/host-meta /public.php?service=host-meta last;
    #rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json last;

    # The following rule is only needed for the Social app.
    # Uncomment it if you're planning to use this app.
    #rewrite ^/.well-known/webfinger /public.php?service=webfinger last;

    location = /.well-known/carddav {
      return 301 $scheme://$host:$server_port/remote.php/dav;
    }
    location = /.well-known/caldav {
      return 301 $scheme://$host:$server_port/remote.php/dav;
    }

    # set max upload size
    client_max_body_size 512M;
    fastcgi_buffers 64 4K;

    # Enable gzip but do not remove ETag headers
    gzip on;
    gzip_vary on;
    gzip_comp_level 4;
    gzip_min_length 256;
    gzip_proxied expired no-cache no-store private no_last_modified no_etag auth;
    gzip_types application/atom+xml application/javascript application/json application/ld+json application/manifest+json application/rss+xml application/vnd.geo+json application/vnd.ms-fontobject application/x-font-ttf application/x-web-app-manifest+json application/xhtml+xml application/xml font/opentype image/bmp image/svg+xml image/x-icon text/cache-manifest text/css text/plain text/vcard text/vnd.rim.location.xloc text/vtt text/x-component text/x-cross-domain-policy;

    # Uncomment if your server is 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\/.+)\.php(?:$|\/) {
        fastcgi_split_path_info ^(.+?\.php)(\/.*|)$;
        set $path_info $fastcgi_path_info;
        try_files $fastcgi_script_name =404;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $path_info;
        fastcgi_param HTTPS on;
        # Avoid sending the security headers twice
        fastcgi_param modHeadersAvailable true;
        # Enable pretty urls
        fastcgi_param front_controller_active true;
        fastcgi_pass php-handler;
        fastcgi_intercept_errors on;
        fastcgi_request_buffering off;
    }

    location ~ ^\/(?:updater|oc[ms]-provider)(?:$|\/) {
        try_files $uri/ =404;
        index index.php;
    }

    # Adding the cache control header for js, css and map files
    # Make sure it is BELOW the PHP block
    location ~ \.(?:css|js|woff2?|svg|gif|map)$ {
        try_files $uri /index.php$request_uri;
        add_header Cache-Control "public, max-age=15778463";
        # Add headers to serve security related headers (It is intended to
        # have those duplicated to the ones above)
        # Before enabling Strict-Transport-Security headers please read into
        # this topic first.
        #add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;" always;
        #
        # WARNING: Only add the preload option once you read about
        # the consequences in https://hstspreload.org/. This option
        # will add the domain to a hardcoded list that is shipped
        # in all major browsers and getting removed from this list
        # could take several months.
        add_header Referrer-Policy "no-referrer" always;
        add_header X-Content-Type-Options "nosniff" always;
        add_header X-Download-Options "noopen" always;
        add_header X-Frame-Options "SAMEORIGIN" always;
        add_header X-Permitted-Cross-Domain-Policies "none" always;
        add_header X-Robots-Tag "none" always;
        add_header X-XSS-Protection "1; mode=block" always;

        # Optional: Don't log access to assets
        access_log off;
    }

    location ~ \.(?:png|html|ttf|ico|jpg|jpeg|bcmap)$ {
        try_files $uri /index.php$request_uri;
        # Optional: Don't log access to other assets
        access_log off;
    }
}

Enregistrez et quittez.

Activez l'hôte virtuel et testez la configuration, et assurez-vous qu'il n'y a pas d'erreur.

ln -s /etc/nginx/sites-available/nextcloud /etc/nginx/sites-enabled/
nginx -t

Redémarrez maintenant le service PHP7.4-FPM et le service nginx à l'aide de la commande systemctl ci-dessous.

systemctl restart nginx
systemctl restart php7.4-fpm

La configuration de l'hôte virtuel Nginx pour nextcloud a été créée.

Étape 7 - Configurer le pare-feu UFW

Dans ce didacticiel, nous allons activer le pare-feu et nous utiliserons le pare-feu UFW pour Ubuntu.

Ajoutez SSH, HTTP et HTTPS à la liste de pare-feu UFW à l'aide de la commande ci-dessous.

for svc in ssh http https
do
ufw allow $svc
done

Après cela, activez le pare-feu UFW et vérifiez le service et le port autorisés.

ufw enable
ufw status numbered

Et vous obtiendrez le port HTTP 80 et le port HTTPS 443 est sur la liste.

Étape 8 - Post-installation de Nextcloud

Ouvrez votre navigateur Web et saisissez l'adresse URL de nextcloud.

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

Et vous serez redirigé vers la connexion HTTPS sécurisée.

Sur la page d'accueil, nous devons créer l'utilisateur administrateur pour nextcloud, tapez le mot de passe de l'utilisateur administrateur. Dans la configuration 'Dossier de données', saisissez le chemin complet du répertoire 'data' '/var/www/nextcloud/data'.

Faites défiler la page vers le bas et vous obtiendrez la configuration de la base de données. Tapez les informations de la base de données que nous avons créées à l'étape 3, puis cliquez sur le bouton "Terminer la configuration".

Si vous cochez l'option "Installer les applications recommandées", vous obtiendrez la page suivante.

Nextcloud installe pour vous des applications supplémentaires recommandées.

Et une fois l'installation terminée, vous obtiendrez le tableau de bord Nextcloud comme ci-dessous.

L'installation de Nextcloud 18 avec le serveur Web Nginx et la base de données MySQL sur Ubuntu 20.04 s'est terminée avec succès.


Ubuntu
  1. Comment installer Nextcloud avec Nginx sur Ubuntu 18.04 LTS

  2. Comment installer Magento 2 avec Nginx et Lets Encrypt SSL sur Ubuntu 20.04 LTS

  3. Comment installer Shopware avec NGINX et Lets encrypt sur Ubuntu 18.04 LTS

  4. Installez Automad CMS avec Nginx et Lets Encrypt SSL sur Ubuntu 18.04

  5. Comment installer Grav CMS avec Nginx et Lets Encrypt sur Ubuntu 18.04 LTS

Comment installer Moodle avec Nginx et Lets Encrypt SSL sur Ubuntu 20.04

Comment installer MediaWiki avec Nginx et Lets Encrypt SSL sur Ubuntu 20.04

Comment installer Gitea avec Nginx et Lets Encrypt SSL gratuit sur Ubuntu 20.04

Comment installer Nextcloud 13 sur Ubuntu 16.04 avec Nginx

Comment installer Let's Encrypt SSL avec Nginx sur Ubuntu 16.04 LTS

Comment installer Nginx avec Let's Encrypt SSL sur Ubuntu 20.04 LTS