ci: IDC 서버 자동배포 파이프라인 구축
- Dockerfile: Turborepo 멀티스테이지 빌드 (Next.js standalone) - docker-compose.prod.yml: PostgreSQL/Redis/Nginx/Web/Admin 프로덕션 스택 - deploy/poll-deploy.sh: cron 기반 자동배포 (매분 Gitea 폴링) - deploy/nginx/default.conf: 리버스 프록시 설정 - next.config.ts: output standalone 추가 - .env.production.example: 환경변수 템플릿 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
+56
@@ -0,0 +1,56 @@
|
||||
# ============================================
|
||||
# Re:Link 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 pnpm --filter @relink/database prisma generate
|
||||
RUN pnpm turbo run build --filter=@relink/${APP_NAME}
|
||||
|
||||
# --- 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"]
|
||||
Reference in New Issue
Block a user