youbiaokachi commited on
Commit
93922c9
·
verified ·
1 Parent(s): 0d68127

Update Dockerfile

Browse files
Files changed (1) hide show
  1. Dockerfile +29 -10
Dockerfile CHANGED
@@ -1,16 +1,35 @@
1
- # 使用官方的 uv 镜像
2
- FROM ghcr.io/astral-sh/uv:python3.12-bookworm-slim
 
3
  WORKDIR /app
4
- # 你的应用需要的其他环境变量
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5
  ENV WARP_LOG_LEVEL=info
6
  ENV WARP_ACCESS_LOG=true
7
  ENV OPENAI_LOG_LEVEL=info
8
  ENV OPENAI_ACCESS_LOG=true
9
- # 复制所有文件,包括新的 entrypoint.sh
 
 
 
10
  COPY . .
11
- # 给予 entrypoint.sh 执行权限
12
- RUN chmod +x /app/entrypoint.sh
13
- # 设置入口点为我们的脚本
14
- ENTRYPOINT ["/app/entrypoint.sh"]
15
- # 设置默认命令,这个命令会被传递给 entrypoint.sh
16
- CMD ["uv", "run", "./start.py"]
 
1
+ # ---- Base Stage ----
2
+ # 关键:使用与你项目要求匹配的 Python 3.13 版本
3
+ FROM ghcr.io/astral-sh/uv:python3.13-bookworm-slim AS base
4
  WORKDIR /app
5
+ # ---- Builder Stage ----
6
+ # 在这个独立的阶段,我们只负责构建包含所有依赖的虚拟环境
7
+ FROM base AS builder
8
+ # 优化 Docker 缓存:只复制 pyproject.toml 文件
9
+ # 这样,只有当你的依赖发生变化时,这一层及之后的层才会重新构建
10
+ COPY pyproject.toml .
11
+ # 关键步骤:
12
+ # 1. 创建虚拟环境 .venv
13
+ # 2. 激活环境
14
+ # 3. 使用 `uv pip install .` 直接从 pyproject.toml 安装所有依赖
15
+ # uv 会自动读取文件中的依赖项和你的镜像源配置
16
+ RUN uv venv && \
17
+ . .venv/bin/activate && \
18
+ uv pip install . --no-cache-dir
19
+ # ---- Final Stage ----
20
+ # 这是最终运行的镜像,它只包含运行应用所需的最少文件
21
+ FROM base AS final
22
+ # 设置你的应用需要的环境变量
23
  ENV WARP_LOG_LEVEL=info
24
  ENV WARP_ACCESS_LOG=true
25
  ENV OPENAI_LOG_LEVEL=info
26
  ENV OPENAI_ACCESS_LOG=true
27
+ # builder 阶段,复制已经构建好的、包含所有依赖的虚拟环境
28
+ COPY --from=builder /app/.venv ./.venv
29
+ # 复制你的所有应用代码(.py 文件等)
30
+ # 这一步放在后面,这样你修改代码时,Docker 不会重新安装所有依赖
31
  COPY . .
32
+ # 最终的启动命令:
33
+ # 直接使用我们预先构建好的虚拟环境中的 Python 解释器来执行脚本
34
+ # 这个过程完全是只读的,不会再有任何权限问题
35
+ CMD ["./.venv/bin/python", "./start.py"]