Table des matières

Nextcloud

Un serveur de services ne serait pas complet s'il n'avait pas son petit nuage. :-P Sur le marché des logiciels Cloud libres, on peut trouver OwnCloud et NextCloud. En fait, NextCloud est un “produit” 100% open-source dérivé de OwnCloud. Pour cette raison, ces deux outils sont très similaires, car ils possèdent le même noyau. Cet article va décrire l'installation de NextCloud en utilisant un Object Storage comme stockage primaire.

Installation des prérequis

Ressource : Documentation officielle - Installation Guide

Installation de PHP7.3

Ressource : How To Install PHP (7.3, 7.2 & 5.6) on Debian 9 Stretch

Depuis la version 16 de NextCloud, il faut une version supérieure à PHP7.1. Actuellement, la version la plus récente de PHP est la version 7.3, donc c'est celle-ci que tu vas installer.

Ajout de repository de PHP

sudo apt install ca-certificates apt-transport-https
wget -q https://packages.sury.org/php/apt.gpg -O- | sudo apt-key add -
echo "deb https://packages.sury.org/php/ stretch main" | sudo tee /etc/apt/sources.list.d/php.list

Installation de PHP7.3

sudo apt-get install libapache2-mod-php7.3
sudo apt-get install php7.3-gd php7.3-json php7.3-mysql php7.3-curl php7.3-mbstring
sudo apt-get install php7.3-intl php-imagick php7.3-xml php7.3-zip php7.3-ldap

Préparation de l'annuaire LDAP

Ressource : OpenLDAP memberOf overlay

Pour faire fonctionner correctement LDAP avec NextCloud, il faut que le module memberOf soit activé.

Exécute la commande suivante pour voir s'il y a déjà des modules dans ton serveur LDAP :

slapcat -n 0 | grep olcModuleLoad

S'il y en a (si des lignes apparaissent), charge le module de la manière suivante.

ldapmodify -Q -Y EXTERNAL -H ldapi:///
dn: cn=module{0},cn=config
changetype: modify
add: olcModuleLoad
olcModuleLoad: memberof.la

Et s'il y en a pas, charge le module de la manière suivante.

ldapadd -Y EXTERNAL -Q -H ldapi:///
dn: cn=module,cn=config
cn: module 
objectClass: olcModuleList
olcModulePath: /usr/lib/ldap
olcModuleLoad: memberof.la

Pour terminer, active le !

ldapadd -Y EXTERNAL -H ldapi:///
dn: olcOverlay=memberof,olcDatabase={1}mdb,cn=config
objectClass: olcOverlayConfig
objectClass: olcMemberOf
olcOverlay: memberof
olcMemberOfRefint: TRUE

Pour plus d'informations, va voir man slapo-memberof.

Préparation de Apache2

Commence par créer le certificat SSL pour https://cloud.aprilas.fr.

sudo /etc/init.d/apache2 stop
/opt/letsencrypt/letsencrypt-auto --rsa-key-size 4096 certonly --standalone -d cloud.aprilas.fr
sudo /etc/init.d/apache2 start

Crée un nouveau hôte virtuel dans Apache2. Pour cela, créer le fichier /etc/apache2/sites-available/nextcloud.conf avec le contenu suivant :

<VirtualHost *:80>
        ServerName cloud.aprilas.fr
        ServerAdmin admin@aprilas.fr

        RewriteEngine on
        RewriteRule ^(.*) https://%{SERVER_NAME}$1 [R,L]
</VirtualHost>

<VirtualHost *:443>
        ServerName cloud.aprilas.fr
        ServerAdmin admin@aprilas.fr
        Header always set Strict-Transport-Security "max-age=15552000"

        DocumentRoot /var/www/nextcloud
        ErrorLog /var/log/apache2/cloud.log

        Include /etc/letsencrypt/options-ssl-apache.conf
        SSLCertificateFile /etc/letsencrypt/live/cloud.aprilas.fr/fullchain.pem
        SSLCertificateKeyFile /etc/letsencrypt/live/cloud.aprilas.fr/privkey.pem

        <Directory /var/www/nextcloud/>
                Require all granted
                Options FollowSymlinks MultiViews
                AllowOverride All

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

                SetEnv HOME /var/www/nextcloud
                SetEnv HTTP_HOME /var/www/nextcloud
        </Directory>
        
        php_value memory_limit 512M
