Installation et configuration de Nextcloud sur FreeNAS

Cet article fait suite à celui sur l’achat de mon NAS. Nextcloud était le moyen le plus facile pour moi de préserver ma fille des sites des réseaux sociaux, tout en permettant à mes proches d’être témoins de son évolution à travers photos et vidéos en temps réel. Bonne nouvelle côté technique, cela s’est révélé plutôt facile à faire avec l’offre FreeNAS d’ixsystems. En effet, ils ont mis en place le concept de plugins qui permettent d’installer facilement une application qui va fonctionner directement avec le NAS. Cet article présente mon aventure dans l’installation du plugin Nextcloud.

Avant tout, un petit intermède technique sur le concept de plugins d’ixsystems. Ils s’appuient sur le concept FreeBSD de Jail. Les Jails de FreeBSD sont équivalents aux containers de GNU/Linux (voir docker). Il s’agit d’une virtualisation “légère” (au niveau du système d’exploitation), qui permettent à un ensemble de processus de s’exécuter de manière isolée dans l’environnement hôte. Les plugins sont des Jails déjà pré-configurés avec un ensemble de logiciels prêts à utiliser (notamment des applications web, comme Nextcloud).

Pour installer le plugin nextcloud, il suffit donc de se rendre dans l’interface web d’administration du FreeNAS (une application web développée en Python avec le framework Django), dans la section “Plugins” et choisir nextcloud puis cliquer sur “installer”. Ca peut-être long, car le processus installe et configure plusieurs paquets (pour nextcloud, par exemple, php, nginx, mysql, etc.). Une fois que le plugin est installé, il faut terminer l’installation (spécifique à nextcloud), lors de la première connexion à l’interface utilisateur. Cette dernière phase était assez pénible car l’interface de nextcloud exigeait de connaître certains paramètres comme le nom de la base de données créée, mais ces informations n’étaient pas fournies après l’installation du plugin. Il m’a donc fallu aller dans le code source des plugins officiels de ixsystems, pour savoir ce qui se passe quand on installe un plugin. De là, j’ai trouvé le lien vers le code qui s’execute une fois que ce plugin est installé. Dedans, on peut voir tous ces paramètres. Le plugin utilise nginx comme serveur web, configuré uniquement en HTTP. La conf se trouve, dans la jail du plugin, sous /usr/local/etc/nginx/conf.d/nextcloud.conf. Etant donné que je comptais ouvrir l’accès à Nextcloud à internet depuis chez moi, il était hors de question de laisser cette configuration en HTTP. J’ai donc créé une autre conf pour le HTTPS sous /usr/local/etc/nginx/conf.d/nextcloud.https.conf. Il fallait également trouver comment générer les certificats SSL. J’ai d’abord pensé au traditionnel certbot, mais après plusieurs lectures sur le web, notamment sur cette discussion, j’ai découvert acme.sh, un client Let’s Encrypt écrit en script shell, et j’ai préféré l’utiliser. En effet, il m’a semblé beaucoup plus agréable à utiliser, mais surtout c’était un nouveau jouet tout neuf avec lequel il fallait absolument que je fasse joujou. Mon nom de domaine personnel étant enregistré chez OVH, j’ai dû suivre le tutoriel suivant pour permettre à acme.sh de générer les certificats. Ces derniers ont été générés sous /root/.acme.sh/<nom-de-domaine> dans la jail du plugin. Il ne restait plus qu’à configurer la crontab dans la jail pour pouvoir mettre à jour les certificats de manière automatique:

echo '5 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null' | crontab -

Ces étapes m’ont permis de partager les photos et vidéos de ma petite princesse de façon sereine, et le résultat a été très encourageant et gratifiant. Certains de mes proches, peu enclins aux choses informatiques, étaient sceptiques au début quand je leur disais que je voulais mettre en place ce système pour mettre à jour les photos de la princesse et leur permettre de suivre son évolution. Je peux dire que cela a été une réussite puisqu’ils se sont ravisés et apprécient le côté temps réel et l’effet de surprise créé tous les jours 😆.

comments powered by Disqus