Salut les curieux,
j’écris aujourd’hui ce billet comme un petit retour d’expérience qui pourrait permettre, je l’espère, à faciliter l’installation par d’autres utilisateurs.
Alors que je souhaite me faire un cloud perso pour y stocker une petite quantité de données privées, je me renseigne pour auto-héberger un serveur Nextcloud sur un VPS. En lisant la doc, je me rend compte que c’est bien plus compliqué que simplement installer un paquet, il y a des configurations à faire et une bonne liste de dépendance à installer et configurer à leur tour (apache, mariadb, php et tous ses modules qui vont permettre des fonctionnalités comme l’édition en ligne …).
Puisque je cherche à faire une installation simple, standard, j’ai regardé un peu autour et j’ai vu que Nextcloud proposait en fait une image All-in-One pour les gens comme moi. Puis, en commençant à l’installer, je me suis aperçu qu’il semblait y avoir très peu de ressource sur cette méthode d’installation. Peut-être est elle trop jeune, pas assez mature, ou peut-être que la plupart des utilisateurs préfèrent faire une configuration personnalisée. En tout cas voici ma façon de créer mon cloud.
L’image Nextcloud All-in-One n’est pas considérée comme production-ready par Nextcloud
Il est donc déconseillé de procéder à cette installation sur un système devant être fiable, comme un réseau d’entreprise
- Installer Docker
- Configurer le reverse proxy server
- Obtenir et configurer l'image Nextcloud AIO
- Désinstaller Nextcloud AIO
Installer Docker
La solution Nextcloud AIO est un ensemble de système déjà configurés qui vont tourner dans des containers, grâce à Docker. Il nous faut donc installer docker sur notre serveur.
Il faut se référer à la documentation Docker. Sous Debian, il faut d’abord ajouter le dépôt docker où se trouve les packages nécessaires, puis télécharger et installer ces packages :
# Ajout des clés certifiants le dépôt docker
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
# Ajout des coordonnées du dépôt docker
echo \
"deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
"$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# Installer les packages
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Il existe des scripts facilitant qui font ces étapes, comme indiqué sur le README de nextcloud AIO
curl -fsSL https://get.docker.com | sudo sh
Ce n’est cependant pas à utiliser sur des serveurs en production d’après la documentation de Docker
Configurer le reverse proxy server
Puisque Nextcloud n’est pas le seul service que je souhaite installer sur ma machine, j’ai besoin d’un proxy server qui va filtrer les requêtes et rediriger vers le bon service selon le nom de domaine demandé. Il sera aussi chargé d’assurer la couche de sécurisation TLS pour supporter le transport HTTPS.
Pour remplir ce rôle, j’ai choisi Caddy. Il a l’avantage de géré automatiquement et par défaut le transport HTTPS, il est libre est open-source sous licence Apache 2.0, et de plus il est écrit en go, un langage moderne et efficace conçu autour des problématiques des logiciels serveurs.
Encore une fois, Pour l’installer, il faut aller chercher le package correspondant sur leur dépôt
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install caddy
Je configure donc Caddy au travers son fichier /etc/caddy/Caddyfile
J’ai besoin de deux redirection : le portail de nextcloud et l’interface de maintenance.
nextcloud.mondomaine.com {
reverse_proxy localhost:8001
}
nextcloud.mondomaine.com:8443 {
reverse_proxy localhost:8002 {
transport http {
tls_insecure_skip_verify
}
}
}
mondomaine.com {
root * /var/www/monsite
file_server
}
Obtenir et configurer l'image Nextcloud AIO
Maintenant c’est simple, il suffit de lancer le container de nextcloud avec la ligne de commande de la doc et ça marche, il s’occupe d’initialiser tout les systèmes nécessaires. Mais j’ai des besoins un peu plus précis, alors jouons un peu avec les options.
J’ai d’autres services web sur la machine, je vais avoir besoin de maitriser les ports utilisés et les adresser au travers un reverse proxy. Pour ça, j’ai besoin des options configurant le serveur Apache --env APACHE_PORT=8001 --env APACHE_IP_BINDING=0.0.0.0
J’ai besoin de maitriser le chemin des données déposées sur le cloud, car je veux pouvoir les adresser avec d’autres services, comme lire mes dossiers multimedia avec jellyfin. Pour ça, je vais lui indiquer le chemin sur ma machine hôte à l’aide de l’option --env NEXTCLOUD_DATADIR="/nextcloud-data"
On obtient ainsi la commande suivante :
sudo docker run \
--sig-proxy=false \
--name nextcloud-aio-mastercontainer \
--restart always \
--publish 8002:8080 \
--env APACHE_PORT=8001 \
--env APACHE_IP_BINDING=0.0.0.0 \
--env NEXTCLOUD_DATADIR="/nextcloud-data" \
--volume nextcloud_aio_mastercontainer:/mnt/docker-aio-config \
--volume /var/run/docker.sock:/var/run/docker.sock:ro \
nextcloud/all-in-one:latest
Docker télécharge et exécute Nextcloud.
Une fois initialisé, L’interface de maintenance est disponible sur le port 8080 du container. Ce port à été exposé sur le port 8002 de la machine, qui est lui-même délivré par le port 8443 si la requête est adressée à nextcloud.mondomaine.com
grâce au proxy server.
Je me connecte donc à l’interface de maintenance dans mon navigateur : https://nextcloud.mondomaine.com:8443
Je note bien la passphrase que Nextcloud m’a généré, elle me servira à accéder à l’interface de maintenance à partir de maintenant.
J’accède maintenant à la page de login et j’entre cette passphrase. J’arrive alors sur une page de configuration et je dois renseigner le nom de domaine que j’ai préparé dans le proxy server et le dns nextcloud.mondomaine.com
.
Ensuite je peux sélectionner grossièrement les fonctionnalités que je souhaite activer.
L’édition en ligne et les prévisualisations peuvent m’être utile, je vais me passer du reste car ma machine est plutôt limité en ressources, c’est un vps premier prix.
Tout est configuré, je peux enfin lancer la bestiole.
J’attends que les containers aient tous fini de s’initialiser. Il est temps de se connecter.
Se connecter ? Mais avec quels identifiants ?
Nextcloud génère un compte admin et communique les identifiants au mainteneur.
Le compte administrateur a, comme son nom l’indique, accès à l’interface d’administration. Avec son aide, je vais pouvoir me créer mon utilisateur et éviter d’utiliser le compte admin à tort et à travers. J’ouvre le menu "Utilisateur".
J’enregistre le nouvel utilisateur, je renseigne les infos nécessaires et c’est bon, mon compte est immédiatement fonctionnel. Il ne me reste plus qu’à déconnecter l’admin, connecter mon compte et profiter.
Désinstaller Nextcloud AIO
Installer mon service c’est cool, mais que se passe-t-il si je n’en veux plus ? Si je veux m’en débarrasser et retrouver un système propre ? Car AIO utilise docker, c’est bien, mais il n’est pas dans un container qu’on peux simplement supprimer. Pendant sa mise en place, AIO a créé plusieurs containers qui communiquent entre eux.
Là encore la documentation va me guider.
Tous d’abord il faut stopper tous les containers. Je commence par couper les containers fonctionnels.
Je coupe le serveur pour pouvoir accéder à l’interface de maintenance.
sudo docker stop nextcloud-aio-apache
Puis j’ai accès à l’interface de maintenance au travers le navigateur https://nextcloud.mondomaine.com:8443
et je stoppe tous les containers avec le bouton correspondant.
Il me reste 2 petits containers à couper.
Le chef d’orchestre sudo docker stop nextcloud-aio-mastercontainer
Et un petit travailleur sudo docker stop nextcloud-aio-domaincheck
Maintenant que tout est stoppé et hors service, je peux supprimer ces systèmes.
sudo docker container prune
Ce n’est pas tout à fait fini. Pour faire communiquer tout ces systèmes entre eux, AIO a créé un réseau simulé dans docker. je vais le supprimer à son tour.
sudo docker network rm nextcloud-aio
Par ailleurs, certains stockages persistants des containers sont mis à part. Je les supprime.
sudo docker volume prune --filter all=1
Aussi, j’ai exporté le stockage des données sur mon système hôte pour pouvoir y accéder aisément. Je peux à présent les supprimer.
rm -r /nextcloud-data
Et pour finir, docker garde une sorte de cache mémorisant les systèmes d’origine qui ont été télécharger, pour ne pas avoir à les télécharger à nouveau si d’autres systèmes en dépendent. Ce sont les images. Je me libère de la mémoire en les effaçant.
sudo docker image prune -a
Voilà, comme si rien ne s’était passé, je peux à nouveau profiter librement de ma machine.
Je vous laisse tout de même jeter un coup d’œil à la doc de Nextcloud, et au README de l’image All-in-One, ça reste la base, toutes les infos y sont.
Et si vous avez, à votre tour, monté un cloud à l’aide de ces infos, je vous adresse mes félicitations.
À bientôt !