Files
awoooi/apps/web/Dockerfile
OG T 384015ec2c
Some checks failed
CD Pipeline / build-and-deploy (push) Failing after 50s
E2E Health Check / e2e-health (push) Successful in 16s
perf(cd): 加速 CI/CD - venv 持久化 + Web cache 精準失效 + 合併 SSH
- Run API Tests: 持久化 /opt/api-venv,pyproject.toml hash 變才重裝 (~6-7 min)
- Build Web: CACHE_BUST=git_sha 取代 --no-cache,deps 層可 cache (~2-3 min)
- Deploy: ConfigMap + Deploy + Health Check 合併為 2 次 SSH 連線 (~30s)
- 預估總節省: ~8-10 min/run

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-01 11:17:47 +08:00

70 lines
1.9 KiB
Docker
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# AWOOOI Web - Production Dockerfile
FROM node:20-alpine AS base
# Install pnpm
RUN corepack enable && corepack prepare pnpm@9.0.0 --activate
FROM base AS deps
WORKDIR /app
# Copy package files
COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./
COPY apps/web/package.json ./apps/web/
COPY packages/tsconfig/package.json ./packages/tsconfig/
COPY packages/eslint-config/package.json ./packages/eslint-config/
COPY packages/lewooogo-core/package.json ./packages/lewooogo-core/
# Install dependencies
RUN pnpm install --frozen-lockfile
FROM base AS builder
WORKDIR /app
# Copy deps
COPY --from=deps /app/node_modules ./node_modules
COPY --from=deps /app/apps/web/node_modules ./apps/web/node_modules
COPY --from=deps /app/packages ./packages
# 2026-04-01 ogt: CACHE_BUST 強制讓 source 層失效(每次 commit 不同)
# deps 層 (pnpm install) 仍可 cache只有 COPY . . 以下強制重建
# 解決原本 --no-cache 連 deps 也清掉的問題
ARG CACHE_BUST=dev
RUN echo "$CACHE_BUST" > /dev/null
# Copy source
COPY . .
# Build-time environment variables (NEXT_PUBLIC_* 會被打包進 JS)
ARG NEXT_PUBLIC_API_URL=http://localhost:8000
ARG NEXT_PUBLIC_SENTRY_DSN=
ENV NEXT_PUBLIC_API_URL=${NEXT_PUBLIC_API_URL}
ENV NEXT_PUBLIC_SENTRY_DSN=${NEXT_PUBLIC_SENTRY_DSN}
ENV NEXT_TELEMETRY_DISABLED=1
RUN pnpm turbo build --filter=@awoooi/web
FROM base AS runner
WORKDIR /app
ENV NODE_ENV production
ENV NEXT_TELEMETRY_DISABLED 1
# Create non-root user
RUN addgroup --system --gid 1001 nodejs
RUN adduser --system --uid 1001 nextjs
# Copy built files
COPY --from=builder /app/apps/web/public ./apps/web/public
COPY --from=builder --chown=nextjs:nodejs /app/apps/web/.next/standalone ./
COPY --from=builder --chown=nextjs:nodejs /app/apps/web/.next/static ./apps/web/.next/static
USER nextjs
EXPOSE 3000
ENV PORT 3000
ENV HOSTNAME "0.0.0.0"
CMD ["node", "apps/web/server.js"]