Nextcloud est une plateforme d'hébergement de fichiers et de collaboration. Grâce à elle, vous pourrez partager des documents, des notes, des calendriers et plein d'autres choses avec les personnes de votre choix.

Comment réaliser cette installation très rapidement et avec nos outils favoris ?

Nous allons donc dans cet article installer Nextcloud en quelques minutes et, bien sûr, très facilement grâce à Docker et Traefik.

Pré-requis 🚧

Afin de venir à bout de ce tutoriel, vous allez avoir besoin des outils suivants :

  • Une installation de Docker en ordre de marche :
Installer Docker sur un dédié Kimsufi
Un tutoriel accessible à tous sur l’installation de Docker sur un serveur dédié kimsufi. Cette installation peut - bien sûr - être réalisée chez d’autres hébergeurs.
  • Et de docker-compose :
Docker Compose, indispensable ?
Vous avez installé Docker à l’aide du précédent article [/installation-docker-dedie-kimsufi/] et vous avez découvert comment lancer vos premiers conteneurs. Maintenant vous souhaitez sûrement passer à la vitesse supérieure. Le lancement de multiples conteneurs via docker run commence à vous poser qu…

Quickstart 🚀

L'intégralité des configurations sont présentes sur github :

lfache/awesome-traefik
Welcome to Awesome Traefik, a collection of contributions around Traefik. - lfache/awesome-traefik

Tout le nécessaire pour l'installation de Nextcloud se trouve dans le dossier du même nom.

Mais il est d'abord nécessaire d'avoir une installation de Traefik fonctionnelle. Récupérons les fichiers du dépôt et lançons notre reverse-proxy :

$ git clone https://github.com/lfache/awesome-traefik/

Ensuite rendez-vous dans le dossier correspondant à Traefik :

$ cd awesome-traefik/traefik

Vous devez modifier la configuration de Traefik afin de la faire correspondre à vos informations :

Variable Fichier à modifier Example
email traefik.yaml foo.bar@mydomain.com

Une fois modifiée, vous pourrez lancer votre instance :

docker-compose up -d

Maintenant, occupons-nous de Nextcloud :

cd ../nextcloud

Modifiez les secrets en générant vos propres mot de passe, ils se trouvent dans le dossier secrets :

vim secrets/mysql-database.txt
vim secrets/mysql-password.txt
vim secrets/mysql-user.txt

Ou utilisez le script mis à disposition :

./gen-secrets.sh
Initialize database access
Do you want random access ? [Y/n]
Y

Pour lancer votre instance Nextcloud, rien de plus simple. Lancez votre stack en précisant certaines informations au travers de trois variables :

  • NEXTCLOUD_URL : l'URL de votre installation
  • NEXTCLOUD_ADMIN_USER : L'identifiant de votre administrateur
  • NEXTCLOUD_ADMIN_PASSWORD : Le mot de passe de votre administrateur Nextcloud

Par exemple :

NEXTCLOUD_URL=nextcloud.mydomain.com \
NEXTCLOUD_ADMIN_USER=admin \
NEXTCLOUD_ADMIN_PASSWORD=mypassword \
docker-compose up -d

Vous pourrez ensuite vous connecter à votre installation via le nom de domaine que vous avez renseigné :

Quelques explications 🤔

J'ai déjà abordé l'utilisation de mes configurations de Traefik lors du précédent article sur l'installation de WordPress. N'ayant apporté aucune modification à ces fichiers pour le moment, je vous remets donc le lien vers cet article si vous avez besoin de voir ou revoir ces éléments :

Docker, Wordpress et Traefik
Vous souhaitez installer un blog wordpress en quelques minutes dans un environnement Docker et sans négliger la sécurité ? Voici comment le faire !

Je n'ai par contre pas activé de base les en-têtes de sécurité du type Content Security Policy, Referrer Policy et Feature Policy dans cet exemple de configuration. Pourquoi ?

L'image proposée par Nextcloud s'occupe déjà de renvoyer ces en-têtes avec les valeurs nécessaires au bon fonctionnement de l'application. Il n'est donc pas nécessaire de les rajouter.

Par contre attention, les en-têtes suivantes sont renvoyées par l'image apache et il serait nécessaire de les supprimer pour une mise en production :

  • X-Powered-By
  • Server

