- Backend Go: API REST, auth por token (Bearer + cookie HttpOnly), storage em disco com revisões content-addressed (estilo Git: hash, autor, data, diff, restauração) - Editor txt/md/html com preview, tags #tag, categorias, painel de histórico - Preferências: números de linha, marcador de coluna (padrão 80), quebra de linha, fonte/tamanho, 4 temas e colorização de sintaxe (overlay no textarea) - Frontend vanilla embutido via go:embed; Dockerfile multi-stage + docker-compose
34 lines
1.0 KiB
Docker
34 lines
1.0 KiB
Docker
# 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"]
|