# syntax=docker/dockerfile:1 # Multi-stage build optimized for Dokploy / docker compose. FROM golang:1.22-alpine AS builder RUN apk add --no-cache git ca-certificates tzdata WORKDIR /src COPY go.mod go.sum* ./ RUN go mod download COPY . . RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 \ go build -trimpath -ldflags="-s -w" -o /out/server ./cmd/server \ && go build -trimpath -ldflags="-s -w" -o /out/cleanup ./cmd/cleanup FROM alpine:3.20 RUN apk add --no-cache ca-certificates tzdata wget \ && addgroup -S app && adduser -S -G app app WORKDIR /app COPY --from=builder /out/server /app/server COPY --from=builder /out/cleanup /app/cleanup COPY migrations /app/migrations COPY web /app/web ENV APP_PORT=30000 \ TZ=UTC USER app EXPOSE 30000 HEALTHCHECK --interval=30s --timeout=5s --start-period=20s --retries=3 \ CMD wget -qO- http://127.0.0.1:30000/health || exit 1 ENTRYPOINT ["/app/server"]