Spaces:
Running
Running
# --- 第一阶段:构建环境 --- | |
# 使用一个包含编译工具的镜像作为"构建器" | |
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"] | |