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.
Ein eigener Schlüssel fürs Deploy
Abschnitt betitelt „Ein eigener Schlüssel fürs Deploy“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:
ssh-keygen -t ed25519 -f ~/.ssh/plattform_deploy -N "" -C "deploy meine-plattform"ssh-copy-id -i ~/.ssh/plattform_deploy.pub benutzer@IP-der-VMssh -i ~/.ssh/plattform_deploy benutzer@IP-der-VM 'echo Login ok'rsync kennst du aus Linux Grundlagen, Modul 10. Für einen Deploy:
cd ~/meine-plattformnpm run buildrsync -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.
Was bei jedem Deploy passiert
Abschnitt betitelt „Was bei jedem Deploy passiert“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