Installation d'un service

Lorsqu’une application est ajoutée, on vérifie d’abord qu’elle n’est pas déjà configurée (par exemple, une application DNS dispose déjà d’une configuration qu’il suffit d’activer).

Configurer une application existante

On ajoute l’application à la liste du checkout et mettre à jour :

cd /srv
echo app >> .git/info/sparse-checkout
git pull origin master

On configure les éléments nécessaires à l’application, sans éditer le docker-compose.yml ou les autres fichiers génériques du dépôt.

Ajouter une nouvelle application

Structure

On choisit le nom de l’application pour ne pas coïncider avec celui d’une application existante. On créer le dossier de l’application dans /srv :

cd /srv/app

Enfin, on crée le fichier docker-compose.yml, les éventuels dossiers de données et de configuration associés :

mkdir /srv/app/conf
mkdir /srv/app/data
vim /srv/app/docker-compose.yml

Au besoin, on ajoute des répertoires de données par service, ou pour plusieurs types de données, en employant des noms significatifs, par exemple : uploads, attachments, db, etc.

En fin de configuration, ces fichiers sont commités sur le dépôt Git :

cd /srv
echo app >> .git/info/sparse-checkout
git add app/docker-compose.yml
git commit
git push origin master

Configuration Compose

Dans le fichier docker-compose, on choisit des noms de service Docker Compose significatifs, tels que db, web, backend, etc. On n’inclut que des données génériques dans le docker-compose.yml, voué à être publié.

Toutes les données non génériques seront importées depuis un fichier .env, soit par passage explicite de variable :

ports:
  $ipv4:25:25
  $ipv6:25:25

Soit par passage implicite directement dans l’environnement du conteneur :

environment:
  - DATABASE_USER
  - DATABASE_PASSWORD

Le fichier .env contient alors :

ipv4=1.2.3.4
ipv6=2101:f8c2:4401::1
DATABASE_USER=myuser
DATABASE_PASSWORD=mypassword

Exposition de services

Pour exposer un service directement via UDP ou TCP, on choisit une des paires d’adresses publiques de la machine, et on configure dans le docker-compose.yml les ports exposés, en utilisant des variables pour la généricité.

Pour exposer un service Web, on configure les labels traefik, comme suit :

    labels:
      - traefik.enable=true
      - traefik.frontend.rule=Host:domain.tedomum.net
      - traefik.frontend.contentSecurityPolicy=default-src 'self'; style-src 'self' 'unsafe-inline'
      - traefik.port=8081

La configuration CSP est optionnelle mais conseillée ; le contenu du header doit être adapté à l’application.