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 :
- Et de docker-compose :
![](/content/images/2020/01/docker-compose1-1.png)
Quickstart 🚀
L'intégralité des configurations sont présentes sur github :
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 | [email protected] |
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 installationNEXTCLOUD_ADMIN_USER
: L'identifiant de votre administrateurNEXTCLOUD_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é :
![](/content/images/2020/05/output.png)
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 :
![](/content/images/2020/04/lavi-perchik-fSqYwKWzwhk-unsplash.jpg)
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 :
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 ! 😇