Héberger son cloud facilement : Docker + Nextcloud + RocketChat + Letsencrypt

Dans cet article je vous explique comment vous pouvez utiliser Docker pour héberger facilement un cloud Nextcloud et/ou un service de messagerie RocketChat grâce à Docker. Le but est de vous donner les outils pour vous aussi abandonner les services des Googles et autres et d’héberger certaines données pour vous-même.

Comme à chaque fois il vaut mieux que vous ayiez lu les tutoriels précédent pour bien comprendre.

Cette marche à suivre est à ce jour la manière que j’utilise pour héberger mes données sur mon serveur. Elle a fait ses preuves et cela fait maintenant plus d’un an que notre RocketChat est en ligne et plusieurs mois que j’ai un cloud Nextcloud qui tourne 24h/24.

part 1

Dans ce tutoriel je vais supposer que vous avez un serveur sur lequel vous voulez héberger plusieurs services et sites. Pour commencer il faut donc mettre en place un reverse proxy sur votre serveur (voir Docker : Utiliser Docker pour héberger plusieurs sites et services sur un serveur grâce à un reverse proxy nginx). Voilà comment le mettre en place:

Préréquis : vous devez avoir docker et docker-compose installés.

Je vous retranscris les instructions pour l’installer.

  1. Téléchargez le code grâce à :
  git clone https://github.com/evertramos/docker-compose-letsencrypt-nginx-proxy-companion.git
  1. Faites une copie du fichier .env.sample et renommez le .env

Il vous suffit d’éditer les paramètres de ce fichier. Voici les plus essentiels documentés en français pour vous :

  #
  # docker-compose-letsencrypt-nginx-proxy-companion
  #
  # Un proxy web qui utilise docker avec NGINX et Let's Encrypt
  #
  # Ceci est le fichier .env utilisé pour configurer votre Webproxy

  #
  # Noms de vos conteneurs locaux
  #
  NGINX_WEB=nginx-web
  DOCKER_GEN=nginx-gen
  LETS_ENCRYPT=nginx-letsencrypt

  #
  # Votre adresse IP externe
  #
  IP=0.0.0.0 #votre IP externe

  #
  # Réseau par défaut
  #
  NETWORK=webproxy

  #
  # Chemin des fichiers NGINX
  #
  NGINX_FILES_PATH=/path/to/your/nginx/data

  1. Lancer le script de démarrage
  ./start.sh

Installer Nextcloud

Comme pour mes autres projets utilisant Docker j’utilise docker-compose. Nous allons utiliser l’image Nextcloud par défaut combiné à l’image MariaDB.

Créez un fichier docker-compose.yml qui contiendra les informations de vos conteneurs Nextcloud.


version: '3'

services:
   cloud-db:
     container_name: ${DB_CONTAINER_NAME}
     image: mariadb:latest
     restart: unless-stopped
     volumes:
        - ${LOCAL_DB_DIR}:/var/lib/mysql
     environment:
       MYSQL_DATABASE: ${MYSQL_DATABASE}
       MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
       MYSQL_USER: ${MYSQL_USER}
       MYSQL_PASSWORD: ${MYSQL_PASSWORD}

   cloud-app:
     depends_on:
       - cloud-db
     container_name: ${APP_CONTAINER_NAME}
     image: nextcloud:latest
     restart: unless-stopped
     volumes:
       - ${LOCAL_DATA_DIR}:/var/www/html
       - ${LOCAL_CONF_DIR}:/var/www/html/config
       - ${LOCAL_APPS_DIR}:/var/www/html/apps
     environment:
       NEXTCLOUD_ADMIN_USER: ${NEXTCLOUD_ADMIN_USER}
       NEXTCLOUD_ADMIN_PASSWORD: ${NEXTCLOUD_ADMIN_PASSWORD}
       NEXTCLOUD_DATA_DIR: ${NEXTCLOUD_DATA_DIR}
       NEXTCLOUD_TABLE_PREFIX: ${NEXTCLOUD_TABLE_PREFIX}
       VIRTUAL_HOST: ${VIRTUAL_HOST}
       LETSENCRYPT_HOST: ${LETSENCRYPT_HOST}
       LETSENCRYPT_EMAIL: ${LETSENCRYPT_EMAIL}
       MYSQL_DATABASE: ${MYSQL_DATABASE}
       MYSQL_USER: ${MYSQL_USER}
       MYSQL_PASSWORD: ${MYSQL_PASSWORD}
       MYSQL_HOST: ${MYSQL_HOST}

