Personal Website, vers. 1 (pushed far to late)
This commit is contained in:
commit
c8df66d3da
103 files changed
+8977
No files matched your search
@@ -0,0 +1,83 @@
|
||||
# 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. 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:
|
||||
|
||||
```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 # 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 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.
|
||||
Reference in new issue
Block a user