Hugo Website mit Docker bauen

Für den Bau einer Hugo Website benötige ich diverse Tools, die aber nicht in den öffentlichen Docker Images verfügbar sind.
Deshalb hab ich mich dazu entschieden dieses selbst zu bauen.

Docker Image bauen

Von Zeit zu Zeit sollte die Alpine Version erneuert werden. Die aktuell angebotene Hugo Version kann auf der Package Liste eingesehen werden:
https://pkgs.alpinelinux.org/packages?name=hugo&branch=v3.19

FROM alpine:3.19
# openssh um git per SSH anzufragen
RUN apk add hugo go git openssh
# hugo als default Start
ENTRYPOINT ["hugo"]
# Website wird in /data erwartet
WORKDIR /data
# werden keine Parameter angegeben, Helppage anzeigen
CMD ["--help"]
docker build . -f Dockerfile -t my-hugo:latest

Website bauen

SSH basiertes GIT pull

Ist die Webseite in einem GIT-Repository hinterlegt und muss gepullt werden, kann das Image dies auch übernehmen.
Im GIT_DIR sollte aber bereits das Repository ausgecheckt sein, da hier nur ein Pull ausgeführt wird!

mkdir -p /srv/hugo
git clone git@git.server.com:my/hugo-website.git git
chown -R 33:33 /srv/hugo/git
# Pfad zum SSH Key
SSH_DIR="/srv/hugo/ssh/"
# Pfad zum lokalen GIT Repository
GIT_DIR="/srv/hugo/git/"
# Hugo public Pfad (Ausgabe der gerenderten Daten)
RENDER_DIR="/var/www/html/"
DOCKER_IMAGE="my-hugo:latest"

docker run -ti --name hugo -u 33:33 --rm \
    -v ${SSH_DIR}:/ssh/:ro \
    -v ${GIT_DIR}:/data \
    -v ${RENDER_DIR}:/data/public/ \
    --entrypoint /bin/sh \
    my-hugo:latest \
    -c 'git pull'
Website rendern

Die gerenderten Daten werden im RENDER_DIR abgelegt, dies sollte im Regelfall das Docroot der Webseite sein.

Das abschließende “–” sorgt für eine Überschreibung des “–help” Standardparameters und ist notwendig!

docker run -ti --name hugo -u 33:33 --rm \
    -v ${SSH_DIR}:/ssh/:ro \
    -v ${GIT_DIR}:/data \
    -v ${RENDER_DIR}:/data/public/ \
    my-hugo:latest \
    --