Eine eigene Webseite auf shared hosten

shared ist der gemeinsame Host für Web- und weitere Anwendungen im Hackerspace.

Veröffentlichen der aktuellen Version deiner Webseite oder Anwendung

Idealerweise musst du dich so wenig wie möglich mit dem Hosting auf shared auseinandersetzen. Ziel ist es, dass du die aktuelle Version deiner Webseite oder deines Projekts mit nur einem Befehl veröffentlichen kannst:

git push sharedhost master

und alles ist erledigt. Die aktuelle Version deines Projektes ist unter projektname.shared.local.hacksaar.de erreichbar.

Voraussetzungen

Voraussetzung für ein Deployment auf shared ist, dass dein Projekt git zur Verwaltung des Quellcodes verwendet. Wir empfehlen natürlich git.hacksaar.de als gemeinsames Repository. Eine Alternative dazu stellt u.a. github oder auch ein eigener git-Server dar. Als gute Dokumentation für den Einsteiger zur Verwendung von git empfiehlt sich Pro Git von Scott Chacon und Ben Straub.

Nutzen

Es ist nicht notwendig, eine eigene virtuelle Maschine als Host für jedes Softwareprojekt oder jede Webseite einzurichten. In den meisten Fällen ist es ausreichend, einen gemeinsamen Host für verschiedene Webseiten zu verwenden, so dass sich nicht jedes Projekt selbst um die Administration eines Servers kümmern muss. Als gemeinsamer Host für Webseiten und einfache Anwendungen steht der Server shared zur Verfügung.

Erreichbarkeit

Der Host shared ist aus dem WLAN-Netz HACKSAAR-24 unter shared.local.hacksaar.de erreichbar. Wir arbeiten noch an der Erreichbarkeit aus dem Internet. Matthias baut noch eine 5 GHz-Antenne, so dass shared auch aus dem WLAN-Netz HACKSAAR-50 erreichbar wird. Aus dem gleichen Grund ist auch eine Erreichbarkeit aus dem WLAN-Netz HACKS44R-Gast noch nicht gegeben.

Scope

shared ist für einfache Webseiten und andere einfache Anwendungen ausgelegt. Komplexe Projekte, deren Anforderungen das Angebot von shared übersteigen, können auf einer eigenen virtuellen Maschine gehostet werden. Alternativ dazu kannst du gemeinsam mit den shared-Administratoren das existierende Angebot erweitern. shared bietet bisher eine Umgebung für folgende Technologien an:

Fehlt etwas in dieser Liste, was du für dein Projekt benötigst? Dann sprich mit den shared-Administratoren Kim oder Matthias.

Einrichtung eines neuen Projekts auf shared

Die in diesem Kapitel beschriebene Konfiguration wird durch einen shared-Administrator durchgeführt.

Das Veröffentlichen einer bestimmten Softwareversion nennt man auch Deployment. Eine einmalige Konfiguration ist notwendig, damit das Deployment deiner Software auf shared in einem Befehl funktionieren kann. Damit klar ist, welche Aufgaben dir abgenommen werden, und damit die Konfiguration für Interessierte nachvollziehbar wird, sind alle Schritte zur Einrichtung hier dokumentiert.

Clonen des Repositories auf shared

Das Code-Repository muss auf shared einmalig eingerichtet werden:

cd /var/repo
git clone --bare https://git.hacksaar.de/hacksaar/projektname.git

Durch die Anlage eines Repositories mit der Option --bare werden nur die Informationen zur Verwaltung der Dateien im Repository unter /var/repo abgelegt, der Sourcecode wird nicht an dieser Stelle verwaltet.

Einrichten des Post-Receive-Hook

Um den Sourcecode nach einem push in das eben angelegte Repository unter /var/www/projektname zu veröffentlichen, wird im Verzeichnis /var/repo/projektname/hooks die ausführbare Datei post-receive erzeugt:

cd /var/repo/projektname.git/hooks
touch post-receive
chmod +x post-receive

In die so erzeugte Datei post-receive wird der Befehl zum checkout nach /var/www/projektname eingetragen.

vi /var/repo/projektname.git/hooks/post-receive
#!/bin/sh
git --work-tree=/var/www/Projektname --git-dir=/var/repo/projektname.git checkout -f

Damit der post-receive-hook die Dateien auch wirklich unter /var/www/Projektname bereitstellen kann, sind die Rechte im Filesystem zu beachten. Der Benutzer git erhält normalerweise Schreibrechte in diesem Verzeichnis:

mkdir /var/www/Projektname
chown git /var/www/Projektname

Ausnahmen von dieser Regel können individuell vereinbart werden. So ist es z.B. denkbar, dass nach dem ersten Deployment das Schreibrecht auf die lokale Datenbank in diesem Verzeichnis entfernt wird, um ein versehentliches Deployment bzw. das Überschreiben dieser Datei zu verhindern.

Einrichten des virtuellen Hosts

Der virtuelle Host wird individuell konfiguriert. Die Minimalkonfiguration sieht in etwa so aus:

vi /etc/apache2/sites-available/projektname
<virtualhost *:80>
	ServerAdmin webmaster@localhost
	ServerName projektname.shared.local.hacksaar.de
	ServerAlias projektname
	DocumentRoot /var/www/projektname
        <Directory var/www/projektname>
		Options -MultiViews
		AllowOverride all
	</Directory>
</virtualhost>

Die eben angelegte apache-site-Konfiguration muss noch aktiviert werden, damit apache /var/www/Projektname ausliefern kann:

a2ensite projektname
service apache2 reload

Einmal pro Benutzer: Berechtigung zum Zugriff auf shared einrichten

Die Zugriffsberechtigung muss nur einmal pro Benutzer eingerichtet werden. Falls dein public key bereits auf shared hinterlegt ist, kann dieser Schritt übersprungen werden.

Das Deployment läuft auf shared im Kontext des Benutzers git. Damit du Code auf shared als git-user pushen kannst, muss einmalig der public key zu authorized_keys des git-Benutzers auf shared hinzugefügt werden. Dazu händigst du deinen public key einem shared-admin aus. Dieser fügt deinen public key der Datei /home/git/.ssh/authorized_keys hinzu:

cat id_rsa.pub >> authorized_keys

shared-Remote dem lokalen Repository auf dem eigenen Computer hinzufügen

Diese Konfiguration führst du selbst auf deinem Computer durch.

Dem Projekt in deinem lokalen git-Repository wird unter dem Namen sharedhost ein git-Remote hinzugefügt, um das Deployment von deinem Computer aus zukünftig bequem durchführen zu können. Öffne dazu auf deinem Computer eine Shell, wechsele in das Projektverzeichnis und füge mit git remote den Server shared zum Projekt hinzu:

cd /repo/projektname
git remote add sharedhost ssh://git@shared.local.hacksaar.de/var/repo/projektname.git

Dies war der letzte notwendige Schritt. Das Ziel ist erreicht, die Aktualisierung des Projekts auf shared kann nun jederzeit mit dem folgenden Befehl durchgeführt werden:

git push sharedhost master