networks:
    default:
       external:
         name: ${NETWORK}


Le fichier .env contiens les valeurs de toutes vos variables.

#
# Configuration for Nextcloud using NGINX WebProxy
#

# Nom des containers
DB_CONTAINER_NAME=cloud-db
APP_CONTAINER_NAME=cloud-app

# Paramètres Mysql
MYSQL_HOST=cloud-db
MYSQL_DATABASE=cloud_db
MYSQL_ROOT_PASSWORD=R00tP4SS
MYSQL_USER=cloud_user
MYSQL_PASSWORD=P4SS

# Paramètres Nextcloud
NEXTCLOUD_ADMIN_USER=username
NEXTCLOUD_ADMIN_PASSWORD=N3XTP4SS

# Chemin de données Nextcloud
NEXTCLOUD_DATA_DIR=/var/www/html/data
NEXTCLOUD_TABLE_PREFIX=

# Chemin de stockage des données Nextcloud
# À modifier selon vos besoins
LOCAL_DB_DIR=./data/db
LOCAL_DATA_DIR=./data/cloud
LOCAL_CONF_DIR=./data/cloud/config
LOCAL_APPS_DIR=./data/cloud/apps

# Hébergement
VIRTUAL_HOST=cloud.example.com
LETSENCRYPT_HOST=cloud.example.com
LETSENCRYPT_EMAIL=username@example.com

#
# Nom du réseau
#
# Your container app must use a network conencted to your webproxy
# https://github.com/evertramos/docker-compose-letsencrypt-nginx-proxy-companion
#
NETWORK=webproxy


Une fois les deux fichiers créés il vous suffit de lancer la commande suivante pour démarrer Nextcloud :

docker-compose up -d

Installer Rocket.RocketChat

version: '3.3'

services:
  db:
    image: mongo
    volumes:
      - ./data/runtime/db:/data/db
      - ./data/dump:/dump
    command: mongod --smallfiles

  rocketchat:
    image: rocketchat/rocket.chat:latest
    environment:
      MONGO_URL: mongodb://db:27017/rocketchat
      ROOT_URL: http://${ROCKETCHAT_URL}
      Accounts_UseDNSDomainCheck: "false"
      MAIL_URL: smtp:// .... # Comment remplir cette case ?
      VIRTUAL_HOST: ${ROCKETCHAT_URL}
      LETSENCRYPT_HOST: ${ROCKETCHAT_URL}
      LETSENCRYPT_EMAIL: username@example.com
    links:
      - db:db
    ports:
      - 3000:3000
    restart: always

  hubot:
    image: rocketchat/hubot-rocketchat:latest
    environment:
      ROCKETCHAT_URL: rocketchat:3000
      ROCKETCHAT_ROOM: ''
      LISTEN_ON_ALL_PUBLIC: "true"
      RESPOND_TO_DM: "true"
      ROCKETCHAT_USER: thebot
      ROCKETCHAT_PASSWORD: thebananabot
      BOT_NAME: bot
      EXTERNAL_SCRIPTS: ${ROCKETCHAT_BOTS}
    links:
      - rocketchat:rocketchat
  # this is used to expose the hubot port for notifications on the host on port 3001, e.g. for hubot-jenkins-notifier
    ports:
      - 3001:8080
networks:
    default:
       external:
         name: webproxy
ROCKETCHAT_URL=chat.example.com

# Vous pouvez compléter cette liste avec d'autres scripts de bots
ROCKETCHAT_BOTS=hubot-help,hubot-seen,hubot-links,hubot-dice,hubot-has-no-idea

Une fois les deux fichiers créés il vous suffit de lancer la commande suivante pour démarrer Rocket.Chat :

docker-compose up -d