File size: 1,814 Bytes
7dce215
 
 
 
 
 
 
 
 
 
 
 
4a07037
7dce215
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
37a74f8
 
 
7dce215
 
1d3379a
7dce215
1d3379a
7dce215
 
 
243af86
7dce215
 
1d3379a
 
7dce215
1d3379a
 
7dce215
1d3379a
 
 
 
7dce215
 
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
# --- 第一阶段:构建环境 ---
# 使用一个包含编译工具的镜像作为"构建器"
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"]