====== 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