Spaces:
Paused
Paused
File size: 2,176 Bytes
a4d50c7 bb32229 83ef536 bb32229 83ef536 bb32229 c040788 bb32229 1888133 bb32229 744229a bb32229 83ef536 c040788 bb32229 18152e3 bb32229 18152e3 bb32229 a4d50c7 bb32229 18152e3 bb32229 5577980 18152e3 bb32229 5577980 0e8e893 |
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 |
# 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} .
COPY .env /app/
# 安装 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
# 从 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"]
|