Replaces the fragile double-migration approach (server.ts startup +
drizzle-kit CLI in CI) with a one-shot migrate service in Docker Compose
that the app depends on via condition: service_completed_successfully.
- Add scripts/migrate.mjs: programmatic drizzle-orm migration (uses
production deps, not drizzle-kit which is devOnly and absent from image)
- Dockerfile: copy scripts/ into image, remove drizzle.config.ts (only
needed by drizzle-kit CLI)
- server.ts: remove runMigrations() entirely; migrations are now handled
by the migrate container before the app starts
- deploy.yml: remove explicit docker run migration step; replace sleep 10
health check with a poll loop and explicit migrate exit-code check
Production server's docker-compose.yaml needs a one-time manual update
to add the migrate service — see plan for exact config.
https://claude.ai/code/session_01ReaqH3o9NVH4QU4qE9WMMQ