|
|
|
|
|
FROM alpine:3.20 AS src |
|
|
RUN apk add --no-cache git |
|
|
ARG REPO_URL=https://github.com/tbphp/gpt-load.git |
|
|
|
|
|
ARG REPO_REF=main |
|
|
WORKDIR /src |
|
|
|
|
|
RUN git clone --branch "${REPO_REF}" "${REPO_URL}" . \ |
|
|
&& git fetch --tags --force || true \ |
|
|
# 取最新语义化 tag(如 v1.3.1),没有 tag 就用短 commit |
|
|
&& LATEST_TAG="$(git tag -l --sort=-v:refname | head -n1)" \ |
|
|
&& if [ -n "$LATEST_TAG" ]; then VERSION="${LATEST_TAG#v}"; else VERSION="$(git rev-parse --short HEAD)"; fi \ |
|
|
&& printf "%s" "$VERSION" > /version.txt |
|
|
|
|
|
|
|
|
FROM node:20-alpine3.20 AS web-builder |
|
|
WORKDIR /build/web |
|
|
|
|
|
|
|
|
COPY --from=src /src/web/package*.json ./ |
|
|
RUN npm ci |
|
|
COPY --from=src /src/web ./ |
|
|
|
|
|
|
|
|
COPY --from=src /version.txt ./VERSION |
|
|
|
|
|
|
|
|
RUN VITE_VERSION="$(cat VERSION)" npm run build |
|
|
|
|
|
|
|
|
FROM golang:1.23-alpine3.20 AS go-builder |
|
|
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 |
|
|
|
|
|
COPY --from=src /version.txt ./VERSION |
|
|
|
|
|
|
|
|
RUN MODULE="$(grep ^module go.mod | awk '{print $2}')" \ |
|
|
&& VERSION="$(cat VERSION)" \ |
|
|
&& echo ">> building ${MODULE} version=${VERSION}" \ |
|
|
&& go build -trimpath \ |
|
|
-ldflags "-s -w -X ${MODULE}/internal/version.Version=${VERSION}" \ |
|
|
-o gpt-load . |
|
|
|
|
|
|
|
|
FROM alpine:3.20 |
|
|
|
|
|
WORKDIR /app |
|
|
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 |
|
|
|
|
|
|
|
|
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"] |