ungdev / etuutt-api

Users, classes, assos : An awesome API to rule them all
MIT License
2 stars 2 forks source link

Chore/docker #41

Closed larueli closed 1 year ago

larueli commented 1 year ago

Description

Ajoute de quoi faire fonctionner docker plus simplement et également une CI pour pousser les images taggée (branche et tag) sur ghcr.io/ungdev/etuutt-api.

L'exposition des services est facilitée par traefik et si le front l'adopte aussi on pourra avoir sur le même domaine (localhost) le front et l'api sans jongler avec les ports ou des domaines différents. Il suffit de monter le front en "live" avec un volume dans un container et d'y appliquer des labels similaires à ceux de la partie api (en les adaptant car pas de path /api ou autre et en changeant le port). Cela facilite la prise en main du projet et limite les problèmes avec les headers CORS.

Avec les différents docker-compose on distingue bien les configs de dev et de prod.

Checklist

Test

Pour tester :

Implementation

Tools

Documentation

ThomasRitaine commented 1 year ago

Déjà, la commande docker compose -f docker-compose.yml -f docker-compose.dev.yml ne fonctionne pas, il faut ajouter up à la fin : docker compose -f docker-compose.yml -f docker-compose.dev.yml up.

Ensuite, lorsque je lance cette commande, j'ai ce message d'erreur en boucle : [Warning] Access denied for user 'mysql'@'127.0.0.1' Ceci vient du healthcheck de la database : test: ["CMD", "/usr/local/bin/healthcheck.sh", "--su-mysql", "--connect", "--innodb_initialized"] C'est parce que dans la configuration que tu as faites, le password de root est abcdef. Et quand je l'ajoute à la commande : test: ["CMD", "/usr/local/bin/healthcheck.sh", "--su-mysql", "-pabcdef", "--connect", "--innodb_initialized"] le test doit être négatif puisque le container application ne se lance même pas.

Ca marche sur ta machine ? Ca me paraît improbable. A quoi sert le healthcheck ?

larueli commented 1 year ago

Salut,

En effet pour ton premier point j'ai oublié la commande... j'ai modifié mon message initial (en rajoutant -d pour faire tourner en background).

Ensuite, pour le healthcheck c'est normal car ta db a été créée sans utilisateur local (créé par la variable d'environnement MARIADB_MYSQL_LOCALHOST_USER: true). Le test utilise cet utilisateur local. Or celui-ci n'est créé que quand la base n'est pas déjà initialisée. Pour ton test je t'invite à supprimer le volume de ta base et recommencer (et oui ça a très bien marché sur ma machine :D). Pour supprimer ton volume : docker compose -f docker-compose.yml -f docker-compose.dev.yml down, docker volume ls (identifie le nom du volume de la base), docker volume rm {NOM}, docker compose -f docker-compose.yml -f docker-compose.dev.yml up -d : ta db sera recréée, il faudra juste recréer ton schéma et lancer tes fixtures.

Edit : my bad, voir https://github.com/MariaDB/mariadb-docker/issues/94

Le healthcheck permet de vérifier de manière standard qu'un service docker fonctionne (ici la db) et, ensuite, permet d'attendre avant de lancer un autre service. Le gros avantage vis-à-vis de la solution précédente (WAIT_HOST) : la méthode est standard et fonctionne peu importe l'applicatif utilisé (ici, le container doit être programmé pour attendre, avec cette méthode c'est docker qui fait attendre le container). https://docs.docker.com/engine/reference/builder/#healthcheck / https://www.grottedubarbu.fr/docker-healthcheck/