Ceci est une ancienne révision du document !


Debian - Installation de Nextcloud

Prérequis

  • Une machine virtuelle sous Debian
  • Une entrée DNS valide. (Par default, Nextcloud ne répond qu'a son nom)
  • Les ports 80 et 443 redirigés vers Nextcloud (80 pour Let's Encrypt)
  • curl (apt install curl)
  • unzip (apt install unzip)

Procédure d'Installation

Installation d'apache

Si Apache a été installé via l'installeur de Debian, passer directement à l'installation des modules supplémentaires.

  • Mise à jour des repository Debian
apt update
  • Installation d'apache
apt install apache2

Après l'installation, on vérifie qu'apache est activé au démarre et lancé

systemctl is-enabled apache2
systemctl status apache2

Installation des modules

  • On active les modules nécessaire à l'utilisation de nextcloud (ssl, rewrite et headers)
a2enmod ssl rewrite headers
  • On redémarre apache
systemctl restart apache2
  • On vérifie que ces modules soient bien chargés.
apachectl -M | egrep "ssl|rewrite|headers"
  • On devrait voir des lignes similaires à celles ci dans la sortie
headers_module (shared)
rewrite_module (shared)
ssl_module (shared)

Installation de PHP

  • Installation des paquets de base + les paquets nécessaires à Nextcloud
apt install -y php 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 php-ldap php-bcmath php-gmp php-apcu libmagickcore-dev

Installation de MariaDB

  • Installation du client et du serveur
apt install mariadb-server mariadb-client
  • Vérifier que MariaDB est activé au démarrage et lancé
systemctl is-enabled mariadb
systemctl status mariadb
  • Une fois installé, on exécute l'assistant de sécurisation de MariaDB
mysql_secure_installation
  • On valide simplement vu qu'il n'y a pas de mot de passe root pour le moment
Enter current password for root (enter for none):
OK, successfully used password, moving on...

* On répond oui à la connexion via socket
witch to unix_socket authentication [Y/n] Y
Enabled successfully!
Reloading privilege tables..
... Success!
  • On choisi un mot de passe pour l'utilisateur root
Change the root password? [Y/n] Y
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
... Success!
  • On interdit les connexions anonymes.
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!
  • On interdit à l'utilisateur root de se connecter à distance. (cela ne devrait jamais être nécessaire)
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!
  • On supprime la base de test qui ne sert a rien
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!
  • On accepte de recharger les privilèges pour que les modifications prennent effet immédiatement.
Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

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

Création de la base de données pour Nextcloud

  • On se connecte à MariaDB
mysql -u root -p

Dans certain cas, le paramètre -p doit être omis car l'utilisateur root du système peut se connecter en tant que root de MariaDB sans avoir a entrer le mot de passe.

  • On crée la base de données pour Nextcloud.
CREATE DATABASE nextcloud_db;
  • On crée l'utilisateur de service pour l'accès à la base nouvellement créée. (Remplacer UTILISATEURNEXCLOUD et PASSWORD)
CREATE USER UTILISATEURNEXCLOUD@localhost IDENTIFIED BY 'PASSWORD';
  • On donne les droits au nouvel utilisateur sur la nouvelle base de données. (Remplacer UTILISATEURNEXTCLOUD par celui choisi précédement)
GRANT ALL PRIVILEGES ON nextcloud_db.* TO UTILISATEURNEXTCLOUD@localhost;
  • On applique les nouveau privilèges.
FLUSH PRIVILEGES;
  • On se déconnecte de MariaDB avec la commande “quit”

Installation de Nextcloud

On se place dans /var/www

cd /var/www

On télécharge la dernière version de Nextcloud (Adapter le lien en fonction de la dernière version)

curl -o nextcloud.zip https://download.nextcloud.com/server/releases/latest-25.zip

On extrait le fichier zip

unzip nextcloud.zip

On donne les droits d'accès aux fichiers à apache

chown -R www-data:www-data nextcloud

Installation d'un certificat Let's Encrypt

Cela permet de tester son installation via SSL même si la solution Let's Encrypt n'est pas définitive.

On installe Certbot

apt install certbot

Une fois installé, on crée les répertoires nécessaire et on ajuste les droits

mkdir -p /var/lib/letsencrypt/.well-known
chgrp www-data /var/lib/letsencrypt
chmod g+s /var/lib/letsencrypt

On crée un Vhost pour Let's Encrypt avec son editeur préféré. (Exécuter l'éditeur en indiquant un fichier qui n'existe pas le crée automatiquement)

vi /etc/apache2/conf-available/well-known.conf

ou

nano /etc/apache2/conf-available/well-known.conf

Copier/coller le contenu suivant

Alias /.well-known/acme-challenge/ "/var/lib/letsencrypt/.well-known/acme-challenge/"
<Directory "/var/lib/letsencrypt/">
    AllowOverride None
    Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
    Require method GET POST OPTIONS
</Directory>

Activer le nouveau Vhost en créant un lien symbolique dans le dossier “conf_enable” (c'est une convention d'Apache)

a2ensite well-known.conf

ou

ln -s /etc/apache2/conf-available/well-known.conf /etc/apache2/conf-enabled/

On redémarre apache

systemctl restart apache2

On génère un certificat (Remplacer UTILISATEUR@DOMAINE.COM et DOMAINE.COM)

certbot certonly --agree-tos --email UTILISATEUR@DOMAINE.COM --webroot -w /var/lib/letsencrypt/ -d DOMAINE.COM

Création des Virtual Hosts Apache

Pour simplifier la configuration, les Vhosts pour les ports 80 et 443 sont configurés dans le même fichiers. les connexions sur le ports 80 sont automatiquement redirigés vers la connexion 443.

Créer le fichier de configuration des Vhosts avec votre éditeur préféré. (Exécuter l'éditeur en indiquant un fichier qui n'existe pas le crée automatiquement)

vi /etc/apache2/sites-available/nextcloud.conf

ou

nano /etc/apache2/sites-available/nextcloud.conf

Coller le contenu suivant en remplaçant “DOMAINE.COM” par le nom de domaine utilisé.

<VirtualHost *:80>
    ServerName DOMAINE.COM
    ServerAlias www.DOMAINE.COM

    # auto redirect HTTP to HTTPS
    Redirect permanent / https://DOMAINE.COM/
</VirtualHost>

<VirtualHost *:443>
    ServerName DOMAINE.COM
    ServerAlias www.DOMAINE.COM
  
    DocumentRoot /var/www/nextcloud/

    Protocols h2 http/1.1

    # log files
    ErrorLog /var/log/apache2/DOMAINE.COM-error.log
    CustomLog /var/log/apache2/DOMAINE.COM-access.log combined

    SSLEngine On
    SSLCertificateFile /etc/letsencrypt/live/DOMAINE.COM/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/DOMAINE.COM/privkey.pem

    # HSTS
    <IfModule mod_headers.c>
        Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains"
    </IfModule>

    <Directory /var/www/nextcloud/>
        Options +FollowSymlinks
        AllowOverride All

        <IfModule mod_dav.c>
            Dav off
        </IfModule>

        SetEnv HOME /var/www/nextcloud
        SetEnv HTTP_HOME /var/www/nextcloud
    </Directory>
</VirtualHost>

On active les Vhosts

a2ensite nextcloud.conf

ou

ln -s /etc/apache2/conf-available/nextcloud.conf /etc/apache2/conf-enabled/

Il est possible de tester toute la configuration d'Apache avec cette commande

apachectl configtest

Redémarrer Apache

systemctl restart apache2

Configuration de Nextcloud

Si la procédure d'Installation standardisé de Debian a été suivi, c'est le répertoire /DATA qui sera utilisé stocker les données de Nextcloud. Il est donc nécessaire de donner les droits d'accès a Apache pour ce répertoire.

Donner les droits à Apache sur le répertoire /DATA (Si il n'est pas dans le répertoire de Nextcloud)

chown -R www-data:www-data /DATA

A ce stade l'instance Nextcloud devrait être accessible via son URL

  • Ouvrer un navigateur est entrer l'URL définitive.
  • L'assistant de configuration de Nextcloud s'ouvre.
  • Créer un compte adminstrateur.
  • Indiquer /DATA en tant que répertoire de données.
  • Indiquer le nom de la base de données crée précédement
  • Indiquer l'utilisateur de la base de données créé précédement.
  • Indiquer le mot de passe défini précédement pour l'utilisateur de la base de données.
  • l'adresse de la base de données peut rester sur “localhost”

Configuration des tâches planifiées

  • Rendez-vous dans l'interface web de Nextcloud
  • Cliquer sur le logo de profil (en haut à droite)
  • Cliquer sur Administration Settings puis Paramêtres de base
  • Sélectionner Cron (Recommandé)
  • Se connecter en SSH au serveur
  • Créer la tâche planifiée
crontab -u www-data -e

Ajouter la ligne suivante à la fin du fichier et quitter (Remplacer par le chemin vers le fichier cron.php)

  • /5 * * * * php -f /var/www/NEXTCLOUDFOLDER/cron.php

Il est possible de vérifier que la modification est bien enregistrée avec la commande suivante

crontab -u www-data -l

Il est possible de vérifié que la tâche s'exécute en se rendant de nouveau sur la page Paramètres de base de la page d'administration

Configuration du cache (Optionnel)

La méthode la plus courant et la plus simple est d'utiliser Redis Server

Installer Redis Server et php-redis
apt install redis-server php-redis

Éditer le fichier de configuration de redis-server

vi /etc/redis/redis.conf

Dé-commenter et modifier les lignes suivantes On enlève “/var” de la première ligne On remplace 700 par 770 sur la seconde

unixsocket /run/redis/redis-server.sock
unixsocketperm 770

Dé-commenter et modifier également On remplace 6379 par 0

port 0

Ajouter l’utilisateur www-data (Utiliser par Nextcloud au groupe Redis)

usermod -a -G redis www-data

Éditer le fichier de configuration de nextcloud pour y ajouter l'utilisation de Redis server comme cache

vi /var/www/NEXTCLOUDFOLDER/config/config.php

Ajouter les lignes suivante en fin de fichier mais avant le dernier “);

  'memcache.local' => '\\OC\\Memcache\\Redis',
  'memcache.distributed' => '\\OC\\Memcache\\Redis',
  'redis' =>
  array (
    'host' => '/run/redis/redis-server.sock',
    'port' => 0,
    'dbindex' => 0,
    'timeout' => 1.5,
  ),

Démarrer redis-server

service redis-server start

Redémarrer le serveur web Apache

service apache2 restart

Notes

Emplacement des fichiers

/etc/apache2/sites-available/ <- Fichiers de configuration Vhosts
/etc/apache2/sites-enabled/ <- Fichiers de configuration Vhosts actifs

Commandes utiles

Statut Apache

systemctl status apache2

Statut Let's Encrypt

systemctl status certbot.timer

Test de renouvellement du certificat

certbot renew --dry-run

Activer un site Apache

a2ensite nomduvhost.conf

ou

ln -s /etc/apache2/conf-available/nomduvhost.conf /etc/apache2/conf-enabled/
Modifier cette page
Haut de page