lightspeed commited on
Commit
01672ce
·
verified ·
1 Parent(s): 37eafbb

Update Dockerfile

Browse files
Files changed (1) hide show
  1. Dockerfile +59 -2
Dockerfile CHANGED
@@ -1,3 +1,60 @@
1
- FROM ghcr.io/cetaceang/gcli2api:latest
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2
  EXPOSE 7860
3
- CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "7860"]
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ###############################
2
+ # Base Stage
3
+ ###############################
4
+ FROM python:3.13-slim AS base
5
+
6
+ ENV PYTHONDONTWRITEBYTECODE=1 \
7
+ PYTHONUNBUFFERED=1 \
8
+ PIP_NO_CACHE_DIR=1 \
9
+ PIP_DISABLE_PIP_VERSION_CHECK=1 \
10
+ PIP_ROOT_USER_ACTION=ignore
11
+
12
+ WORKDIR /app
13
+
14
+ # System deps (可按需精简)
15
+ RUN apt-get update && apt-get install -y --no-install-recommends \
16
+ curl ca-certificates tini && \
17
+ rm -rf /var/lib/apt/lists/*
18
+
19
+ ###############################
20
+ # Dependencies Stage
21
+ ###############################
22
+ FROM base AS deps
23
+ COPY requirements.txt ./
24
+ RUN pip install --upgrade pip && pip install -r requirements.txt
25
+
26
+ ###############################
27
+ # Runtime Stage
28
+ ###############################
29
+ FROM base AS runtime
30
+
31
+ # 创建非root用户
32
+ RUN useradd -m -u 1000 appuser
33
+
34
+ # 复制已安装依赖
35
+ COPY --from=deps /usr/local/lib/python3.13 /usr/local/lib/python3.13
36
+ COPY --from=deps /usr/local/bin /usr/local/bin
37
+
38
+ # 复制项目代码
39
+ COPY . .
40
+
41
+ # 环境变量(HF Spaces 会自动传递 PORT)
42
+ ENV HOST=0.0.0.0 \
43
+ PORT=7860 \
44
+ LOG_LEVEL=INFO
45
+
46
+ # Expose for local run (HF 会忽略但仍可保留)
47
  EXPOSE 7860
48
+
49
+ # 切换用户
50
+ USER appuser
51
+
52
+ # 健康检查脚本 (使用 shell 单行 Python 方式,兼容性更好)
53
+ HEALTHCHECK --interval=30s --timeout=5s --start-period=40s --retries=3 \
54
+ CMD python -c "import os,urllib.request,sys;port=os.environ.get('PORT','7860');\nimport urllib.error;\nurl=f'http://127.0.0.1:{port}/keepalive';\nreq=urllib.request.Request(url,method='HEAD');\n\ntry:\n resp=urllib.request.urlopen(req,timeout=5);\n sys.exit(0 if resp.getcode()==200 else 1)\nexcept Exception: sys.exit(1)" || exit 1
55
+
56
+ # 入口使用 tini 处理信号,优雅退出
57
+ ENTRYPOINT ["/usr/bin/tini","--"]
58
+
59
+ # 默认启动命令:优先使用 app.py(支持 HF Spaces Gradio/Docker 双模式)
60
+ CMD ["python","app.py"]