Temps de lecture estimé: 2 minutes
j’ai récemment migré la gestion de mes finances personnelles de BankPerfect à Firefly III. Je détaille ici comment j’ai installé l’application sur mon homelab Docker
Prérequis
j’ai déjà un homelab avec tous les prérequis chez moi. un petit serveur qui me sert à héberger quelques services et applications (comme ce blog) avec notamment quelques prérequis pour installer Firefly III, Docker et MySql.
pour plus de détails sur mon installation, tu peux aller voir mes autres articles
- Migration d’un serveur monolithique sur une architecture Docker
- Migration Docker d’un serveur de base de données MySQL
Installation de Firefly III
Pour l’installation de Firefly III à proprement parler, j’ai suivi la documentation en l’adaptant à mon environnement et mes besoins.
j’ai commencé par créer un volume Docker pour accueillir les fichiers uploadés
docker volume create firefly_iii_upload
j’ai ensuite généré une clé
head /dev/urandom | LC_ALL=C tr -dc 'A-Za-z0-9' | head -c 32 && echo
pour l’exposer sur le web, j’ai bien sur modifié mes entrées DNS pour ajouter un sous domaine et vu que j’utilises un reverse proxy apache, j’ai ajouté un fichier de configuration à ce dernier. Et vu que mon reverse Proxy utilise Https, quelques instructions en plus sont necessaires.
mon fichier vhost final pour le reverse proxy apache:
<VirtualHost *:443>
ServerAdmin contact@anthony-jacob.com
ServerName mescomptes.anthony-jacob.com
Protocols h2 http/1.1
<IfModule mod_brotli.c>
AddOutputFilterByType BROTLI_COMPRESS text/html text/plain text/xml text/css text/javascript application/javascript
</IfModule>
ProxyPreserveHost on
ProxyRequests off
ProxyPass / http://mescomptes:8080/
ProxyPassReverse / http://mescomptes:8080/
<IfModule mod_ssl.c>
SSLEngine on
SSLCipherSuite HIGH:MEDIUM
SSLProtocol all -SSLv2
SSLCACertificateFile /etc/certs/live/anthony-jacob.com/cert.pem
SSLCertificateFile /etc/certs/live/anthony-jacob.com/fullchain.pem
SSLCertificateKeyFile /etc/certs/live/anthony-jacob.com/privkey.pem
</IfModule>
<Location />
Order deny,allow
Allow from all
</Location>
ErrorLog ${APACHE_LOG_DIR}/mescomptes.anthony-jacob.com.error.log
CustomLog ${APACHE_LOG_DIR}/mescomptes.anthony-jacob.com.access.log combined
RequestHeader set X-Forwarded-Proto expr=%{REQUEST_SCHEME}
RequestHeader set X-Forwarded-SSL expr=%{HTTPS}
</VirtualHost>
je peux maintenant lancer le container Docker avec
docker run -dit \
-p 8082:8080 \
-v firefly_iii_upload:/var/www/html/storage/upload \
-e APP_KEY=LA_CLE_GENERER_PLUS_HAUT \
-e STATIC_CRON_TOKEN=LA_CLE_GENERER_PLUS_HAUT \
-e DB_HOST=MON_CONTAINER_MYSQL \
-e DB_PORT=MON_PORT_MYSQL \
-e DB_CONNECTION=mysql \
-e DB_DATABASE=NOM_DE_LA_BASE_FIREFLY \
-e DB_USERNAME=MON_USER_MYSQL \
-e DB_PASSWORD=MON_PASSWORD_MYSQL \
-e DEFAULT_LANGUAGE=fr_FR \
-e DEFAULT_LOCALE=equal \
-e TZ=Europe/Paris \
-e TRUSTED_PROXIES=* \
--network=infra \
-h mescomptes.anthony-jacob.com \
--restart=always \
--name firefly \
fireflyiii/core:latest
et après quelques secondes/minutes d’initialisation, tadaam!!
Cron Jobs
maintenant, pour traiter automatiquement les opérations périodiques, j’ai mis en place des taches Cron à travers Docker comme décrit ici. Il y a plusieurs methode,
celle que j’ai utilisée est celle dans la section Run an image that calls the cron job avec une petite subtilité: si tu as bien fait attention plus haut pour le container de Firefly III, j’ai
-e STATIC_CRON_TOKEN=LA_CLE_GENERER_PLUS_HAUT
ce qui me permet de simplement lancer le container pour le cron avec la clé définie plus haut
docker run -d \
--name firefly_cron \
--network=infra \
--restart=always \
alpine \
sh -c "echo '0 3 * * * wget -qO- http://mescomptes:8080/api/v1/cron/LA_CLE_GENERER_PLUS_HAUT' | crontab - && crond -f -L /dev/stdout"
Firefly Importer III
pour la partie importation, idem, j’ai à peu près suivi la documentation pour Docker
et la documentation pour créer un Clients OAuth ET un jeton d’accès personnel
Une fois fait, j’avais tout ce qu’il me fallait pour lancer le container Docker
docker run -dit \
-e FIREFLY_III_ACCESS_TOKEN=MON_ACCESS_TOKEN \
-e FIREFLY_III_URL=http://mescomptes:8080 \
-p 8081:8080 \
--name firefly_importer \
--network=infra \
-h importer.anthony-jacob.com \
--restart=always \
fireflyiii/data-importer:latest
Voilà!! c’est tout pour cette fois. En attendant je te dis à plus tard pour de nouvelles aventures!!