# syntax=docker/dockerfile:1 # --------------------------------------------------------------------------- # Estágio 1: compila o binário estático (sem CGO) com o frontend embutido. # --------------------------------------------------------------------------- FROM golang:1.24-alpine AS build WORKDIR /src # Dependências primeiro, para aproveitar o cache de camadas. COPY go.mod go.sum ./ RUN go mod download COPY . . RUN CGO_ENABLED=0 go build -trimpath -ldflags="-s -w" -o /out/notas ./cmd/notas \ && mkdir -p /out/data \ && chown -R 65534:65534 /out/data # --------------------------------------------------------------------------- # Estágio 2: imagem final mínima (scratch), apenas o binário + diretório de dados. # --------------------------------------------------------------------------- FROM scratch COPY --from=build /out/notas /notas COPY --from=build --chown=65534:65534 /out/data /data USER 65534:65534 EXPOSE 8080 ENV NOTES_DATA_DIR=/data \ NOTES_ADDR=:8080 VOLUME /data ENTRYPOINT ["/notas"]