Spaces:
Paused
Paused
| FROM node:18-alpine | |
| # 安装系统依赖(无头浏览器已禁用) | |
| RUN apk add --no-cache \ | |
| freetype \ | |
| freetype-dev \ | |
| harfbuzz \ | |
| ca-certificates \ | |
| ttf-freefont \ | |
| git \ | |
| python3 \ | |
| make \ | |
| g++ \ | |
| curl \ | |
| && rm -rf /var/cache/apk/* | |
| # 无头浏览器功能已禁用 | |
| # ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true \ | |
| # PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium-browser \ | |
| # PUPPETEER_CACHE_DIR=/tmp/.puppeteer_cache \ | |
| # PUPPETEER_ARGS="--no-sandbox --disable-setuid-sandbox --disable-dev-shm-usage" \ | |
| # PUPPETEER_DISABLE_HEADLESS_WARNING=true | |
| # 设置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 /data /data/images /data/metadata /data/users && \ | |
| chown -R nodejs:nodejs /data | |
| # 创建缓存目录并设置权限 | |
| 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 package*.json ./ | |
| # 复制后端package.json和配置文件 | |
| COPY backend/package*.json ./backend/ | |
| COPY backend/.eslintrc.js ./backend/ | |
| COPY backend/.prettierrc ./backend/ | |
| COPY backend/babel.config.js ./backend/ | |
| # 安装前端依赖并构建 | |
| WORKDIR /app/frontend | |
| USER nodejs | |
| # 优化npm配置以提高构建稳定性 | |
| RUN npm config set fetch-retry-mintimeout 20000 && \ | |
| npm config set fetch-retry-maxtimeout 120000 && \ | |
| npm config set fetch-timeout 300000 | |
| RUN npm install | |
| RUN npm run build | |
| # 切换回root安装依赖 | |
| USER root | |
| WORKDIR /app | |
| RUN npm install --omit=dev | |
| WORKDIR /app/backend | |
| RUN npm install --omit=dev | |
| # 验证系统依赖安装(chromium验证已移除) | |
| RUN echo "System dependencies installed successfully" | |
| # Playwright配置已禁用 | |
| # 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 node:node /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"] |