Webprojekte auf den Server bringen mit Rsync statt FTP

Viele Webprojekte erfordern keinen eigenen dedizierten oder auch virtuellen Server, für kleine Dinge reicht auch ein normales Webhosting-Angebot, wie es sie massenweise gibt. Was bei diesen Paketen aber regelmäßig nicht zur Verfügung steht, ist ein SSH-Zugang. Wie kann man nun bequem und einfach sein Webprojekt von seinem Entwicklungsrechner auf den Server bringen? Statt hier mit FTP zu hantieren und manuell Ordner und Dateien abzugleichen, kann man mittels Rsync und CVS das ganze Verfahren eleganter lösen.
Gehen wir mal von einer Linux-Entwicklungsumgebung aus, wie ich sie auch einsetze. Dazu habe ich bei einem Webhoster ein Paket gebucht, welches zwar einen FTP-, aber keinen SSH-Zugang beinhaltet. Meine Sourcen verwalte ich mit CVS, derzeit aber ohne Tags und Branches. Es genügt mir also, immer den Head auf meinen Server hochladen zu können.

Inspiriert durch den Artikel von Martin Brüggemann über Rsync und FTP habe ich zunächst wie dort beschrieben curlftps eingerichtet und mir dann folgende Scripte geschrieben:

Script, um die Serverumgebung auf dem Entwicklungssystem verfügbar zu machen

#!/bin/sh
sudo umount /mnt/mein-projekt.tld/
sudo rm -rf /mnt/mein-projekt.tld/
mkdir -m 777 /mnt/mein-projekt.tld
sudo curlftpfs -s -o allow_other ftp://user:pass@mein-projekt.tld /mnt/mein-projekt.tld/

 

Script, um den aktuellen Stand aus dem CVS auf den Server zu übertragen

#!/bin/sh
mkdir /tmp/build
cd /tmp/build
cvs co mein-projekt
cd mein-projekt
find . -name CVS | xargs rm -rf
rm -rf cache/
sudo rsync -rtCuvz --temp-dir=/tmp/rsync /tmp/build/mein-projekt/ /mnt/mein-projekt.tld/
rm -rf /tmp/build/mein-projekt/

Natürlich gibt es hier noch viel Optimierungspotential, doch für mich ist die Nutzbarkeit dieser beiden Scripte schon eine enorme Arbeitserleichterung im Vergleich zum Hantieren mit FTP-Clients: durch die Nutzung von Rsync spart man sich das Abgleichen von lokalem und serverseitigem Stand der Ordner und Verzeichnisse und über die Nutzung des CVS kann man sicherstellen, dass ungewollte Änderungen nicht auf den Produktivserver gelangen – sofern man beim Commit ins CVS Disziplin wahrt.