Grok2API / Dockerfile
StarrySkyWorld's picture
Create Dockerfile
26ea821 verified
raw
history blame
1.74 kB
# 构建阶段
FROM python:3.11-slim AS builder
WORKDIR /build
# 安装 git 和构建依赖
RUN apt-get update && apt-get install -y --no-install-recommends \
git \
gcc \
python3-dev \
&& rm -rf /var/lib/apt/lists/*
# 克隆仓库
RUN git clone https://github.com/chenyme/grok2api.git .
# 安装依赖到独立目录
# 额外安装 psycopg2-binary 以支持 PostgreSQL
RUN pip install --no-cache-dir --prefix=/install psycopg2-binary && \
pip install --no-cache-dir --only-binary=:all: --prefix=/install -r requirements.txt && \
find /install -type d -name "__pycache__" -exec rm -rf {} + 2>/dev/null || true
# 运行阶段
FROM python:3.11-slim
# 设置环境变量
ENV PYTHONDONTWRITEBYTECODE=1 \
PYTHONUNBUFFERED=1 \
HOME=/home/user \
PORT=7860
# 创建非 root 用户 (HF Spaces 必须)
RUN useradd -m -u 1000 user
WORKDIR /app
# 安装运行时必要的库 (libpq 是 pgsql 运行需要的)
RUN apt-get update && apt-get install -y --no-install-recommends \
libpq5 \
curl \
&& rm -rf /var/lib/apt/lists/*
# 从构建阶段复制已安装的包
COPY --from=builder /install /usr/local
# 从构建阶段复制源码
COPY --from=builder /build /app/
# 复制并处理 entrypoint
# 注意:我们将 entrypoint 放在 /app 下以便于权限管理
COPY docker-entrypoint.sh /app/docker-entrypoint.sh
RUN chmod +x /app/docker-entrypoint.sh
# 创建数据目录并授权给用户 1000
RUN mkdir -p /app/data /app/logs && \
chown -R user:user /app
# 切换到非 root 用户
USER user
EXPOSE 7860
# 使用 entrypoint
ENTRYPOINT ["/app/docker-entrypoint.sh"]
# 启动命令 (适配 HF 的端口)
CMD ["python", "-m", "uvicorn", "main:app", "--host", "0.0.0.0", "--port", "7860"]