File size: 2,769 Bytes
04ad860 661dd0c 81cfe52 66109f3 81cfe52 661dd0c 81cfe52 661dd0c 81cfe52 66109f3 81cfe52 191dda9 53c2d0d 191dda9 661dd0c 66109f3 04ad860 661dd0c 04ad860 35bfa3f 6c279a5 66109f3 04ad860 6c279a5 04ad860 66109f3 1730f8b 04ad860 66109f3 6c279a5 53c2d0d 661dd0c 53c2d0d cba5ca0 04ad860 66109f3 04ad860 66109f3 04ad860 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 |
FROM node:18-alpine
# 安装系统依赖和浏览器
RUN apk add --no-cache \
chromium \
nss \
freetype \
freetype-dev \
harfbuzz \
ca-certificates \
ttf-freefont \
wqy-zenhei \
bash \
curl \
# Playwright 运行时依赖
libgcc \
libstdc++ \
libx11 \
libxcomposite \
libxdamage \
libxext \
libxfixes \
libxrandr \
libxtst \
alsa-lib \
at-spi2-core \
cairo \
cups-libs \
dbus-libs \
expat \
gdk-pixbuf \
glib \
gtk+3.0 \
libdrm \
libxkbcommon \
mesa-gbm \
pango \
&& rm -rf /var/cache/apk/*
# 设置Puppeteer环境变量
ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true \
PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium-browser \
CHROME_BIN=/usr/bin/chromium-browser \
PUPPETEER_ARGS="--no-sandbox --disable-setuid-sandbox --disable-dev-shm-usage"
# 设置Playwright环境变量 - 强制使用系统chromium
ENV PLAYWRIGHT_BROWSERS_PATH=/usr/bin \
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=true \
PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH=/usr/bin/chromium-browser \
PLAYWRIGHT_SKIP_VALIDATE_HOST_REQUIREMENTS=true \
PLAYWRIGHT_CHROMIUM_USE_HEADLESS_NEW=true
# 创建非root用户
RUN addgroup -g 1001 -S nodejs
RUN adduser -S nodejs -u 1001
# 创建缓存目录并设置权限
RUN mkdir -p /home/node/.cache && chown -R nodejs:nodejs /home/node/.cache
# 设置工作目录
WORKDIR /app
# 复制共享模块
COPY shared/ ./shared/
RUN chown -R nodejs:nodejs ./shared
# 复制前端所有文件(包括配置文件)
COPY frontend/ ./frontend/
RUN chown -R nodejs:nodejs ./frontend
# 复制后端package.json
COPY backend/package*.json ./backend/
# 安装前端依赖并构建
WORKDIR /app/frontend
USER nodejs
RUN npm install
RUN npm run build
# 切换回root安装后端依赖
USER root
WORKDIR /app/backend
RUN npm install --omit=dev
# 验证系统chromium安装
RUN which chromium-browser && chromium-browser --version
# 创建Playwright配置以使用系统chromium
RUN mkdir -p /home/node/.cache/ms-playwright && \
echo '{"browsers":[{"name":"chromium","executablePath":"/usr/bin/chromium-browser"}]}' > /home/node/.cache/ms-playwright/browsers.json && \
chown -R nodejs:nodejs /home/node/.cache
# 复制后端代码
WORKDIR /app
COPY backend/ ./backend/
RUN chown -R nodejs:nodejs ./backend
# 设置工作目录为后端
WORKDIR /app/backend
# 切换到nodejs用户
USER nodejs
# 暴露端口
EXPOSE 7860
# 健康检查
HEALTHCHECK --interval=30s --timeout=10s --start-period=15s --retries=3 \
CMD curl -f http://localhost:7860/api/health || exit 1
# 启动应用
CMD ["npm", "start"] |