Dockerfile58 lines · 1809 chars FROM golang:1.25.6 as builder
# Install dependencies for build
RUN apt-get update && apt-get install -y --no-install-recommends \
build-essential sqlite3 libsqlite3-dev ca-certificates tzdata curl && rm -rf /var/lib/apt/lists/*
# Install swag for Swagger docs generation
RUN go install github.com/swaggo/swag/cmd/swag@latest
WORKDIR /src
COPY go.mod go.sum ./
RUN go mod download
# Prepare embeddable assets to satisfy embed patterns
RUN mkdir -p cmd/dashboard/admin-dist cmd/dashboard/user-dist
RUN echo "<html></html>" > cmd/dashboard/admin-dist/index.html
RUN echo "<html></html>" > cmd/dashboard/user-dist/index.html
COPY . .
# Generate swagger docs
RUN swag init --pd -d . -g ./cmd/dashboard/main.go -o ./cmd/dashboard/docs --requiredByDefault
# Build for target OS/ARCH
ARG TARGETOS=linux
ARG TARGETARCH=amd64
RUN mkdir -p dist/dashboard-${TARGETOS}-${TARGETARCH}
ENV CGO_ENABLED=1
RUN GOOS=${TARGETOS} GOARCH=${TARGETARCH} CGO_ENABLED=1 go build -trimpath -ldflags "-s -w" -o dist/dashboard-${TARGETOS}-${TARGETARCH} ./cmd/dashboard
FROM debian:bookworm-slim as runtime
# Runtime args
ARG TARGETOS=linux
ARG TARGETARCH=amd64
ARG TZ=Asia/Shanghai
ENV TZ=$TZ
RUN apt-get update && apt-get install -y --no-install-recommends \
ca-certificates tzdata sqlite3 libsqlite3-0 && rm -rf /var/lib/apt/lists/*
WORKDIR /dashboard
# Copy built binary and assets
COPY --from=builder /src/dist/dashboard-${TARGETOS}-${TARGETARCH} /dashboard/app
COPY --from=builder /src/cmd/dashboard/docs /dashboard/docs
COPY script/entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
# Copy timezone and certs from runtime image
COPY --from=builder /usr/share/zoneinfo /usr/share/zoneinfo
COPY --from=builder /etc/ssl/certs /etc/ssl/certs
VOLUME ["/dashboard/data"]
EXPOSE 8008
ENTRYPOINT ["/entrypoint.sh"]