Grav Deploy-Script
Ein 1-Klick Grav deploy Script mit Rsync und SSH
22. Feb. 2020
Der Deploy einer Grav-Webseite ist recht einfach. Lediglich zwei Schritte sind nötig:
- Dateien Hochladen
- Cache löschen
Dies mit einem FTP-Client zu erledigen nervt. In der GUI rumklicken ist ineffizient für Kommandozeilenmenschen wie mich. Weiterhin kann FTP keine anständigen Diff-Uploads durchführen. Es dauert also länger bis die Dateien oben sind bzw. es ist weniger zuverlässig. Sich in einem zweiten Schritt per SSH einzuloggen und den Cache zu leeren ist mindestens ebenso nervig.
Weiterhin muss auf dem Server natürlich ein FTP-Server laufen. Auf diesem Server ist das nicht der Fall. Der SSH Daemon hingegen ist natürlich unabdingbar und läuft daher.
Die Lösung: Rsync und SSH
Folgendes Bash-Scripts erledigt die zwei oben genannten Schritte.
Alle für den betrieb relevanten Dateien werden per rsync
sunchronisiert.
Anschließend werden per SSH die Dateirechte angepasst und der Cache gelöscht. Fertig.
Ist auf dem Server Public-Key-Authentication eingerichtet, muss kein Passwort eingegeben werden beim Ausführen des Scripts.
Das Skript wird als deploy.sh
im Wurzelverzeichnis der grav Installation abgelegt.
Dei am Anfang der Datei stehenden Variablen müssen natürlich auf die jeweilige
Situation angepasst werden.
#!/bin/bash
SERVER_DIR=/var/www/dermarcel
SERVER_USER=www-data
SSH_USER=root
SSH_HOST=dermarcel.de
rsync -rlptD --progress --delete \
--exclude '/deploy.sh' \
--exclude '.git' \
--exclude '/cache/*' \
--exclude '/logs/*' \
--exclude '/images/*' \
--exclude '/backup/*' \
--exclude '/assets/*' \
--exclude '/tmp/*' \
. $SSH_USER@$SSH_HOST:$SERVER_DIR
ssh $SSH_USER@$SSH_HOST "cd $SERVER_DIR && chown -R $SERVER_USER:$SERVER_USER . && sudo -u $SERVER_USER php bin/grav clearcache"
Das Skript muss nun ausführbar gemacht werden: chmod +x deploy.sh
.
Ab sofort erfolgt der Deploy durch ein einfaches Ausführen
von ./deploy.sh
aus dem grav Wurzelverzeichnis.
Keine Ahnung wir rsync --exclude
genau funktioniert?
Schau hier vorbei.