Un serveur de services ne serait pas complet s'il n'avait pas son petit nuage. 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.
Ressource : Documentation officielle - Installation Guide
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
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
.
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
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
nextcloud
comme nomuft8mb4_general_ci
comme encodage
Puis, crée un utilisateur nextcloud
et donne lui tous les droits sur la base ''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
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
.
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
.
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
.
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).
A présent que tous les fichiers de configuration initiale sont en place, il est temps d'installer NextCloud. Pour cela, deux méthodes.
admin
storage.config.php
)sudo -u www-data php occ maintenance:install --database "mysql" --database-name "nextcloud" --database-user "nextcloud" --database-pass "..." --admin-user "admin" --admin-pass "..."
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 ) ainsi que l'adresse mail en admin@aprilas.fr
.
Pour la suite des opérations, va sur https://cloud.aprilas.fr avec un compte qui possède les droits d'administrateur.
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 :
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”.
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 :
nextcloud@aprilas.fr
Renseigne les informations suivantes :
Voici une liste de plugins intéressants (sur le principe) :
Sont en gras les plugins que j'ai installés.
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 :