- 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
65 lines
1.7 KiB
YAML
65 lines
1.7 KiB
YAML
services:
|
|
web:
|
|
build: .
|
|
container_name: flashcards-web
|
|
restart: unless-stopped
|
|
depends_on:
|
|
mysql:
|
|
condition: service_healthy
|
|
mongo:
|
|
condition: service_healthy
|
|
environment:
|
|
DB_IMPL: ${DB_IMPL:-mysql}
|
|
MYSQL_HOST: mysql
|
|
MYSQL_PORT: '3306'
|
|
MYSQL_USER: flashcards
|
|
MYSQL_PASSWORD: flashcards
|
|
MYSQL_DATABASE: flashcards
|
|
MONGODB_URI: mongodb://flashcards:flashcards@mongo:27017/flashcards?authSource=admin
|
|
MONGODB_DATABASE: flashcards
|
|
ports:
|
|
- '4000:3000'
|
|
|
|
mysql:
|
|
image: mysql:8.4
|
|
container_name: flashcards-mysql
|
|
restart: unless-stopped
|
|
environment:
|
|
MYSQL_ROOT_PASSWORD: root
|
|
MYSQL_DATABASE: flashcards
|
|
MYSQL_USER: flashcards
|
|
MYSQL_PASSWORD: flashcards
|
|
ports:
|
|
- '13306:3306'
|
|
volumes:
|
|
- flashcards-mysql-data:/var/lib/mysql
|
|
- ./docker/init/mysql:/docker-entrypoint-initdb.d:ro
|
|
healthcheck:
|
|
test: ['CMD', 'mysqladmin', 'ping', '-h', 'localhost', '-uroot', '-proot']
|
|
interval: 5s
|
|
timeout: 5s
|
|
retries: 20
|
|
|
|
mongo:
|
|
image: mongo:8.2
|
|
container_name: flashcards-mongo
|
|
restart: unless-stopped
|
|
environment:
|
|
MONGO_INITDB_ROOT_USERNAME: flashcards
|
|
MONGO_INITDB_ROOT_PASSWORD: flashcards
|
|
MONGO_INITDB_DATABASE: flashcards
|
|
ports:
|
|
- '27018:27017'
|
|
volumes:
|
|
- flashcards-mongo-data:/data/db
|
|
- ./docker/init/mongo:/docker-entrypoint-initdb.d:ro
|
|
healthcheck:
|
|
test: ['CMD', 'mongosh', '--quiet', '--eval', 'db.runCommand({ ping: 1 })']
|
|
interval: 5s
|
|
timeout: 5s
|
|
retries: 20
|
|
|
|
volumes:
|
|
flashcards-mysql-data:
|
|
flashcards-mongo-data:
|