mirror of
https://github.com/Gouryella/drip.git
synced 2026-02-23 21:00:44 +00:00
59 lines
1.5 KiB
Docker
59 lines
1.5 KiB
Docker
# =========================
|
|
# Builder stage (Alpine)
|
|
# =========================
|
|
FROM golang:1.25-alpine AS builder
|
|
|
|
RUN apk add --no-cache ca-certificates tzdata
|
|
|
|
# All project files under /app
|
|
WORKDIR /app
|
|
ADD . .
|
|
|
|
# Git tag/version passed from build args, e.g. v1.0.0
|
|
ARG VERSION=dev
|
|
|
|
# Buildx injects these automatically for multi-arch builds
|
|
ARG TARGETOS
|
|
ARG TARGETARCH
|
|
|
|
# Adjust this to your real main package directory
|
|
# e.g. /app/cmd/drip-server if different
|
|
WORKDIR /app/cmd/drip
|
|
|
|
# main.version should match the version variable in your Go code
|
|
RUN env CGO_ENABLED=0 GOOS=${TARGETOS:-linux} GOARCH=${TARGETARCH:-amd64} \
|
|
go build -v -trimpath \
|
|
-ldflags "-s -w -X main.version=${VERSION}" \
|
|
-o /app/bin/drip
|
|
|
|
# =========================
|
|
# Runtime stage (Alpine)
|
|
# =========================
|
|
FROM alpine:3.22
|
|
|
|
RUN apk add --no-cache ca-certificates tzdata curl && \
|
|
update-ca-certificates
|
|
|
|
# Everything lives under /app in runtime image
|
|
WORKDIR /app
|
|
|
|
# Optional but nice to have: certs + timezone data
|
|
COPY --from=builder /etc/ssl/certs /etc/ssl/certs
|
|
COPY --from=builder /usr/share/zoneinfo /usr/share/zoneinfo
|
|
|
|
# Copy the built binary into /app
|
|
COPY --from=builder /app/bin/drip /app/drip
|
|
|
|
# Non-root user
|
|
RUN addgroup -S drip && adduser -S -G drip drip && \
|
|
chown -R drip:drip /app
|
|
USER drip
|
|
|
|
EXPOSE 80 443 8080 20000-20100
|
|
|
|
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
|
|
CMD curl -fsS "http://localhost:${PORT:-8080}/health" >/dev/null || exit 1
|
|
|
|
ENTRYPOINT ["/app/drip"]
|
|
CMD ["server", "--port", "8080"]
|