From 39e6bea5b642a7fac37433d5e8a25e81894868e1 Mon Sep 17 00:00:00 2001 From: jbergner Date: Mon, 18 May 2026 13:16:52 +0200 Subject: [PATCH] Update --- Dockerfile | 82 ++++++++++++++++++++------------ docker-compose.yml | 27 +++++++++++ internal/web/templates/base.html | 52 ++++++-------------- 3 files changed, 93 insertions(+), 68 deletions(-) create mode 100644 docker-compose.yml diff --git a/Dockerfile b/Dockerfile index 770437e..7760ad1 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,65 +1,86 @@ ############################ -# 1) Go‑Build +# 1) Go-Build ############################ -FROM golang:1.26 AS build +FROM golang:1.26-alpine AS build WORKDIR /app -COPY go.mod go.sum ./ + +# 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 . . -RUN CGO_ENABLED=0 go build -o /blog . + +# 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) +# 2) Content-Clone Stage ############################ FROM alpine/git AS content -# Parameterisierbar beim docker build --build-arg … 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 -# ─── Repack: bring alles in eine saubere Struktur ──────────────── -# • Markdown‑Posts: /articles/*.md → /out/content -# • Bilder + CSS + JS: /static/**/* → /out/static -# • statische Seiten: /pages/* → /out/pages -# (Pfad‑Anpassung hier nach DEINEM Repository‑Layout) +# 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 mkdir -p /out/content /out/static /out/pages /out/templates/ -RUN find /src/articles -name '*.md' -exec cp {} /out/content/ \; -RUN cp -r /src/static/* /out/static/ -RUN cp -r /src/pages/* /out/pages/ -RUN cp -r /src/templates/* /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 +# 3) Runtime-Image ############################ -FROM debian:bookworm-slim +FROM alpine:3.21 -# (optional) MySQL‑Client für später -RUN apt-get update && apt-get install -y --no-install-recommends \ - ca-certificates git \ - && rm -rf /var/lib/apt/lists/* +RUN apk add --no-cache ca-certificates git tzdata + +RUN mkdir -p \ + /content \ + /static \ + /pages \ + /templates \ + /data \ + /git-temp -# ─── Binärdatei ───── COPY --from=build /blog /usr/local/bin/blog -# ─── Content + Assets ─── -RUN mkdir -p /content /static /pages /app /templates /ticks -COPY . /app COPY --from=content /out/content /content -COPY --from=content /out/static /static -COPY --from=content /out/pages /pages -COPY --from=content /out/templates /templates +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_TICKS_DIR=/ticks +ENV BLOG_DATA_DIR=/data +ENV BLOG_TRUSTED_HTML=true + ENV GIT_ENABLE=false ENV GIT_REPO=null ENV GIT_BRANCH=main @@ -67,4 +88,5 @@ ENV GIT_DIR=/git-temp ENV GIT_INTERVAL=10 EXPOSE 8080 + CMD ["blog"] diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..2da6bae --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,27 @@ +services: + b1tsblog: + build: + context: . + dockerfile: Dockerfile + args: + CONTENT_REPO: https://git.send.nrw/b1tsblog/blogcontent.git + CONTENT_REF: main + container_name: b1tsblog + restart: unless-stopped + ports: + - "8080:8080" + environment: + BLOG_CONTENT_DIR: /content + BLOG_STATIC_DIR: /static + BLOG_PAGES_DIR: /pages + BLOG_TEMPLATES_DIR: /templates + BLOG_DATA_DIR: /data + BLOG_TRUSTED_HTML: "true" + + GIT_ENABLE: "false" + GIT_REPO: "https://git.send.nrw/b1tsblog/blogcontent.git" + GIT_BRANCH: main + GIT_DIR: /git-temp + GIT_INTERVAL: "10" + volumes: + - ./data:/data diff --git a/internal/web/templates/base.html b/internal/web/templates/base.html index 0c97995..28b68ac 100644 --- a/internal/web/templates/base.html +++ b/internal/web/templates/base.html @@ -1,39 +1,15 @@ -{{ define "layout" }} - +{{ define "layout" }} - - - - {{ if .Description }} - - {{ end }} - {{ block "title" . }}B1tsblog{{ end }} - - - - -
-

B1tsblog

- -
- -
- {{ template "body" . }} -
- - - - -{{ end }} \ No newline at end of file + + + + {{ .Title }} + + + + +
B1TS Blog
+
{{ template "content" . }}
+ + +{{ end }}