84 lines
2.7 KiB
Markdown
84 lines
2.7 KiB
Markdown
# 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`).
|
|
|
|
```sh
|
|
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.
|
|
|
|
## 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 und Homelab 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:
|
|
|
|
```yaml
|
|
title:
|
|
de: Videoschnitt
|
|
en: Video editing
|
|
```
|
|
|
|
### Neues Projekt
|
|
|
|
`content/projects/mein-projekt/meta.yml`:
|
|
|
|
```yaml
|
|
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.
|
|
|
|
```sh
|
|
git clone https://git.harlelux.de/Harlekin/Personal-Website.git /opt/stacks/personal-website
|
|
cd /opt/stacks/personal-website
|
|
cp .env.example .env # nur nötig, wenn etwas vom Standard abweicht
|
|
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 pull` reicht. `content/` ist in den Container gemountet und wird automatisch neu geladen.
|
|
- **Code geändert:** `git pull` und `docker 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.
|