Installation de Nextcloud avec Docker

Nextcloud est une solution Cloud open source qui a fait ses preuves. En plus des clients pour les systèmes d’exploitation sur bureau et sur mobile, le logiciel propose également un composant serveur. Découvrez avec nous comment installer un serveur Nextcloud dans un environnement Docker.

Essayez gratuitement le serveur Cloud avec IONOS

Testez notre serveur Cloud gratuitement - Testez votre serveur Cloud chez IONOS pendant 30 jours !

REST API
Trafic illimité
Virtualisation VMware

Installer Nextcloud sous Docker

Nextcloud est une solution Cloud open source issue du fractionnement du projet ownCloud. Ses fonctionnalités sont comparables à celles de solutions Cloud propriétaires comme Microsoft 365 ou Google Workspace. Nextcloud synchronise les données telles que les calendriers et les contacts entre les différents utilisateurs et appareils. En plus de cette synchronisation obligatoire des fichiers, des fonctionnalités liées à la collaboration et à la communication propres à une équipe sont également disponibles. La stratégie dite de « Federal Cloud », qui existe depuis 2020, est également basée sur Nextcloud.

Comme la plupart des solutions Cloud équivalentes, un composant serveur Nextcloud est proposé, mais aussi des clients pour les systèmes d’exploitation sur bureau et sur mobile. Le serveur Nextcloud permet la gestion des données et la communication avec les clients, tout en mettant à disposition une interface Web indépendante de ceux-ci.

Nous allons vous montrer comment installer un serveur Nextcloud sur Ubuntu (Linux). Pour ce faire, nous allons utiliser Docker Compose et nous référer à une installation sur une infrastructure Cloud. Vous pouvez également installer le serveur sur votre propre matériel et configurer, par exemple, Nextcloud sur votre appareil Raspberry Pi.

Conseil

Nextcloud et ownCloud partagent de nombreux points communs. Lisez notre article de comparaison entre ownCloud et Nextcloud pour découvrir leurs différences.

Architecture de Nextcloud sur Docker

Quels sont les composants du serveur Nextcloud sous Docker ? Comment sont-ils liés entre eux ? En plus du logiciel Nextcloud proprement dit, trois services conteneurisés supplémentaires peuvent être utilisés. Pour provisionner le réseau de conteneurs et le contrôler comme une seule entité, nous allons utiliser l’outil Docker Compose. Voici quelques-uns des différents services qu’il propose :

  1. Proxy inverse Nginx : essentiel pour la création de connexions HTTPS cryptées lors de l’accès à Nextcloud
  2. Let’s Encrypt : utilisé pour l’automatisation de la configuration de certificats SSL
  3. MariaDB : permet de stocker les données générées (côté serveur) par l’utilisation de Nextcloud
  4. Serveur Nextcloud : fournit les véritables fonctionnalités de Nextcloud en communiquant avec les clients et en hébergeant l’interface Web.

Comment préparer l’installation du serveur Nextcloud ?

Une fois le système d’exploitation Ubuntu (Linux) correctement configuré, commencez par installer le moteur Docker et l’outil Docker Compose. Le moteur Docker fournit les principales fonctionnalités des conteneurs et l’outil Docker Compose vous permet de gérer tous les réseaux de conteneurs couplés. Si le moteur Docker et l’outil Docker Compose sont déjà installés sur votre appareil, vous pouvez passer cette étape.

Installer le moteur Docker sur Ubuntu

Nous allons ici vous expliquer comment installer le moteur Docker sous Ubuntu (Linux) en suivant les instructions d’installation officielles. Pour toute autre distribution de Linux, les instructions correspondantes sont disponibles sur le site Web de Docker. Commençons par l’installation du moteur Docker.

  1. Le cas échéant, supprimez la version de Docker préalablement installée :
sudo apt-get remove docker docker-engine docker.io containerd runc
  1. Mettez à jour le programme d’installation :
sudo apt-get update
  1. Préparez les référentiels :
sudo apt-get install \
ca-certificates \
curl \
gnupg \
lsb-release
  1. Ajoutez la clé GPG officielle de Docker :
 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
  1. Configurez un référentiel Docker stable :
 echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  1. Mettez à jour les référentiels :
sudo apt-get update
  1. Installez le moteur Docker et ses interdépendances :
sudo apt-get install docker-ce docker-ce-cli containerd.io
  1. Exécutons maintenant le conteneur « Hello World » à des fins de test :

Si vous avez bien installé le moteur Docker, le conteneur s’exécute (le message correspondant s’affiche alors).

sudo docker run hello-world

Installer l’outil Docker Compose sur Ubuntu

Passons maintenant à l’installation de l’outil Docker Compose. Le processus d’installation est plus simple que l’installation du moteur Docker, avec une ampleur moins importante. Vous trouverez ci-dessous les étapes concrètes que vous devez suivre.

  1. Activez le référentiel universel d’Ubuntu :
sudo add-apt-repository universe
  1. Mettez à jour le gestionnaire de paquets :
sudo apt update
  1. Installez l’outil Docker Compose :
sudo apt install docker-compose
  1. Vérifiez la bonne installation de l’outil Docker Compose :
docker-compose --version

Si un numéro de version s’affiche, cela signifie que votre outil Docker Compose a été installé correctement.

Procéder à l’installation du serveur Nextcloud

Une fois le moteur Docker et l’outil Docker Compose installés, la véritable configuration de Nextcloud peut commencer. Ensemble, nous allons paramétrer des conteneurs Docker individuels pour les différents services. Vous devez utiliser deux fichiers pour configurer les conteneurs, les volumes et les réseaux Docker dont vous avez besoin :

Fichier Explication
docker-compose.yaml Instructions au format YAML concernant la mise en place de l’application multi-conteneurs avec l’outil Docker Compose
.env Fichier texte contenant des variables d’environnement (avec une définition de variable par ligne)

Comme nous venons de le mentionner, l’outil Docker Compose permet de gérer des applications multi-conteneurs. Il suffit pour cela d’utiliser des instructions dans le cadre de l’outil Docker Compose afin de définir la manière dont l’application est structurée et dont les différents composants interagissent entre eux. Les instructions de l’outil Docker Compose décrivent les différents services, paramètres et éléments Docker. Ils sont rédigés en langage YAML (« Yet Another Markup Language », ce qui signifie littéralement « Encore un autre langage de balisage »). Nous allons progressivement créer le fichier docker-compose.yaml dont il est question ici.

En plus de ce fichier docker-compose.yaml, un fichier supplémentaire est nécessaire : celui-ci contient les variables d’environnement à intégrer aux instructions relatives à l’outil Docker Compose. Ces variables d’environnement et leurs valeurs sont stockées, par défaut, dans le fichier .env qui se trouve dans le dossier du projet. Ce fichier .env n’étant pas inclus dans le système de contrôle de version, vos données sensibles (comme vos mots de passe) sont ainsi protégées contre toute divulgation accidentelle.

En utilisant ce fichier .env, vous pouvez facilement définir plusieurs paramètres pour différents environnements d’application. Si vous souhaitez par exemple utiliser des paramètres différents pour votre site en direct et votre site de staging, il vous suffit de modifier le fichier .env correspondant.

Créer les structures nécessaires au bon fonctionnement du serveur Nextcloud

Quelques éléments structurels sont nécessaires pour commencer à installer le serveur Nextcloud. Pour créer ces derniers, il suffit de suivre les étapes ci-dessous.

  1. Création d’un dossier de projet. Créez un dossier nextcloud-docker dans le répertoire personnel de votre interface utilisateur :
mkdir ~/nextcloud-docker/
  1. Création des fichiers. Créez les fichiers docker-compose.yaml et .env dans le dossier du projet :
touch ~/nextcloud-docker/docker-compose.yaml
touch ~/nextcloud-docker/.env
  1. Création d’un réseau Docker. Utilisez la commande docker pour créer un nouveau réseau, les quatre conteneurs communiquant au sein de celui-ci :
docker network create nextcloud_network

Une fois ces structures créées, poursuivez l’installation de votre serveur Nextcloud.

Configurer un proxy inverse pour le serveur Nextcloud

