22333Misaka commited on
Commit
91c3ea2
·
verified ·
1 Parent(s): aa342df

Update Dockerfile

Browse files
Files changed (1) hide show
  1. Dockerfile +9 -86
Dockerfile CHANGED
@@ -1,92 +1,15 @@
1
- # ==========================================
2
- # 阶段一:构建前端 (Builder)
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
- # ⚠️ 修改这个数字来强制更新代码 (例如改成 2)
15
- ARG CACHEBUST=1
16
-
17
- # 2. 拉取代码
18
- RUN git clone --depth 1 --branch ${BRANCH} ${REPO_URL} .
19
-
20
- # 3. 构建前端
21
- WORKDIR /build/web
22
- RUN npm install
23
- # 设置 API 地址为相对路径,解决跨域问题
24
- ENV VITE_API_URL=/api
25
- RUN npm run build
26
-
27
- # ==========================================
28
- # 阶段二:构建后端 & 运行环境 (Runner)
29
- # ==========================================
30
- FROM python:3.11-slim
31
-
32
- # 1. [Root] 安装编译工具 (修复 linker cc not found)
33
- RUN apt-get update && apt-get install -y \
34
- build-essential \
35
- git \
36
- && rm -rf /var/lib/apt/lists/*
37
-
38
- # 2. [Root] 安装 uv
39
- COPY --from=ghcr.io/astral-sh/uv:latest /uv /bin/uv
40
-
41
- # 3. [Root] 准备用户和目录
42
  WORKDIR /app
43
- RUN useradd -m -u 1000 user
44
- # 关键:先把 /app 权限给 user,确保后续生成的 .venv 属于 user
45
- RUN chown -R user:user /app
46
-
47
- # ==========================================
48
- # ⬇️ 切换到普通用户
49
- # ==========================================
50
- USER user
51
-
52
- # 4. [User] 复制依赖定义
53
- COPY --from=builder --chown=user:user /build/pyproject.toml ./
54
-
55
- # 5. [User] 安装依赖
56
- ENV UV_COMPILE_BYTECODE=1
57
- ENV UV_LINK_MODE=copy
58
- # 不使用 frozen,允许根据 Linux 环境自动调整依赖
59
- RUN uv sync --no-dev
60
-
61
- # 🛠️ 补丁:手动安装 uvicorn (以防 pyproject.toml 里没有,或者为了调试)
62
- RUN uv pip install uvicorn
63
-
64
- # 6. [User] 复制后端代码
65
- COPY --from=builder --chown=user:user /build/beetle ./beetle
66
-
67
- # 7. [User] 复制前端构建产物
68
- RUN mkdir -p ./web/dist
69
- COPY --from=builder --chown=user:user /build/web/dist ./web/dist
70
 
71
- # 8. [User] 准备数据目录
72
- RUN mkdir -p /app/data
73
 
74
- # ==========================================
75
- # 环境变量配置
76
- # ==========================================
77
- ENV PORT=7860
78
- ENV HOST=0.0.0.0
79
- # 确保 Python 能找到应用包
80
- ENV PYTHONPATH=/app
81
- # 数据库路径 (注意是 3 个斜杠,代表绝对路径)
82
- ENV DATABASE_URL=postgres://avnadmin:AVNS_f7HyUgRU8zJeCbreyuM@pg-2f871557-coolmarket-9079.b.aivencloud.com:14629/defaultdb?sslmode=require
83
- # 将虚拟环境加入 PATH,这样可以直接运行 python/uvicorn
84
- ENV PATH="/app/.venv/bin:$PATH"
85
 
86
- EXPOSE 7860
 
87
 
88
- # ==========================================
89
- # 启动命令 (使用 Uvicorn)
90
- # ==========================================
91
- # 使用 uvicorn 单进程启动,可以清晰地看到所有报错信息
92
- CMD ["uvicorn", "beetle.main:app", "--host", "0.0.0.0", "--port", "7860", "--log-level", "info"]
 
1
+ FROM python:3.9-slim
 
 
 
2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3
  WORKDIR /app
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4
 
5
+ # 安装依赖
6
+ RUN pip install flask flask-sqlalchemy psycopg2-binary requests
7
 
8
+ # 复制程序代码
9
+ COPY app.py .
 
 
 
 
 
 
 
 
 
10
 
11
+ # 暴露端口
12
+ EXPOSE 5000
13
 
14
+ # 启动命令
15
+ CMD ["python", "app.py"]