Spaces:
Running
Running
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"] |