Pour installer votre serveur Nextcloud, commencez par configurer un proxy inverse. Vous devez pour cela utiliser Nginx. Comme votre application est assemblée à partir de plusieurs conteneurs, le processus d’installation se déroule majoritairement dans le fichier docker-compose.yaml. Ici, nous allons vous expliquer dans le détail comment modifier ce fichier. Suivez le même modèle pour les étapes d’installation qui suivent.

  1. Ouvrir le fichier docker-compose.yaml pour le modifier.

La commande suivante permet d’ouvrir le fichier encore vide dans l’éditeur « Nano » :

nano ~/nextcloud-docker/docker-compose.yaml
  1. Insérer le bloc de code suivant dans l’éditeur « Nano » et enregistrer le fichier.

Pour fermer le fichier, vous pouvez utiliser le raccourci clavier suivant : [Ctrl] + [X]. Une question relative à l’enregistrement du fichier s’affiche ; répondez-y par « y », pour « Yes » (« Oui »). Pour confirmer l’utilisation du nom de fichier existant, appuyez sur la touche [Entrée].

Si vous le souhaitez, vous pouvez aussi laisser l’éditeur ouvert et utiliser le raccourci clavier [Ctrl] + [O] (« Write out », soit « Rédiger dans le fichier ») pour écrire le texte de l’éditeur dans votre fichier.

version: ’3’
services:
  proxy:
    image: jwilder/nginx-proxy:alpine
    labels:
      - "com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy=true"
    container_name: nextcloud-proxy
    networks:
      - nextcloud_network
    ports:
      - 80:80
      - 443:443
    volumes:
      - ./proxy/conf.d:/etc/nginx/conf.d:rw
      - ./proxy/vhost.d:/etc/nginx/vhost.d:rw
      - ./proxy/html:/usr/share/nginx/html:rw
      - ./proxy/certs:/etc/nginx/certs:ro
      - /etc/localtime:/etc/localtime:ro
      - /var/run/docker.sock:/tmp/docker.sock:ro
    restart: unless-stopped

Que signifient les différentes entrées ? En premier lieu, vous demandez à l’outil Docker Compose de créer un nouveau service, intitulé proxy, en utilisant une image Nginx basée sur Alpine (Linux). Vous lui indiquez également que le proxy inverse doit communiquer avec les autres services par l’intermédiaire du réseau Nextcloud nextcloud_network.

Vous devez ensuite créer une correspondance entre les ports HTTP et HTTPS standard 80 et 443 du système hôte et le conteneur. Toute connexion entrante passe alors par ce proxy. Pour la dernière étape de cette configuration, vous devez créer différents volumes Docker et indiquer la nécessité d’un redémarrage automatique du proxy inverse si celui-ci n’a pas été clairement arrêté.

Configurer le service « Let’s Encrypt » pour le serveur Nextcloud

Il est maintenant temps d’installer « Let’s Encrypt ». Vous pourrez ainsi chiffrer vos communications avec le serveur Nextcloud grâce au protocole HTTPS.

  1. Ouvrir le fichier docker-compose.yaml pour le modifier :
nano ~/nextcloud-docker/docker-compose.yaml
  1. Ajouter un bloc de service :

Suivez les mêmes étapes que dans la section précédente en prenant garde à la tabulation : le début du bloc commençant par « letsencrypt: » doit en effet se trouver au même niveau que « proxy: ». Cette règle est également valable pour les blocs de service suivants.

letsencrypt:
  image: jrcs/letsencrypt-nginx-proxy-companion
  container_name: nextcloud-letsencrypt
  depends_on:
    - proxy
  networks:
    - nextcloud_network
  volumes:
    - ./proxy/certs:/etc/nginx/certs:rw
    - ./proxy/vhost.d:/etc/nginx/vhost.d:rw
    - ./proxy/html:/usr/share/nginx/html:rw
    - /etc/localtime:/etc/localtime:ro
    - /var/run/docker.sock:/var/run/docker.sock:ro
  restart: unless-stopped

Définissez une fois encore un nouveau service du nom de letsencrypt et basé sur le conteneur letsencrypt-nginx-proxy-companion. Vous devez ici préciser que celui-ci dépend du service de proxy inverse et qu’il communique par l’intermédiaire du même réseau Docker. De plus, n’oubliez pas de définir les volumes Docker nécessaires à l’échange de données. Vous devez également paramétrer ce service de matière à ce qu’il redémarre automatiquement, sauf s’il a clairement été arrêté.

