diff --git a/apps/web/Dockerfile b/apps/web/Dockerfile new file mode 100644 index 0000000..bd99bdb --- /dev/null +++ b/apps/web/Dockerfile @@ -0,0 +1,59 @@ +FROM node:22-alpine AS base + +# ============================================ +# Stage 1: Install dependencies +# ============================================ + +FROM base AS builder + +RUN apk add --no-cache gcompat +RUN corepack enable && corepack prepare pnpm@10.18.2 --activate +WORKDIR /app + +# 复制 monorepo 根配置(catalog、lockfile 等) +COPY pnpm-workspace.yaml pnpm-lock.yaml package.json ./ +# 复制 web 应用源码 +COPY apps/web/package.json ./apps/web/package.json +COPY apps/web/next.config.ts ./apps/web/next.config.ts +COPY apps/web/tsconfig.json ./apps/web/tsconfig.json +COPY apps/web/postcss.config.mjs ./apps/web/postcss.config.mjs +COPY apps/web/app ./apps/web/app +COPY apps/web/components ./apps/web/components +COPY apps/web/lib ./apps/web/lib +COPY apps/web/types ./apps/web/types +COPY apps/web/public ./apps/web/public +COPY apps/web/middleware.ts ./apps/web/middleware.ts + +RUN pnpm install --filter web + +ENV NODE_ENV=production +ENV NEXT_TELEMETRY_DISABLED=1 + +RUN pnpm --filter web run build + +# ============================================ +# Stage 2: Run Next.js application +# ============================================ + +FROM base AS runner +WORKDIR /app + +ENV NODE_ENV=production +ENV PORT=3000 +ENV HOSTNAME="0.0.0.0" +ENV NEXT_TELEMETRY_DISABLED=1 + +RUN addgroup --system --gid 1001 nodejs +RUN adduser --system --uid 1001 nextjs + +COPY --from=builder --chown=nextjs:nodejs /app/apps/web/public ./public + +RUN mkdir .next && chown nextjs:nodejs .next + +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 + +CMD ["node", "apps/web/server.js"] diff --git a/docker-compose.yml b/docker-compose.yml index 662d2c5..fd44ae5 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -10,3 +10,13 @@ services: - "3001:3001" env_file: - apps/csms/.env + + web: + container_name: helios-web + build: + context: . + dockerfile: apps/web/Dockerfile + ports: + - "3000:3000" + env_file: + - apps/web/.env