Files
estel_docs/Dockerfile
2025-08-11 15:09:01 +08:00

47 lines
1.7 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.

############################################################
# 1) 依赖层 - 只要锁文件没变,永远复用
############################################################
FROM node:22-alpine AS deps
# 国内加速
RUN npm config set registry https://registry.npmmirror.com
WORKDIR /app
# 只拷依赖描述文件
COPY package.json pnpm-lock.yaml .npmrc ./
# 安装,结果是 /app/node_modules 和全局 pnpm cache
RUN corepack enable && pnpm install --frozen-lockfile
############################################################
# 2) 编译层 - 代码变了也不影响 deps 缓存
############################################################
# 使用 Playwright 官方镜像作为编译层,预装了浏览器与系统依赖
# 版本需与 package.json 中的 Playwright 版本大致匹配
FROM mcr.microsoft.com/playwright:v1.54.2-jammy AS builder
WORKDIR /app
# 先复用 deps 里的 node_modules注意不同基础镜像也可复用
COPY --from=deps /app/node_modules ./node_modules
# 再拷源码
COPY . .
# 运行补丁
RUN chmod +x patch-ui-pro.sh && ./patch-ui-pro.sh
# 注意把内存限制放在这里,避免本地开发时也被硬限制
ENV NODE_OPTIONS="--max-old-space-size=4096"
# Playwright 镜像已包含浏览器与依赖,无需再次下载;直接构建
RUN corepack enable && pnpm build
############################################################
# 3) 运行层 - 只有可运行文件,最小镜像
############################################################
FROM node:22-alpine AS production
WORKDIR /app
COPY --chown=node:node --from=builder /app/.output ./.output
EXPOSE 3000
ENV NODE_ENV=production HOST=0.0.0.0 PORT=3000
USER node
CMD ["node", ".output/server/index.mjs"]