Deployment ohne Umweg
Bisher lief das Deployment über GitHub. Ein Script auf dem Server hat regelmäßig geprüft, ob es neue Commits gibt, und bei Bedarf gebaut und neu gestartet. Das hat funktioniert, aber es war ein Umweg: lokale Änderung, push zu GitHub, Server holt sich das wieder zurück.
GitHub habe ich inzwischen nicht mehr am Laufen.
Die Alternative ist einfacher. Auf dem Server liegt jetzt ein bare git repository. Lokal ist es als Remote eingetragen. Ein git push origin main reicht aus — ein post-receive Hook übernimmt den Rest: Dateien auschecken, pnpm install, pnpm build, Service neu starten.
git init --bare /var/www/example.com.git
# /var/www/example.com.git/hooks/post-receive
git --work-tree=/var/www/example.com --git-dir=/var/www/example.com.git checkout -f main
git --work-tree=/var/www/example.com --git-dir=/var/www/example.com.git clean -fd
cd /var/www/example.com
pnpm install
pnpm run build
sudo systemctl restart website
Kein GitHub, kein Webhook, kein Cron. Der Push ist das Deployment.
Die .env bleibt außen vor. Sie gehört nicht ins Repository — auch nicht in ein privates, weil sie sonst in der Git-History landet. Einmalig per rsync auf den Server kopieren reicht:
rsync .env server:/var/www/example.com/.env
Das bare Repo auf dem Server lässt sich auch von einem anderen Rechner klonen:
git clone ssh://server/var/www/example.com.git
Mehrere Rechner am selben Remote sind kein Problem. Konflikte entstehen nur, wenn jemand pusht ohne vorher zu pullen. Die Lösung ist immer dieselbe:
git pull origin main
git push origin main - Deployment ohne Umweg
- Bandbreite messen
- MHD-Wächter
- Draußen