Wer seine Website lokal entwickelt und den Quellcode auf Github verwaltet, ist mit folgendem Ablauf bestens vertraut:
- Lokale Änderungen am Quellcode werden über git push in das Github-Repository eingepflegt und
- der Quellcode auf dem Deployment-Server über eine SSH-Verbindung mit einem git pull aktualisiert.
Dieser Prozess lässt sich mit Deployment-Helfern wie Vlad oder Capistrano natürlich automatisieren. Diese Helfer müssen allerdings vorher aufwendig konfiguriert werden und kommen daher nicht für jedes Projekt in Frage.
Wer seinen Quellcode auf dem Server nur schnell aktualisieren lassen möchte, kann auf Pushmaster zurückgreifen. Die Sinatra-Anwendung läuft auf dem eigenen Deployment-Server (z.B. über Apache/Passenger) und wartet auf ein Signal ( Post-Receive Hook) von Github, um anschließend den git pull-Befehl selbständig auszuführen.
Installation
Sinatra installieren
Pushmaster ist eine Sinatra-Anwendung und benötigt daher die Sinatra-Bibliotheken.
Diese installiert man über den Ruby-Paket Manager gems
Die aktuelle
Ruby Gems Version kann man von der RubyForge Seite beziehen. Eine
Installationsaleitung findet man im User Guide.
sudo gem install sinatra
Pushmaster auf dem eigenen Server einrichten.
Den Quellcode von Pushmaster bezieht man von der Github-Projektseite oder direkt durch:
git clone git://github.com/augustl/pushmaster.git
Anschließend richtet man für den Zugriff auf Pushmaster eine Subdomain ein:
pushmaster.meinedomain.de
und leitet diese auf das Unterverzeichnis “public” der Pushmaster-Installation
:
public_html/pushmaster.meinedomain.de/public
Damit der eigene Webserver Pushmaster ausführen kann, benötigt man einen Rack-kompatiblen Webserver. Wer Apache 2 einsetzt, kann hier auf Passanger (mod_rails) zurückgreifen. Eine Anleitung um Passanger mit dem Apache 2-Server zu verbinden, findet man in der Passenger-Installationsanleitung.
Damit der Zugriff auf Pushmaster Unbefugten vorenthalten bleibt, erstellt man im Pushmaster-Hauptverzeichnis eine Datei Namens settings.yml und trägt dort einen Benutzernamen und das zugehörige Passwort folgendermaßen ein:
username: pushmaster password: secret
Als nächstes teilt man Pushmaster mit, welches Github-Repository aktualisiert werden soll. Dazu erstellt man im Unterverzeichnis Listeners eine Datei mit dem Namen des Repositories und der ruby-typischen Dateiendung .rb:
pushmaster.meinedomain.de/listeners/[name_des_repositories].rb
Eine typische Listener-Datei in Pushmaster sieht folgendermaßen aus: In der Listener-Datei kann normaler Ruby-Code verwendet werden.
Dir.chdir "/public_html/meinedomain.de/public" do git "pull" touch "tmp/restart.txt" end
Funktionsweise von Pushmaster
- Zunächst wird in das Verzeichnis des Website-Projektes gewechselt.
- Anschließend aktualisiert Pushmaster durch ein git pull den Quellcode des Projektes.
- Zum Schluss wird Apache2/Passenger mitgeteilt, dass beim nächsten Aufruf die Sinatra-Anwendung neugestartet werden soll. Dieser Schritt ist optional.
Wer weitere Operationen durchführen lassen möchte, kann auf die Ruby-Syntax ( und folgende, durch die Pushmaster-DSL zur Verfügung gestellten Funktionen zurückgreifen:
- git — führt einen git-Befehl aus
- touch — erstellt eine Datei
- run — führt ein System-Kommando aus
- log — Erstellt ein Logfile unter log/name_des_repositories.log
Github konfigurieren
Pushmaster reagiert auf den Post-Receive Service Hook von Github. Diesen richtet man folgendermaßen ein:
Projekteseite auf Github → Admin → Service Hooks → Post-Receive-URLs → URL:
http://username:password@pushmaster.meinedomain.de
Nun speichert man die Änderungen mit Update Settings
Nach einem erfolgreichen git push auf dem lokalen Entwicklungs-Server kontaktiert Github über die Post-Receive-URL Pushmaster und dieser führt auf dem Deploymentserver ein git pull aus.
Damit ist die Installation von Pushmaster abgeschlossen.
Stolpersteine
Schreibrechte
Damit Pushmaster das Repository auf dem Deployment-Server aktualisieren kann, benötigt der Apache 2-Benutzer die notwendigen Schreibrechte. Sind der Benutzer des Website-Projektes und der Apache 2-Benutzer in der selben Gruppe, ist ein chmod 755 auf das Repository ausreichend.
Versionsprobleme mit Passenger
Pushmaster benötigt mindestens die Version 2.2.2 von Passenger. Passenger liegt aktuell (26.06.09) in der Version 2.2.4 vor.Beim Versions-Update sollte man unbedingt darauf achten, dass Apache 2 nicht auf die alte gem-Version zugreift.
Wichtig sind hier folgende Zeilen, die während der Passenger-Installation und nach einem Update in die Apache 2-Konfiguration eingefügt werden müssen:
LoadModule passenger_module /usr/lib/ruby/gems/1.8/gems/passenger-2.2.2/ext/apache2/mod_passenger.so PassengerRoot /usr/lib/ruby/gems/1.8/gems/passenger-2.2.2 PassengerRuby /usr/bin/ruby1.8