</VirtualHost>

Il faut activer certains modes pour faire fonctionner NextCloud.

a2enmod rewrite headers env dir mime

A présent, tu peux activer l'hôte virtuel du Cloud.

a2ensite nextcloud
sudo /etc/init.d/apache2 reload

Préparation de la base de données MySQL

Ressource : Enabling MySQL 4-byte support

Afin de pouvoir profiter au maximum des services que nous propose NextCloud. Il faut changer l'encodage de la base de données. La procédure suivante est valable pour MariaDB10.2 ou inférieur (ce qui était mon cas). Sinon trouve la procédure sur … . Pour connaître ta version de Maria, exécute mysql -e "SELECT version();".

Edite le fichier /etc/mysql/mariadb.conf.d/50-server.cnf et ajoute dans la section InnoDB les lignes suivantes :

innodb_large_prefix=true
innodb_file_format=barracuda
innodb_file_per_table=1

Redémarre Mysql.

sudo /etc/init.d/mysql restart

A présent, crée la base de données de NextCloud.

En supposant que tu en dispose, connecte-toi à PHPmyAdmin en tant qu'administrateur. Crée une base de donnée avec

Puis, crée un utilisateur nextcloud et donne lui tous les droits sur la base ''nextcloud''.

Installation de NextCloud

Extraction du répertoire de NextCloud

Télécharge NextCloud et vérifie le fichier téléchargé (pour qu'un pirate informatique ne te fasse pas installer un virus). Bien entendu, sélectionne la dernière version.

wget https://download.nextcloud.com/server/releases/nextcloud-16.0.4.tar.bz2
wget https://download.nextcloud.com/server/releases/nextcloud-16.0.4.tar.bz2.md5
md5sum -c nextcloud-x.y.z.tar.bz2.md5 < nextcloud-x.y.z.tar.bz2
wget https://download.nextcloud.com/server/releases/nextcloud-x.y.z.tar.bz2.asc
wget https://nextcloud.com/nextcloud.asc
gpg --import nextcloud.asc
gpg --verify nextcloud-x.y.z.tar.bz2.asc nextcloud-x.y.z.tar.bz2

Décompresse l'archive (sudo apt-get install bzip2 si bzip2 n'est pas encore installé sur le système).

tar -xjf nextcloud-x.y.z.tar.bz2

Déplace NextCloud et affecte lui le bon propriétaire.

mv -r nextcloud /var/www
chown -R www-data:www-data /var/www/nextcloud

Configuration du cache mémoire

Ressource : Memory caching

Je te propose (conseil de la documentation de NextCloud) d'utiliser APCu pour le cache local et Redis pour le cache distribué.

APCu

Installe APCu et redémarre Apache2.

sudo apt-get install php-apcu
sudo /etc/init.d/apache2 restart

Redis

Installe Redis (qui fonctionne en tant que démon).

sudo apt-get install redis-server php-redis

Edite le fichier de configuration de Redis /etc/redis/redis.conf. On va l'utiliser avec des sockets (toujours conseillé par NextCloud).

unixsocket /var/run/redis/redis.sock
unixsocketperm 775
bind 127.0.0.1
daemonize yes
stop-write-on-bgsave-error no
rdbcompression yes
maxmemory 50M
maxmemory-policy allkeys-lru

Redémarre le démon de Redis.

sudo /etc/init.d/redis-server restart

Tu peux vérifier que la socket a bien été créée.

ls -lh /var/run/redis

Ajoute www-data au groupe redis afin que le serveur Web puisse accéder au service de cache (ie à la socket de Redis).

sudo usermod -a -G redis www-data

Redémarre Apache2

sudo /etc/init.d/apache2 restart

Configurer NextCloud

Crée le fichier de configuration /var/www/nextcloud/config/memcache.config.php avec le contenu suivant :

<?php
$CONFIG = array(
  'memcache.local' => '\OC\Memcache\APCu',
  'memcache.distributed' => '\OC\Memcache\Redis',
  'memcache.locking' => '\OC\Memcache\Redis',
  'redis' => array(
    'host' => '/var/run/redis/redis.sock,
    'port' => 0,
  ),
);
?>

Si tu as déjà installé NextCloud (via l'interface graphique ou via l'API), il faut que tu rajoutes ces options directement dans le fichier /var/www/nextcloud/config/config.php.

