Recherche de site Web

Installez Nextcloud sur Arch Linux avec Nginx, MariaDB et PHP7 en 2019


Dans ce tutoriel, je vais vous montrer comment configurer votre propre serveur Nextcloud sur Arch Linux avec Nginx, MariaDB et PHP7. Nextcloud est une alternative open source auto-hébergée à Dropbox. Avec Nextcloud, vous pouvez synchroniser des fichiers entre votre ordinateur, votre tablette et votre smartphone.

Conditions préalables

Ce tutoriel suppose que vous avez déjà installé une pile LEMP (Linux, Nginx, MariaDB/MySQL, PHP) sur Arch Linux. Si vous ne l’avez pas déjà fait, veuillez consulter le guide facile à suivre ci-dessous.

  • Installez Nginx, MariaDB, PHP7 (LEMP) sur Arch Linux

Après avoir installé la pile LEMP, revenez ici et suivez les instructions ci-dessous. Si vous disposez d'un serveur Arch Linux, connectez-vous dessus. Vous pouvez également utiliser votre ordinateur Arch Linux local.

Étape 1 : Installer le serveur Nextcloud sur Arch Linux

Téléchargez l'archive zip NextCloud sur votre serveur. La dernière version est NextCloud 16.0.1. Vous devrez peut-être modifier le numéro de version. Accédez à https://nextcloud.com/install et cliquez sur le bouton de téléchargement pour consulter la dernière version. Vous pouvez télécharger l'archive zip avec wget dans le terminal.

sudo pacman -S wget

wget https://download.nextcloud.com/server/releases/nextcloud-16.0.1.zip

Installez le décompressez et extrayez-le à la racine du document du serveur Web Nginx. (/usr/share/nginx/).

sudo pacman -S unzip

sudo unzip nextcloud-16.0.1.zip -d /usr/share/nginx/

Laissez ensuite l'utilisateur Nginx (http) être le propriétaire du répertoire nextcloud.

sudo chown http:http /usr/share/nginx/nextcloud/ -R

Étape 2 : Créer une base de données et un utilisateur dans MariaDB

Connectez-vous au serveur de base de données MariaDB avec la commande suivante :

sudo mysql -u root

Créez ensuite une base de données pour Nextcloud. Ce tutoriel nomme la base de données nextcloud. Vous pouvez utiliser le nom de votre choix.

create database nextcloud;

Créez l'utilisateur de la base de données. Encore une fois, vous pouvez utiliser votre nom préféré pour cet utilisateur. Remplacez votre mot de passe par votre mot de passe préféré.

create user nextclouduser@localhost identified by 'your-password';

Accordez à cet utilisateur tous les privilèges sur la base de données nextcloud.

grant all privileges on nextcloud.* to nextclouduser@localhost identified by 'your-password';

Videz la table des privilèges et quittez.

flush privileges;

exit;

Étape 3 : Activer la journalisation binaire dans MariaDB

Modifiez le fichier de configuration principal du serveur MariaDB.

sudo nano /etc/my.cnf.d/server.cnf

Ajoutez les deux lignes suivantes sous la ligne [mysqld].

log-bin        = mysql-bin
binlog_format  = mixed

Le format du journal binaire doit être défini sur mixte. Enregistrez et fermez le fichier. Redémarrez ensuite le service MariaDB.

sudo systemctl restart mariadb

Étape 4 : Créer un fichier de configuration Nginx pour Nextcloud

Tout d'abord, créez un répertoire conf.d pour les fichiers de configuration Nginx individuels.

sudo mkdir /etc/nginx/conf.d

Créez ensuite un fichier de configuration pour Nextcloud.

sudo nano /etc/nginx/conf.d/nextcloud.conf

Mettez le texte suivant dans le fichier.

