Deployment-Doku auf den neuen Stand gebracht
All checks were successful
Deploy go.vanityontour.de / deploy (push) Successful in 6s
All checks were successful
Deploy go.vanityontour.de / deploy (push) Successful in 6s
README und CODEX_NOTES beschrieben noch GitHub Actions, CloudPanel und den Hetzner-Server. Nichts davon trifft nach dem Umzug auf den VPS noch zu. Zwei Fallstricke sind jetzt dokumentiert: .github/workflows/ darf nicht wieder angelegt werden, weil Forgejo Actions es mitliest, und neue Dateien im Root werden nur ausgeliefert, wenn ihr Pfad in der Traefik-Regel steht. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
4376918e73
commit
94d3a2bae5
2 changed files with 68 additions and 58 deletions
|
|
@ -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'`
|
||||
|
|
|
|||
65
README.md
65
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.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue