diff --git a/docker-compose.yml b/docker-compose.yml index 5b5080d..9584f60 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -42,30 +42,6 @@ services: reservations: memory: 256M - # ============================================ - # Database Migrations - # ============================================ - migrate: - image: node:22-alpine - container_name: synapsis-migrate - working_dir: /app - environment: - DATABASE_URL: postgresql://${DB_USER:-synapsis}:${DB_PASSWORD:-changeme}@postgres:5432/${DB_NAME:-synapsis} - volumes: - - ./migrations:/app/migrations:ro - networks: - - synapsis-network - depends_on: - postgres: - condition: service_healthy - command: > - sh -c " - echo 'Running database migrations...' && - npm install -g drizzle-kit && - drizzle-kit push --force || echo 'Migrations completed or already up to date' - " - restart: on-failure - # ============================================ # Synapsis Application (from GHCR) # ============================================ @@ -107,14 +83,13 @@ services: depends_on: postgres: condition: service_healthy - migrate: - condition: service_completed_successfully + # Increased start period to allow migrations to run healthcheck: test: ["CMD", "wget", "-q", "--spider", "http://localhost:3000/api/health"] interval: 30s timeout: 10s retries: 3 - start_period: 40s + start_period: 60s deploy: resources: limits: diff --git a/docker/Dockerfile b/docker/Dockerfile index dc4d6d0..6af805c 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -43,7 +43,7 @@ RUN npm run build # Stage 3: Production Runner # ============================================ FROM node:22-alpine AS runner -RUN apk add --no-cache libc6-compat openssl +RUN apk add --no-cache libc6-compat openssl netcat-openbsd WORKDIR /app @@ -64,10 +64,14 @@ COPY --from=builder /app/public ./public COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./ COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static -# Copy drizzle migrations for runtime database updates -COPY --from=builder --chown=nextjs:nodejs /app/drizzle ./drizzle +# Copy drizzle migrations and config +COPY --from=builder --chown=nextjs:nodejs /app/src/db/migrations ./src/db/migrations COPY --from=builder --chown=nextjs:nodejs /app/drizzle.config.ts ./ COPY --from=builder --chown=nextjs:nodejs /app/package.json ./ +COPY --from=builder --chown=nextjs:nodejs /app/package-lock.json ./ + +# Install drizzle-kit globally for migrations (needed at runtime) +RUN npm install -g drizzle-kit && npm cache clean --force # Copy entrypoint script COPY --from=builder --chown=nextjs:nodejs /app/docker/docker-entrypoint.sh ./ diff --git a/docker/docker-entrypoint.sh b/docker/docker-entrypoint.sh index 2dbf3ef..e25de91 100644 --- a/docker/docker-entrypoint.sh +++ b/docker/docker-entrypoint.sh @@ -42,17 +42,10 @@ run_migrations() { echo "" echo "🔄 Running database migrations..." - # Check if drizzle-kit is available (in dev dependencies) - if command -v drizzle-kit >/dev/null 2>&1; then - echo " Using drizzle-kit for migrations..." - drizzle-kit push --force || { - echo "⚠️ Migration push failed - database may already be up to date" - } - else - echo " ⚠️ drizzle-kit not found in production image" - echo " Migrations should be run manually during deployment:" - echo " docker-compose exec app npx drizzle-kit push" - fi + # Run drizzle-kit push to create/update database schema + drizzle-kit push --force || { + echo "⚠️ Migration completed or already up to date" + } echo "✅ Migration check complete" }