Files
startover/Dockerfile
T
Johngreen 8900f1897c fix: prisma db push를 builder 스테이지에서 실행하도록 수정
- docker-compose.prod.yml에 migrate 서비스 추가 (builder target 사용)
- deploy.sh: postgres 먼저 시작 → migrate 실행 → 나머지 서비스 시작
- Dockerfile에서 불필요한 prisma schema 복사 제거 (runner에 prisma CLI 없음)
2026-03-08 23:31:32 +09:00

60 lines
1.9 KiB
Docker

# ============================================
# Startover Turborepo Multi-stage Dockerfile
# Usage: docker build --build-arg APP_NAME=web .
# ============================================
# --- Stage 1: Base ---
FROM node:20-alpine AS base
RUN apk add --no-cache libc6-compat
RUN corepack enable && corepack prepare pnpm@8.10.0 --activate
WORKDIR /app
# --- Stage 2: Install & Build ---
FROM base AS builder
ARG APP_NAME=web
# Copy workspace config first for better caching
COPY pnpm-lock.yaml pnpm-workspace.yaml package.json turbo.json ./
COPY apps/web/package.json ./apps/web/
COPY apps/admin/package.json ./apps/admin/
COPY packages/shared/package.json ./packages/shared/
COPY packages/domain/package.json ./packages/domain/
COPY packages/application/package.json ./packages/application/
COPY packages/infrastructure/package.json ./packages/infrastructure/
COPY packages/database/package.json ./packages/database/
COPY packages/analytics/package.json ./packages/analytics/
COPY packages/ui/package.json ./packages/ui/
RUN pnpm install --frozen-lockfile
# Copy all source code
COPY . .
# Generate Prisma client & build
RUN cd packages/database && npx prisma generate
RUN pnpm turbo run build --filter=@startover/${APP_NAME}
# Ensure public directories exist for COPY
RUN mkdir -p /app/apps/${APP_NAME}/public
# --- Stage 3: Runner ---
FROM node:20-alpine AS runner
ARG APP_NAME=web
ENV NODE_ENV=production
ENV APP_NAME=${APP_NAME}
RUN addgroup --system --gid 1001 nodejs
RUN adduser --system --uid 1001 nextjs
WORKDIR /app
COPY --from=builder /app/apps/${APP_NAME}/public ./public
COPY --from=builder --chown=nextjs:nodejs /app/apps/${APP_NAME}/.next/standalone ./
COPY --from=builder --chown=nextjs:nodejs /app/apps/${APP_NAME}/.next/static ./apps/${APP_NAME}/.next/static
USER nextjs
EXPOSE 3000
ENV HOSTNAME="0.0.0.0"
ENV PORT=3000
CMD ["sh", "-c", "node apps/${APP_NAME}/server.js"]