Utilisation de Docker
0. Remarques
Résumé
En plus de la machine virtuelle nous allons utiliser docker pour séparer les différentes applications. Le but de ce TP est d'installer 5 conteneurs :
- un docker
mysql
qui servira de base de donnée; - un docker
phpmyadmin
pour piloter cette base; - un docker
nginx
qui sera le serveur web de base et servira aussi en tant que proxy inverse en assurant la répartition des requêtes dans les différents conteneurs; - un docker
nextcloud
qui servira de serveur de partage de fichiers - et éventuellement un docker
onlyoffice
qui permettra l'édition en ligne des fichiers.
Objectifs
- Apprendre à manipuler les dockers.
- Savoir configurer les dockers via les options de lancement.
- Savoir configurer les dockers en partageant certains fichiers de configurations avec la machine hôte.
- Savoir configurer les dockers en modifiant l'image par un Dockerfile.
- Gérer les réseaux interne des dockers.
- Utiliser docker compose pour gérer plusieurs docker simplement.
Notation
J'hésite à noter ces TPs en fonction du travail accompli. Pour cela, il faut impérativement noter votre binôme et l'adresse IP de votre VM dans la feuille que je fait passer. De plus, il faut me prévenir en cas de changement.
Première séance
Nous vous proposons un fichier de test qui sera utilisé pour vérifier votre avancement. Ce fichier est C'est un script python. La version actuelle a été testée et fonctionne sur l'image des VMs utilisées, le fichier à exécuter s'appelle verif.py
. Il vérifie pour le moment les dockers jusqu'à la fin de la partie III. Une version allégée est donnée à la fin de cette partie.
Avant de commencer
Vous devez détruire vos VMs créées la dernière fois (sauf cas particuliers). À partir de maintenant, merci de ne pas faire de snapshot de vos machines, normalement, vous conservez dans vos rapports les commandes nécessaires au bon fonctionnement du TP.
- Créez une VM par groupe :
- Attention a bien la créer dans le projet
- basée sur le snapshot de volume
snap-docker-ready
- avec le flavor
big
- avec une clef ssh.
I. Installation d'un premier docker : mysql
Comme pour beaucoup de serveurs connus, il existe plusieurs images qui permettent l'installation de mysql très simplement.
- Recherchez la liste des dockers fournissant
mysql
, (commandedocker search
) vous verrez qu'ils sont classés par défaut grâce à un système de recommandation via des étoiles. Quels sont les 3 mieux notés ? - Recherchez de la même manière sur le site docker store. Ce site donne plus de détails notamment les différentes versions pour une image, les
Dockerfile
…
Il faut savoir reconnaître rapidement la qualité d'une image, dans l'exemple de mysql vous avez 2 possibilités (nous excluons mariadb)1). :
La documentation de la seconde est beaucoup plus fournie et elle semble proposer un grand nombre d'options de configuration, c'est cette dernière que vous allez choisir.
- Quelles sont les versions proposées et comment reconnait-on la dernière ?
- Sur quelle distribution est basée la version
5
de mysql ? <hi #f3f3f3>Regardez les Dockerfiles</hi> - Téléchargez l'image de la version 5.7 (
docker pull …
) - Vérifiez que l'image est bien téléchargée, son nom et son tag.
- Lancez un premier docker basé sur cette image dont :
- le nom est
docktest
; - le hostname est
test
; - avec un mot de passe root aléatoire.
Notez le mot de passe de l'administrateur.
Lors du lancement un grand nombre d'informations sont affichées. En fait, par défaut le lancement bloque le terminal et affiche tous les résultats de la commande. Parmi ces derniers vous pouvez noter la ligne GENERATED ROOT PASSWORD: …
qui contient le mot de passe administrateur de la base.
Dans la suite, vous utilisez sans doute l'option -d
pour lancer le docker de manière détachée, les informations ne seront plus affichées, mais conservées et disponible via la commande docker log …
.
- Grâce à la commande
docker inspect …
trouvez l'adresse attribuée au docker - Pouvez-vous vous connecter sur le serveur mysql avec la commande
telnet
(le port par défaut est 3306).
- Pouvez-vous le faire via la commande mysql ?
Il est toujours possible d'installer le client mysql sur votre VM, mais ici, on va utiliser celui qui se trouve dans le docker. En effet, on peut toujours ajouter un processus au conteneur via la commande docker exec …
- En utilisant la commande
docker exec -it NOMDUDOCKER mysql -u root -pMOTDEPASSE
connectez-vous au serveur mysql.
- Exécutez un shell bash dans le docker (commande
docker exec -it …
) et créer un fichier à la racine/toto
à la racine du docker contenantcoucou
. - Sortez du docker et essayez de retrouver le fichier sur la VM. Pour cela, vous pouvez utiliser
docker inspect …
notamment la partieData
. Que représentent les répertoiresMergedDir
etUpperDir
etLowerDir
?2)
Partage de volumes
mysql est une base de données qui stocke ces données dans le répertoire /var/lib/mysql
. Dans la configuration actuelle, ce répertoire est interne au docker et difficile d'accès. Cela peut poser des problèmes si vous souhaitez changer le docker sans perdre les données stockées. Pour éviter cela, vous allez donc recréer le docker en partageant le répertoire de stockage avec la machine hôte. Pour cela il faut utiliser l'option -v
du docker run
.
- Détruisez le docker
docktest
. - Recréez un docker basé sur mysql 5.7 dont :
- le nom est
dockmysql
; - le hostname est
mysql
; - le mot de passe root est
passroot
; - qui partage le répertoire
/var/lib/mysql
du docker avec le répertoire/home/ubuntu/docker/datatest/
de la VM.
- Après la fin du démarrage du docker (qui prend un peu de temps) listez le contenu du fichier
/home/ubuntu/docker/datatest/
- Créez une base de données en exécutant la commande
mysql -u root -ppassroot -e 'CREATE DATABASE BASE_A;'
dans le docker
- Relistez le même répertoire, quelle est la différence ?
II. Gestion des adresses et installation d'une interface à mysql : phpMyAdmin
mysql n'est qu'un serveur de base de donnée, on ne peut l'utiliser que via des commandes SQL. Pour simplifier son utilisation, on ajoute en général une interface comme le logiciel phpMyAdmin. C'est une interface web permettant simplement de faire la plupart des opérations sur le serveur. Il est basé sur un code en php et donc un serveur capable de l'interpréter.
- Peut-on ajouter phpMyAdmin au docker mysql pour former un docker avec le serveur et l'interface. Si oui pourquoi ne le fait-on pas ?
Vous allez utiliser le docker phpMyAdmin pour mettre en place l'interface. Dans la documentation ne suivez pas la méthode Usage with linked server qui est dépréciée. Utilisez la méthode avec un serveur externe.
- Créer un docker basé sur la dernière version de phpMyAdmin :
- dont le nom est
dockMyAdm
; - qui partage le port 8080 de votree VM avec le port 80 du docker;
- qui utilise l'adresse du docker
dockmysql
comme base de données.
- Connectez-vous sur l'interface web entrez le login mot de passe de l'administrateur mysql et créer une nouvelle base de données :
BASE_B
. Constatez les modifications du répertoire partagé.
Gestion du réseau et liaison entre les dockers
Ce système de configuration n'est pas utilisable, car il demande d'entrer dans le docker ou ses fichiers de configuration une adresse qui est gérée par docker. Cela signifie par exemple que si vous programmez un service web pour utiliser la base de donnée, ce dernier devra être modifié si par hasard le docker est recrée avec une autre adresse. Pour remédier à cela vous allez utiliser la possibilité de créer des réseaux et de choisir les adresses des dockers.
En effet, il est possible de choisir les adresses IPs des dockers, de choisir la valeur de leurs variables d'environnement ou de paramétrer leur fichier /etc/hosts
ainsi que de leur donner un nom dans ce réseau.
- Vous devez tout d'abord créer un réseau utilisateur via la commande
docker network create …
. Attention, il faut utiliser l'optionsubnet
pour définir le réseau. Créer un réseau de nominterne
et utilisant la plage d'adresses172.18.100.0/24
. - Arrêtez le docker
dockmysql
Attention ne le supprimez pas - puis recréez un nouveau docker mysql utilisant le réseau
interne
(option--net
), en attribuant une adresse (option--ip
) et en lui associant un alias réseau (option--network-alias
) :- le nom est
dockbase
; - le hostname est
basededonnee
; - le mot de passe root est
passroot
; - qui partage le répertoire
/var/lib/mysql
du docker avec le répertoire/home/ubuntu/docker/datatest/
de la VM. - utilisant l'adresse 172.18.100.10.
- Utilisant l'alias réseau
base
Vous pourrez noter que comme le nouveau docker partage le même répertoire de données, les bases précédemment crées et le mot de passe de l'administrateur sont déjà configures au lancement.
- Supprimez le docker
dockMyAdm
puis recréez-le en modifiant le serveur qu'il administre. Pour cela créez un docker basé surphpmyadmin/phpmyadmin
:- dont le nom est
dockMyAdm
; - qui partage le port 8080 de votre VM avec le port 80 du docker;
- qui utilise
dockbase
comme base de données;
- Après l'avoir lancé, ajoutez
dockMyAdm
au réseau interne (commandedocker network connect …
) en lui attribuant l'adresse :172.18.100.11
et l'aliaspma
. - Verifiez que
dockMyAdm
est bien dans le même réseau que le dockerdockbase
(avec undocker inspect ..
).
- La VM peut-elle contacter ces dockers ? Une autre VM le peut-elle ?
- Reconnectez-vous sur l'interface web, tout devrait fonctionner et les bases créées précédemment devraient être encore fonctionnelles. Cela signifie donc que le docker mysql est capable de conserver les données déjà existantes.
- Créez une autre base de données
BASE_C
et vérifiez son apparition dans le partage de données.
III. Configuration des dockers
En général pour configurer un service, il est nécessaire de modifier des fichiers. Mais ces fichiers sont internes au docker donc difficiles d'accès. De plus, les outils d'édition les plus courants (nano, vim, emacs …) ne font pas parti d'un conteneur classique ce qui complique encore cette modification. Pour résoudre le problème, on peut :
- Pré-configurer le docker via le Dockerfile ou les outils de création (voir plus tard);
- Copier des fichiers entre la VM et le docker;
- Utiliser le partage des répertoires entre la VM et le docker.
Nous allons utiliser la dernière méthode pour configurer un proxy inverse nginx.
Le fichier de configuration principale de nginx est /etc/nginx/nginx.conf
. Nous allons partir d'un fichier copié depuis un docker nginx fonctionnel .
- créez un docker basé sur la dernière image nginx tel que :
- son nom soit
dockFront
; - il soit dans le réseau
interne
avec l'adresse172.18.100.15
; - le port 80 de l'hôte soit envoyé sur le port 80 du docker;
- le fichier nginx.conf soit lié au fichier
/etc/nginx/nginx.conf
du docker, le container ne doit pas pouvoir écrire dans le fichier; - le répertoire
/home/ubuntu/docker/nginx/
soit lié au répertoire/www/
du docker.
- vérifiez le bon fonctionnement du serveur nginx en allant à l'adresse http://IPDEVOTREVM/
- Modifiez la configuration du serveur pour que la racine du site web soit le répertoire partagé
/www/
- Modifiez la configuration du serveur pour que l'url http://IPDEVOTREVM/phpMyAdmin/ soit renvoyée vers le docker dockMyAdm. Pour cela il faut
- utiliser la configuration de nginx comme reverse proxy
- reconstruire le docker
dockMyAdm
- en le plaçant directement dans le réseau
interne
avec l'aliaspma
et l'adresse172.18.100.11
; - en lui donnant l'url par laquelle il sera contacté via la variable
PMA_ABSOLUTE_URI
; - en supprimant le transfert de port (8080 vers 80) car il est inutile (et gênant pour la suite).
A partir de là, vous pouvez utiliser le script suivant pour tester votre travail, c'est une version allégée du script qui sera testé ce WE pour vous donner une note. Il s'agit d'un script en python que vous lancer en tapant :
./verif_etu.py debut
IV. Création d'image : installation du docker nextcloud
Vous allez maintenant ajouter un élément au site : nextcloud. C'est un logiciel de partage de fichier. Il fonctionne un peu comme dropbox ou le drive de google. nextcloud est un service web écrit en php. Il est disponible ici ou dans une version dockerisée.
La documentation propose d'utiliser en plus de ce docker un docker mysql.
- Adaptez le docker dockbase pour qu'il crée un utilisateur et une base de données :
- le nom est
dockbase
; - le hostname est
basededonnee
; - le mot de passe root est
passroot
; - qui partage le répertoire
/var/lib/mysql
du docker avec le répertoire/home/ubuntu/docker/data/
de la VM3). - utilisant l'adresse
172.18.100.10
; - avec un utilisateur
nextcloud
dont le mot de passe estpassnc
; - avec une base de données
nextcloud
.
- Créer un docker
dockNextcloud
- basé sur l'image
nextcloud
; - qui utilise cette basse de données (voir les variables
MYSQL_HOST
,MYSQL_DATABASE
,MYSQL_USER
etMYSQL_PASSWORD
; - dont l'administrateur est
chef
de mot de passe estpasschef
; - dont l'adresse est
172.18.100.17
; - dont l'alias dans le réseau
interne
estnextcloud
; - dont la variable d'environnement
NEXTCLOUD_TRUSTED_DOMAINS
contient l'adresse IP de votre VM; - qui partage le répertoire
/home/ubuntu/docker/files
avec le répertoire/var/www/html/data
du docker; - qui partage le répertoire
/home/ubuntu/docker/nc_config
avec le répertoire/var/www/html/config
du docker; - qui écoute sur le port 8080 de la machine hôte et transfert le tout sur le port 80 du docker.
- Testez-le, à l'adresse
http://IPDEVOTREVM:8080/
attention, il est long à démarrer car le premier démarrage met en place le partage de fichier.
- Reconfigurez le serveur
nginx
pour que la racide du site web soit connectée avec le dockerdockNextcloud
. - Testez en allant sur l'URL http://IP_DE_VOTRE_VM/ vous devez pouvoir vous loguer.
Création d'une première image
Certaines configurations ne sont pas proposées par le docker nextcloud. Par exemple, celui-ci ne dispose pas de la commande sudo
, or cette commande est utile pour la suite du TP4). Vous allez donc dans un premier temps modifier l'image nextcloud
La modification d'une image se fait grâce à des fichiers de description Dockerfile. En fait, chaque création d'image correspond à un répertoire qui contient les données nécessaires à la modification ainsi que le fichier de description Dockerfile
. Vous pouvez noter que la plupart des documentations de dockers sont en fait constituées par un dépôt git correspondant à ce répertoire. Comme vous pouvez le voir ici.
Nous vous proposons de commencer par ce répertoire de travail.
- Construisez une nouvelle image nommée
nextcloud-perso:0.1
basée sur ce Dockerfile. - Testez la nouvelle image et vérifiez que tout fonctionne.
- Modifiez le Dockerfile pour installer
sudo
dans l'image. - Reconstruisez l'image avec le tag
nextcloud-perso:0.2
. - Ajouter à cette image le tag
nextcloud-perso:latest
. - reconstruisez le docker
dockNextcloud
en précisant l'imagenextcloud-perso
sans mentionner de version. Vérifiez que vous obtenez bien l'image0.2
.
Gestion de plusieurs dockers avec compose
Vous devez être capable de lancer un petit ensemble de services via des dockers. Mais cela n'est pas suffisant. En effet, avec la méthode actuelle, pour que le site fonctionne, il faut être capable de lancer les dockers avec les bonnes options, dans un ordre précis, avec des fichiers de configuration qui dépendent de ces options … Tout cela est difficile à distribuer. Il est donc nécessaire de faire la même chose mais de manière automatique.
En effet, pour automatiser les opérations sur les conteneurs, il est possible d'écrire une description des commandes utilisées dans un fichier, c'est le rôle de docker-compose
. Docker compose est capable de faire à votre place toutes les commandes docker nécessaires à partir de ce que vous avez décrit dans un fichier docker-compose.yml
.
Vous pouvez avoir une description de ces fichiers à cette adresse. Attention, l'api docker évolue rapidement, il est important de se limiter à une version pour travailler. De plus, il ne faut pas confondre la version de l'exécutable docker-compose
, celle du logiciel docker
et celle du fichier de description docker-compose.yml
.
La version la plus importante est celle du fichier de description, elle est écrite au début du fichier :
version: '3' services: foo: image: busybox
Nous vous conseillons d'utiliser pour ce TP la version de l'exemple : 3
. C'est la dernière de la version 3. La documentation conseillée est donc celle de la version 3 et il est important de vérifier que la documentation que vous consultez est bien basée sur cette version pour expliquer les problèmes.
Organisation du fichier compose
Dans la version 3, le fichier est composé de plusieurs sections correspondant aux sous-commandes docker utilisées dont vous utiliserez les 2 suivantes :
services
est la section qui donne la liste des dockers et de leurs options, cela correspond aux commandesdocker run …
oudocker create …
networks
est la section qui décrit les réseaux à utiliser. Cela correspond à la commandedocker network …
D'autre sections que vous n'allez pas utiliser
volumes
est la section qui décrit les volumes à utiliser. Cela correspond à la commandedocker volume …
secrets
est la section pour stocker des information secrette qu'on ne veux pas voir apparaitre dans les fichiers de configuration (et qui nécessite un cluster).- …
Cas spécial des volumes
Vous aurez effectivement besoin de volume, mais la section volumes
correspond à la création de volumes en dehors des dockers. Jusqu'à présent, vous n'avez jamais utilisé la commande docker volumes …
ce qui signifie que vous n'aurez pas à utiliser la section pour ce TP. Tous vos volumes seront des volumes de type bind, c'est à dire créés lors du docker run
(section service) et partagée avec la machine hôte. Attention donc à bien consulter la bonne partie de la documentation là.
Pour être plus prévis, les volumes sont des espaces de stockage persistants utilisés par les dockers. Vous pouvez les créer soit en les utilisant dans un docker soit en les créant à part via la commande docker volume…
. Si vous êtes curieux, La description de la section volumes
d'un docker-compose est ici. Mais pour ce TP vous n'aurez qu'a consulter la description de l'utilisation des volumes par les dockers grâce à la sous-section volumes
d'un service. Cette documentation est là.
Dans un fichier docker-compose.yml
- La section
volumes
globale vous permettra de créer un volume ou de déclarer un volume qui a été créé en dehors du docker compose. Elle permet aussi d'utiliser des drivers spéciaux. - La sous-section
volumes
de la description d'un service est celle qui attachera effectivement le volume au docker créé, cela correspondra à l'option-v
de la commandedocker-run
. C'est à cet endroit que vous pouvez associer un répertoire du docker avec un répertoire de la machine.
Section networks
C'est la section qui vous permettra de créer et configurer le réseau. Correspondant à ce que vous avez fait via la commande docker network …
. Vous êtes invité à consulter cette documentation, notamment la partie ipam qui permet de gérer l'intervalle d'adresse utilisé.
Section services
Cette section décrit les dockers qui devront être créés. Pour cette version, chaque service correspond à un docker et une commande docker-run …
. La documentation est très fournie, vous aurez notamment besoin :
- De pouvoir choisir l'image à partir de laquelle le docker est créé, cela peut être
- D'imposer le réseau utilisé via le mot clef networks. Regardez notamment comment choisir l'adresse ip et donner un alias à ce docker.
- D'ajouter au docker des partages de répertoires de type bind volumes.
- De déclarer des variables d’environnement dans le docker environment.
- De mettre en place des transferts de ports réseaux entre la VM et le docker ports.
- De spécifier des dépendances entre les dockers depends_on.
V. Travail à faire
Le logiciel docker-compose
est déjà installé.
Vous devez créer un ensemble de fichiers et un docker-compose.yml
qui recrée l'architecture vue au début du TP.
Le répertoire doit être /home/ubuntu/compose/
et contenir tous les fichiers et partages nécessaires à cette architecture.
./ComposeNext/ |_ docker-compose.yml |_ Data/ | |_ mysql/ | |_ owncloud/ | |_ onlyoffice/ |_ Config/ | |_ nginx.conf | |_ nextcloud/ | | |_ config.php | | |_ ... | |_ cacert.pem | |_ cakey.pem |_ nextcloud/ |_ Dockerfile |_ demarre.sh
Vous devez faire un fichier compose qui crée des dockers équivalents aux 4 dockers et au réseau créé auparavant. Ces dockers utiliseront le port https
, ils pourront donc fonctionner en même temps que les docker précédant que vous devez conserver pour que le scipt de notation en tienne compte.
Pour résumer il faut :
- un réseau
resnextcloud
- utilisant les adresses
172.22.100.0/24
;
- un service nginx qui servira de frontale web
- basé sur la dernière version de l'image nginx;
- qui a une adresse fixe dans le réseau
resnextcloud
:172.22.100.20
; - lancé après les services myadm et nextcloud;
- qui partage le port 443 de la machine avec le port 443 du docker;
- qui est configuré via le partage du fichier
./Config/nginx.conf
; - qui renvoie les requêtes https://IP_DE_VOTRE_VM/ sur nextcloud et https://IP_DE_VOTRE_VM/phpMyAdmin/ sur myadm;
- qui utilise l'alias web;
- qui utilise la configuration que je propose plus bas.
- Un service base
- basé su l'image
mysql
dans la version 5.7.27 ; - dont le répertoire de données est associé à
./Data/mysql/
; - qui a une adresse fixe dans le réseau
resnextcloud
:172.22.100.21
; - qui est connu des autres dockers sous plusieurs noms :
mysql
,base
oubdd
; - dont le mot de passe root est
passroot
; - qui contient un utilisateur
nc_user
de mot de passenc_pass
et une basenc_base
.
- Un service myadm
- basé sur l'image
phpmyadmin/phpmyadmin
; - qui démarre après base;
- qui a une adresse dynamique dans le réseau
resnextcloud
; - qui est connu des autres dockers sous plusieurs noms :
phpmyadmin
oupma
; - qui interroge le serveur base;
- Un service nextcloud
- basé sur une image construite d'après le contenu du répertoire
./nextcloud/
; - qui démarre après le docker
base
; - dont le volume de données est associé au répertoire
./Data/nextcloud/
; - dont le volume de configuration est associé au répertoire
./Config/nextcloud/
; - qui a une adresse dynamique dans le réseau
resnextcloud
; - qui est connu des autres dockers sous plusieurs noms :
nextcloud
oufiles
; - qui utilise la base de donnée
nc_base
et l'utilisateur mysqlnc_user
; - dont l'administrateur
chef
a pour mot de passecompose
; - qui utilise le plugins
spreed
; - avec la variable
NEXTCLOUD_UPDATE=1
(ceci est expliqué plus loin); - avant de bien le tester, vous lirez la suite car l'utilisation du protocole
https
et du reverse proxy pose des problèmes que je vous aide à corriger via une image différente (voir explication plus loin).
Vous constaterez que les dockers créés par compose n'ont pas le nom des services. En effet, s'il n'est pas précisé par le champ container_name, compose ajoute le nom du répertoire et un numéro unique. C'est utile pour que les noms de ces dockers soient différents de ceux que vous aviez crée auparavant. Gardez les noms par défauts.
Configuration de nginx pour faire du SSL
Pour changer de port, ce serveur va utiliser le protocole https
au lieu de http
. Pour permettre cela, je vous donne la configuration de base de nginx en tant que serveur https
ainsi que les 2 fichiers de certificat et de clef secrète nécessaires. Ces fichiers doivent être bindés avec les fichiers utilisés par nginx pour initier le protocole SSL (voir les champs
ssl_certificate_key
et ssl_certificate
de la configuration de nginx.
Voia la configuration qui remplace la partie serveur écoutant sur le port 80 :
server { # ecoute sur le port 443 et activation du SSL listen 443 ssl; server_name localhost; # nom di fichier de certificat ssl_certificate /etc/nginx/certif.crt; # nom du fichier de clef secrette ssl_certificate_key /etc/nginx/clef.key; location /CHEMINQUEVOUSVOULEZREDIRIGER { # attention le / à la fin de la ligne suivante est important. # sans lui, l'adresse http://IPVM/truc/ est envoyée sur http://.../truc/ au lieu de http://.../ proxy_pass http://METTEZCEQUEVOUSDEVEZICI/; # ces directive sont importante pour que nginx prévienne le site qu'il est derrière un reverse proxy # en ssl proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Forwarded-Proto $scheme; } ...
Le certificat proposé est autosigné, votre navigateur vous demandera donc de ne pas utiliser ce site, c'est normal et vous devrez forcer le passage.
Image spéciale pour nextcloud
Le serveur nextcloud
utilise souvent des redirections et a du mal à construire l'adresse nécessaire à la redirection
Pour cela, je n'ai pas trouver de moyen de le faire via des variable d'environnement ou des des commandes incluse dans le compose. Il devient donc nécessaire de modifier la commande de lancement du serveur nextcloud
. Cela signifie faire une nouvelle image nextcloud
dont le dockerfile est ici.
Dans le fichier demarre.sh
qui est appelé au démarrage, les ligne sudo exec php occ …
permettent d'exécuter des configurations automatiquement après l'installation du nextcloud
et avant son lancement. Pour le moment, ce qui est proposé :
- met à jours des configuration pour agire derrière un reverse proxy
- met en place l'utilisation du proxy de l'université lorsque
nextcloud
a besoin de télécharger des modules
Attention, pour que tout se passe bien, il faut que la variable d'envirronement NEXTCLOUD_UPDATE
soit égale à 1. Elle déclanchera l'installation de nextcloud malgrès le fait que le nom de la commande de base à changée.
Vous pourrez bien sur modifier ce script pour ajouter des fonctionnalité à nextcloud ou des configurations.
L'image de nextcloud est reconstruite par le docker-compose si vous ajouter l'option --build
à la commande docker-compose up
VI. Un peu plus difficile
Il est possible de donner à nextcloud la possibilité d'éditer les documents en ligne. Pour cela, il faut utiliser un autre service : onlyoffice et ajouter le plugins onlyoffice à nextcloud pour lui permettre de contacter ce dernier.
Pour faire fonctionner ce service de manière automatique, il faut savoir les choses suivantes :
- Le service onlyoffice a besoin d'une configuration particulière derrière un proxy inversé, voir ici
- Le service onlyoffice doit pouvoir être accédé par le navigateur, on le teste en allant sur la page du service qui doit renvoyer vers la page welcome comme ici http://192.168.77.14/onlyoffice/
- Le plugin onlyoffice de nextcloud demande en plus de son installation la configuration de variable. L'interface permet de le faire dans la partie
settings→additionnal
. - En ligne de commande on peut lister les variables de configuration avec la commande
sudo -u www-data php occ config:list
- En ligne de commande on peut lister les variables de configuration de module avec la commande
sudo -u www-data php occ config:app:set
sudo su
occ
qui permet de piloter le logiciel nextcloud via des scripts. Or il est important que les commandes occ
soient exécutées par l'utilisateur www-data
qui est aussi celui utilisé par le serveur web. L'utilisateur par défaut du docker est root
, sudo
nous permettra de changer cela.