GitPrep über SSL

Antworten
localhorst
Beiträge: 571
Registriert: 17.12.2012, 20:19

GitPrep über SSL

Beitrag von localhorst »

Allgemein
GitPrep ist eine Git Repository Management-Software, ähnlich wie Github. Ziel dieses Tutorials ist das Ein- und Auschecken von Git Repositories über den Webserver Apache und dem Protokoll HTTPS.

Installation
Wichtig:
GitPrep muss kompiliert werden. Da ich generell nichts davon halte, Compiler-Software auf dem Produktions-System zu installieren, werde ich in diesem Tutorial die Installation in einer Oracle VirtualBox VM mit Ubuntu 12.04 Server vornehmen und anschließend die fertige Installation auf den Webserver kopieren.

Die Installation wird als angemeldeter root-Benutzer durchgeführt.

Folgende Schritte sind zur Installation notwendig:
  1. Benötigte Pakete installieren:

    Code: Alles auswählen

    apt-get install -y apache2 git-core gcc make php5
  2. Neueste GitPrep-Version herunterladen, ins Webverzeichnis verschieben und Rechte setzen:

    Code: Alles auswählen

    https://github.com/yuki-kimoto/gitprep/archive/master.zip
    unzip master.zip
    mv gitprep-master /var/www/gitprep
    chown -R www-data:www-data /var/www
  3. Apache-Konfigurationsdatei "/etc/apache2/sites-enabled/000-default" anpassen:
    1. Im Bereich "<Directory /var/www/>" folgende Einträge hinzufügen:

      Code: Alles auswählen

      AddHandler cgi-script .cgi
      Options +ExecCGI
      
    2. Webserver neustarten:

      Code: Alles auswählen

      service apache2 restart
  4. Setup im Browser über die URL "http://<HOST.IP>/gitprep/setup/setup.php" und auf "Setup" klicken.
  5. Ist das Setup ohne Fehler durchgelaufen, dann kopiere nun die Daten "/var/www/gitprep*" auf deinen Produktions-Server. Alle folgenden Schritte beziehen sich auf deinen Produktions-Server. Die folgende Beschreibung geht davon aus, dass GitPrep im Verzeichnis "/var/www/git" abgelegt wurde.
  6. Installiere Git:

    Code: Alles auswählen

    apt-get install -y git-core
  7. GitPrep setzt für die HTTP-Authentifizierung auf "PasswordBasicAuth". Das bedeutet, dass du neben der Verwaltung der Benutzer in GitPrep ebenfalls eine Passwort-Datei für den Apache Webserver pflegen müsstest. Um das zu umgehen, nutze ich den von GitPrep mitgelieferten Webserver und konfiguriere den Apache Webserver so, dass er als Proxy-Server dient. Dieser nimmt alle Anfragen zum und vom GitPrep Webserver entgegen und leitet sie weiter. Passe dazu deine Apache2-Konfigurationsdatei (eine Datei im Verzeichnis "/etc/apache2/sites-enabled/") an:

    Code: Alles auswählen

    <VirtualHost *:443>
       <Proxy *>
          Order deny,allow
          Allow from all
       </Proxy>
       ProxyRequests Off
       ProxyPreserveHost On
       ProxyPass / http://127.0.0.1:10020/ keepalive=On
       ProxyPassReverse / http://127.0.0.1:10020/
       RequestHeader set X-Forwarded-HTTPS "1"
       <Directory /var/www/git>
          AddHandler cgi-script .cgi
          Options +ExecCGI -FollowSymLinks -Indexes
       </Directory>
    </VirtualHost>
  8. Aktiviere die Proxy-Module für den Apache Webserver:

    Code: Alles auswählen

    a2enmod headers proxy proxy_http
    service apache2 restart
  9. Teile GitPrep mit, dass du einen Reverse Proxy verwenden möchtest. Setze dazu in der Datei "/var/www/gitprep/gitprep.conf" den Wert "on" im Bereich "[reverse_proxy]" auf "1".
  10. Das Upload-Limit pro Datei liegt standardmäßig bei 5MB. Ist dir das zu gering, dann ergänze in der Datei "/etc/environment" folgenden Eintrag. Der Wert ist in Bytes anzugeben:

    Code: Alles auswählen

    MOJO_MAX_MESSAGE_SIZE=10485760
  11. Damit der GitPrep Webserver direkt beim Booten gestartet wird, erstelle folgendes Startskript:
    • Wenn dein Betriebssystem "init.d" zum Starten der Dienste verwendet, dann führe folgende Schritte aus:
      1. Leeres Startskript anlegen:

        Code: Alles auswählen

        >/etc/init.d/gitprep
      2. Dieses Startskript nun mit folgendem Inhalt füllen:

        Code: Alles auswählen

        #!/bin/sh
        ### BEGIN INIT INFO
        # Provides:          gitprep
        # Required-Start:    apache2
        # Required-Stop:     apache2
        # Default-Start:     2 3 4 5
        # Default-Stop:      0 1 6
        # Short-Description: Start/stop gitprep web server
        ### END INIT INFO
        
        PATH=/sbin:/usr/sbin:/bin:/usr/bin
        
        case "$1" in
          start)
                /var/www/gitprep/gitprep
                ;;
          restart)
                /var/www/gitprep/gitprep -s
                /var/www/gitprep/gitprep
                ;;
          stop)
               /var/www/gitprep/gitprep -s
                ;;
          *)
                echo "Usage: $0 start|stop|restart" >&2
                exit 3
                ;;
        esac
      3. Startskript aktivieren:

        Code: Alles auswählen

        update-rc.d gitprep defaults
    • Wenn dein Betriebssystem "systemd" zum Starten der Dienste verwendet, dann führe folgende Schritte aus:
      1. Leeres Startskript anlegen:

        Code: Alles auswählen

        >/usr/lib/systemd/system/gitprep.service
      2. Dieses Startskript nun mit folgendem Inhalt füllen:

        Code: Alles auswählen

        [Unit]
        Description=Starts/stops GitPrep webserver.
        
        [Service]
        Type=simple
        ExecStart=/var/www/gitprep/gitprep
        ExecStop=/var/www/gitprep/gitprep -s
        PIDFile=/var/www/gitprep/script/hypnotoad.pid
        
        [Install]
        WantedBy=multi-user.target
      3. Startskript aktivieren:

        Code: Alles auswählen

        systemctl enable gitprep.service
Fehlermeldungen
  • Die Meldung "fatal: protocol error: bad line length character: 0", sowie die HTTP Fehler "200" und "502" weisen auf Speicherprobleme hin. Lösung:
    1. Client-seitig: "http.postBuffer" in Git erhöhen:

      Code: Alles auswählen

      git config --global http.postBuffer 50M
    2. Server-seitig: "MOJO_MAX_MESSAGE_SIZE" in der Datei "/etc/environment" erhöhen.
Antworten