Zum Inhalt springen

rsync von Hand

Bevor die Pipeline deployt, machst du es einmal von Hand. So weisst du, dass Server, Schlüssel und Pfade stimmen, und kannst später Pipeline-Fehler von Server-Fehlern unterscheiden.

Die Pipeline braucht einen privaten SSH-Schlüssel, um sich am Server anzumelden. Nimm nicht deinen persönlichen Schlüssel. Erzeuge einen eigenen, ohne Passphrase, weil niemand in der Pipeline sie eintippen kann:

Terminal-Fenster
ssh-keygen -t ed25519 -f ~/.ssh/plattform_deploy -N "" -C "deploy meine-plattform"
ssh-copy-id -i ~/.ssh/plattform_deploy.pub benutzer@IP-der-VM
ssh -i ~/.ssh/plattform_deploy benutzer@IP-der-VM 'echo Login ok'

rsync kennst du aus Linux Grundlagen, Modul 10. Für einen Deploy:

Terminal-Fenster
cd ~/meine-plattform
npm run build
rsync -az --delete -e "ssh -i ~/.ssh/plattform_deploy" dist/ benutzer@IP-der-VM:/var/www/html/
Teil Bedeutung
-a Archiv: Rechte, Zeiten, Unterordner
-z Komprimiert übertragen
--delete Löscht auf dem Server, was in dist/ nicht mehr existiert: alte Seiten, alte Asset-Hashes
-e "ssh -i ..." SSH mit dem Deploy-Schlüssel
dist/ mit Schrägstrich Der Inhalt von dist/, nicht der Ordner selbst

Der Schrägstrich hinter dist/ ist entscheidend. Ohne ihn landet die Seite unter /var/www/html/dist/.

Öffne http://IP-der-VM/ im Browser: deine Plattform. Prüfe die 404-Seite und schau mit den Entwicklerwerkzeugen (Reiter Network) nach den Cache-Control-Headern.

flowchart LR
    A[npm run build] --> B[dist/]
    B -->|rsync -az --delete| C["/var/www/html/"]
    C --> D[Apache liefert aus]

Weil rsync nur Unterschiede überträgt, dauert ein zweiter Deploy Sekunden, auch wenn die Seite hunderte Dateien hat. Ändere einen Satz, baue, rsync, und zähle in der Ausgabe von rsync -v, wie wenige Dateien tatsächlich übertragen werden.

Lösung anzeigen

Bei einem zweiten Durchlauf nach einer Textänderung überträgt rsync typischerweise die geänderte HTML-Datei, die Pagefind-Indexdateien der Suche und sonst nichts. Werden jedes Mal alle Dateien übertragen, fehlt meist -a oder die Zeitstempel stimmen nicht, etwa weil dist/ vor dem Build gelöscht wurde.

Selbstcheck · 3 Fragen

1. Warum ein eigener Schlüssel für den Deploy?
2. Was bewirkt der Schrägstrich in dist/?
3. Was macht --delete?