Licence CC BY-SA

Installer Nextcloud au travers son image docker All-in-One

Un cloud perso en quelques commandes

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

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

Installation methods

You can install Docker Engine in different ways, depending on your needs:

  • Docker Engine comes bundled with Docker Desktop for Linux. This is the easiest and quickest way to get started.
  • Set up and install Docker Engine from Docker’s apt repository.
  • Install it manually and manage upgrades manually.
  • Use a convenience scripts. Only recommended for testing and development environments.
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 ! ;)

1 commentaire

Salut,

Dans mon cas, j’utilise TrueNas sur Proxmox (mais peu importe l’hyperviseur) et NextCloud comme "app" dans TrueNas directement. L’avantage c’est que je n’ai eu qu’a cliquer sur un bouton pour deployer NextCloud. De plus, TrueNas centralise la gestion de tous mes volumes, incluant backup et synchronization. OwnCloud ne me sert qu’a exposer un service type "box" ou "google drive" a mes utilisateurs.

D’ailleurs je peux toujours exporter le volume utilise par NextCloud via NFS/SMB de sorte a pouvoir monter le volume localement, sans passer par OwnCloud.

Tout est installe localement et requiert un acces LAN via mon VPN ce qui rend impossible le partage de lien pour le moment. Ceci dit, je reflechis a mettre l’instance de NextCloud sur ma DMZ, donc accessible via internet.

Bref, dans tous les cas, installer TrueNas est bien plus simple que NextCloud.

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte