sparkle-server / Dockerfile
iridescent
🐞 fix: 在 Dockerfile 中安装 llama.cpp 运行时所需的共享库
37a74f8
# --- 第一阶段:构建环境 ---
# 使用一个包含编译工具的镜像作为"构建器"
FROM python:3.12-slim as builder
# 设置环境变量,避免 frontend 弹窗交互
ENV DEBIAN_FRONTEND=noninteractive
# 安装 llama-cpp-python 所需的编译工具和依赖
RUN apt-get update && apt-get install -y --no-install-recommends \
build-essential \
cmake \
pkg-config \
git \
&& rm -rf /var/lib/apt/lists/*
# 将 Python 包安装到一个独立目录,方便后续拷贝
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1
ENV PIP_NO_CACHE_DIR=off
ENV PIP_DISABLE_PIP_VERSION_CHECK=on
ENV PIP_DEFAULT_TIMEOUT=100
ENV POETRY_VIRTUALENVS_CREATE=false
ENV PATH="/app/bin:$PATH"
WORKDIR /app
COPY ./requirements.txt /app/requirements.txt
RUN pip install --no-cache-dir -r /app/requirements.txt
# --- 第二阶段:最终运行环境 ---
# 使用一个干净、轻量的镜像作为最终的运行环境
FROM python:3.12-slim as final
# 安装 llama.cpp 运行时所需的共享库
RUN apt-get update && apt-get install -y --no-install-recommends libgomp1 && rm -rf /var/lib/apt/lists/*
# 设置 Hugging Face 的缓存目录
ENV HF_HOME=/data
# 设置工作目录
WORKDIR /app
# 从构建器阶段拷贝已安装的Python依赖包
COPY --from=builder /usr/local/lib/python3.12/site-packages /usr/local/lib/python3.12/site-packages
COPY --from=builder /usr/local/bin /usr/local/bin
# 创建并授权数据目录,用于模型缓存
RUN mkdir /data && chmod 777 /data
# 复制应用代码
COPY ./app.py /app/app.py
# 暴露容器端口
EXPOSE 8080
# 启动应用的命令
# 使用 uvicorn 运行 app.py 文件中的 app 对象
# --host 0.0.0.0 使其可以从外部访问
# --port 8080 监听指定的端口
CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "8080"]