Ombyggnad 2026/2027 pågår - döda länkar förekommer. Mer information

Nya madr.se 2024 - Directus, Metalsmith och containers

2024-05-23 på Anders Ytterströms webblogg

Jag har i många år redaktörat madr.se ytterst spartanskt, med en källa bestående en katalog med en samling markdown-filer. Det är kraftfullt i sin enkelhet, men har även sina nackdelar.

Jag har därför lekt litet med tanken på att bygga ett CMS. Det är något som länge stått på min bucket list, då det är en nyttig programmeringsövning alls bör ta sig ann.

Jag snubblade dock över ett färdigt CMS som jag genast ville utvärdera. Directus är ett Headless CMS: det erbjuder ett redaktörsgränssnitt och ett REST API som agerar datakälla.

Metalsmith är en Static Site Generator jag använt sedan 2015. Min konfiguration ändrades senast 2019, och jag tog det som en utmaning att använda konfigurationen i befintligt skick.

Med några python-script är det enkelt att göra bidirektional data-migrering.

Ett par containers:

Hur madr.se sköts 2024

Först och främst hanterar jag mitt innehåll via Directus. Jag planerar evenemang, sköter Brutal Legend-projektet, skriver artiklar och kommenterar intressanta länkar jag läst.

Såhär ser en export ut.

md_dir=$"$(mktemp -d --tmpdir=.)"

podman pull registry.madr.se/madrse-exporter
podman run -it \
  -v $md_dir:/destination \
  -e HCMS_TOKEN=$HCMS_TOKEN \
  -e HCMS_URL=$HCMS_URL \
registry.madr.se/madrse-exporter

För att sedan bygga en ny version av sajten ser det ut såhär:

html_dir=$"$(mktemp -d --tmpdir=.)"

podman pull registry.madr.se/madrse-ssg
podman run -it \
  --rm \
  -v $html_dir:/app/pub \
  -v $md_dir/assets:/app/assets \
  -v $md_dir/src:/app/src \
registry.madr.se/madrse-ssg

För att paketera den renderade HTML-katalogen i en container används följande Containerfile:

FROM nginx:stable-alpine-slim AS output
ARG src
COPY ${src} /usr/share/nginx/html

Med kommandot:

podman build \
 -f Containerfile.www \
 --build-arg src=$html_dir

Därefter pushar jag upp den nya versionen:

podman tag $(podman images | awk '{print $3}' | awk 'NR==2') registry.madr.se/madrse-www
podman push registry.madr.se/madrse-www

Samt driftsätter den:

ssh aginor podman pull registry.madr.se/madrse-w3
ssh aginor podman run -d \
  --pod=madrse \
  --name=www \
  --replace \
registry.madr.se/madrse-w3:latest

Detta ligger såklart i ett deploy-script som jag kör när jag behöver. Det skulle givetvis vara möjligt att automatisera detta med Directus eller en mikrotjänst för att deploya ny version, men det får bli en övning till en annan dag.

Det jag ville förbättra var att få ett CMS att göra redaktörsarbete i, och det har jag fått.


Ovanstående inlägg publicerades 2024-05-23. Det går att prenumerera på denna webblogg. Härifrån är följande mål rekommenderade: