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 :
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é !