slimcore-website/infra/marketing-vps
Pascal Oelmann d14f828aa5
Some checks failed
Deploy Marketing-Site / Build, Test und Deploy (push) Failing after 1m11s
infra/marketing-vps/Caddyfile: Sync mit Live-Stand
Die Repo-Version war eine 'Wunsch-Version' aus dem Brief mit Logging,
Cache-Headers und Status-Page-Auth-Placeholder. Tatsaechlich produktiv laufen
die schlanken Bloecke aus diesem Commit, plus ein temporaerer Basic-Auth-
Schutz fuer slimcore.io (User: demo / Pass: demo, bcrypt-Hash inline)
solange die Site noch im Aufbau ist.

Vor Live-Schaltung: basic_auth-Block + X-Robots-Tag-Zeile entfernen,
committen, 'docker exec marketing-caddy caddy reload' auf marketing-VPS.
2026-05-05 02:33:19 +02:00
..
Caddyfile infra/marketing-vps/Caddyfile: Sync mit Live-Stand 2026-05-05 02:33:19 +02:00
docker-compose.yml Initial Astro-Build, Deployment-Setup und Forgejo-Workflow 2026-05-05 01:59:35 +02:00
README.md Initial Astro-Build, Deployment-Setup und Forgejo-Workflow 2026-05-05 01:59:35 +02:00

Marketing-VPS Konfiguration

Diese Verzeichnisinhalte werden auf den Marketing-VPS (marketing.digiformer.eu) deployt und sind dort die Source of Truth für Caddy + Uptime Kuma.

Initial-Deploy auf den VPS

# Auf einem Rechner mit SSH-Zugang zum Marketing-VPS
rsync -avz --delete \
  -e "ssh -i ~/.ssh/marketing-admin" \
  infra/marketing-vps/ \
  deploy@marketing.digiformer.eu:/home/deploy/marketing/

# Auf dem Marketing-VPS
ssh deploy@marketing.digiformer.eu
cd /home/deploy/marketing
sudo mkdir -p /var/www /var/log/caddy
sudo chown -R deploy:deploy /var/www /var/log/caddy
docker compose up -d
docker compose logs -f caddy

Caddyfile-Update

Caddy validiert und lädt neu mit:

docker compose exec caddy caddy validate --config /etc/caddy/Caddyfile
docker compose exec caddy caddy reload --config /etc/caddy/Caddyfile

Status-Page-Passwort setzen

docker compose exec caddy caddy hash-password
# Eingabe-Aufforderung, gibt bcrypt-Hash aus
# In Caddyfile bei `status.digiformer.eu` einsetzen, dann reload

Neue Marken-Site hinzufügen

  1. Caddyfile-Block ergänzen (analog zu slimcore.io)
  2. caddy reload (siehe oben)
  3. DNS A-Record für <neue-domain>.<tld> auf VPS-IP zeigen
  4. Forgejo-Workflow im jeweiligen Marken-Repo deployt automatisch nach /var/www/<neue-domain>/

SSH-Berechtigungen für Forgejo-Runner

Der Runner braucht einen User mit rsync-only-Rechten auf /var/www/:

# Auf Marketing-VPS
sudo adduser --disabled-password --gecos "" rsync-deploy
sudo mkdir -p /home/rsync-deploy/.ssh

# rrsync ist Teil des rsync-Pakets
sudo apt install rsync
RRSYNC=$(find /usr -name 'rrsync' 2>/dev/null | head -1)

# authorized_keys mit Befehls-Restriktion: nur Schreiben in /var/www
echo "command=\"$RRSYNC -wo /var/www\",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty <forgejo-runner-public-key>" \
  | sudo tee /home/rsync-deploy/.ssh/authorized_keys

sudo chmod 700 /home/rsync-deploy/.ssh
sudo chmod 600 /home/rsync-deploy/.ssh/authorized_keys
sudo chown -R rsync-deploy:rsync-deploy /home/rsync-deploy/.ssh

# rsync-deploy braucht Schreibrechte
sudo chown rsync-deploy:rsync-deploy /var/www

Disaster-Recovery

  • Caddy-Container fällt ausdocker compose restart caddy
  • VPS unreachable → siehe docs/deployment.md (RTO ~45 min, statisches Build-Output reproduzierbar)
  • TLS-Cert-Problemcaddy-data-Volume enthält Let's-Encrypt-Account. Bei Volume-Verlust holt Caddy automatisch neue Certs (~30 s pro Domain)
  • Uptime-Kuma-Daten verloren → kritischer Schaden gering, Monitor-Konfiguration neu anlegen (~10 min)