server {
    listen 80;
    server_name nextcloud.your-domain.com;

    # Add headers to serve security related headers
    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;

    # Path to the root of your installation
    root /usr/share/nginx/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;

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

    location ~ /.well-known/acme-challenge {
      allow all;
    }

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

    # Disable gzip to avoid the removal of the ETag header
    gzip off;

    # Uncomment if your server is build with the ngx_pagespeed module
    # This module is currently not supported.
    #pagespeed off;

    error_page 403 /core/templates/403.php;
    error_page 404 /core/templates/404.php;

    location / {
       rewrite ^ /index.php$uri;
    }

    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/.+|core/templates/40[34])\.php(?:$|/) {
       include fastcgi_params;
       fastcgi_split_path_info ^(.+\.php)(/.*)$;
       fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
       fastcgi_param PATH_INFO $fastcgi_path_info;
       #Avoid sending the security headers twice
       fastcgi_param modHeadersAvailable true;
       fastcgi_param front_controller_active true;
       fastcgi_pass unix:/run/php-fpm/php-fpm.sock;
       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)$ {
        try_files $uri /index.php$uri$is_args$args;
        add_header Cache-Control "public, max-age=7200";
        # Add headers to serve security related headers (It is intended to
        # have those duplicated to the ones above)        
        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 ~* \.(?:svg|gif|png|html|ttf|woff|ico|jpg|jpeg)$ {
        try_files $uri /index.php$uri$is_args$args;
        # Optional: Don't log access to other assets
        access_log off;
   }
}

Remplacez le texte de couleur rouge par vos données réelles. Si vous configurez Nextcloud sur votre ordinateur personnel, entrez votre adresse IP privée pour le nom du serveur, comme :

server_name 192.168.1.105

Ensuite, modifiez le fichier /etc/nginx/nginx.conf

sudo nano /etc/nginx/nginx.conf

Ajoutez la ligne suivante dans la section http afin que les fichiers de configuration Nginx individuels soient chargés.

include /etc/nginx/conf.d/*.conf;

Comme ça:

http {
   include /etc/nginx/conf.d/*.conf;

   include mime.types;
   default_type application/octet-stream;

.....

Enregistrez et fermez le fichier. Testez ensuite les configurations Nginx.

sudo nginx -t

Si le test réussit, rechargez Nginx pour que les modifications prennent effet.

sudo systemctl reload nginx

Étape 5 : Installer et activer les modules PHP

Nextcloud nécessite que les modules mysql, gd, zip , intl et curl soient activés afin de fonctionner correctement. Le module mysql est déjà installé dans le tutoriel LEMP précédent. Installez maintenant les modules gd et intl avec la commande suivante :

sudo pacman -S php-gd php-intl

Modifiez ensuite le fichier php.ini.

sudo nano /etc/php/php.ini

Trouvez les 6 lignes suivantes (il y en a sur la ligne 900). Supprimez les points-virgules pour activer ces 6 modules.

;extension=mysqli     
;extension=pdo_mysql
;extension=gd 
;extension=intl
;extension=zip
;extension=curl

Vous pouvez également exécuter les 6 commandes suivantes pour activer ces extensions sur Arch Linux, vous n'avez donc pas besoin d'ouvrir le fichier et de trouver les 6 lignes. L'éditeur de texte sed recherchera et remplacera le texte sans ouvrir le fichier.

sudo sed -i 's/;extension=mysqli/extension=mysqli/g' /etc/php/php.ini
sudo sed -i 's/;extension=pdo_mysql/extension=pdo_mysql/g' /etc/php/php.ini
sudo sed -i 's/;extension=gd/extension=gd/g' /etc/php/php.ini
sudo sed -i 's/;extension=zip/extension=zip/g' /etc/php/php.ini
sudo sed -i 's/;extension=curl/extension=curl/g' /etc/php/php.ini
sudo sed -i 's/;extension=intl/extension=intl/g' /etc/php/php.ini

Enregistrez et fermez le fichier. Rechargez ensuite le processus php-fpm pour que les modifications prennent effet.

sudo systemctl reload php-fpm

le programme d'installation Web Nextcloud

Maintenant, dans la barre d'adresse de votre navigateur, tapez

nextcloud.your-domain.com

pour accéder au programme d'installation Web Nextcloud. Si vous effectuez l'installation sur un ordinateur Arch Linux local, saisissez votre adresse IP privée telle que 192.168.1.105. Vous verrez ce qui suit.

Vous devez créer un compte administratif et connecter le service NextCloud à la base de données MariaDB. Entrez le nom d'utilisateur, le mot de passe et le nom de la base de données que vous avez créés précédemment. Une fois que c'est fait, votre serveur Nextcloud est prêt à fonctionner.

Si vous utilisez un serveur Arch Linux distant, je vous recommande d'installer un certificat SSL/TLS avant de terminer l'installation dans le navigateur Web pour empêcher le reniflage malveillant.

Obtenez un certificat SSL gratuit de Let's Encrypt

Cette étape est nécessaire sur un serveur distant car vous voulez vous assurer que votre nom d'utilisateur et votre mot de passe Nextcloud ne sont pas détectés par des personnes malveillantes. Ignorez cette étape si vous configurez Nextcloud sur votre ordinateur personnel.

Nous devons d’abord installer le client certbot et le plugin Nginx qui sont disponibles dans le référentiel de la communauté Arch Linux.

sudo pacman -S certbot certbot-nginx

Utilisez ensuite le plugin Nginx pour obtenir et installer un certificat pour le serveur Web Nginx comme ci-dessous.

sudo certbot --nginx --agree-tos --redirect --staple-ocsp --email your-email-address -d nextcloud.your-domain.com

Je suppose que vous utilisez un nom de domaine tel que nextcloud.your-domain.com pour accéder à l'interface Web ownCloud. Vous devez également faire pointer votre nom de domaine vers l'adresse IP de votre serveur dans DNS avant d'exécuter la commande ci-dessus.

Une fois le certificat obtenu et installé, rechargez Nginx.

sudo systemctl reload nginx

Certificat TLS à renouvellement automatique

Il est conseillé de renouveler automatiquement le certificat Let’s Encrypt TLS. Nous pouvons y parvenir avec le travail cron. Installez d’abord Cronie sur Arch Linux.

sudo pacman -S cronie

Démarrez le démon cron.

sudo systemctl start cronie

Activez le démarrage automatique au démarrage du système.

sudo systemctl enable cronie

Modifiez ensuite le fichier crontab de l'utilisateur root.

sudo crontab -e

Mettez la ligne suivante dans le fichier qui tentera de renouveler votre certificat une fois par jour.

@daily certbot renew --quiet

Enregistrez et fermez le fichier.

Configurer OPcache pour améliorer les performances

OPcache peut améliorer les performances des applications PHP en mettant en cache le bytecode précompilé. Par défaut, OPcache n'est pas activé sur Arch Linux. Pour l'activer, ouvrez le fichier php.ini.

sudo nano /etc/php/php.ini

Trouvez la ligne suivante.

;zend_extension=opcache

Supprimez le point-virgule pour que l'extension OPcache (alias module) puisse être activée. Enregistrez et fermez le fichier. Rechargez ensuite PHP-FPM.

sudo systemctl reload php-fpm

Vous pouvez maintenant vérifier les modules activés avec la commande suivante.

php -m

Par défaut, tous les paramètres opcache du fichier php.ini sont commentés. Pour de meilleures performances, il est recommandé d’utiliser les paramètres suivants.

opcache.enable=1
opcache.enable_cli=1
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.memory_consumption=128
opcache.save_comments=1
opcache.revalidate_freq=1

Après avoir effectué ces modifications. Enregistrez et fermez le fichier. Et rechargez PHP-FPM

sudo systemctl reload php-fpm

Augmenter la limite de taille du fichier de téléchargement

La taille maximale par défaut du fichier de téléchargement définie par Nginx est de 1 Mo. Pour autoriser le téléchargement de fichiers volumineux sur votre serveur NextCloud, modifiez le fichier de configuration Nginx pour NextCloud.

sudo nano /etc/nginx/conf.d/nextcloud.conf

Nous avons déjà défini la taille maximale du fichier dans ce fichier, comme indiqué par

client_max_body_size 512M;

Vous pouvez le changer si vous préférez, comme 1G.

client_max_body_size 1024M;

Enregistrez et fermez le fichier. Rechargez ensuite Nginx pour que les modifications prennent effet.

sudo systemctl reload nginx

PHP définit également une limite de taille de fichier de téléchargement. La taille maximale par défaut du fichier à télécharger est de 2 Mo. Pour augmenter la taille limite de téléchargement, modifiez le fichier de configuration PHP.

sudo nano /etc/php/php.ini

Recherchez la ligne suivante :

upload_max_filesize = 2M

Modifiez la valeur comme ci-dessous :

upload_max_filesize = 1024M

Enregistrez et fermez le fichier. Redémarrez ensuite PHP-FPM.

sudo systemctl restart php-fpm

Augmenter la limite de mémoire PHP

La limite de mémoire PHP par défaut est de 128 Mo. NextCloud recommande 512 Mo pour de meilleures performances. Pour modifier la limite de mémoire PHP, éditez le fichier php.ini.

sudo nano /etc/php/php.ini

Trouvez la ligne suivante. (ligne 404)

memory_limit = 128M

Modifiez la valeur.

memory_limit = 512M

Enregistrez et fermez le fichier. Vous pouvez également exécuter la commande suivante pour modifier la valeur sans ouvrir manuellement le fichier.

sudo sed -i 's/memory_limit = 128M/memory_limit = 512M/g' /etc/php/php.ini

Rechargez ensuite le service PHP-FPM pour que les modifications prennent effet.

sudo systemctl reload php-fpm

Configurer le cache Redis pour NextCloud

Si vous accédez à votre page paramètres -> présentation de NextCloud, vous pourriez voir l'avertissement suivant :

No memory cache has been configured. To enhance your performance please configure a memcache if available.

Nous activerons la mise en cache mémoire pour nextCloud en utilisant Redis. Exécutez la commande suivante pour installer le serveur Redis à partir du référentiel Arch Linux.

sudo pacman -S redis

Vous pouvez vérifier la version avec :

redis-server -v

Exemple de sortie :

Redis server v=5.0.6 sha=00000000:0 malloc=jemalloc-5.2.1 bits=64 build=862f233732e771fd

Démarrez Redis.

sudo systemctl start redis

Utilisez la commande suivante pour activer le démarrage automatique au moment du démarrage.

sudo systemctl enable redis

Afin de configurer Redis comme cache pour nextCloud, nous devons installer l'extension PHP pour l'interface avec Redis.

sudo pacman -S php-redis

Nous devons maintenant activer les extensions PHP igbinary et redis. Allez dans le répertoire /etc/php/conf.d/, ouvrez le fichier igbinary.ini et supprimez le point-virgule pour activer l'extension igbinary.

extension=igbinary.so

Ouvrez également le fichier redis.ini et supprimez le point-virgule pour activer l'extension redis.

extension=redis

Redémarrez ensuite PHP-FPM.

sudo systemctl restart php-fpm

Vérifiez si l'extension est activée.

php --ri redis

Sortir :

redis

Redis Support => enabled
Redis Version => 5.0.2
Available serializers => php, json, igbinary
Available compression => lzf

Directive => Local Value => Master Value
redis.arrays.algorithm => no value => no value
redis.arrays.auth => no value => no value
redis.arrays.autorehash => 0 => 0
redis.arrays.connecttimeout => 0 => 0
redis.arrays.distributor => no value => no value
redis.arrays.functions => no value => no value
redis.arrays.hosts => no value => no value
redis.arrays.index => 0 => 0
redis.arrays.lazyconnect => 0 => 0
redis.arrays.names => no value => no value
redis.arrays.pconnect => 0 => 0
redis.arrays.previous => no value => no value
redis.arrays.readtimeout => 0 => 0
redis.arrays.retryinterval => 0 => 0
redis.arrays.consistent => 0 => 0
redis.clusters.cache_slots => 0 => 0
redis.clusters.auth => no value => no value
redis.clusters.persistent => 0 => 0
redis.clusters.read_timeout => 0 => 0
redis.clusters.seeds => no value => no value
redis.clusters.timeout => 0 => 0
redis.pconnect.pooling_enabled => 1 => 1
redis.pconnect.connection_limit => 0 => 0
redis.session.locking_enabled => 0 => 0
redis.session.lock_expire => 0 => 0
redis.session.lock_retries => 10 => 10
redis.session.lock_wait_time => 2000 => 2000

Nous pouvons voir que l'extension Redis est activée. Ensuite, modifiez le fichier de configuration NextCloud.

sudo nano /usr/share/nginx/nextcloud/config/config.php

Ajoutez les lignes suivantes au-dessus de la ligne );.

'memcache.distributed' => '\OC\Memcache\Redis',
'memcache.local' => '\OC\Memcache\Redis',
'memcache.locking' => '\OC\Memcache\Redis',
'redis' => array(
     'host' => 'localhost',
     'port' => 6379,
     ),

Enregistrez et fermez le fichier. Redémarrez ensuite Nginx et PHP-FPM.

sudo systemctl restart nginx php-fpm

Revenez maintenant à la page d'administration de nextCloud, l'avertissement concernant la mise en cache de la mémoire devrait disparaître.

Emballer

Bravo! Vous avez configuré avec succès le stockage cloud personnel NextCloud sur Arch Linux avec Nginx, MariaDB et PHP7. Comme toujours, si vous avez trouvé cet article utile, abonnez-vous à notre newsletter gratuite ou suivez-nous sur Google+, Twitter ou aimez notre page Facebook. Merci de votre visite!

Articles connexes