On passe au Docker Compose !

2020-03-23T03:47:04+01:00 | 4 minutes de lecture | Mise à jour le 2022-06-06T00:00:00Z

@
On passe au Docker Compose !

Dans la continuité de mon article d’introduction à Docker, je vous propose ici la mise en place du service Firefly III via un fichier Docker Compose.

Présentation

L’intérêt que je trouve à Docker c’est de pouvoir tester des solutions assez simplement. Du coup, je recherche assez souvent des solutions type self-hosting.
On va donc découvrir Firefly III, un gestionnaire de finances personnelles gratuit et open source. Une démo est disponible ici.

Dashboard Firefly III

Installation de Docker Compose

[!NOTE] Cet article a été mis à jour afin d’installer Docker Compose V2 avec la méthode à jour.

Avant toute chose, on installe Docker Compose. Cet outil va nous permettre de définir et de lancer des applications en Docker constituées de multiples conteneurs.

Pour l’installer, je vous invite à consulter le GitHub pour la dernière release.
À l’heure où j’édite ces lignes, la dernière version stable est la 2.5.0 :

apt update
apt install docker-compose-plugin

On vérifie que l’outil est bien installé :

docker compose version

Docker Compose version v2.5.0

Firefly III

Configuration

Répertoire de travail

Pour mes solutions Docker, je créer un dossier spécifique à la solution dans le dossier /root en passant en root (sudo -i). Honnêtement, je ne connais pas la méthode propre (si celle-ci n’en est pas une…).

On crée donc notre environnement de travail et on se positionne dedans :

mkdir -pv /root/docker/firefly-iii
cd /root/docker/firefly-iii

Fichier Docker Compose

On va donc télécharger le fichier exemple du développeur :

wget https://raw.githubusercontent.com/firefly-iii/docker/master/docker-compose.yml

Ce fichier précise deux services :

  • L’application : Firefly III 🐖
  • La base de données : PostgreSQL 🐘

Nous allons apporter des modifications sur ce fichier en appliquant notamment une passphrase digne de ce nom pour la BDD.
Vous remarquerez que j’ai aussi modifié le port exposé car j’ai déjà mon serveur Web qui utilise ce port.

version: '3.3'

services:
  firefly_iii:
    image: jc5x/firefly-iii:latest
    volumes:
      - firefly_iii_export:/var/www/firefly-iii/storage/export
      - firefly_iii_upload:/var/www/firefly-iii/storage/upload
    env_file: .env
    ports:
      - 4040:80
    depends_on:
      - firefly_iii_db

  firefly_iii_db:
    image: postgres:10-alpine
    environment:
      - POSTGRES_USER=firefly
      - POSTGRES_PASSWORD=M0n_M0t$_D3_P@$$3
    volumes:
      - firefly_iii_db:/var/lib/postgresql/data

volumes:
   firefly_iii_export:
   firefly_iii_upload:
   firefly_iii_db:

Ficher des variables d’environnement

Le docker-compose.yml met en évidence un fichier de variable d’environnement pour le conteneur de Firefly III (ligne 9).

On va donc récupérer le fichier d’exemple et travaillé sur une version finale :

wget https://raw.githubusercontent.com/firefly-iii/firefly-iii/master/.env.example
cp .env.example .env

Le fichier est bien documenté et les variables ont aussi le mérite d’être explicites. Vous pouvez simplement regarder les lignes de configuration (sans les commentaires) avec la commande :
cat .env | grep -v ^# | awk 'NF > 0'

Je vous invite à modifier ces variables-là :

APP_KEY=3OMlGWE5e4iCLWHvAIl5b4pK9lyXIyp5
DEFAULT_LANGUAGE=fr_FR
TZ=Europe/Paris
DB_PASSWORD=M0n_M0t$_D3_P@$$3

La variable APP_KEY demande une chaine d’exactement 32 caractères alphanumériques.
Vous pouvez en générer une simplement avec cette commande :
head /dev/urandom | LANG=C tr -dc 'A-Za-z0-9' | head -c 32 ; echo

Lancement

On lance donc notre composition :

docker compose -f docker-compose.yml up -d

[!NOTE] L’option -f permet de préciser le fichier utilisé.
Si cette option n’est pas mise, compose cherchera un fichier de nom docker-compose.{yml,yaml} dans le répertoire courant.

Ici, il n’est donc pas nécessaire. On peut simplement faire un :

docker compose up -d

On peut visualiser les conteneurs avec un docker container ls :

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
38122b466079 jc5x/firefly-iii:latest “/entrypoint.sh” 2 minutes ago Up 2 minutes 0.0.0.0:4040->80/tcp firefly-iii_firefly_iii_1
0318eb7de984 postgres:10-alpine “docker-entrypoint.s…” 3 minutes ago Up 2 minutes 5432/tcp firefly-iii_firefly_iii_db_1

[!NOTE] Pour une raison inconnue, les noms affichent des valeurs doubles :
firefly-iii_firefly_iii_db_1 au lieu de
firefly_iii_db_1
Il en est de même pour les volumes…
EDIT : En fait, les conteneurs prennent par défaut le nom du répertoire courant suivis du nom du service !

En cas de problème, on peut visualiser les logs du conteneur avec cette commande :

docker container logs -f $(docker container ls -f name=firefly-iii_firefly_iii_1 |  sed -n '2,$p' | awk '{print $1}')

Après quelques minutes, Firefly III devrait-être accessible via l’adresse IP de votre serveur et le port de communication (cette dernière n’est pas nécessaire si vous avez laissé le 80 dans le fichier de configuration de Docker Compose).

[!NOTE] http://192.168.92.17:4040

Voilà ! Vous pouvez maintenant essayer cet outil et pourquoi pas l’adopter !
Vous trouverez la documentation complète ici.

Mise à jour des conteneurs

Pour mettre à jour les conteneurs d’une composition, on exécute les commandes suivantes depuis le répertoire contenant le fichier docker-compose.yml :

docker compose pull
docker compose up -d --remove-orphans
docker image prune # Supprimes les images non utilisé

Suppression

Voici une fois de plus mes commandes pour virer tout votre travail fait en Docker :

docker compose down --volumes
docker system prune -a # Cette commande demande d'envoyer un 'y' pour confirmer

Bilan

Nous avons donc vu pour une première fois l’utilisation de Docker Compose.
Ce tutoriel servira donc de base pour établir des projets plus complexes.

Une chose me chagrine, ce gestionnaire (que j’ai décidé de garder) ne supporte pas le HTTPS !
Rassurez-vous, j’ai déjà la solution. Mais bon, chaque chose en son temps.

PS : J’ai trouvé un outil en ligne permettant de convertir les commandes docker run en docker compose ! Le lien est juste ici.

© 2017 - 2024 Scrample

All rights reserved

À propos

Site crée avec le framwork Hugo en remplacement du Wordpress.
La transition a été faite grâce à l’outil exitwp-for-hugo.

Le thème utilisé est Dream réalisé par Yue Yang.

Le logo a été fait via FreeLogoDesign.

Les illustrations d’articles utilisent des images libres de droits proviennent de :

Les commentaires utilisent le système de tickets de GitHub grâce à l’application Utterances.

J’utilise Umami pour récolter quelques statistiques de fréquentation de ce blog. Ma configuration fait que cet outil respecte la fonction Do Not Track.
Vous pouvez consulter ces données ici.

Le pourquoi du comment de ce site est expliqué sur mon premier article.