From e26fbd720eb5c36dedd5eb818ca9358dbc051a14 Mon Sep 17 00:00:00 2001 From: Schalli Date: Mon, 29 Jun 2026 14:50:42 +0200 Subject: [PATCH] fix(deploy): embed prisma migrate deploy in API startup - Move prisma to runtime dependencies so it's available in prod image - API runs migrate deploy before starting (handles fresh installs + updates) - Remove separate migrate service from prod compose Co-Authored-By: Claude Sonnet 4.6 --- apps/api/Dockerfile | 2 +- apps/api/package.json | 2 +- docker-compose.prod.yml | 14 -------------- pnpm-lock.yaml | 6 +++--- 4 files changed, 5 insertions(+), 19 deletions(-) diff --git a/apps/api/Dockerfile b/apps/api/Dockerfile index b2d071b..a0f0615 100644 --- a/apps/api/Dockerfile +++ b/apps/api/Dockerfile @@ -33,4 +33,4 @@ COPY --from=builder /app/apps/api/prisma ./apps/api/prisma COPY --from=builder /app/packages/shared/src ./packages/shared/src USER nestjs EXPOSE 3001 -CMD ["node", "apps/api/dist/main.js"] +CMD ["sh", "-c", "node_modules/.bin/prisma migrate deploy --schema apps/api/prisma/schema.prisma && node apps/api/dist/main.js"] diff --git a/apps/api/package.json b/apps/api/package.json index 5238561..0e581da 100644 --- a/apps/api/package.json +++ b/apps/api/package.json @@ -21,6 +21,7 @@ "@nestjs/platform-express": "^11.0.0", "@nestjs/schedule": "^6.1.3", "@prisma/client": "^6.0.0", + "prisma": "^6.0.0", "@tessera/shared": "workspace:*", "argon2": "^0.44.0", "class-transformer": "^0.5.1", @@ -50,7 +51,6 @@ "@types/nodemailer": "^8.0.1", "@types/passport-jwt": "^4.0.1", "@types/passport-local": "^1.0.38", - "prisma": "^6.0.0", "typescript": "^5.5.0" } } diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml index 707082d..c18709d 100644 --- a/docker-compose.prod.yml +++ b/docker-compose.prod.yml @@ -1,16 +1,4 @@ services: - migrate: - image: git.vicolab.de/schalli/tessera-ctl/api:latest - command: sh -c "cd /app && node_modules/.bin/prisma migrate deploy --schema apps/api/prisma/schema.prisma" - environment: - DATABASE_URL: ${DATABASE_URL} - networks: - - data-net - depends_on: - db: - condition: service_healthy - restart: "no" - web: image: git.vicolab.de/schalli/tessera-ctl/web:latest restart: unless-stopped @@ -39,8 +27,6 @@ services: depends_on: db: condition: service_healthy - migrate: - condition: service_completed_successfully environment: DATABASE_URL: ${DATABASE_URL} JWT_SECRET: ${JWT_SECRET} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index fa47340..e4a1428 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -101,6 +101,9 @@ importers: pdf-parse: specifier: ^2.4.5 version: 2.4.5 + prisma: + specifier: ^6.0.0 + version: 6.19.3(typescript@5.9.3) reflect-metadata: specifier: ^0.2.0 version: 0.2.2 @@ -135,9 +138,6 @@ importers: '@types/passport-local': specifier: ^1.0.38 version: 1.0.38 - prisma: - specifier: ^6.0.0 - version: 6.19.3(typescript@5.9.3) typescript: specifier: ^5.5.0 version: 5.9.3