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
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:
33
docker/Dockerfile
Normal file
33
docker/Dockerfile
Normal 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
|
||||
18
docker/nginx.conf
Normal file
18
docker/nginx.conf
Normal file
@@ -0,0 +1,18 @@
|
||||
server {
|
||||
listen 80;
|
||||
server_name robbis.space;
|
||||
|
||||
root /usr/share/nginx/html;
|
||||
index index.html;
|
||||
|
||||
location / {
|
||||
try_files $uri $uri/ =404;
|
||||
}
|
||||
|
||||
error_page 404 /404.html;
|
||||
|
||||
location ~* \.(css|js|jpg|jpeg|png|gif|svg|webp|woff2?)$ {
|
||||
expires 30d;
|
||||
add_header Cache-Control "public, immutable";
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user