StarrySkyWorld commited on
Commit
c276b69
·
verified ·
1 Parent(s): 8370ec0

Update Dockerfile

Browse files
Files changed (1) hide show
  1. Dockerfile +12 -52
Dockerfile CHANGED
@@ -1,66 +1,26 @@
1
- # --- 阶段 1: Git 克隆 ---
2
- FROM alpine/git:latest AS cloner
3
- WORKDIR /app
4
- RUN git clone https://github.com/QuantumNous/new-api.git .
5
 
6
- # --- 阶段 2: 前端构建 ---
7
- FROM oven/bun:latest AS frontend-builder
8
- WORKDIR /build
9
- # 从克隆阶段复制 web 目录
10
- COPY --from=cloner /app/web ./web
11
- COPY --from=cloner /app/VERSION ./VERSION
12
- WORKDIR /build/web
13
- # 2. 彻底禁用 Sourcemap,这能减少 50% 以上的内存占用
14
- ENV GENERATE_SOURCEMAP=false
15
- RUN bun install
16
- RUN DISABLE_ESLINT_PLUGIN='true' VITE_REACT_APP_VERSION=$(cat ../VERSION) bun run build --debug --sourcemap false
17
-
18
- # --- 阶段 3: 后端构建 ---
19
- FROM golang:alpine AS backend-builder
20
- ENV GO111MODULE=on CGO_ENABLED=0
21
- ARG TARGETOS
22
- ARG TARGETARCH
23
- ENV GOOS=${TARGETOS:-linux} GOARCH=${TARGETARCH:-amd64}
24
- ENV GOEXPERIMENT=greenteagc
25
-
26
- WORKDIR /build
27
- # 从克隆阶段复制后端代码
28
- COPY --from=cloner /app/ .
29
- # 从前端阶段复制打包好的静态文件
30
- COPY --from=frontend-builder /build/dist ./web/dist
31
- RUN go mod download
32
- RUN go build -ldflags "-s -w -X 'github.com/QuantumNous/new-api/common.Version=$(cat VERSION)'" -o new-api
33
-
34
- # --- 阶段 4: 最终运行环境 ---
35
- FROM debian:bookworm-slim
36
-
37
- # 安装必要依赖
38
- RUN apt-get update \
39
- && apt-get install -y --no-install-recommends ca-certificates tzdata wget \
40
- && rm -rf /var/lib/apt/lists/* \
41
- && update-ca-certificates
42
-
43
- # 切换到 root 进行目录准备
44
  USER root
45
 
46
- # 创建要的目录并赋予 UID 1000 权限 (适配 Hugging Face)
 
47
  RUN mkdir -p /data /logs && \
48
- chmod -R 777 /data /logs
 
49
 
50
- # 复制编译好的二进制文件
51
- COPY --from=backend-builder /build/new-api /new-api
52
  RUN chmod +x /new-api
53
 
54
- # 设置环境变量
55
  ENV LOG_DIR=/logs
56
  ENV TZ=Asia/Shanghai
57
- ENV DATA_DIR=/data
58
 
59
- # 暴露端口
60
- EXPOSE 3000
61
 
62
- # 切换到 root 用户 (UID 1000)
63
  USER 1000
64
- WORKDIR /data
65
 
 
66
  ENTRYPOINT ["/new-api"]
 
1
+ FROM calciumion/new-api:latest
 
 
 
2
 
3
+ # 切换到 root 预设环境
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4
  USER root
5
 
6
+ # 1. 一次性创建所有可能需要的目录并赋予 UID 1000 最高权限
7
+ # 包括 /data (数据库/缓存) 和 /logs (日志)
8
  RUN mkdir -p /data /logs && \
9
+ chmod -R 777 /data /logs && \
10
+ chown -R 1000:1000 /data /logs
11
 
12
+ # 2. 赋予二进制文件执行权限
 
13
  RUN chmod +x /new-api
14
 
15
+ # 3. 设置环境变量,强制程序将日志写入我们刚才创建并赋权的目录
16
  ENV LOG_DIR=/logs
17
  ENV TZ=Asia/Shanghai
 
18
 
19
+ # 4. 回到工作目录
20
+ WORKDIR /
21
 
22
+ # 5. 切换到 HF 默认用户 1000
23
  USER 1000
 
24
 
25
+ # 6. 启动命令
26
  ENTRYPOINT ["/new-api"]