FROM oven/bun:1-alpine AS web WORKDIR /src/web COPY web/package.json web/bun.lock ./ RUN bun install --frozen-lockfile COPY web/ ./ RUN bun run build-only FROM golang:1.27.1-alpine AS server ARG VERSION=dev ENV CGO_ENABLED=0 WORKDIR /src COPY go.mod go.sum ./ RUN go mod download COPY . . COPY --from=web /src/internal/infrastructure/assets/dist ./internal/infrastructure/assets/dist RUN go build -trimpath -ldflags "-s -w -X main.version=${VERSION}" -o /out/renewcms ./cmd/server FROM alpine:3.22 RUN addgroup -S -g 10001 renewcms \ && adduser -S -u 10001 -G renewcms -H -s /sbin/nologin renewcms \ && mkdir /data \ && chown renewcms:renewcms /data COPY --from=server /out/renewcms /usr/local/bin/renewcms ENV RENEWCMS_CONTAINER=true USER renewcms WORKDIR /data VOLUME /data EXPOSE 8080 HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 CMD ["wget", "-qO-", "http://127.0.0.1:8080/healthz"] ENTRYPOINT ["/usr/local/bin/renewcms"]