# 第一阶段:构建前端 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"]