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"]