diff --git a/CODEX_NOTES.md b/CODEX_NOTES.md index 3ba75f8..0c939ea 100644 --- a/CODEX_NOTES.md +++ b/CODEX_NOTES.md @@ -7,32 +7,55 @@ Statische Landingpage soll automatisch bei jedem Push auf `main` nach `go.vanity - `index.html` - `assets/css/style.css` - `assets/img/*` -- `.github/workflows/deploy.yml` +- `robots.txt` +- `.forgejo/workflows/deploy.yml` + +## Wo die Seite liegt +Seit Juli 2026 auf dem **Hostinger-VPS** (72.62.158.29), nicht mehr auf dem +Hetzner-Server. Ausgeliefert von einem nginx-Container aus dem Shlink-Stack: + +- Zielverzeichnis auf dem Host: `/docker/shlink/landingpage` +- Container `shlink-landingpage` mountet es read-only +- Davor Traefik mit Let's-Encrypt-Zertifikat + +`go.vanityontour.de` teilt sich die Domain mit Shlink. Traefik entscheidet nach +Pfad, die Landingpage hat die höhere Priorität: + +| Pfad | Ziel | +| --- | --- | +| `/`, `/assets/*`, `/robots.txt`, `/favicon.*`, `/sitemap.xml`, `/CNAME` | diese Seite | +| alles andere | Shlink-Kurzlink | + +**Wichtig:** Eine neue Datei im Repo-Root wird nur ausgeliefert, wenn ihr Pfad +in der Traefik-Regel steht. Sonst landet der Aufruf bei Shlink und wird auf `/` +umgeleitet. Die Regel steht in der `docker-compose.yml` des Shlink-Projekts. ## Deployment-Mechanik -- GitHub Actions Workflow: - - Checkout Repo - - SSH-Key in Runner schreiben - - `rsync` der Dateien auf Server - - Optional: Berechtigungen setzen +Forgejo Actions. Der Runner `vps-runner` läuft als Container `act_runner` auf +demselben VPS: -## GitHub Secrets (Actions) -- `SSH_HOST`: Hostname oder IP -- `SSH_USER`: SSH-User -- `SSH_PORT`: SSH-Port (default 22) -- `SSH_PRIVATE_KEY`: Private Key (PEM/OPENSSH) -- `DEPLOY_PATH`: Zielpfad auf dem Server (CloudPanel: `/home/cloudpanel/htdocs/go.vanityontour.de/`) +1. Job startet in einem `node:20-alpine`-Container +2. `/docker/shlink/landingpage` wird als `/target` in den Job gemountet +3. `rsync -a --delete` vom Checkout nach `/target` +4. Smoke-Test gegen die Live-URL -## Server Anforderungen -- SSH aktiv -- `rsync` installiert -- Zielordner existiert und ist beschreibbar -- Webserver (Nginx/Apache) zeigt auf `DEPLOY_PATH` +Kein SSH, kein Deploy-Key, keine Secrets nötig – der Runner steht bereits auf +dem Zielhost. Das Mounten ist in `/docker/act_runner/config.yaml` unter +`container.valid_volumes` freigegeben. + +## Kein GitHub Actions mehr +Der frühere Workflow `.github/workflows/deploy.yml` deployte per rsync auf den +Hetzner-Server und ist entfernt. `.github/workflows/` darf hier nicht wieder +angelegt werden – Forgejo Actions wertet dieses Verzeichnis ebenfalls aus und +würde den Job doppelt starten. ## DNS -- `go.vanityontour.de` → A/AAAA auf Server-IP -- SSL via Let's Encrypt (CloudPanel kann das) +- `go.vanityontour.de` → A-Record auf `72.62.158.29` +- **Kein AAAA-Record.** Ein alter AAAA auf den Hetzner-Server hat die + Let's-Encrypt-Validierung blockiert, weil IPv6 Vorrang hat. +- Zertifikat kommt von Traefik, nicht mehr von CloudPanel ## Hinweise - OpenGraph Bild: ersetze `assets/img/og.jpg` (1200x630) - Links in `index.html` aktualisieren (App Store, GitHub Repo URLs, Social URLs) +- Runner-Logs: `ssh hostingervps 'docker logs act_runner'` diff --git a/README.md b/README.md index c30ee34..770fe2b 100644 --- a/README.md +++ b/README.md @@ -18,47 +18,34 @@ In `index.html` sind ein paar **Platzhalter-Links** (z.B. GitHub Repo / App-Stor **🚀 Automatisches Deployment aktiv!** Bei jedem Push auf `main` wird die Seite automatisch auf https://go.vanityontour.de deployed. -# Deployment via GitHub Actions (SSH + rsync) +# Deployment via Forgejo Actions -Die Workflow-Datei liegt hier: -`.github/workflows/deploy.yml` +Die Workflow-Datei liegt hier: `.forgejo/workflows/deploy.yml` -## Voraussetzungen auf dem Server -- SSH-Zugriff -- Zielverzeichnis existiert (z.B. CloudPanel): - - `/home/cloudpanel/htdocs/go.vanityontour.de/` (häufig) - - oder dein eigener Pfad +Der Runner (`act_runner` auf dem Hostinger-VPS) steht bereits auf dem Zielhost. +Der Job mountet das Zielverzeichnis direkt in seinen Container und schreibt per +`rsync` hinein – **kein SSH, kein Deploy-Key, keine Secrets**. -- `rsync` installiert: - - Debian/Ubuntu: `sudo apt-get update && sudo apt-get install -y rsync` - -## GitHub Secrets anlegen (Repo → Settings → Secrets and variables → Actions) -- `SSH_HOST` (z.B. `your-server.example`) -- `SSH_USER` (z.B. `root` oder `cloudpanel`) -- `SSH_PORT` (z.B. `22`) -- `SSH_PRIVATE_KEY` (private key für den Deploy-User) -- `DEPLOY_PATH` (z.B. `/home/cloudpanel/htdocs/go.vanityontour.de/`) - -## DNS (go.vanityontour.de) -Setze einen **A-Record** (oder AAAA) auf die Server-IP. -Alternativ ein CNAME auf eine passende Ziel-Subdomain, wenn du das so betreibst. - -## Nginx (Beispiel) -Wenn du Nginx selbst konfigurierst: - -```nginx -server { - server_name go.vanityontour.de; - root /home/cloudpanel/htdocs/go.vanityontour.de; - index index.html; - - location / { - try_files $uri $uri/ =404; - } -} +``` +Push auf main -> git.giertz.biz -> act_runner -> /docker/shlink/landingpage + -> Smoke-Test gegen die Live-URL ``` -Danach: -```bash -sudo nginx -t && sudo systemctl reload nginx -``` +Ausgeliefert wird das Verzeichnis vom Container `shlink-landingpage` +(nginx, read-only gemountet) hinter Traefik. + +Details, inklusive der Pfad-Aufteilung zwischen Landingpage und Shlink: +siehe `CODEX_NOTES.md`. + +## Wichtig + +- **`.github/workflows/` nicht wieder anlegen.** Forgejo Actions wertet dieses + Verzeichnis ebenfalls aus – der Job würde doppelt laufen. +- **Neue Dateien im Root** werden nur ausgeliefert, wenn ihr Pfad in der + Traefik-Regel steht (`/`, `/assets/*`, `/robots.txt`, `/favicon.*`, + `/sitemap.xml`, `/CNAME`). Andernfalls greift Shlink und leitet auf `/` um. + +## DNS + +`go.vanityontour.de` → A-Record auf `72.62.158.29`, kein AAAA. +Das Zertifikat stellt Traefik per Let's Encrypt aus.