diff --git a/backend/services/deploy.sh b/backend/services/deploy.sh index 5b4c104a..30f4a8a3 100644 --- a/backend/services/deploy.sh +++ b/backend/services/deploy.sh @@ -351,6 +351,48 @@ migrate() { log_info "Migrations complete" } +migrate_reset() { + local service="$1" + + if [ -z "$service" ]; then + log_error "Please specify a service name: ./deploy.sh migrate-reset " + exit 1 + fi + + log_warn "This will reset the database for $service and re-run migrations!" + read -p "Are you sure? (y/N): " confirm + + if [ "$confirm" != "y" ] && [ "$confirm" != "Y" ]; then + log_info "Migration reset cancelled" + exit 0 + fi + + log_step "Resetting database and migrations for $service..." + + # Use prisma db push to force sync schema without migration history + docker compose -f "$COMPOSE_FILE" --env-file "$ENV_FILE" exec "$service" \ + npx prisma db push --force-reset --accept-data-loss + + log_info "Database reset complete for $service" +} + +migrate_push() { + local service="$1" + + if [ -z "$service" ]; then + log_error "Please specify a service name: ./deploy.sh migrate-push " + exit 1 + fi + + log_step "Force syncing schema for $service (using prisma db push)..." + + # Use prisma db push to sync schema (creates missing tables) + docker compose -f "$COMPOSE_FILE" --env-file "$ENV_FILE" exec "$service" \ + npx prisma db push --accept-data-loss + + log_info "Schema sync complete for $service" +} + # =========================================================================== # Cleanup # =========================================================================== @@ -441,6 +483,12 @@ case "${1:-}" in migrate) migrate ;; + migrate-reset) + migrate_reset "$2" + ;; + migrate-push) + migrate_push "$2" + ;; clean) clean ;; @@ -468,7 +516,9 @@ case "${1:-}" in echo " status/ps - Show service status" echo " health - Check health of all services" echo " logs [svc] - View logs (optionally for specific service)" - echo " migrate - Run database migrations" + echo " migrate - Run database migrations for all services" + echo " migrate-reset - Reset database and re-run migrations for a service" + echo " migrate-push - Force sync schema (creates missing tables)" echo " clean - Remove all containers, volumes, and images" echo "" echo "Single Service Commands:" diff --git a/backend/services/mpc-service/Dockerfile b/backend/services/mpc-service/Dockerfile index 29f52e6c..f2f015f8 100644 --- a/backend/services/mpc-service/Dockerfile +++ b/backend/services/mpc-service/Dockerfile @@ -43,13 +43,17 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ COPY package*.json ./ RUN npm ci --only=production -# Copy Prisma schema and generate client +# Copy Prisma schema, migrations and generate client COPY prisma ./prisma/ RUN DATABASE_URL="postgresql://user:pass@localhost:5432/db" npx prisma generate # Copy built files COPY --from=builder /app/dist ./dist +# Copy entrypoint script +COPY docker-entrypoint.sh ./ +RUN chmod +x docker-entrypoint.sh + # Create non-root user RUN groupadd -g 1001 nodejs && \ useradd -u 1001 -g nodejs nestjs @@ -57,15 +61,18 @@ RUN groupadd -g 1001 nodejs && \ # Create temp directory for TSS RUN mkdir -p /tmp/tss && chown -R nestjs:nodejs /tmp/tss +# Change ownership of app directory +RUN chown -R nestjs:nodejs /app + # Switch to non-root user USER nestjs # Expose port EXPOSE 3006 -# Health check -HEALTHCHECK --interval=30s --timeout=3s --start-period=40s --retries=3 \ +# Health check (extended start-period for migrations) +HEALTHCHECK --interval=30s --timeout=3s --start-period=60s --retries=5 \ CMD curl -f http://localhost:3006/api/v1/health || exit 1 -# Start service -CMD ["node", "dist/main.js"] +# Start service with entrypoint script (runs migrations first) +CMD ["./docker-entrypoint.sh"] diff --git a/backend/services/mpc-service/docker-entrypoint.sh b/backend/services/mpc-service/docker-entrypoint.sh new file mode 100644 index 00000000..02348cff --- /dev/null +++ b/backend/services/mpc-service/docker-entrypoint.sh @@ -0,0 +1,14 @@ +#!/bin/sh +set -e + +echo "=== MPC Service Starting ===" +echo "Running database migrations..." + +# Run Prisma migrations +npx prisma migrate deploy + +echo "Migrations completed successfully" +echo "Starting application..." + +# Start the application +exec node dist/main.js diff --git a/backend/services/mpc-service/prisma/migrations/20250102000000_init/migration.sql b/backend/services/mpc-service/prisma/migrations/0001_init/migration.sql similarity index 100% rename from backend/services/mpc-service/prisma/migrations/20250102000000_init/migration.sql rename to backend/services/mpc-service/prisma/migrations/0001_init/migration.sql diff --git a/backend/services/mpc-service/prisma/migrations/migration_lock.toml b/backend/services/mpc-service/prisma/migrations/migration_lock.toml index 8affd027..99e4f200 100644 --- a/backend/services/mpc-service/prisma/migrations/migration_lock.toml +++ b/backend/services/mpc-service/prisma/migrations/migration_lock.toml @@ -1,2 +1,3 @@ -# Prisma Migrate lockfile v1 +# Please do not edit this file manually +# It should be added in your version-control system (i.e. Git) provider = "postgresql"