From 3960aeb7a303e57f9ce555fa1a5b39169451ab6b Mon Sep 17 00:00:00 2001 From: hailin Date: Tue, 24 Jun 2025 00:09:32 +0800 Subject: [PATCH] . --- apps/blogai/Dockerfile | 71 ++++++++++++++++++++++++++++++++++++------ 1 file changed, 61 insertions(+), 10 deletions(-) diff --git a/apps/blogai/Dockerfile b/apps/blogai/Dockerfile index bd29e48..103fb42 100644 --- a/apps/blogai/Dockerfile +++ b/apps/blogai/Dockerfile @@ -1,20 +1,71 @@ -FROM node:20-bullseye +# --- 第一阶段:构建阶段 --- +FROM node:20-bullseye-slim AS builder + +# 构建时用 development 环境,确保 devDependencies 安装 +ENV NODE_ENV=development WORKDIR /app -# ✅ 拷贝整个 mono 项目 -COPY . . +# 预装 pnpm +RUN npm install -g pnpm -# ✅ 宿主上使用的是 pnpm,容器中也要全局安装 -RUN corepack enable && corepack prepare pnpm@8.15.6 --activate +# 拷贝基础依赖文件 +COPY pnpm-lock.yaml ./ +COPY pnpm-workspace.yaml ./ +COPY package.json ./ -# ✅ 安装依赖 +# 安装全量依赖(包含 tsup, typescript 等 devDependencies) RUN pnpm install -# ✅ 显式设置 dev 环境(Next.js 报 warn 就是因为这个不一致) -ENV NODE_ENV=development +# 拷贝全部源码 +COPY . . -# ✅ 编译验证(替换为你要的项目路径) +# 设置 BLOGAI_HOST 环境变量,处理 env 模板 +ARG BLOGAI_HOST=ai.szaiai.com +ENV BLOGAI_HOST=${BLOGAI_HOST} +COPY apps/blogai/.env.example apps/blogai/.env +RUN sed -i "s|{{BLOGAI_HOST}}|${BLOGAI_HOST}|g" apps/blogai/.env + +# 进入子目录并执行构建 WORKDIR /app/apps/blogai -RUN pnpm exec tsc --noEmit RUN pnpm run build + + +# --- 第二阶段:运行阶段 --- +FROM node:20-slim AS runner + +# 最终环境:纯净 production +ENV NODE_ENV=production +ENV PORT=3008 +ARG BLOGAI_HOST=ai.szaiai.com +ENV BLOGAI_HOST=${BLOGAI_HOST} + +# 安装运行所需工具 +RUN apt-get update && \ + apt-get install -y curl supervisor && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists/* + +# 工作目录 +WORKDIR /plugai + +# Supervisor 配置(可选) +COPY ./supervisor.conf /etc/supervisor/conf.d/supervisor.conf + +# 拷贝运行时代码 + 构建产物 +COPY --from=builder /app/apps/blogai/.next ./apps/blogai/.next +COPY --from=builder /app/apps/blogai/public ./apps/blogai/public +COPY --from=builder /app/apps/blogai/package.json ./apps/blogai/package.json +COPY --from=builder /app/apps/blogai/next.config.js ./apps/blogai/next.config.js +COPY --from=builder /app/apps/blogai/next-i18next.config.js ./apps/blogai/next-i18next.config.js +COPY --from=builder /app/node_modules ./node_modules + +# 设置默认工作目录为子项目 blogai +WORKDIR /plugai/apps/blogai + +# 添加 healthcheck +HEALTHCHECK --interval=30s --timeout=3s --start-period=25s --retries=3 \ + CMD curl -fs http://localhost:3008/api/health/ || exit 1 + +# 可选:使用 supervisor 启动(也可以注释) +CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/conf.d/supervisor.conf"]