Pour réaliser cela avec Traefik, vous pouvez ajouter ces lignes dans la déclaration des labels de Nextcloud :

traefik.http.middlewares.nc-headers.headers.customresponseheaders.Server: ''
traefik.http.middlewares.nc-headers.headers.customresponseheaders.X-Powered-By: ''
# add some sec headers
traefik.http.routers.nextcloud.middlewares: 'nc-headers'

Passons maintenant à la stack permettant le déploiement de l'application !

Nextcloud permet l'utilisation de trois types de base de données :

  • SQLite,
  • MySQL,
  • PostgreSQL.

Dans mon exemple, j'ai choisi d'utiliser MySQL et plus précisément, Mariadb. Voici la déclaration du service :

  database:
    image: mariadb:10
    restart: unless-stopped
    command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
    environment:
      MYSQL_RANDOM_ROOT_PASSWORD: 'yes'
      MYSQL_USER_FILE: '/run/secrets/mysql-user'
      MYSQL_DATABASE_FILE: '/run/secrets/mysql-database'
      MYSQL_PASSWORD_FILE: '/run/secrets/mysql-password'
    secrets:
      - mysql-user
      - mysql-database
      - mysql-password
    networks:
      - lan
    volumes:
      - db:/var/lib/mysql

L'utilisation de la ligne command: est celle préconisée par la documentation officielle de Nextcloud.

Cette déclaration est relativement habituelle, j'utilise à mon habitude des secrets pour le stockage des données sensibles.

Vous pouvez bien sûr utiliser des variables d'environnements si vous ne souhaitez pas utiliser cette méthode.

L'utilisation de Postgres offrirait une configuration similaire :

  db:
    image: postgres
    restart: unless-stopped
    volumes:
      - db:/var/lib/postgresql/data
    environment:
      - POSTGRES_DB_FILE=/run/secrets/postgres_db
      - POSTGRES_USER_FILE=/run/secrets/postgres_user
      - POSTGRES_PASSWORD_FILE=/run/secrets/postgres_password
    secrets:
      - postgres_db
      - postgres_password
      - postgres_user

Enfin la déclaration de l'image Nextcloud !

Je suis les préconisations de la documentation officielle. Je vais simplement utiliser dans mon fichier docker-compose.yaml plusieurs variables afin de faciliter son utilisation :


nextcloud:
  image: nextcloud:18
  .
  .
  .
      NEXTCLOUD_ADMIN_PASSWORD: ${NEXTCLOUD_ADMIN_PASSWORD}
      NEXTCLOUD_ADMIN_USER: ${NEXTCLOUD_ADMIN_USER}
      NEXTCLOUD_TRUSTED_DOMAINS: ${NEXTCLOUD_URL}

docker-compose va remplacer automatiquement ces variables, je trouve que cette utilisation simplifie grandement le fichier et les explications que je souhaite apporter au travers de cet article.

N'hésitez pas à me faire un retour : est-ce plus simple pour vous ou au contraire cela vous paraît plus complexe ?

Vous pourrez trouver plus d'informations à ce sujet sur la documentation officielle de Docker :

Environment variables in Compose
How to set, use and manage environment variables in Compose

Nous avons pu voir ensemble, comment mettre en place une stack composée de Mariadb, Nextcloud et Traefik afin de publier votre outil de collaboration et partage de fichiers.

Vous voila de moins en moins dépendant aux géants du Web et comme vous avez pu le constater, cette installation ne prend que quelques minutes ! Voire quelques secondes... !

Il existe d'autres façons d'intégrer cette solution dans un environnement. J'ai décidé pour ce tutoriel d'utiliser l'image apache de Nextcloud, mais il est possible de réaliser le même type d'installation avec la version fpm et une instance de  nginx ou apache lancée séparément.

Je vous ai présenté une solution pour réaliser cette installation, vous pouvez maintenant l'adapter à vos besoins !

Afin de rendre cette installation encore plus rapide, je vais vous montrer au cours d'un prochain article comment utiliser mon dépôt awesome-traefik avec l'API d'OVH afin de lancer en quelques secondes vos outils, blogs ou autres services sur un VPS.

En tout cas  n'hésitez pas à m'apporter des remarques ou des commentaires sur Twitter  ou maintenant sur les commentaires juste en bas de ce post ! C'est toujours un plaisir d'avoir des retours ! 😇