Spaces:
Paused
Paused
| # Force rebuild | |
| # 阶段 1:克隆项目并构建前端 | |
| FROM node:lts-slim AS frontend-builder | |
| # 安装 git 和 ca-certificates | |
| RUN apt-get update && \ | |
| apt-get install -y --no-install-recommends git ca-certificates && \ | |
| apt-get clean && \ | |
| rm -rf /var/lib/apt/lists/* | |
| # 设置工作目录并克隆项目 | |
| WORKDIR /app | |
| #ARG REPO_URL=https://github.com/1653756334/PikPakInvitation.git | |
| ARG REPO_URL=https://github.com/hhsw2015/PikPakInvitation.git | |
| ARG BRANCH=main | |
| RUN git clone -b ${BRANCH} ${REPO_URL} . | |
| # 安装 pnpm 并构建前端 | |
| WORKDIR /app/frontend | |
| RUN npm install -g pnpm | |
| RUN pnpm install --frozen-lockfile | |
| RUN pnpm build | |
| # 阶段 2:构建最终镜像 | |
| FROM python:3.10-slim AS final | |
| # 设置环境变量 | |
| ENV PYTHONUNBUFFERED=1 \ | |
| PYTHONDONTWRITEBYTECODE=1 \ | |
| PORT=5000 \ | |
| VIRTUAL_ENV=/opt/venv \ | |
| PATH="/opt/venv/bin:$PATH" | |
| # 安装系统依赖并清理 | |
| RUN apt-get update && \ | |
| apt-get install -y --no-install-recommends gcc libc-dev && \ | |
| apt-get clean && \ | |
| rm -rf /var/lib/apt/lists/* | |
| # 创建虚拟环境并升级 pip | |
| RUN python3 -m venv $VIRTUAL_ENV && \ | |
| pip install --no-cache-dir --upgrade pip | |
| # 设置工作目录 | |
| WORKDIR /app | |
| # 从 frontend-builder 阶段复制 requirements.txt | |
| COPY --from=frontend-builder /app/requirements.txt . | |
| # 安装 Python 依赖 | |
| RUN pip install --no-cache-dir -r requirements.txt | |
| # 安装 huggingface_hub | |
| RUN pip install --no-cache-dir huggingface_hub | |
| # 创建应用目录 | |
| RUN mkdir account templates static | |
| # Create empty database file to ensure proper mounting | |
| RUN touch accounts.db | |
| # 从 frontend-builder 阶段复制后端源文件 | |
| COPY --from=frontend-builder /app/run.py . | |
| COPY --from=frontend-builder /app/utils/ ./utils/ | |
| # 从前端构建阶段复制构建产物 | |
| COPY --from=frontend-builder /app/frontend/dist/index.html ./templates/ | |
| COPY --from=frontend-builder /app/frontend/dist/* ./static/ | |
| COPY sync_data.sh / | |
| COPY entrypoint.sh /entrypoint.sh | |
| RUN chmod +x /sync_data.sh /entrypoint.sh | |
| # 创建非 root 用户 | |
| RUN useradd -m -u 1000 appuser && \ | |
| chown -R appuser:appuser /app | |
| # 切换到非 root 用户 | |
| USER appuser | |
| # 暴露端口 5000 | |
| EXPOSE 5000 | |
| # 使用 entrypoint.sh 作为启动命令 | |
| CMD ["/entrypoint.sh"] | |