feat(docker): migrations sqlx intégrées dans le démarrage de l'API

- Déplace les migrations du service `migrate` séparé vers un entrypoint.sh
- L'API exécute `sqlx migrate run` au démarrage avant de lancer le binaire
- Gestion de la rétrocompatibilité : détecte un schéma pre-sqlx et crée
  une baseline `_sqlx_migrations` pour éviter les conflits sur les instances existantes
- Installe sqlx-cli dans le builder, copie le binaire et les migrations dans l'image finale
- Supprime le service `migrate` du docker-compose.yml ; l'indexer dépend maintenant
  du healthcheck de l'API (qui garantit que les migrations sont appliquées)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-11 15:46:28 +01:00
parent d2fe7f12ab
commit 7cfb6cf001
4 changed files with 79 additions and 29 deletions

View File

@@ -29,24 +29,6 @@ services:
timeout: 5s
retries: 5
migrate:
image: postgres:16-alpine
depends_on:
postgres:
condition: service_healthy
environment:
POSTGRES_USER: stripstream
POSTGRES_PASSWORD: stripstream
POSTGRES_DB: stripstream
volumes:
- ./infra/migrations:/migrations:ro
command:
[
"sh",
"-c",
"export PGPASSWORD=$$POSTGRES_PASSWORD; for f in /migrations/*.sql; do echo \"Applying migration: $$f\"; psql -h postgres -U \"$$POSTGRES_USER\" -d \"$$POSTGRES_DB\" -f \"$$f\" || exit 1; done",
]
api:
build:
context: .
@@ -59,8 +41,6 @@ services:
- ${LIBRARIES_HOST_PATH:-./libraries}:/libraries
- ${THUMBNAILS_HOST_PATH:-./data/thumbnails}:/data/thumbnails
depends_on:
migrate:
condition: service_completed_successfully
postgres:
condition: service_healthy
meilisearch:
@@ -83,8 +63,8 @@ services:
- ${LIBRARIES_HOST_PATH:-./libraries}:/libraries
- ${THUMBNAILS_HOST_PATH:-./data/thumbnails}:/data/thumbnails
depends_on:
migrate:
condition: service_completed_successfully
api:
condition: service_healthy
postgres:
condition: service_healthy
meilisearch: