diff --git a/docker-compose.yml b/docker-compose.yml index f8ae00d..09a4bb3 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -7,6 +7,8 @@ services: POSTGRES_USER: ${POSTGRES_USER:-postgres} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-change-me} POSTGRES_DB: ${POSTGRES_DB:-toir} + # UTF-8 cluster (applies only on first volume init) — migrations use Cyrillic enum labels + POSTGRES_INITDB_ARGS: "--encoding=UTF-8 --locale=C.UTF-8" healthcheck: test: [ @@ -64,7 +66,8 @@ services: restart: unless-stopped depends_on: server: - condition: service_healthy + # Do not wait for healthy: if migrations fail, stack stays up so you can read server logs. + condition: service_started healthcheck: test: ["CMD-SHELL", "wget -qO- http://127.0.0.1/healthz >/dev/null 2>&1 || exit 1"] interval: 15s diff --git a/server/docker-entrypoint.sh b/server/docker-entrypoint.sh index 04f42a5..828a728 100755 --- a/server/docker-entrypoint.sh +++ b/server/docker-entrypoint.sh @@ -2,20 +2,35 @@ set -e PRISMA_BIN="./node_modules/.bin/prisma" +SCHEMA="prisma/schema.prisma" + if [ ! -f "$PRISMA_BIN" ]; then echo "Prisma CLI not found at $PRISMA_BIN" exit 1 fi -echo "Applying database migrations..." +export PRISMA_HIDE_UPDATE_MESSAGE=1 + +run_migrate() { + "$PRISMA_BIN" migrate deploy --schema "$SCHEMA" --skip-generate +} + +echo "Applying database migrations (schema=$SCHEMA)..." i=0 while [ "$i" -lt 15 ]; do - if "$PRISMA_BIN" migrate deploy; then + if run_migrate; then break fi i=$((i + 1)) if [ "$i" -eq 15 ]; then - echo "prisma migrate deploy failed after 15 attempts" + echo "----------------------------------------------------------------" + echo "prisma migrate deploy failed after 15 attempts." + echo "Check: docker logs toir-server" + echo "If the DB volume has a broken migration history, remove volume" + echo "kis-toir_postgres-data once (all DB data lost) or fix _prisma_migrations." + echo "--- prisma migrate status ---" + "$PRISMA_BIN" migrate status --schema "$SCHEMA" || true + echo "----------------------------------------------------------------" exit 1 fi echo "Migrate failed or DB not ready; retrying in 2s ($i/15)..."