Table des matières

Debian - Installation de Nextcloud

Prérequis

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.

apt update
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

a2enmod ssl rewrite headers
systemctl restart apache2
apachectl -M | egrep "ssl|rewrite|headers"
headers_module (shared)
rewrite_module (shared)
ssl_module (shared)

Installation de PHP

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

apt install mariadb-server mariadb-client
systemctl is-enabled mariadb
systemctl status mariadb
mysql_secure_installation
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!
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!

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

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.

CREATE DATABASE nextcloud_db;
CREATE USER UTILISATEURNEXCLOUD@localhost IDENTIFIED BY 'PASSWORD';
GRANT ALL PRIVILEGES ON nextcloud_db.* TO UTILISATEURNEXTCLOUD@localhost;
FLUSH PRIVILEGES;

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

Configuration des tâches planifiées

crontab -u www-data -e

Ajouter la ligne suivante à la fin du fichier et quitter (Remplacer par le chemin vers le fichier 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/