feat(deploy): image web Docker et docker-compose complet (P5)

- Dockerfile multi-étapes (node:22-alpine, pnpm, output standalone), .dockerignore
- docker-compose : service web (hôte 4000) + mysql + mongo avec volumes nommés
- Env de connexion selon DB_IMPL (MYSQL_*, MONGODB_URI) ; mongo ?authSource=admin
- Seed MySQL via 02-seed.sh (--default-character-set=utf8mb4) pour un UTF-8 propre
- fix(api): parseTags gère les colonnes JSON déjà parsées par mysql2
- TODO : phase 5 et DoD cochées
This commit is contained in:
devcodetools committed 2026-09-22 09:00:07 +02:00
1 parent 17ae195b39
commit f165168608
9 files changed
+112 -20

No files matched your search

+8 -1
View File
@@ -1,3 +1,9 @@
#!/bin/bash
set -e
# Import du seed en forçant l'encodage UTF-8 (sinon les caractères accentués
# du fichier source sont interprétés en latin1 et stockés en double-encodage).
mysql --default-character-set=utf8mb4 "$MYSQL_DATABASE" <<'SQL'
INSERT INTO cards (id, question, response, theme, tags, createdAt, updatedAt) VALUES
('10000000-0000-4000-8000-000000000001', 'Qu''est-ce qu''une closure en JavaScript ?', 'Une fonction qui conserve l''accès à la portée de sa définition.', 'javascript', JSON_ARRAY('scope', 'fonction'), NOW(), NOW()),
('10000000-0000-4000-8000-000000000002', 'Que retourne typeof null ?', 'La chaîne "object", héritage historique du langage.', 'javascript', JSON_ARRAY('types'), NOW(), NOW()),
@@ -8,4 +14,5 @@ INSERT INTO cards (id, question, response, theme, tags, createdAt, updatedAt) VA
('10000000-0000-4000-8000-000000000007', 'Que fait git rebase ?', 'Il réapplique les commits d''une branche sur une autre base.', 'git', JSON_ARRAY('branches'), NOW(), NOW()),
('10000000-0000-4000-8000-000000000008', 'Différence entre merge et rebase ?', 'merge crée un commit de fusion, rebase réécrit l''historique de façon linéaire.', 'git', JSON_ARRAY('branches'), NOW(), NOW()),
('10000000-0000-4000-8000-000000000009', 'Qu''est-ce qu''un volume Docker ?', 'Un stockage persistant indépendant du cycle de vie du conteneur.', 'docker', JSON_ARRAY('stockage'), NOW(), NOW()),
('10000000-0000-4000-8000-000000000010', 'Différence entre RUN et CMD dans un Dockerfile ?', 'RUN s''exécute au build, CMD définit la commande lancée au démarrage du conteneur.', 'docker', JSON_ARRAY('dockerfile'), NOW(), NOW());
('10000000-0000-4000-8000-000000000010', 'Différence entre RUN et CMD dans un Dockerfile ?', 'RUN s''exécute au build, CMD définit la commande lancée au démarrage du conteneur.', 'docker', JSON_ARRAY('dockerfile'), NOW(), NOW());
SQL