gl / Dockerfile
jxdn123's picture
Update Dockerfile
208a803 verified
raw
history blame
1.73 kB
# ---------- 0) 拉取源码 ----------
FROM alpine:3.20 AS src
RUN apk add --no-cache git
ARG REPO_URL=https://github.com/tbphp/gpt-load.git
# 如需可复现构建,可把 main 改为固定 tag 或 commit
ARG REPO_REF=main
WORKDIR /src
RUN git clone --depth=1 --branch "${REPO_REF}" "${REPO_URL}" .
# ---------- 1) 构建前端 ----------
FROM node:20-alpine3.20 AS web-builder
ARG VERSION=1.0.0
WORKDIR /build/web
# 利用缓存:先依赖清单后源码
COPY --from=src /src/web/package*.json ./
RUN npm ci
COPY --from=src /src/web ./
# Vite 只认编译期变量的 VITE_ 前缀
ENV VITE_VERSION=$VERSION
RUN npm run build
# ---------- 2) 构建后端(Go 1.23) ----------
FROM golang:1.23-alpine3.20 AS go-builder
ARG VERSION=1.0.0
ENV GO111MODULE=on \
CGO_ENABLED=0 \
GOOS=linux \
GOTOOLCHAIN=auto
WORKDIR /build
# 先缓存依赖
COPY --from=src /src/go.mod ./
COPY --from=src /src/go.sum ./
RUN go mod download
# 复制全部后端源码
COPY --from=src /src ./
# 注入前端产物
COPY --from=web-builder /build/web/dist ./web/dist
# 更小二进制 + 注入版本
RUN go build -trimpath -ldflags "-s -w -X gpt-load/internal/version.Version=${VERSION}" -o gpt-load
# ---------- 3) 运行阶段 ----------
FROM alpine:3.20
WORKDIR /app
# 不再安装 socat
RUN apk add --no-cache ca-certificates tzdata && update-ca-certificates
COPY --from=go-builder /build/gpt-load /app/gpt-load
COPY ./run.sh /app/run.sh
RUN chmod +x /app/run.sh
# 关键权限:root 组可写,适配 HF 的 gid=0 运行方式
RUN mkdir -p /app/data \
&& chgrp -R 0 /app \
&& chmod -R g+rwX /app
ENV DATABASE_DRIVER=sqlite
ENV DATABASE_DSN=/app/data/gpt-load.db
ENV PORT=7860
EXPOSE 7860
ENTRYPOINT ["/app/run.sh"]