File size: 1,673 Bytes
8d86370
 
 
 
a2589e1
8d86370
a2589e1
 
 
 
 
8d86370
 
f81139d
 
 
8d86370
 
f81139d
 
 
8d86370
f81139d
6c47014
a3d0a7f
8d86370
a3d0a7f
 
8d86370
 
 
6c47014
8d86370
 
 
 
 
 
6c47014
a2589e1
8d86370
 
25f71e2
a3d0a7f
 
 
25f71e2
8d86370
bad2282
6c47014
f81139d
bad2282
6c47014
bad2282
 
6c47014
bad2282
 
 
 
 
7ced239
bad2282
 
7b64a1b
bad2282
8d86370
bad2282
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# 第一阶段:构建前端
FROM node:18.19.0-alpine as frontend-builder

WORKDIR /app

# 复制并解压源码
COPY chat-api-main.zip .
RUN apk add --no-cache unzip && \
    unzip chat-api-main.zip && \
    rm chat-api-main.zip

# 构建 web-admin
WORKDIR /app/chat-api-main/web-admin
RUN npm install && \
    npm run build

# 构建 web-user
WORKDIR /app/chat-api-main/web-user
RUN npm install && \
    npm run build

# 第二阶段:构建后端
FROM golang:latest AS backend-builder

# 设置 Go 环境变量
ENV GO111MODULE=on
ENV GOPROXY=https://goproxy.cn,direct
ENV GOSUMDB=off

# 设置工作目录
WORKDIR /go/src/one-api

# 复制源码
COPY chat-api-main.zip .
RUN apt-get update && apt-get install -y unzip && \
    unzip chat-api-main.zip && \
    mv chat-api-main/* . && \
    rm -rf chat-api-main chat-api-main.zip

# 复制前端构建产物
COPY --from=frontend-builder /app/chat-api-main/web-admin/build ./web-admin/build
COPY --from=frontend-builder /app/chat-api-main/web-user/build ./web-user/build

# 更新 Go 模块
RUN go mod tidy && \
    go mod download

# 构建二进制文件
RUN go build -ldflags "-s -w -X 'one-api/common.Version=$(cat VERSION)' -extldflags '-static'" -o bin/chat-api

# 最终阶段:运行环境
FROM nginx:alpine

# 暴露服务端口
EXPOSE 7860

# 创建必要的目录
RUN mkdir -p /data/logs && \
    mkdir -p /logs && \
    chmod -R 777 /data && \
    chmod -R 777 /logs

# 配置 Nginx
COPY nginx.conf /etc/nginx/nginx.conf

# 复制编译后的二进制文件
COPY --from=backend-builder /go/src/one-api/bin/chat-api /chat-api

# 启动脚本
COPY start.sh /start.sh
RUN chmod +x /start.sh

CMD ["/start.sh"]