hts/apps/blogai/Dockerfile

78 lines
2.3 KiB
Docker
Raw 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.

# --- 第一阶段:构建阶段 ---
FROM node:18-bullseye-slim AS builder
# 设置构建参数提前定义后续build、ENV都能用
ARG BLOGAI_HOST=192.168.10.104
# 设置构建环境变量
ENV NODE_ENV=development
ENV BLOGAI_HOST=${BLOGAI_HOST}
# 设置工作目录
WORKDIR /app
# 安装根目录依赖
RUN apt update && apt install -y vim
# 安装 pnpm
RUN npm install -g pnpm
# 复制整项目的代码,排除了.dockerignore中的文件
COPY . ./
# 安装根目录依赖
RUN pnpm install --no-frozen-lockfile --prefer-offline
# 编译子项目 apps/blogai
RUN pnpm turbo run build --filter=apps/blogai
# 切换到子项目目录,单独安装生产依赖
WORKDIR /app/apps/blogai/
RUN pnpm install --prod --no-frozen-lockfile --prefer-offline
# --- 第二阶段:生产环境运行阶段 ---
FROM node:18-slim AS runner
# 重新定义build参数且默认值一致
ARG BLOGAI_HOST=192.168.10.104
# 设置运行环境变量
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
# 拷贝.env
COPY --from=builder /app/apps/blogai/.env.example ./.env
# 替换.env文件里的{{BLOGAI_HOST}}为实际地址
RUN sed -i "s|{{BLOGAI_HOST}}|${BLOGAI_HOST}|g" .env
# 清理无用缓存,减小体积
RUN rm -rf /root/.npm /root/.pnpm-store /tmp/*
# 暴露端口
EXPOSE 3008
# 容器启动命令
CMD ["pm2-runtime", "npm", "--", "start"]