Déployer Nextcloud avec Docker-Compose en 2 minutes !

Déployer Nextcloud avec Docker-Compose en 2 minutes !

Vous avez un serveur chez un hébergeur (VPS ou autre), un serveur NAS à votre domicile ou encore un Raspberry Pi ? Il vous reste de l'espace de stockage et vous ne savez pas quoi en faire ?

Nextcloud est fait pour vous !

Présentation

Nextcloud est un logiciel libre réunissant plusieurs applications permettant le stockage de fichiers, l'utilisation d'outils collaboratifs (Agendas, Traitement de texte, WebMail etc..) un lecteur vidéo et plein d'autres fonctionnalités !

Son principal avantage est qu'il est possible de l'installer en mode On Premise afin de disposer de son propre stockage Cloud. C'est un logiciel accessible en web, codé en PHP et est compatible avec les SGBD Mysql et PostgreSQL.

Mode d'installation

Il existe plein de différentes manières d'installer Nextcloud, que ce soit avec un serveur de cache comme Redis, derrière un Reverse-Proxy comme Nginx, Traefik etc...

J'ai opté pour une installation basique avec Docker-Compose, contenant 2 services. C'est le mode d'installation le plus simple, nécessitant le moins de paramétrage. Le docker-compose contient :

  • Un conteneur avec Nextcloud. Le conteneur embarque Apache et PHP.
  • Un conteneur MariaDB.

Prérequis

Nextcloud est un logiciel consommant peu de ressources. Il vous faudra disposer d'une configuration minimale suivante :

  • 2 Go de RAM
  • 2 Cpu
  • 10 Go d'espace disque (+ l'espace dédié à vos fichiers)

Création du service MariaDB

Nous allons commencer par déclarer dans notre fichier docker-compose.yml le service MariaDB comme ceci :

  nextcloud_db:
    image: mariadb
    container_name: nextcloud_db
    hostname: nextcloud_db
    restart: unless-stopped
    command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
    env_file: .env
    networks:
      - nextcloud
    volumes:
      - nextcloud-db:/var/lib/mysql
Service MariaDB pour Nextcloud

Un service MariaDB très simple mais efficace, je n'ai pas fait de configuration sortant des standards.

Il est impératif de monter un volume sur le /var/lib/mysql du conteneur afin de ne pas éviter les soucis que je décris dans cet article.

Création du service Nextcloud

Il reste ensuite le service Nextcloud à créer :

  nextcloud_app:
    depends_on:
      - nextcloud_db
    image: nextcloud
    container_name: nextcloud_app
    hostname: nextcloud_app
    restart: unless-stopped
    ports:
      - 80:80
    env_file: .env
    networks:
      - nextcloud
    volumes:
      - nextcloud-html:/var/www/html
      - nextcloud-webconf:/etc/apache2

Le service dépend de la base MYSQL et 2 volumes managés sont montés. Le volume nextcloud-html stocke les fichiers web de Nextcloud et le volume nextcloud-webconf stocke la configuration du serveur web Apache.

Variables d'environnement

Comme vous avez pu le remarquer précédemment, j'ai fait le choix de disposer les variables d'environnement dans un fichier .env. Le voici :

MYSQL_DATABASE=nextcloud
MYSQL_USER=mysql_user
MYSQL_PASSWORD=<votre mot de passe>
MYSQL_HOST=database
MYSQL_RANDOM_ROOT_PASSWORD=yes

TZ=Europe/Paris

Il est possible de monter des volumes plutôt que de mettre la variable TZ pour que les conteneurs aient une Timezone synchronisée avec l'hôte comme ceci :

volumes:
  - /etc/timezone:/etc/timezone:ro
  - /etc/localtime:/etc/localtime:ro

Déploiement

Et voici à quoi devrait ressembler votre docker-compose.yml

---
version: '3.7'
services:
  nextcloud_db:
    image: mariadb
    container_name: nextcloud_db
    hostname: nextcloud_db
    restart: unless-stopped
    command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
    env_file: .env
    networks:
      - nextcloud
    volumes:
      - nextcloud-db:/var/lib/mysql

  nextcloud_app:
    depends_on:
      - nextcloud_db
    image: nextcloud
    container_name: nextcloud_app
    hostname: nextcloud_app
    restart: unless-stopped
    ports:
      - 80:80
    env_file: .env
    networks:
      - nextcloud
    volumes:
      - nextcloud-html:/var/www/html
      - nextcloud-webconf:/etc/apache2

volumes:
  nextcloud-db:
  nextcloud-html:
  nextcloud-webconf:

networks:
  nextcloud:

Tout est positionné, le fichier .env crée, nous pouvons passer au déploiement !

Exécuter la commande qui déploie le docker-compose en mode détaché :

docker-compose up -d

Finalisation

Comme j'ai redirigé le port 80 du contenur Nextcloud vers le port 80 de l'hôte, il suffit maintenant d'accéder en web à votre serveur http://<ip>

Vous devriez normalement arriver sur cette page

Et voilà ! Seulement 2 fichiers à créer et le tour est joué !