22333Misaka commited on
Commit
5177e98
·
verified ·
1 Parent(s): 39cd0db

Create Dockerfile

Browse files
Files changed (1) hide show
  1. Dockerfile +76 -0
Dockerfile ADDED
@@ -0,0 +1,76 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # ==========================================
2
+ # 第一阶段:拉取代码 & 构建前端
3
+ # ==========================================
4
+ FROM node:18-slim AS builder
5
+
6
+ # 安装 git
7
+ RUN apt-get update && apt-get install -y git
8
+
9
+ WORKDIR /build
10
+
11
+ # 1. 定义仓库地址 (修改这里!)
12
+ ARG REPO_URL=https://github.com/leiyi2000/beetle.git
13
+ ARG BRANCH=main
14
+
15
+ # 2. 缓存破坏机制 (重要!)
16
+ # 每次你想更新代码时,修改下面这个数字(例如改为 2, 3...),HF 就会强制重新 pull 代码
17
+ ARG CACHEBUST=1
18
+
19
+ # 3. 拉取代码
20
+ RUN echo "Pulling code from ${REPO_URL} at ${CACHEBUST}..." \
21
+ && git clone --depth 1 --branch ${BRANCH} ${REPO_URL} .
22
+
23
+ # 4. 构建前端
24
+ WORKDIR /build/web
25
+ RUN npm install
26
+ # 设置前端 API 地址为相对路径,避免跨域
27
+ ENV VITE_API_URL=/api
28
+ RUN npm run build
29
+
30
+ # ==========================================
31
+ # 第二阶段:构建后端运行环境
32
+ # ==========================================
33
+ FROM python:3.11-slim
34
+
35
+ # 安装 uv
36
+ COPY --from=ghcr.io/astral-sh/uv:latest /uv /bin/uv
37
+
38
+ WORKDIR /app
39
+
40
+ # 创建非 root 用户 (HF 安全要求)
41
+ RUN useradd -m -u 1000 user
42
+
43
+ # --- 复制依赖定义 ---
44
+ COPY --from=builder /build/pyproject.toml /build/uv.lock ./
45
+
46
+ # --- 安装 Python 依赖 ---
47
+ ENV UV_COMPILE_BYTECODE=1
48
+ ENV UV_LINK_MODE=copy
49
+ # 使用 --system 或直接安装在环境中
50
+ RUN uv sync --frozen --no-dev
51
+
52
+ # --- 复制后端代码 ---
53
+ COPY --from=builder /build/beetle ./beetle
54
+
55
+ # --- 复制前端构建产物 ---
56
+ # 确保目标目录存在
57
+ RUN mkdir -p ./web/dist
58
+ COPY --from=builder /build/web/dist ./web/dist
59
+
60
+ # --- 数据目录配置 ---
61
+ RUN mkdir -p /app/data && chown -R user:user /app/data
62
+
63
+ # 切换用户
64
+ USER user
65
+
66
+ # 设置环境变量
67
+ ENV PORT=7860
68
+ ENV PYTHONPATH=/app
69
+ # 如果不使用外部数据库,数据重启后会丢失
70
+ ENV DATABASE_URL=postgres://avnadmin:AVNS_f7HyUgRU8zJeCbreyuM@pg-2f871557-coolmarket-9079.b.aivencloud.com:14629/defaultdb?sslmode=require
71
+
72
+ # 暴露端口
73
+ EXPOSE 7860
74
+
75
+ # 启动命令
76
+ CMD ["uv", "run", "granian", "--interface", "asgi", "beetle.main:app", "--host", "0.0.0.0", "--port", "7860"]