Conseil

Vous voulez bénéficier d’un chiffrement professionnel pour votre site Web ? Achetez votre certificat SSL au meilleur prix avec IONOS !

Configurer le service MariaDB pour le serveur Nextcloud

Une fois le proxy inverse et le service « Let’s Encrypt » configurés, il ne vous reste plus que la moitié de l’installation à effectuer. Il est maintenant temps de passer à la base de données MariaDB. Vous avez besoin de celle-ci pour gérer les données créées par l’utilisation de Nextcloud. Le stockage à proprement parler s’effectue en dehors du conteneur, par l’intermédiaire d’un volume Docker.

  1. Ouvrir le fichier docker-compose.yaml pour le modifier :
nano ~/nextcloud-docker/docker-compose.yaml
  1. Ajoutez un bloc de service :
db:
  image: mariadb
  container_name: nextcloud-mariadb
  networks:
    - nextcloud_network
  volumes:
    - db:/var/lib/mysql
    - /etc/localtime:/etc/localtime:ro
  environment:
    - MYSQL_ROOT_PASSWORD
    - MYSQL_PASSWORD
    - MYSQL_DATABASE
    - MYSQL_USER
  restart: unless-stopped

La plupart de ces paramètres doivent maintenant vous être familiers. Vous devez à présent définir un service db basé sur l’image Docker mariadb. Spécifiez ensuite le réseau nextcloud_network, déjà utilisé pour les autres services, ainsi qu’un volume Docker dédié au stockage des données.

Ce bloc de configuration est toutefois différent, car des variables d’environnement sont utilisées. Dans la section environment, vous devez donc indiquer les noms des variables d’environnement nécessaires pour MariaDB. Les valeurs réelles seront ainsi lues dans le fichier .env lors de la prochaine exécution de l’outil Docker Compose.

Configurer le conteneur du serveur Nextcloud

Et voilà : vous allez pouvoir passer à l’installation proprement dite du logiciel relatif au serveur Nextcloud.

  1. Ouvrir le fichier docker-compose.yaml pour le modifier :
nano ~/nextcloud-docker/docker-compose.yaml
  1. Ajoutez un bloc de service :
app:
  image: nextcloud:latest
  container_name: nextcloud-app
  networks:
    - nextcloud_network
  depends_on:
    - letsencrypt
    - proxy
    - db
  volumes:
    - nextcloud:/var/www/html
    - ./app/config:/var/www/html/config
    - ./app/custom_apps:/var/www/html/custom_apps
    - ./app/data:/var/www/html/data
    - ./app/themes:/var/www/html/themes
    - /etc/localtime:/etc/localtime:ro
  environment:
    - VIRTUAL_HOST
    - LETSENCRYPT_HOST
    - LETSENCRYPT_EMAIL
  restart: unless-stopped

Vous devez créer le service app, basé sur l’image Docker nextcloud et qui communique par l’intermédiaire du réseau nextcloud_network, que vous connaissez déjà. Pour vous assurer que le conteneur Nextcloud est bien lancé en dernier, vous devez définir les autres services comme des interdépendances. Spécifiez également les volumes Docker et les variables d’environnement nécessaires.

Terminer la configuration du serveur Nextcloud

Quelques entrées supplémentaires sont requises au niveau du fichier docker-compose.yaml pour achever la configuration du serveur Nextcloud. N’oubliez pas de créer le fichier .env et de le remplir avec les valeurs correspondantes.

  1. Ouvrir le fichier docker-compose.yaml pour le modifier :
nano ~/nextcloud-docker/docker-compose.yaml
  1. Ajouter les blocs suivants :

Comme il ne s’agit pas de blocs de service, la tabulation doit correspondre à celle utilisée pour services:.

volumes:
  nextcloud:
  db:
networks:
  nextcloud_network:
  1. Ouvrir un fichier .env vide pour le modifier :
nano ~/nextcloud-docker/.env
  1. Remplir le fichier env. avec les variables d’environnement et leurs valeurs :

