Installation Nextcloud avec Docker
Pré-requis
- Ubuntu 20.04 ou debian 10
- Droits sudo
Installation
Installation de docker
On va ajouter le dĂ©pĂ´t de docker afin d’ĂŞtre le plus Ă jour possible, notamment sur debian.
# Installation de quelques dépendances
sudo apt-get install curl gnupg2 apt-transport-https ca-certificates software-properties-common
# Import des clés GPG du dépôt docker
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
# Ajout du dépôt stable de docker
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
# Installation de docker-ce
sudo apt update
sudo apt install docker-ce
Maintenant, installons docker-compose dans sa dernière version. Vous trouverez ici-même la dernière release, récupérez-en le numéro de version (1.27.4 en novembre 2020) : https://github.com/docker/compose/releases
# Remplacer le numéro de version par celui récupéré à l'instant
sudo curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# Si problème de droit sur le binaire docker-compose
sudo chmod +x /usr/local/bin/docker-compose
# VĂ©rification de la version
docker-compose --version
Création Network
Nous allons créer un réseau qui sera utilisé par nos containers pour dialoguer entre eux.
docker network create network_nextcloud
docker-compose.yml
Nous allons créer les 4 containers suivants :
- proxy : Point d’entrĂ©e
- letsencrypt : Qui s’occupera du certificat SSL
- db : Base de donnée mariaDB
- nextcloud : L’application Nextcloud
Ces containers dialogueront via le rĂ©seau network_nextcloud en interne. Le seul point d’entrĂ©e externe sera via le container proxy.
# J'ai décidé de placer tous mes volumes dans /srv/docker-files
mkdir /srv/docker-files && cd !$
vi docker-compose.yml
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:
- network_nextcloud
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:
- network_nextcloud
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:
- network_nextcloud
volumes:
- db:/var/lib/mysql
- /etc/localtime:/etc/localtime:ro
environment:
- MYSQL_ROOT_PASSWORD=mot_de_passe_root
- MYSQL_PASSWORD=mot_de_passe_user
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
restart: unless-stopped
nextcloud:
image: nextcloud:latest
container_name: nextcloud-app
networks:
- network_nextcloud
depends_on:
- letsencrypt
- proxy
- db
volumes:
- nextcloud:/var/www/html
- ./nextcloud/config:/var/www/html/config
- ./nextcloud/custom_apps:/var/www/html/custom_apps
- ./nextcloud/data:/var/www/html/data
- ./nextcloud/themes:/var/www/html/themes
- /etc/localtime:/etc/localtime:ro
- ./upload_large_file.conf:/etc/nginx/conf.d/upload_large_file.conf:ro
environment:
- VIRTUAL_HOST=nextcloud.DOMAINE.FR
- LETSENCRYPT_HOST=nextcloud.DOMAINE.FR
- LETSENCRYPT_EMAIL=contact@DOMAINE.FR
restart: unless-stopped
volumes:
nextcloud:
db:
networks:
network_nextcloud:
Augmentation limite upload
Par dĂ©faut, nginx limite Ă 10M l’upload passant par lui. Nous pouvons redĂ©finir cette limite en surchargeant la configuration de nginx.
Pour cela, créer un fichier upload_large_file.conf au même niveau que le fichier docker-compose.yml.
vi upload_large_file.conf
client_max_body_size 10G;
client_body_buffer_size 400M;
DĂ©ploiement des containers
docker-compose up -d
On peut vérifier que les containers sont bien démarrés.
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ddc9484e5212 nextcloud:latest "/entrypoint.sh apac…" 5 minutes ago Up 5 minutes 80/tcp nextcloud-app
b73e758d7613 jrcs/letsencrypt-nginx-proxy-companion "/bin/bash /app/entr…" 5 minutes ago Up 5 minutes nextcloud-letsencrypt
b77cdb44e4d0 mariadb "docker-entrypoint.s…" 5 minutes ago Up 5 minutes 3306/tcp nextcloud-mariadb
e31014091fec jwilder/nginx-proxy:alpine "/app/docker-entrypo…" 5 minutes ago Up 5 minutes 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp nextcloud-proxy
Première configuration
Ouvrez un navigateur et rendez-vous sur nextcloud.DOMAINE.FR.
Entrez les informations demandées. Rien de particulier SAUF pour la base de donnée mariaDB, remplacez localhost par db.
Forcer le HTTPS
Par défaut, en version 20 tout du moins, certaines redirections sont effectuées en http, les navigateurs bloquent ces requêtes.
Pour forcer Nextcloud à toujours délivrer des adresses en HTTPS, on va lui ajouter un paramètre dans son config.php.
Voici le paramètre à ajouter, sous version : 'overwriteprotocol' => 'https'
vi /srv/docker-files/nextcloud/config/config.php
'datadirectory' => '/var/www/html/data',
'dbtype' => 'mysql',
'version' => '20.0.2.2',
'overwriteprotocol' => 'https', <===== Ajouter ICI
Le paramètre est pris en compte à chaud, pas besoin de redémarrer le container.
Mise Ă jour
# Récupère les dernières versions des containers utilisés dans notre docker-compose.yml
docker-compose pull
# Relance les containers en utilisant les dernières images disponibles
docker-compose up -d
Resources
https://blog.ssdnodes.com/blog/installing-nextcloud-docker/ https://github.com/docker-library/docs/blob/master/nextcloud/README.md