Skip to content
This repository has been archived by the owner on Apr 3, 2023. It is now read-only.

Chore/docker #41

Merged
merged 16 commits into from
Feb 23, 2023
Merged

Chore/docker #41

merged 16 commits into from
Feb 23, 2023

Conversation

larueli
Copy link
Member

@larueli larueli commented Feb 21, 2023

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 :

  • git checkout chore/docker
  • suivre les instructions en haut du docker-compose.traefik.yml
  • Bien supprimer le volume de la db : 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
  • Accéder au choix à l'UI traefik (localhost:9081), à l'api (localhost/api), au mailer (localhost/mailer), à adminer (localhost/adminer/)

Implementation

  • Files and variables have a name explaining what they do.

Tools

  • All commits have been done using Commitizen.

Documentation

  • Documenter sur etuutt-core
  • There are comments to explain complex parts inside your code.

@ThomasRitaine
Copy link
Contributor

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
Copy link
Member Author

larueli commented Feb 22, 2023

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 MariaDB/mariadb-docker#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/

Copy link
Contributor

@ThomasRitaine ThomasRitaine left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

C'est tout bon pour moi !
Tout fonctionne, et j'ai mis à jour la doc correspondante.
Si t'es ok aussi, on peut merge 🎉

@larueli larueli merged commit 3b5004d into dev Feb 23, 2023
@larueli larueli deleted the chore/docker branch February 23, 2023 21:46
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants