4freax

Webseite mit Git "verwalten"

Ein Web Verzeichnis mit git zu verwalten ist sehr praktisch, man braucht kein ftp mehr (oder was auch immer man sonst so benutzt um seine Dateien auf einen Webserver zu übertragen) und muss sich nicht selbst um das Hochladen der jeweils geänderten Dateien kümmern.
(Wenn man auch auf dem Server, also direkt im Document Root, editieren möchte, muss man noch ein klein wenig mehr Aufwand betreiben, siehe z.B. web-focused-git-workflow)

Shell Befehle: cd /blabla
Datei Pfade: /bla/blubb/blabla
Datei Inhalte: blablablabla

Das Document Root Verzeichnis (das wo die html/php/java/whatever Dateien liegen, frei wählbar) - ab jetzt hier auch "git Verzeichnis" genannt:

/var/www/MeineWebseite/

1. Git Verzeichnis einrichten

  1. Verzeichnis durch git verwalten lassen:

    cd /var/www/MeineWebseite/
    git init --shared=group

    Um auch in das Repository "pushen" (siehe man git-push) durchführen zu können wenn das Ziel kein "bare" repository ist (also ein Arbeitsverzeichnis besitzt):

    git config receive.denyCurrentBranch false
  2. In der Datei festlegen, welche Dateien git ignorieren soll (wildcards sind erlaubt, siehe "man gitignore"):

    /var/www/MeineWebseite/.gitignore:
    *~
  3. Falls schon Dateien im Verzeichnis liegen fügen wir diese jetzt zu git hinzu:

    git add .
    git commit
    git update-server-info
  4. Als Besitzer des Verzeichnisses und aller Dateien/Unterverzeichnisse darin den Systemuser einstellen, unter dessen Kennung der Webserver läft (in diesem Fall Benutzer "www" und Gruppe "www") und Zugriff von allen anderen Benutzern verbieten:

    chown -R www:www /var/www/MeineWebseite/
    chmod -R o-rwx /var/www/MeineWebseite/
  5. Die Hooks einrichten (Programme/Skripte, die an bestimmten Zeitpunkten der Aktionen im git ausgeführt werden):

    /var/www/MeineWebseite/.git/hooks/post-receive:
    #!/bin/sh
    unset GIT_DIR
    cd ..
    git reset --hard

    /var/www/MeineWebseite/.git/hooks/post-update:
    #!/bin/sh
    exec git update-server-info


    chmod +x /var/www/MeineWebseite/.git/hooks/post-receive
    chmod +x /var/www/MeineWebseite/.git/hooks/post-update

2. Webserver einrichten

  1. ! Nur wichtig wenn man keinen Domain Namen zur Verfügung hat und/oder einfach nur testen möchte !
    In diesem Beispiel benutzen wir die fiktive URL http://www.meine-webseite-mit-git.de/
    Wenn man nur mit seinem lokalen Webserver testen will kann man z.B. den Servernamen aus der fiktiven URL in die hosts Datei des Systems eintragen und auf die loopback Adresse 127.0.0.1 auflösen lassen. Damit die folgende Konfiguration funktioniert muss man folgende Zeile in der Datei haben (die ersten beiden Spalten, also "127.0.0.1 localhost", sollten sowieso schon drin stehen, einfach die vorhandene Zeile um die gewünschten hostnamen erweitern):
    /etc/hosts:
    127.0.0.1 localhost www.meine-webseite-mit-git.de git.meine-webseite-mit-git.de

  2. Für den Apache2 Webserver sieht die Konfiguration für einen namensbasierten virtuellen Host dann beispielsweise so aus:

    /etc/apache2/sites-available/meine-webseite-mit-git:
    	
    # Die Webseite
    <VirtualHost 127.0.0.1:80>
            ServerAdmin webmaster@meine-webseite-mit-git.de
            ServerName  www.meine-webseite-mit-git.de
    	
            DocumentRoot /var/www/MeineWebseite/
    
            <Directory />
                    Options FollowSymLinks
                    AllowOverride None
            </Directory>
    
            # zugriff aufs git verzeichnis über diesen Server verbieten (dafür ist dann der git.www.meine-.... server da)
            <Directory /.git/>
                       Order Deny,Allow
                       Deny from all
                       AllowOverride all
            </Directory>
    
            LogLevel error
            ErrorLog /var/log/apache2/www.meine-webseite-mit-git.de.log
            CustomLog /var/log/apache2/www.meine-webseite-mit-git.de.log combined
            ServerSignature Off
    
    </VirtualHost>
    
    # Das Git Repository der Webseite
    <VirtualHost 127.0.0.1:80>
            ServerAdmin webmaster@meine-webseite-mit-git.de
            ServerName  git.meine-webseite-mit-git.de
    
            SetEnv GIT_PROJECT_ROOT /var/www/MeineWebseite/.git/
            SetEnv GIT_HTTP_EXPORT_ALL
            ScriptAlias / /usr/lib/git-core/git-http-backend/
    
            <Location />
                  AuthType Basic
                  AuthName "Git Access meine-webseite-mit-git.de"
                  Require valid-user
                  AuthUserFile /etc/apache2/passwords/git.meine-webseite-mit-git.de.htpasswd
            </Location>
    
            LogLevel error
            ErrorLog /var/log/apache2/git.4freax.net-error.log
            CustomLog /var/log/apache2/git.4freax.net-access.log combined
            ServerSignature Off
    </VirtualHost>
    	
    	  

TODO: zu Ende schreiben (auch wenns langweilig ist ;-)

nicht vergessen: