File size: 2,512 Bytes
ba0de8b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
75
76
77
78
79
80
81
82
83
84
85
86
87
FROM alpine:3.21 AS fetcher

RUN apk add --no-cache git

WORKDIR /src
RUN git clone --depth=1 https://github.com/Wei-Shaw/sub2api.git .

FROM node:24-alpine AS frontend-builder

WORKDIR /app/frontend
RUN corepack enable && corepack prepare pnpm@latest --activate
COPY --from=fetcher /src/frontend/package.json /src/frontend/pnpm-lock.yaml ./
RUN pnpm install --frozen-lockfile
COPY --from=fetcher /src/frontend/ ./
RUN pnpm run build

FROM golang:1.26.2-alpine AS backend-builder

ARG VERSION=
ARG COMMIT=huggingface
ARG DATE
ARG GOPROXY=https://proxy.golang.org,direct
ARG GOSUMDB=sum.golang.org

ENV GOPROXY=${GOPROXY}
ENV GOSUMDB=${GOSUMDB}

RUN apk add --no-cache git ca-certificates tzdata

WORKDIR /app/backend
COPY --from=fetcher /src/backend/go.mod /src/backend/go.sum ./
RUN go mod download
COPY --from=fetcher /src/backend/ ./
COPY --from=frontend-builder /app/backend/internal/web/dist ./internal/web/dist

RUN VERSION_VALUE="${VERSION}" && \
    if [ -z "${VERSION_VALUE}" ]; then VERSION_VALUE="$(tr -d '\r\n' < ./cmd/server/VERSION)"; fi && \
    DATE_VALUE="${DATE:-$(date -u +%Y-%m-%dT%H:%M:%SZ)}" && \
    CGO_ENABLED=0 GOOS=linux go build \
    -tags embed \
    -ldflags="-s -w -X main.Version=${VERSION_VALUE} -X main.Commit=${COMMIT} -X main.Date=${DATE_VALUE} -X main.BuildType=release" \
    -trimpath \
    -o /out/server \
    ./cmd/server

FROM postgres:18-alpine AS pg-client

FROM alpine:3.21

RUN apk add --no-cache \
    ca-certificates \
    tzdata \
    su-exec \
    libpq \
    zstd-libs \
    lz4-libs \
    krb5-libs \
    libldap \
    libedit \
    && rm -rf /var/cache/apk/*

COPY --from=pg-client /usr/local/bin/pg_dump /usr/local/bin/pg_dump
COPY --from=pg-client /usr/local/bin/psql /usr/local/bin/psql
COPY --from=pg-client /usr/local/lib/libpq.so.5* /usr/local/lib/

RUN addgroup -g 1000 app && \
    adduser -u 1000 -G app -s /bin/sh -D app

WORKDIR /app

COPY --from=backend-builder --chown=app:app /out/server /app/server
COPY --from=backend-builder --chown=app:app /app/backend/resources /app/resources
COPY --chown=app:app docker-entrypoint.sh /app/docker-entrypoint.sh

RUN mkdir -p /app/data && chown app:app /app/data && chmod +x /app/docker-entrypoint.sh

EXPOSE 8080

HEALTHCHECK --interval=30s --timeout=10s --start-period=10s --retries=3 \
    CMD wget -q -T 5 -O /dev/null http://localhost:${SERVER_PORT:-8080}/health || exit 1

ENV SERVER_HOST=0.0.0.0
ENV SERVER_PORT=8080
ENV AUTO_SETUP=true

ENTRYPOINT ["/app/docker-entrypoint.sh"]
CMD ["/app/server"]