Back
Featured image of post Installation de Nextcloud avec Docker

Installation de Nextcloud avec Docker

Tutoriel pour installer Nextcloud via docker

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

Généré avec Hugo
Thème Stack conçu par Jimmy