lux.harlelux.de
Meine persönliche Website mit Portfolio. Node.js und Express, die Seiten werden mit Nunjucks auf dem Server gerendert. Inhalte liegen als YAML und Markdown in content/, ein CMS gibt es nicht.
Entwicklung
Node 24 (siehe .nvmrc).
npm install
npm run dev # http://localhost:3000, baut CSS/JS bei Änderungen neu
npm test
Im Dev-Modus sind Einträge mit draft: true sichtbar und bekommen ein Entwurf-Badge. Ohne SMTP-Konfiguration landen Mails aus dem Kontaktformular in der Konsole.
Inhalte
content/
site.yml Name, Pronomen, Links, Skills, "Gerade dran"
home.yml Texte und Kacheln der Startseite
journey.yml Stationen für den Werdegang
homelab.yml Hardware und Dienste
pages/ Werdegang, Homelab, Datenschutz als <name>.de.md / <name>.en.md
projects/<slug>/ ein Ordner pro Projekt
Texte, die in beiden Sprachen gleich sind, stehen einfach als String. Sonst:
title:
de: Videoschnitt
en: Video editing
Neues Projekt
content/projects/mein-projekt/meta.yml:
date: 2026-09 # Jahr, Monat oder Tag
tags: [homelab, docker]
featured: true # auf der Startseite zeigen
draft: true # online erst sichtbar, wenn das weg ist
cover: cover.jpg
video: https://youtu.be/... # oder eine Datei aus dem Ordner, z.B. clip.mp4
gallery:
- screenshot.png
- src: rack.jpg
caption:
de: Das Rack
en: The rack
links:
- label: Repo
url: https://git.harlelux.de/Harlekin/...
Dazu de.md und en.md mit title und summary im Frontmatter und dem Text darunter. Fehlt eine Sprache, wird die andere angezeigt. Bilder liegen im selben Ordner und werden relativ eingebunden (), die Seite erzeugt automatisch kleinere WebP-Versionen.
Deployment
Läuft als Docker-Stack in Dockge hinter Nginx Proxy Manager.
git clone https://git.harlelux.de/Harlekin/Personal-Website.git /opt/stacks/personal-website
cd /opt/stacks/personal-website
cp .env.example .env # SMTP usw. eintragen
docker compose up -d --build
Im Nginx Proxy Manager einen Proxy Host für lux.harlelux.de auf personal-website:3000 anlegen, mit Let's-Encrypt-Zertifikat und Force SSL. Der Container hängt im Netzwerk nginx_default, ein anderer Name lässt sich über PROXY_NETWORK in der .env setzen.
Updates:
- Nur Inhalte geändert:
git pullreicht.content/ist in den Container gemountet und wird automatisch neu geladen. - Code geändert:
git pullunddocker compose up -d --build.
Neu laden lässt sich der Inhalt auch von Hand mit docker kill -s HUP personal-website.
Lizenz
Der Code steht unter der MIT-Lizenz (siehe LICENSE). Texte und Bilder in content/ sind davon ausgenommen.