first commit

This commit is contained in:
qwer-xyz
2026-06-20 14:22:31 +08:00
commit c2498911ab
793 changed files with 291660 additions and 0 deletions
+85
View File
@@ -0,0 +1,85 @@
# =====================================================
# Incudal 多阶段构建 Dockerfile
# =====================================================
# Stage 1: 依赖安装
FROM node:22-alpine AS deps
RUN corepack enable && corepack prepare pnpm@9 --activate
WORKDIR /app
COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./
COPY client/package.json ./client/
COPY server/package.json ./server/
RUN pnpm install --frozen-lockfile --ignore-scripts
# esbuild 依赖安装脚本不能被跳过,否则 Vite 在构建阶段无法启动二进制
RUN pnpm rebuild esbuild
# Stage 2: 构建前端
FROM node:22-alpine AS builder-client
RUN corepack enable && corepack prepare pnpm@9 --activate
WORKDIR /app
COPY --from=deps /app/node_modules ./node_modules
COPY --from=deps /app/client/node_modules ./client/node_modules
COPY client ./client
COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./
RUN pnpm --filter client build
# Stage 3: 构建后端
FROM node:22-alpine AS builder-server
RUN corepack enable && corepack prepare pnpm@9 --activate
WORKDIR /app
COPY --from=deps /app/node_modules ./node_modules
COPY --from=deps /app/server/node_modules ./server/node_modules
COPY server ./server
COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./
# 生成 Prisma Client 并构建
WORKDIR /app/server
RUN DATABASE_URL="postgresql://user:pass@localhost:5432/db" npx prisma generate
WORKDIR /app
RUN pnpm --filter server build
# Stage 4: 生产镜像
FROM node:22-alpine AS runner
WORKDIR /app
ENV NODE_ENV=production
# 创建非 root 用户
RUN addgroup --system --gid 1001 nodejs && \
adduser --system --uid 1001 incudal
# 复制依赖 (包含生成的 Prisma Client)
COPY --from=builder-server /app/node_modules ./node_modules
COPY --from=builder-server /app/server/node_modules ./server/node_modules
# 复制构建产物
COPY --from=builder-server /app/server/dist ./server/dist
COPY --from=builder-client /app/client/dist ./client/dist
# 复制必要配置文件
COPY server/package.json ./server/
COPY server/prisma.config.ts ./server/
COPY server/prisma ./server/prisma
COPY server/templates ./server/templates
COPY server/scripts ./server/scripts
COPY server/src ./server/src
COPY package.json pnpm-workspace.yaml ./
# 复制启动脚本
COPY server/docker-entrypoint.sh ./server/
RUN chmod +x ./server/docker-entrypoint.sh
# 创建证书目录
RUN mkdir -p server/certs && chown -R incudal:nodejs server/certs
USER incudal
EXPOSE 3000
ENTRYPOINT ["./server/docker-entrypoint.sh"]