File size: 2,308 Bytes
ec1432d
a445ad6
ec1432d
609f5e9
ec1432d
 
609f5e9
 
 
a445ad6
ad5e827
ec1432d
 
a445ad6
ec1432d
a445ad6
ec1432d
a445ad6
 
 
 
 
 
 
b13b624
 
a445ad6
ec1432d
a445ad6
ec1432d
a445ad6
 
ec1432d
 
8e16c3a
ec1432d
a445ad6
 
8e16c3a
 
 
 
 
 
a445ad6
 
 
 
8e16c3a
 
 
 
 
a445ad6
ec1432d
 
 
 
 
 
b13b624
ec1432d
a445ad6
 
ec1432d
 
a445ad6
8e16c3a
 
 
 
00e1094
 
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
# Stage 1: 克隆代码并构建前端
FROM node:20-slim AS builder

RUN apt-get update && apt-get install -y --no-install-recommends git ca-certificates && \
    rm -rf /var/lib/apt/lists/*

# 解决 SSL 证书验证问题
ENV GIT_SSL_NO_VERIFY=1

WORKDIR /build
RUN git clone https://github.com/819557056/gemini-business2api.git .

# 构建前端
WORKDIR /build/frontend
RUN npm install --silent && npm run build

# Stage 2: 最终运行时镜像
FROM python:3.11-slim

# 设置环境变量
ENV PYTHONDONTWRITEBYTECODE=1 \
    PYTHONUNBUFFERED=1 \
    TZ=Asia/Shanghai \
    HOME=/home/user \
    PATH=/home/user/.local/bin:$PATH \
    CHROME_PATH=/usr/bin/chromium

# 创建 HF 强制要求的非 root 用户(uid=1000)
RUN useradd -m -u 1000 user

WORKDIR $HOME/app

# 从 builder 阶段复制整个项目(包含构建好的 static)
COPY --from=builder /build $HOME/app

# 安装系统依赖和 Python 依赖
RUN apt-get update && \
    apt-get install -y --no-install-recommends \
        gcc \
        curl \
        tzdata \
        chromium chromium-driver \
        dbus dbus-x11 \
        xvfb xauth \
        libglib2.0-0 libnss3 libnspr4 libatk1.0-0 libatk-bridge2.0-0 \
        libcups2 libdrm2 libxkbcommon0 libxcomposite1 libxdamage1 \
        libxfixes3 libxrandr2 libgbm1 libasound2 libpango-1.0-0 \
        libcairo2 fonts-liberation fonts-noto-cjk && \
    ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone && \
    pip install --no-cache-dir -r requirements.txt && \
    apt-get purge -y gcc && \
    apt-get autoremove -y && \
    rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

# 创建数据目录并设置权限
RUN mkdir -p ./data && \
    chown -R user:user $HOME/app && \
    chmod -R 755 $HOME/app && \
    chmod 777 ./data && \
    chmod +x entrypoint.sh

# 声明端口
EXPOSE 7860

# 切换到非 root 用户(HF Space 强制要求)
USER user

# 健康检查
HEALTHCHECK --interval=30s --timeout=10s --start-period=10s --retries=3 \
    CMD curl -f http://localhost:7860/admin/health || exit 1

# 启动服务:首次运行时执行数据库迁移(自动回答所有提示),之后跳过
CMD ["sh", "-c", "if [ ! -f ./data/.migrated ]; then yes yes | python scripts/migrate_to_database.py && touch ./data/.migrated; fi; ./entrypoint.sh"]