Ce projet permet de conteneuriser l'application OpenFisca France avec Docker.
Ce projet a été conçu dans le cadre de la réalisation de l'application Estime.
OpenFisca France est un moteur de calcul Open source développé dans le language Python qui permet de faire des simulations sur le système socio-fiscal français.
- Accéder au Github du projet : https://github.com/openfisca/openfisca-france
- Suivi des versions de OpenFisca France : https://github.com/openfisca/openfisca-france/blob/master/CHANGELOG.md
- Documentation de l'api : https://fr.openfisca.org/legislation/swagger
- Explorateur du modèle de données OpenFisca : https://fr.openfisca.org/legislation
Structuration du projet :
- local : fichiers de configuration pour lancer l'application en local avec Docker Compose
- dist : fichiers de configuration pour l'environnement de recette et de production. Le conteneur est déployé sur un serveur Docker Swarm
Prérequis : installer Docker et Docker Compose.
-
Contruire l'image Docker
foo@bar:~openfisca-france/docker-image$ docker build -t openfisca-france .
-
Démarrer le conteneur :
foo@bar:~openfisca-france$ docker-compose -f ./local/docker-compose.yml up -d
-
L'application est accessible sur http://localhost:5000
foo@bar:~$ docker exec -it %id_conteneur% pip show openfisca-france
-
Vérifier que l'application fonctionne correctement :
foo@bar:~$ docker container ls | grep openfisca-france
Les conteneurs doivent être au statut UP et healthy.
-
Consulter les logs :
foo@bar:~$ docker service logs openfisca-france_openfisca-france
-
Démarrer ou relancer les services
-
Se positionner dans le répertoire /home/docker/openfisca
-
Exécuter la commande suivante :
foo@bar:/home/docker/openfisca$ docker stack deploy --with-registry-auth -c openfisca-production-stack.yml openfisca-france
-
-
Stopper le service :
foo@bar:~$ docker stack rm openfisca-france
Le service Docker a été configuré afin d'éviter un temps de coupure du service au redémarrage de l'application.
healthcheck:
test: curl -v --silent http://localhost:5000/variables || exit 1
timeout: 30s
interval: 1m
retries: 10
start_period: 30s
deploy:
replicas: 2
update_config:
parallelism: 1
order: start-first
failure_action: rollback
delay: 10s
rollback_config:
parallelism: 0
order: stop-first
restart_policy:
condition: any
delay: 5s
max_attempts: 3
window: 180s
Cette configuration permet une réplication du service avec 2 replicas. Lors d'un redémarrage, un service sera considéré opérationnel que si le test du healthcheck a réussi. Si un redémarrage est lancé, Docker va mettre à jour un premier service et s'assurer que le conteneur soit au statut healthy avant de mettre à jour le second service.
Afin de gérer au mieux les ressources du serveur, la quantité de ressources CPU et de mémoire que peut utliser un conteneur a été limitée :
resources:
reservations:
cpus: '0.20'
memory: 512Mi
limits:
cpus: '0.75'
memory: 2048Mi
Voir la consommation CPU et mémoire des conteneurs Docker :
foo@bar:~$ docker stats
Une image Docker Python contenant le code source de l'application OpenFisca est livrée sur les différents environnements (recette, production). Cette image est versionnée en release-candidate pour la recette et en release pour la production.
Après s'être assuré du bon fonctionnement de l'application sur l'environnement de recette, voici les étapes à suivre pour livrer la version de l'application de recette en production.
- lancer dans le pipeline GitLab CI, le job build-docker-image-production
-
lancer le job deploy_application_production
-
se connecter sur la machine pour vérifier que tout se passe bien, voir section Suivi opérationnel
-
envoyer une notification à l'équipe