From 0ed61145396e955f06d25ed225b764d3a0b7adad Mon Sep 17 00:00:00 2001 From: hailin Date: Sat, 14 Jun 2025 22:11:27 +0800 Subject: [PATCH] . --- apps/blogai/Dockerfile | 127 +++++++++++++++------------------ apps/blogai/Dockerfile.fixedip | 72 +++++++++++++++++++ supervisor.conf | 7 ++ 3 files changed, 138 insertions(+), 68 deletions(-) create mode 100644 apps/blogai/Dockerfile.fixedip create mode 100644 supervisor.conf diff --git a/apps/blogai/Dockerfile b/apps/blogai/Dockerfile index 398dbaf..1f58504 100644 --- a/apps/blogai/Dockerfile +++ b/apps/blogai/Dockerfile @@ -1,72 +1,63 @@ # --- 第一阶段:构建阶段 --- - FROM node:18-bullseye-slim AS builder +FROM node:18-bullseye-slim AS builder - # 设置构建参数(提前定义,后续build、ENV都能用) - ARG BLOGAI_HOST=ai.szaiai.com - - # 设置构建环境变量 - ENV NODE_ENV=production - ENV BLOGAI_HOST=${BLOGAI_HOST} - - # 设置工作目录 - WORKDIR /app - - # 安装 pnpm - RUN npm install -g pnpm - - # 复制整项目的代码,排除了.dockerignore中的文件 - COPY . ./ +ARG BLOGAI_HOST=ai.szaiai.com +ENV NODE_ENV=production +ENV BLOGAI_HOST=${BLOGAI_HOST} - # 拷贝并替换.env - COPY apps/blogai/.env.example apps/blogai/.env - RUN sed -i "s|{{BLOGAI_HOST}}|${BLOGAI_HOST}|g" apps/blogai/.env +WORKDIR /app - # 安装根目录依赖 - RUN pnpm install - - # 编译子项目 apps/blogai - WORKDIR /app/apps/blogai - RUN pnpm run build - - - # --- 第二阶段:生产环境运行阶段 --- - FROM node:18-slim AS runner - - # 重新定义build参数,且默认值一致 - ARG BLOGAI_HOST=ai.szaiai.com - - # 设置运行环境变量 - ENV NODE_ENV=production - ENV PORT=3008 - ENV BLOGAI_HOST=${BLOGAI_HOST} - - # 安装 pm2 - RUN npm install -g pm2 - - # 设置根目录下的运行环境 - WORKDIR /app - - # 复制根目录下的node_modules - COPY --from=builder /app/node_modules ./node_modules - - # 设置子项目下的运行目录 - WORKDIR /app/apps/blogai/ - - # 只复制子项目运行需要的文件 - COPY --from=builder /app/apps/blogai/package.json ./package.json - COPY --from=builder /app/apps/blogai/node_modules ./node_modules - COPY --from=builder /app/apps/blogai/.next ./.next - COPY --from=builder /app/apps/blogai/public ./public - COPY --from=builder /app/apps/blogai/next.config.js ./next.config.js - COPY --from=builder /app/apps/blogai/next-i18next.config.js ./next-i18next.config.js - - - # 清理无用缓存,减小体积 - RUN rm -rf /root/.npm /root/.pnpm-store /tmp/* - - # 暴露端口 - EXPOSE 3008 - - # 容器启动命令 - CMD ["pm2-runtime", "npm", "--", "start"] - \ No newline at end of file +RUN npm install -g pnpm + +COPY . ./ + +COPY apps/blogai/.env.example apps/plugai/.env +RUN sed -i "s|{{BLOGAI_HOST}}|${BLOGAI_HOST}|g" apps/plugai/.env + +RUN pnpm install + +WORKDIR /app/apps/plugai +RUN pnpm run build + + +# --- 第二阶段:运行阶段 --- +FROM node:18-slim AS runner + +ARG BLOGAI_HOST=ai.szaiai.com +ENV NODE_ENV=production +ENV PORT=3008 +ENV BLOGAI_HOST=${BLOGAI_HOST} + +# 安装 supervisor +RUN apt-get update && \ + apt-get install -y supervisor && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists/* + +# 设置 supervisor 配置目录 +RUN mkdir -p /etc/supervisor/conf.d + +# 设置工作目录 +WORKDIR /plugai + +# 拷贝 supervisor.conf 到指定路径 +COPY ./supervisor.conf /etc/supervisor/conf.d/supervisor.conf + +# 拷贝 node_modules +COPY --from=builder /app/node_modules ./node_modules + +WORKDIR /plugai/zerostack/t1/ + +COPY --from=builder /app/apps/blogai/package.json ./package.json +COPY --from=builder /app/apps/blogai/node_modules ./node_modules +COPY --from=builder /app/apps/blogai/.next ./.next +COPY --from=builder /app/apps/blogai/public ./public +COPY --from=builder /app/apps/blogai/next.config.js ./next.config.js +COPY --from=builder /app/apps/blogai/next-i18next.config.js ./next-i18next.config.js + +RUN rm -rf /root/.npm /root/.pnpm-store /tmp/* + +EXPOSE 3008 + +# 使用 supervisor 启动 +CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/conf.d/supervisor.conf"] diff --git a/apps/blogai/Dockerfile.fixedip b/apps/blogai/Dockerfile.fixedip new file mode 100644 index 0000000..398dbaf --- /dev/null +++ b/apps/blogai/Dockerfile.fixedip @@ -0,0 +1,72 @@ +# --- 第一阶段:构建阶段 --- + FROM node:18-bullseye-slim AS builder + + # 设置构建参数(提前定义,后续build、ENV都能用) + ARG BLOGAI_HOST=ai.szaiai.com + + # 设置构建环境变量 + ENV NODE_ENV=production + ENV BLOGAI_HOST=${BLOGAI_HOST} + + # 设置工作目录 + WORKDIR /app + + # 安装 pnpm + RUN npm install -g pnpm + + # 复制整项目的代码,排除了.dockerignore中的文件 + COPY . ./ + + # 拷贝并替换.env + COPY apps/blogai/.env.example apps/blogai/.env + RUN sed -i "s|{{BLOGAI_HOST}}|${BLOGAI_HOST}|g" apps/blogai/.env + + # 安装根目录依赖 + RUN pnpm install + + # 编译子项目 apps/blogai + WORKDIR /app/apps/blogai + RUN pnpm run build + + + # --- 第二阶段:生产环境运行阶段 --- + FROM node:18-slim AS runner + + # 重新定义build参数,且默认值一致 + ARG BLOGAI_HOST=ai.szaiai.com + + # 设置运行环境变量 + ENV NODE_ENV=production + ENV PORT=3008 + ENV BLOGAI_HOST=${BLOGAI_HOST} + + # 安装 pm2 + RUN npm install -g pm2 + + # 设置根目录下的运行环境 + WORKDIR /app + + # 复制根目录下的node_modules + COPY --from=builder /app/node_modules ./node_modules + + # 设置子项目下的运行目录 + WORKDIR /app/apps/blogai/ + + # 只复制子项目运行需要的文件 + COPY --from=builder /app/apps/blogai/package.json ./package.json + COPY --from=builder /app/apps/blogai/node_modules ./node_modules + COPY --from=builder /app/apps/blogai/.next ./.next + COPY --from=builder /app/apps/blogai/public ./public + COPY --from=builder /app/apps/blogai/next.config.js ./next.config.js + COPY --from=builder /app/apps/blogai/next-i18next.config.js ./next-i18next.config.js + + + # 清理无用缓存,减小体积 + RUN rm -rf /root/.npm /root/.pnpm-store /tmp/* + + # 暴露端口 + EXPOSE 3008 + + # 容器启动命令 + CMD ["pm2-runtime", "npm", "--", "start"] + \ No newline at end of file diff --git a/supervisor.conf b/supervisor.conf new file mode 100644 index 0000000..41b9f22 --- /dev/null +++ b/supervisor.conf @@ -0,0 +1,7 @@ +[web] +command=npm start +directory=/plugai/zerostack/t1 +autostart=true +autorestart=true +stdout_logfile=/dev/stdout +stderr_logfile=/dev/stderr \ No newline at end of file