ca / Dockerfile
ckst's picture
Update Dockerfile
a3d0a7f verified
# 第一阶段:构建前端
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"]