Copiez le code ci-dessous dans la fenêtre de l’éditeur et remplissez les <balises> avec les valeurs souhaitées avant de les enregistrer.

# MariaDB
MYSQL_ROOT_PASSWORD=toor
MYSQL_PASSWORD=mysql
MYSQL_DATABASE=nextcloud
MYSQL_USER=nextcloud
# Nextcloud
VIRTUAL_HOST=<your.domain></your.domain>
LETSENCRYPT_HOST=<your.domain></your.domain>
LETSENCRYPT_EMAIL=<your@email></your@email>
  1. Une fois cet enregistrement effectué, affichez le contenu du fichier .env pour vérifier que les valeurs ont bien été ajoutées correctement :
cat ~/nextcloud-docker/.env

Configuration complète du serveur Nextcloud

Avant de transférer la configuration ainsi créée à l’outil Docker Compose et de créer et démarrer vos conteneurs, vérifiez que vous avez bien tout ce dont vous avez besoin.

  1. Émettre la configuration existante :
cat ~/nextcloud-docker/docker-compose.yaml
  1. La comparer avec le modèle. La configuration ainsi obtenue doit correspondre au code suivant :
version: ’3’
services:
  proxy:
    image: jwilder/nginx-proxy:alpine
    labels:
      - "com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy=true"
    container_name: nextcloud-proxy
    networks:
      - nextcloud_network
    ports:
      - 80:80
      - 443:443
    volumes:
      - ./proxy/conf.d:/etc/nginx/conf.d:rw
      - ./proxy/vhost.d:/etc/nginx/vhost.d:rw
      - ./proxy/html:/usr/share/nginx/html:rw
      - ./proxy/certs:/etc/nginx/certs:ro
      - /etc/localtime:/etc/localtime:ro
      - /var/run/docker.sock:/tmp/docker.sock:ro
    restart: unless-stopped
  letsencrypt:
    image: jrcs/letsencrypt-nginx-proxy-companion
    container_name: nextcloud-letsencrypt
    depends_on:
      - proxy
    networks:
      - nextcloud_network
    volumes:
      - ./proxy/certs:/etc/nginx/certs:rw
      - ./proxy/vhost.d:/etc/nginx/vhost.d:rw
      - ./proxy/html:/usr/share/nginx/html:rw
      - /etc/localtime:/etc/localtime:ro
      - /var/run/docker.sock:/var/run/docker.sock:ro
    restart: unless-stopped
  db:
    image: mariadb
    container_name: nextcloud-mariadb
    networks:
      - nextcloud_network
    volumes:
      - db:/var/lib/mysql
      - /etc/localtime:/etc/localtime:ro
    environment:
      - MYSQL_ROOT_PASSWORD
      - MYSQL_PASSWORD
      - MYSQL_DATABASE
      - MYSQL_USER
    restart: unless-stopped
  app:
    image: nextcloud:latest
    container_name: nextcloud-app
    networks:
      - nextcloud_network
    depends_on:
      - letsencrypt
      - proxy
      - db
    volumes:
      - nextcloud:/var/www/html
      - ./app/config:/var/www/html/config
      - ./app/custom_apps:/var/www/html/custom_apps
      - ./app/data:/var/www/html/data
      - ./app/themes:/var/www/html/themes
      - /etc/localtime:/etc/localtime:ro
    environment:
      - VIRTUAL_HOST
      - LETSENCRYPT_HOST
      - LETSENCRYPT_EMAIL
    restart: unless-stopped
volumes:
  nextcloud:
  db:
networks:
  nextcloud_network:

Si votre version du fichier YAML correspond bien à celle-ci, vous pouvez passer à la dernière étape.

Terminer l’installation du serveur Nextcloud

Pour obtenir un serveur Nextcloud sous la forme d’une application multiconteneurs à partir des instructions de l’outil Docker Compose, vous devez exécuter la commande suivante sur la ligne de commande :

cd ~/nextcloud-docker/ && docker-compose up -d

Pour finir, vérifiez que les conteneurs ont bien été lancés :

docker ps -a

Une liste des conteneurs en cours d’exécution s’affiche. Celle-ci doit contenir les quatre conteneurs que vous avez définis dans le fichier docker-compose.yaml.