Image in der CI bauen statt zur Laufzeit, Site ins Image backen
Some checks failed
Image bauen und in die Registry pushen / build (push) Has been cancelled

Bisher baute der Server das Image selbst und der Container holte sich
Inhalte per git pull ueber deploy.php. Das war seit jeher kaputt: git
verweigerte wegen "dubious ownership" die Arbeit, die &&-Kette brach ab,
hugo lief nie. Live war stets der Stand des letzten Containerstarts.

Statt das zu flicken faellt der Mechanismus jetzt weg. Das Dockerfile
ist zweistufig: Hugo baut die Seite im Builder, das Laufzeit-Image
enthaelt nur nginx und fertiges HTML. Kein PHP, kein git, kein Hugo mehr
zur Laufzeit - 49 MB statt eines Debian-Images mit vier Werkzeugketten.

Deployen heisst damit: neues Image ziehen, Container neu starten.

Entfernt: deploy.php, entrypoint.sh und .htaccess (Apache-Rest aus der
Kirby-Zeit, unter nginx wirkungslos). Der Ordner kirby/ heisst jetzt
docker/, weil dort nie Kirby lag.

docker-compose.yml zieht das Image aus der Registry. Das Volume-Mount
auf /var/www/html ist weg - es haette die ins Image gebackene Seite
verdeckt.

Lokal geprueft: Build laeuft durch, Container liefert alle Seiten und
Assets mit HTTP 200 aus, Intro-Text kommt aus der Markdown-Datei, alle
sieben Lampenbilder sind enthalten.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-31 00:01:17 +02:00
parent 266333069b
commit 30d15cd680
9 changed files with 103 additions and 202 deletions

33
docker/Dockerfile Normal file
View File

@@ -0,0 +1,33 @@
# Zweistufiger Build: Hugo erzeugt die Seite, nginx liefert nur noch aus.
# Das fertige HTML steckt im Image - zur Laufzeit wird nichts mehr gebaut
# oder aus git geholt.
FROM debian:bookworm-slim AS builder
ARG HUGO_VERSION=0.147.0
RUN apt-get update && apt-get install -y --no-install-recommends \
curl \
ca-certificates \
&& rm -rf /var/lib/apt/lists/*
RUN curl -fsSL "https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_extended_${HUGO_VERSION}_linux-amd64.tar.gz" \
| tar -xz -C /usr/local/bin hugo
WORKDIR /src
COPY . .
# themes/gokarna ist ein Submodule und muss im Build-Context liegen.
# In der CI sorgt actions/checkout mit submodules:recursive dafuer.
RUN test -f themes/gokarna/theme.toml \
|| { echo "FEHLER: themes/gokarna fehlt - Submodule nicht ausgecheckt"; exit 1; }
RUN hugo --minify --destination /public
FROM nginx:1.27-alpine
COPY docker/nginx.conf /etc/nginx/conf.d/default.conf
COPY --from=builder /public /usr/share/nginx/html
EXPOSE 80