====== 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 : [[https://docs.nextcloud.com/server/16/admin_manual/installation/source_installation.html
|Documentation officielle - Installation Guide]]
==== Installation de PHP7.3 ====
Ressource : [[https://tecadmin.net/install-php-debian-9-stretch/|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 : [[https://tylersguides.com/guides/openldap-memberof-overlay/ | 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 :
ServerName cloud.aprilas.fr
ServerAdmin admin@aprilas.fr
RewriteEngine on
RewriteRule ^(.*) https://%{SERVER_NAME}$1 [R,L]
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
Require all granted
Options FollowSymlinks MultiViews
AllowOverride All
Dav off
SetEnv HOME /var/www/nextcloud
SetEnv HTTP_HOME /var/www/nextcloud
php_value memory_limit 512M
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 : [[https://docs.nextcloud.com/server/15/admin_manual/configuration_database/mysql_4byte_support.html|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 nom
* ''%%uft8mb4_general_ci%%'' comme encodage
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 : [[https://docs.nextcloud.com/server/15/admin_manual/configuration_server/caching_configuration.html|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 :
'\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 :
'/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 [[https://docs.nextcloud.com/server/stable/admin_manual/configuration_server/config_sample_php_parameters.html#deleted-items-trash-bin|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 :
'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 : [[https://github.com/nextcloud/server/issues/5865|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 :
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.
* Soit tu vas sur la page [[https://cloud.aprilas.fr]] et tu remplis le formulaire en utilisant les données suivantes :
* Nom d'utilisateur : ''%%admin%%''
* Mot de passe : ...
* Répertoire : //laisse la valeur par défaut (elle ne serait pas prise en compte si tu as écrit le fichier ''%%storage.config.php%%'')//
* Base de donnée : nextcloud
* Utilisateur pour la base : nextcloud
* Mot de passe : ...
* Soit tu passes par l'API en tapant la commande suivante : ''%%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 :-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 :
* Hôte : [[ldaps://ldap.aprilas.fr]]
* Port : 636
* DN Utilisateur : cn=admin,dc=aprilas,dc=fr
* Mot de passe de l'utilisateur : ...
* DN de base : dc=aprilas,dc=fr
Sur la page //Utilisateurs//, rentre les informations suivantes :
* Classes : inetOrgPerson
* Groupe : nextcloud
Sur la page //Attributs de login//, rentre les informations suivantes :
* Nom d'utilisateur LDAP/AD : Oui
* Adresse email LDAP/AD : Non
Ne touche pas à la page //Groupes//.
Sur la page //Avancé//, rentre les informations suivantes :
* DN Utilisateurs : ou=People,dc=aprilas,dc=fr
* DN Groupes : ou=Groups,dc=aprilas,dc=fr
==== 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
*/5 * * * * php -f /var/www/nextcloud/cron.php
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 :
* Mode d'envoi : SMTP par SSL/TLS
* Adresse source : ''%%nextcloud@aprilas.fr%%''
* Méthode d'authentification : Login
* Authentification requise : Oui
* Adresse du serveur : aprilas.fr (port: 465)
* Informations d'authentification : nextcloud / ...
==== Personnaliser l'apparence ====
Renseigne les informations suivantes :
* Nom : Aprilas Cloud
* Page d'accueil : https://www.aprilas.fr
* Slogan : Géré par Thibauld Feneuil
* Couleur : #43A72A
===== Plugins =====
==== Liste des plugins ====
Voici une liste de plugins intéressants (sur le principe) :
* Fichiers :
* //Automated PDF Conversion//
* //Draw.io//
* //Extract//
* //File Access Control//
* //File Clipboard//
* //Files From Mail//
* //Group Folder//
* //**MetaData**//
* Multimedia :
* //Phone Sync//
* //Phone Track//
* //**Talk**//
* //Video Convertor//
* Bureautique :
* //Calendar//
* //Carnet//
* //**Collabora Online**//
* //Mail//
* //Markdown editor//
* //Notes//
* //Notifications for calendar event updates//
* //**Task**//
* Organisation :
* //Contacts//
* //Forms//
* //Map//
* //**Polls**//
* Security :
* //Antivirus for files//
* //Guests//
* //Passwords//
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 :
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
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 :
* Serveur : https://office.aprilas.fr