Configuration de la journalisation

Crée le fichier de configuration /var/www/nextcloud/config/log.config.php avec le contenu suivant :

<?php
$CONFIG = array(
  'logfile' => '/var/log/nextcloud.log',
  'loglevel' => 2,
  'logtimezone' => 'Europe/Paris',
?>

Si tu as déjà installé NextCloud (via l'interface graphique ou via l'API), il faut que tu rajoutes ces options directement dans le fichier /var/www/nextcloud/config/config.php.

Configuration du gestion des fichiers supprimés

Il est possible de configurer Nextcloud pour qu'il ait une certaine gestion des fichiers supprimés. Au bout de 6 mois d'utilisation, je me suis dit que la facture n'était pas en adéquation avec le volume des fichiers dans mon cloud. Et en fait, c'était parce que j'avais plus de 60 Go dans ma corbeille (qui s'était accumulé durant tous les mois), et que le volume dans la corbeille ne compte pas lorsque Nextcloud affiche la taille totale de tes fichiers.

Du coup, il est judicieux de configurer Nextcloud pour qu'il gère comme on le souhaite les fichiers supprimés. Il existe plusieurs options possibles (clique ici pour voir toutes les possibilités), mais j'ai choisi de configurer Nextcloud pour qu'il supprime définitivement les fichiers supprimés au bout de 30 jours (et j'autorise qu'il les supprime avant s'il a besoin de place).

Crée le fichier /var/www/nextcloud/config/trashbin.config.php avec le contenu suivant :

<?php
$CONFIG = array(
  'trashbin_retention_obligation' => 'auto, 30',
);
?>

Si tu as déjà installé NextCloud (via l'interface graphique ou via l'API), il faut que tu rajoutes ces options directement dans le fichier /var/www/nextcloud/config/config.php.

Configuration du stockage primaire

Ressource : Object storage as primary storage is broken in Nextcloud12

Si tu voulais faire une installation classique où les fichiers sont sauvegardés dans un dossier du serveur (et non pas sur un Object Storage), tu peux sauter cette étape.

Crée le fichier /var/www/nextcloud/config/storage.config.php avec le contenu suivant :

<?php
$CONFIG = array(
  'objectstore' => array(
     'class' => '\\OC\\Files\\ObjectStore\\Swift',
     'arguments' => array(
       'autocreate' => true,
       'user' => array(
         'name' => '************',
         'password' => '************',
         'domain' => array(
           'name' => 'default',
         ),
       ),
       'scope' => array(
         'project' => array(
           'name' => '************',
           'domain' => array(
             'name' => 'default',
           ),
         ),
       ),
       'tenantName' => '************',  // Same value as 'scope/project/name'
       'serviceName' => 'swift',
       'region' => 'GRA',
       'url' => 'https://auth.cloud.ovh.net/v3/',
       'bucket' => 'nextcloud',
     ),
   ),
);
?>

Il est fortement déconseillé de changer la configuration de l'espace primaire de stockage après l'installation de NextCloud (via l'interface graphique ou l'API). En effet, cela aurait pour conséquence de rendre tous les fichiers sur le Cloud inaccessible et cela augmenterait les probabilités d'avoir une installation cassée (pendant mes tests, cela m'est arrivé plusieurs fois).

Installation de NextCloud

A présent que tous les fichiers de configuration initiale sont en place, il est temps d'installer NextCloud. Pour cela, deux méthodes.

Après l'installation, tu peux te connecter avec le compte administrateur, et changer le nom d'affichage de l'utilisateur en “Administrateur” (c'est plus joli :-P) ainsi que l'adresse mail en admin@aprilas.fr.

Configuration de NextCloud

Pour la suite des opérations, va sur https://cloud.aprilas.fr avec un compte qui possède les droits d'administrateur.

Ajout des utilisateurs LDAP

Tout d'abord, va dans la liste des applications, et active celle dénommée LDAP user and group backend. Ensuite, va dans dans les paramètres et trouve l'onglet de l'intégration LDAP/AD.

Sur la page Serveur, rentre les informations suivantes :

Sur la page Utilisateurs, rentre les informations suivantes :

Sur la page Attributs de login, rentre les informations suivantes :

Ne touche pas à la page Groupes.

