---
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!***
------------------------------------------------------------------------