nezhahq-nezha
SUCCESS
38m 27s
History Source
SummaryIterations2Transcript43Dockerfile
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"]