Sur la page Avancé, rentre les informations suivantes :

Tâche de fond

Afin que NextCloud puisse exécuter des tâches régulièrement, il faut rajouter une entrée dans CRON. Pour cela, tape dans un terminal du serveur :

crontab -u www-data -e

Et ajoute l'entrée

Puis, sur https://cloud.aprilas.fr, dans les paramètres de base de l'administration, clique sur “Cron”.

Serveur mail

Il faut configurer NextCloud afin qu'il puisse envoyer des emails. Pour cela, on va créer un compte spécial pour NextCloud afin d'utiliser ce compte pour le serveur SMTP.

adduser nextcloud

Et renseigne les informations suivantes :

Personnaliser l'apparence

Renseigne les informations suivantes :

Plugins

Liste des plugins

Voici une liste de plugins intéressants (sur le principe) :

Sont en gras les plugins que j'ai installés.

Collabora Online

Parlons de l'installation de Collabora Online, un plugin pour faire de l'édition collaborative (comme avec Google drive). Attention, Collabora Online nécessite l'utilisation d'un Docker, donc pour suivre ce qui suit, installe Docker si ce n'est pas déjà fait.

Télécharge et lance le Docker de Collabora Online.

docker pull collabora/code
docker run -t -d -p 127.0.0.1:9980:9980 -e 'domain=cloud\\.aprilas\\.fr' --restart always --cap-add MKNOD collabora/code

Maintenant, il faut configurer Apache2. Collabora Online a besoin des modules suivants :

a2enmod proxy proxy_wstunnel proxy_http ssl

Crée un certificat SSL pour office.aprilas.fr qui va héberger l'édition collaborative.

/etc/init.d/apache2 stop
/opt/letsencrypt/letsencrypt-auto --rsa-key-size 4096 certonly --standalone -d office.aprilas.fr
/etc/init.d/apache2 start

Crée le fichier /etc/apache2/sites-available/office.conf avec le contenu suivant :

<VirtualHost *:443>
  ServerName office.aprilas.com:443
  
  # SSL configuration, you may want to take the easy route instead and use Lets Encrypt!
  Include /etc/letsencrypt/options-ssl-apache.conf
  SSLCertificateFile      /etc/letsencrypt/live/office.aprilas.fr/fullchain.pem
  SSLCertificateKeyFile   /etc/letsencrypt/live/office.aprilas.fr/privkey.pem
  
  # Encoded slashes need to be allowed
  AllowEncodedSlashes NoDecode
  
  # Container uses a unique non-signed certificate
  SSLProxyEngine On
  SSLProxyVerify None
  SSLProxyCheckPeerCN Off
  SSLProxyCheckPeerName Off
  
  # keep the host
  ProxyPreserveHost On
  
  # static html, js, images, etc. served from loolwsd
  # loleaflet is the client part of LibreOffice Online
  ProxyPass           /loleaflet https://127.0.0.1:9980/loleaflet retry=0
  ProxyPassReverse    /loleaflet https://127.0.0.1:9980/loleaflet
  
  # WOPI discovery URL
  ProxyPass           /hosting/discovery https://127.0.0.1:9980/hosting/discovery retry=0
  ProxyPassReverse    /hosting/discovery https://127.0.0.1:9980/hosting/discovery
  
  # Main websocket
  ProxyPassMatch "/lool/(.*)/ws$" wss://127.0.0.1:9980/lool/$1/ws nocanon
  
  # Admin Console websocket
  ProxyPass   /lool/adminws wss://127.0.0.1:9980/lool/adminws
  
  # Download as, Fullscreen presentation and Image upload operations
  ProxyPass           /lool https://127.0.0.1:9980/lool
  ProxyPassReverse    /lool https://127.0.0.1:9980/lool
  
  # Endpoint with information about availability of various features
  ProxyPass           /hosting/capabilities https://127.0.0.1:9980/hosting/capabilities retry=0
  ProxyPassReverse    /hosting/capabilities https://127.0.0.1:9980/hosting/capabilities
</VirtualHost>

Active l'hôte créé et redémarre Apache2.

a2ensite office
/etc/init.d/apache2 restart

Active le plugin “Collabora Online” dans la section “Bureautique & texte” des applications de NextCloud. Et dans les paramètres d'administration, dans l'onglet “Collabora Online”, renseigne les paramètres suivants :