Files
b1tsblog/Dockerfile
jbergner 39e6bea5b6
All checks were successful
release-tag / release-image (push) Successful in 2m46s
Update
2026-05-18 13:16:52 +02:00

93 lines
2.2 KiB
Docker

############################
# 1) Go-Build
############################
FROM golang:1.26-alpine AS build
WORKDIR /app
# git wird für private/selbst gehostete Module benötigt.
RUN apk add --no-cache git ca-certificates
COPY go.mod go.sum* ./
RUN go mod download
COPY . .
# modernc.org/sqlite läuft ohne CGO.
# Dadurch brauchen wir keine gcc/libsqlite3-dev Pakete und bekommen ein schlankes Binary.
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -trimpath -ldflags="-s -w" -o /blog .
############################
# 2) Content-Clone Stage
############################
FROM alpine/git AS content
ARG CONTENT_REPO=https://git.send.nrw/b1tsblog/blogcontent.git
ARG CONTENT_REF=main
RUN git clone --depth 1 --branch ${CONTENT_REF} ${CONTENT_REPO} /src
# Zielstruktur:
# /out/content Artikel: .md und .html
# /out/static CSS, Bilder, JS
# /out/pages statische Seiten: .md und .html
# /out/templates Templates
RUN mkdir -p /out/content /out/static /out/pages /out/templates
RUN if [ -d /src/articles ]; then \
find /src/articles \( -name '*.md' -o -name '*.html' \) -exec cp {} /out/content/ \; ; \
fi
RUN if [ -d /src/static ]; then \
cp -r /src/static/. /out/static/ ; \
fi
RUN if [ -d /src/pages ]; then \
find /src/pages \( -name '*.md' -o -name '*.html' \) -exec cp {} /out/pages/ \; ; \
fi
RUN if [ -d /src/templates ]; then \
cp -r /src/templates/. /out/templates/ ; \
fi
############################
# 3) Runtime-Image
############################
FROM alpine:3.21
RUN apk add --no-cache ca-certificates git tzdata
RUN mkdir -p \
/content \
/static \
/pages \
/templates \
/data \
/git-temp
COPY --from=build /blog /usr/local/bin/blog
COPY --from=content /out/content /content
COPY --from=content /out/static /static
COPY --from=content /out/pages /pages
COPY --from=content /out/templates /templates
ENV BLOG_CONTENT_DIR=/content
ENV BLOG_STATIC_DIR=/static
ENV BLOG_PAGES_DIR=/pages
ENV BLOG_TEMPLATES_DIR=/templates
ENV BLOG_DATA_DIR=/data
ENV BLOG_TRUSTED_HTML=true
ENV GIT_ENABLE=false
ENV GIT_REPO=null
ENV GIT_BRANCH=main
ENV GIT_DIR=/git-temp
ENV GIT_INTERVAL=10
EXPOSE 8080
CMD ["blog"]