--- categories: ['OpenBSD','Réseau','Serveur'] date: 2018-12-25T14:25:01+01:00 description: "Mettre en place un service de cloud avec Nextcloud distribué par le serveur web nginx sur OpenBSD" draft: false tags: ['OpenBSD','Nextcloud','nginx'] title: "OpenBSD : Service Nextcloud / nginx ( + Office Online, Talk )" translationKey: 'openbsd-nextcloud' --- ## Description **Nextcloud** est un logiciel de nuage informatique afin de partager depuis et sur Internet des fichiers mais aussi un ou plusieurs agendas, des contacts, des notes, etc… de manière modulaire. * Site web : https://www.nextcloud.com * Version installable : * depuis les paquets : **6.4** : *14.0.1* ; **6.5** : *15.0.5p1* ; **6.6** : *17.0* * depuis le [site web](https://nextcloud.com/install/#instructions-server) ! * OS : Testé sur OpenBSD **6.3** => **6.6** ### Installation {{< note warning >}} **ATTENTION** : Ce tutoriel ne documente pas dans les moindres détails les phases d'installation, voire de configuration. Ce n'est pas accessible aux nouveaux utilisateurs d'OpenBSD… Il est **VRAIMENT** nécessaire de faire preuve de réflexion, discernement et d'avoir un minimum de compétences, pour comprendre les liens entre les différentes briques ! Merci de votre compréhension - *ne venez pas pleurer ; ne cherchez pas à me contacter par quelques moyens existants* - venez vous faire aider amicalement sur le [forum](https://obsd4a.net/forum/) de la communauté **obsd4a** ! {{< /note >}} #### Par les paquets {{< inside2 l="sys/openbsd/pkg" t="Installez" a="installer" >}} le paquet **nextcloud**. #### Par l'archive officielle Par convention, disons que nous déposerons l'archive dans le répertoire `/var/www/htdocs/nextcloud` - *que vous pouvez/devez modifier/adapter à votre besoin*… `# mkdir /var/www/htdocs/nextcloud`
`$ cd /var/www/htdocs/nextcloud` Téléchargeons l'archive et le fichier de sommes de contrôle sha256 adéquate : `$ ftp https://download.nextcloud.com/server/releases/nextcloud-17.0.1.zip{,.sha256}` Puis vérifions que l'archive est bien téléchargée : `$ sha256 -C nextcloud-*.sha256`
`(SHA256) nextcloud-17.0.1.zip: OK` Si le message est identique, alors l'archive téléchargée est bonne. Nous pouvons donc l'utiliser : `$ unzip nextcloud*.zip`
`# mv nextcloud /var/www/htdocs/`
`# chown -R www:daemon /var/www/htdocs/nextcloud` #### PHP Il est nécessaire d'{{< inside2 l="sys/openbsd/pkg" t="installer" a="installer" >}} les paquets PHP suivants, tels que : **php-bz2 php-curl php-gd php-pdo_sqlite php-intl php-zip pecl72-redis redis libmcrypt oniguruma icu4c-wwwdata** {{< note info >}}Il est possible d'installer PHP 7.3 ; faites attention à la version du paquet `pecl7*-redis` !{{< /note >}} ##### Bibliothèque sodium Certaines options de Nextcloud nécessitent la gestion de bibliothèque cryptographique ; il nous faut {{< inside2 l="sys/openbsd/pkg" t="installer" a="installer" >}} la **libsodium** {{< note info >}}Pour PHP 7.x, il est nécessaire de rajouter la bibliothèque `pecl7*-libsodium` *(où 7\* est à remplacer par le numéro de version de PHP-7)* - qui n'existe plus dès PHP 7.3, car ce dernier gére correctement la libsodium.{{< /note >}} ##### Activer les extensions PHP Ensuite, il faut activer les différentes extensions : `cd /etc/php-7.3.sample`
`for i in *; do ln -sf ../php-7.3.sample/$i ../php-7.2/; done` Puis, redémarrer le service PHP-FPM. ### Gestion du service PHP {{< inside2 l="sys/openbsd/rcctl" t="Activer le service" a="activer" >}} le service PHP-FPM **php73_fpm** ! #### Bases de données Par défaut, Nextcloud fonctionne avec sqlite ; veillez à ce que le package nécessaire soit {{< inside2 l="sys/openbsd/pkg" t="installé" a="installer" >}} :
**sqlite3 php-pdo_sqlite php-pdo_odbc** Néanmoins Nextcloud fonctionne aussi avec les bases de données MySQL/MariaDB, PostgreSQL… à vous de choisir et d'installer les paquets correspondants ! Dans tous les cas, il faudra {{< anchor "activer les nouvelles extensions php" "activer-les-extensions-php" >}} et redémarrer le service adhoc. ### Configuration #### Avec httpd * Xavier Cartron @thuban explique [comment faire](https://ybad.name/ah/doku.php/4-httpd/services#un-cloud-avec-nextcloud)… #### Avec nginx La documentation officielle de [Nextcloud pour nginx](https://docs.nextcloud.com/server/stable/admin_manual/installation/nginx.html) étant bien faite, je vous laisse la regarder ! Faites simplement attention à bien changer la valeur de `root` pour qu'elle corresponde à votre racine, ici `/var/www/htdocs/nextcloud` et à adaptez le reste à votre besoin. Retrouvez les règles principales de nginx au-travers de ce [document](https://cld.stephane-huc.net/s/qi9fc3sm6aRpHiq) que je partage !
Il est bien-sûr nécessaire de l'intégrer à votre schéma `server`… #### PHP-FPM Il est nécessaire, pour que Nextcloud fonctionne bien, de configurer votre fichier php-fpm afin d'ajouter : * `allow_url_fopen = on` * `env[PATH] = /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/sbin` * `post_max_size = 512M` * `upload_max_filesize = 512M` * De même, si vous utilisez la directive `open_basedir`, veillez à autoriser l'accès à `/dev/urandom`. * Veuillez aussi lire les recommandations suivantes : [Tune PHP-FPM](https://docs.nextcloud.com/server/stable/admin_manual/configuration_server/server_tuning.html#tune-php-fpm) et [Enable PHP OPcache](https://docs.nextcloud.com/server/stable/admin_manual/configuration_server/server_tuning.html#enable-php-opcache) Redémarrez le service PHP-FPM… #### Nextcloud ### Chroot PHP Étant donné que PHP est chrooté, la commande `occ`, ainsi que les jobs cron échouent. Lorsque `occ` est exécuté, vous obtenez au moins ce message d'erreur : {{< blockquote "sys-openbsd-nextcloud-blockquote-chroot-php" >}} **Résoudre ce problème est simple** : il suffit d'éditer le fichier de config de nextcloud, `nextcloud/config/config.php` pour modifier la valeur de la variable `datadirectory`. *(cf : {{< inside "web:nextcloud:nextcloud-php-chroot" >}})* Bien sûr, le chemin `/data` doit correspondre à votre cas, surtout si vous l'avez déplacé hors de la racine *nextcloud* - ce qui est recommandé ! Ce changement étant fait, vous pouvez utiliser sans soucis la commande `occ`. ### Gestion des applications #### Collabora/CODE À quoi sert [Collabora](https://nextcloud.com/collaboraonline/) CODE ? À pouvoir éditer les documents bureautique dans Nextcloud directement. **Malheureusement, ne cherchez pas : cela ne fonctionne pas nativement sur OpenBSD** ! ### Joujou dans la VM Le moyen : dans une {{< inside "sys:openbsd:vm-debian-stretch" "VM" >}} ! :p ### Deux méthodes Il existe deux méthodes pour pouvoir utiliser Collabora CODE : * la méthode facile : au-travers d'une image {{< anchor "docker" "par-docker" >}} installable sur Debian * une méthode longue mais simple, grâce à ce projet "{{< anchor "officeonline-install.sh" "par-script-shell-officeonline" >}} {{< note info >}}De plus, je ne propose des modifications QUE pour nginx !{{< /note >}} ### Par Docker {{< note warning >}} Je ne vous apprendrais pas à utiliser Docker !!!
Et, je ne recommande pas du tout cette possibilité… si vous avez envie de rajouter une couche de problèmes, libre à vous !!! {{< /note >}} Une fois dans votre VM Debian, il faut installer docker puis l'image fournie par les soins de Collabora. `# apt install docker-ce`
`$ docker pull collabora/code` Ensuite il faut exécuter la commande suivante en l'adaptant au nom de domaine où se trouve votre instance de Nextcloud :
`$ docker run -t -d -p 127.0.0.1:9980:9980 -e 'domain=cloud\\.nextcloud\\.com' --restart always --cap-add MKNOD collabora/code` {{< note tip >}} Je propose de créer un petit script shell qui permettra toute modification aisément de la commande au cas où : `#!/bin/sh`
`docker run -t -d -p 127.0.0.1:9980:9980 -e 'domain=nom
-domaine
.tld' \--restart always \--cap-add MKNOD collabora/code` {{< /note >}} #### Iptables Il est très probable qu'il faille modifier *iptables* tel que, par exemple : `iptables -A FORWARD -i docker0 -o enp0s3 -j ACCEPT`
`iptables -A FORWARD -i enps0s3 -o docker0 -j ACCEPT` `iptables -A INPUT -i docker0 -j ACCEPT` #### Tests réseaux Depuis votre machine hôte, normalement il est possible de pinger la VM et de tester une requête CURL. {{< code "sys-openbsd-nextcloud-network-tests" sh >}} Si **curl** répond ainsi, c'est que cela semble bon ! Maintenant, passons aux {{< anchor "modifications du serveur nginx" "modifications-nginx" >}}, puis à l'administration de Nextcloud. ##### Update docker Récupère la nouvelle image : `$ docker pull collabora/code` Arrêt de l'image en cours :
`$ docker container ls`
`$ docker container stop CONTAINER_ID`, ou `NAMES` fonctionne aussi
`$ docker container rm CONTAINER_ID`, ou `NAMES` On relance la commande `docker run…`, vue précédemment ci-dessus ! ##### Modification nginx Les modifications des règles `location` pour nginx sont fournies dans ce [document](https://cld.stephane-huc.net/s/2o6SDdYKQtifCYA)… Veillez à remplacer les écritures `http://localhost`, par votre schéma + adresse IPv4 de votre VM ! Puis relancer le service nginx… et {{< anchor "administrons" "modification-nextcloud" >}} Nextcloud ! ### Par script shell officeonline Il suffit de cloner le dépôt et d'exécuter le script shell *[officeonline-install.sh](https://github.com/husisusi/officeonlin-install.sh)*. L'intérêt de ce script est d'installer tout ce qui est nécessaire afin de se débarrasser des limitations fournies dans le projet Docker de l'entreprise Collabora. `$ git clone https://github.com/husisusi/officeonlin-install.sh.git`
`$ cd officeonlin-install.sh` {{< note warning >}} ATTENTION, ce script demande de [grosses ressources machine](https://github.com/husisusi/officeonlin-install.sh#requirements) car la phase de compilation et d'installation se déroule durant des heures ! * un minimum de 3.7 Go de RAM * un minimum de 13 Go d'espace disque vide… {{< /note >}} Voir [le projet sur le forum](https://help.nextcloud.com/t/howto-install-onlineoffice-on-ubuntu-debian-no-docker-no-limitation/8958) d'entraide de Nextcloud… ---- Les valeurs actuellement fonctionnelles, sur une Debian Stretch, du fichier de configuration `officeonline-install.cfg` sont [celles-ci](https://github.com/husisusi/officeonlin-install.sh/issues/155#issuecomment-451502770):
`set_online_regex='collabora/collabora-online-4$' #CODE 4 Branch`
`lool_src_commit='173510fdbf6f52d1d6288b809c8d14bc630afd20' #CODE-4-RC2`
`set_core_regex='cp-6.0$' #LibO 6.0.x` {{< note warning >}} ATTENTION, ces valeurs peuvent changer très rapidement… veuillez toujours vérifier soit sur le forum d'entraide de Nextcloud, soit sur le projet d'OfficeOnline. {{< /note >}} Pensez à modifier aussi la valeur de `allowed_domains` en début de fichier, en faisant correspondre avec le nom de domaine qui gère votre nextcloud ou le service collabora s'il est sur un serveur distinct. Une fois le fichier de configuration modifié, exécutez la commande suivante :
`# officeonline-install.sh -c officeonline-install.cfg` Puis, patientez le temps de la phase de compilation et d'installation… Si à la fin, vous avez un message ressemblant au suivant, alors c'est bon : {{< code "sys-openbsd-nextcloud-loolwsd-running-enjoy" bash >}} Redémarrez votre VM, vérifiez votre config nginx, puis modifiez votre configuration de {{< anchor Nextcloud "modification-nextcloud" >}}… ------------------------------------------------------------------------ ### Modification Nextcloud Se connecter à l'interface web de Nextcloud en tant qu'administrateur, puis dans le menu *Applications* > Section *Office & text*/*Bureautique* et installer l'application *Collabora Office*. Ensuite, choisir le menu *Settings*/*Paramètres* > *Collabora Online* et spécifier le nom du domaine sur lequel fonctionne la VM Debian ; il doit correspondre **ABSOLUMENT** selon votre choix de configuration, soit : * à la mention `domain` que vous avez rempli lors de l'exécution du containeur Docker… * à la mention `allowed_domains` remplie pour la configuration du script `officeonline`… ------------------------------------------------------------------------ #### Talk Pour pouvoir communiquer par vidéo et/ou par chat, il faut installer l'application officielle *Talk* avec un compte administrateur depuis l'interface d'administration de Nextcloud. Ensuite, il faut configurer un serveur {{< anchor Turn turn >}} ! Pour finir, chaque utilisateur inscrit de votre nuage informatique pourra communiquer avec un autre, soit à partir de l'application *Nextcloud Talk* sur un smartphone, soit à partir de l'interface web de Nextcloud une fois connecté. ------------------------------------------------------------------------ #### Turn L'installation d'un serveur STUN/TURN, pour que l'application **{{< anchor Talk talk >}}** fonctionne, est expliqué dans mon tutoriel {{< inside "sys:openbsd:turnserver" >}}. Ensuite, il est nécessaire de paramétrer Nextcloud. Connectez-vous à son interface en tant qu'administrateur, puis choisissez le menu *Settings/Paramètres* > *Talk/Discussion*. Voici en image l'interface :
{{< img s="openbsd/nextcloud-stun.png" a="Nextcloud : Serveurs STUN" w="250" >}} Écrivez dans les champs : * `Serveur STUN`, écrivez : `nom-domaine.tld:3478` * `Serveur TURN`, écrivez : `nom-domaine.tld:5349`, puis le champ suivant le secret d'authentification que vous avez configuré pour l'option `static-auth-secret` dans le fichier de configuration du serveur Turn. Puis changez si besoin les protocoles utilisés. {{< note warning >}} Bien-sûr, l'inscription *nom-domaine.tld* est à remplacer par votre véritable nom de domaine où le serveur Turn est installé !
Quant au numéro de port du serveur STUN, et du serveur TURN, mettez ceux configurés dans le fichier du serveur Turn ! {{< /note >}} Une fois configuré, il n'y a plus qu'à utiliser l'application *Nextcloud [Talk](#talk)* soit sur votre smartphone, soit à-partir de l'interface web de Nextcloud depuis votre compte. ## Remerciements Source: * https://nextcloud.com/collaboraonline/ * https://www.collaboraoffice.com/code/nginx-reverse-proxy/ * https://help.nextcloud.com/t/howto-setup-nextcloud-talk-with-turn-server/30794 * https://www.apb-informatique.fr/nextcloud-installation-de-lapplication-collabora-online/ ------------------------------------------------------------------------ ***Enjoy-IT!
Enjoy-ID!*** ------------------------------------------------------------------------