Journal

Archiv für die Kategorie „WebDevelopment“

Installation von Etherpad Lite auf Ubuntu 10.04 Server und Apache als Reverse-Proxy + Upstart

Screenshot von Etherpad Lite, einem kollaborativen TexteditorEtherpad Lite ist eine Neuentwicklung des kollaborativen Real-Time-Texteditors Etherpad in Node.js. Ausprobiert werden kann Etherpad Lite beispielsweise unter beta.etherpad.org.

Die ursprüngliche Etherpad-Software ist enorm ressourcenhungrig und die Codebase sehr umfangreich – insbesondere die hohen Anforderungen an den Arbeitsspeicher (im laufenden Betrieb wohl ca. 1 GB!) hielten mich von der Installation auf meinem Server ab. Etherpad Lite hingegen begnügt sich nach eigenen Angaben im laufenden Betrieb mit rund 30 MB Arbeitsspeicher.

Diese Anleitung beschreibt die Installation von Node.js, NPM und Etherpad Lite auf Ubuntu 10.04 Server. Da in den meisten Fällen auf Port 80 eines bestehenden Servers bereits ein Webserver (in meinem Fall Apache) läuft, wird Etherpad Lite hinter Apache als Reverse-Proxy (via mod_proxy) installiert. Sicherlich nicht die beste Lösung, eine “non-blocking” Node.js-Applikation hinter einem “blocking” Apache-Server zu installieren – Nginx wäre hier sicherlich eine bessere Wahl. Aber vorerst soll Apache als Reverse-Proxy genügen. Des weiteren richten wir eine Upstart-Konfiguration ein, die Etherpad Lite nach jedem Reboot automatisch startet.

Installation von Node.js

Zunächst installieren wir Node.js auf dem Server. Die Version in den Ubuntu-Paketquellen ist deutlich zu alt, deshalb müssen wir selbst kompilieren. Da wir Node.js, den Node-Paketmanager NPM und die Applikation aus Sicherheitsgründen unter einem eigenen User installieren möchten, legen wir diesen zunächst an:

groupadd nodejs
useradd -g nodejs -s /bin/bash -d /var/lib/nodejs nodejs
mkdir /var/lib/nodejs
chown nodejs:nodejs /var/lib/nodejs

Nun wurde der User nodejs angelegt, sein Home-Verzeichnis ist /var/lib/nodejs. Nun bereiten wir den User für die Installation von Node.js und NPM vor – wir wechseln in den User nodejs:

su nodejs
cd ~

Der folgende Inhalt muss in die Datei /var/lib/nodejs/.npmrc:

root =    /var/lib/nodejs/.node_modules
binroot = /var/lib/nodejs/local/bin
manroot = /var/lib/nodejs/local/share/man

Die entsprechenden Ordner müssen nun noch angelegt werden:

mkdir ~/local
mkdir ~/local/bin
mkdir ~/local/share
mkdir ~/local/share/man

Nun fügen wir den Ordner ~/local/bin noch zum PATH hinzu – die folgende Zeile muss zum einen in die Datei /var/lib/nodejs/.bashrc, zum anderen einmal in der Shell eingegeben werden:

export PATH=$HOME/local/bin:$PATH

Jetzt installieren wir die notwendigen Abhängigkeiten über apt / aptitude:

sudo apt-get install build-essential python libssl-dev git-core libsqlite3-dev gzip curl

Nun kann Node.js heruntergeladen und kompiliert werden. Dazu “klonen” wir das Git-Repository und checken die letzte stabile Version aus – was spätere Updates erleichtert.

mkdir ~/local/src
cd ~/local/src
git clone git://github.com/joyent/node.git
cd node
git checkout v0.4.12
./configure --prefix=$HOME/local/
make
make install

Installation von NPM

Jetzt ist Node.js installiert – wir benötigen aber noch den Node.js-Paketmanager NPM. Den installieren wir ebenfalls aus den GIT-Quellen:

cd ~/local/src
git clone https://github.com/isaacs/npm.git
cd npm
git checkout v1.0.30
make install

Zu guter letzt legen wir noch einen Symlink an, damit NPM später das Verzeichnis für die Node-Module findet, das wir weiter oben bereits konfiguriert haben:

ln -s ~/local/lib/node_modules ~/.node_modules

Installation von Etherpad Lite

Nun sind endlich die Voraussetzungen gegeben, um Etherpad Lite zu installieren. Dies tun wir ebenfalls aus den GIT-Quellen. Danach rufen wir ein Shell-Script auf, um die Abhängigkeiten zu installieren.

mkdir ~/node-apps
cd ~/node-apps
git clone git://github.com/Pita/etherpad-lite.git
cd etherpad-lite
./bin/installDeps.sh

Jetzt kann die Konfiguration angepasst werden, die sich in der Datei /var/lib/nodejs/node-apps/etherpad-lite/settings.json befindet. Da ich das Etherpad mit MySQL als Datenbank betreiben möchte, kommentiere ich die vorhandene SQLite-Konfiguration aus und füge den MySQL-Benutzer und den Datenbank-Namen hinzu, die ich beide vorher angelegt habe. Den “loglevel” setze ich außerdem auf “WARN”, um nicht zu viele unnötige Log-Meldungen zu schreiben.

Jetzt legen wir gleich eine Upstart-Konfiguration an, um sicherzustellen, dass das Etherpad nach jedem System-Neustart automatisch gestartet wird. Für eine regelmäßige Überwachung und ggf. Neustart des Etherpads im Fehlerfalle bietet sich Monit an – was aber nicht Teil dieses Artikels sein soll.

Wir legen nun die Datei /etc/init/etherpad-lite.conf mit folgendem Inhalt an (auf Grundlage dieser Quelle):

description "etherpad-lite"
 
start on started networking
stop on runlevel [!2345]
 
env NODEBIN=/var/lib/nodejs/local/bin/node
env EPHOME=/var/lib/nodejs/node-apps/etherpad-lite
env EPLOGS=/var/log/etherpad-lite
env EPUSER=nodejs
 
pre-start script
    chdir $EPHOME
    mkdir $EPLOGS                              ||true
    chown $EPUSER:admin $EPLOGS                ||true
    chmod 0755 $EPLOGS                         ||true
    chown -R $EPUSER:admin $EPHOME/var         ||true
#    exec su -s /bin/bash -c 'exec "$0" "$@"' $EPUSER $EPHOME/bin/installDeps.sh >> $EPLOGS/error.log || { stop; exit 1; }
end script
 
script
  cd $EPHOME/node
  exec su -s /bin/bash -c 'exec "$0" "$@"' $EPUSER $NODEBIN server.js \
                        >> $EPLOGS/access.log \
                        2>> $EPLOGS/error.log
end script

(Diese Upstart-Konfiguration ist noch nicht optimal – spontan gelang es mir nicht, das Shell-Script installDeps.sh im pre-start erfolgreich auszuführen. Deshalb muss man daran denken, dieses Script nach einem Etherpad-Update manuell auszuführen.)

Jetzt kann Etherpad ganz einfach mittels

start etherpad-lite

gestartet werden.

Einrichtung des Apache Reverse-Proxys

Nun richten wir Apache ein, damit Etherpad auf Port 80 erreichbar ist. Dafür verwenden wir z.B. die Subdomain etherpad.example.lit – und folgende virtuelle Host-Konfiguration (beispielsweise in der Datei /etc/apache2/sites-available/etherpad.example.lit):

<virtualhost *:80>
        ServerName etherpad.example.lit
 
        ServerAdmin webmaster@localhost
 
        <ifmodule mod_proxy.c>
            ProxyVia On
            ProxyRequests Off
            ProxyPass / http://localhost:9001/
            ProxyPassReverse / http://localhost:9001/
            ProxyPreserveHost on
            <proxy *>
                Options FollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                allow from all
            </proxy>
        </ifmodule>
 
        ErrorLog /var/log/etherpad-lite/apache2/error.log
 
        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn
 
        CustomLog /var/log/etherpad-lite/apache2/access.log combined
        ServerSignature Off
</virtualhost>

Wichtig: das Verzeichnis /var/log/etherpad-lite/apache2/ für die Apache-Logs muss angelegt werden!

Daraufhin kann der oben angelegte virtuelle Apache-Host aktiviert werden. Außerdem müssen die Apache-Module mod_proxy und mod_proxy_http aktiviert sein, danach kann die Apache-Konfiguration neu geladen werden:

a2ensite etherpad.example.lit
a2enmod proxy proxy_http
/etc/init.d/apache2 reload

Nun sollte das Etherpad unter http://etherpad.example.lit erreichbar sein!

Konfiguration von Logrotate

Wir haben nun einige Log-Dateien unterhalb von /var/log/etherpad-lite/, die schnell sehr groß werden können. Deshalb konfigurieren wir Logrotate so, dass diese Dateien wöchentlich rotiert und gepackt und für acht Wochen vorgehalten werden. Dazu fügen wir einfach folgende Zeilen zur /etc/logrotate.conf hinzu – oder legen eine /etc/logrotate.d/etherpadlite mit dem folgenden Inhalt an:

# rotate etherpad lite logs
/var/log/etherpad-lite/*.log {
        weekly
        missingok
        rotate 8
        compress
        notifempty
}
/var/log/etherpad-lite/apache2/*.log {
        weekly
        missingok
        rotate 8
        compress
        notifempty
}

Installation von Abiword für Import/Export (optional)

Für den erweiterten Import/Export muss die Textverarbeitungs-Software Abiword installiert werden – deren Binaries benutzt Etherpad zum Lesen und Schreiben von Dokumenten. In Ubuntu 10.04 ist Abiword in den Paketquellen vorhanden, deshalb reicht ein:

apt-get install abiword

Daraufhin muss in der /var/lib/nodejs/node-apps/etherpad-lite/settings.json der Pfad zum Abiword-Binary angepasst werden:

/* This is the path to the Abiword executable. Setting it to null, disables abiword.
     Abiword is needed to enable the import/export of pads*/
  "abiword" : "/usr/bin/abiword",

Nach einem Neustart mittels

stop etherpad-lite
start etherpad-lite

stehen die erweiterten Import-/Export-Funktionen zur Verfügung – dann kann ein Pad beispielsweise auch als PDF exportiert werden.

Abschluss

Etherpad Lite ist meiner Meinung nach ein sehr nützliches Tool, um gemeinsam Dokumente zu bearbeiten, Protokolle und To-Do-Listen zu erstellen usw. – was durch die Export-Funktion in viele Formate sehr gut ergänzt wird. Es existieren auch bereits viele Bibliotheken und Plugins, welche die HTTP-API von Etherpad nutzen, um Etherpads in eigenen Applikationen bequem einzubinden – Libraries für Ruby, PHP, ein jQuery-Plugin, ein Drupal-Modul (im Entwicklungsstadium) und viele mehr.

Ein Hinweis zum Schluss: diese Anleitung stellt sicher kein Optimum dar – jedoch war es mir wichtig, Node.JS sowie NPM nicht als root-User zu installieren. Deshalb weicht diese Anleitung zum Teil von den meisten im Netz zu findenden Anleitungen ab. Verbesserungsvorschläge nehme ich gern per Kommentar oder E-Mail entgegen!

Quellen und weiterführende Links:

PRODROMUS, ein minimaler JavaScript-XMPP-Client

PRODROMUS Mini-XMPP-ClientAuf meiner Kontakt-Seite befindet sich schon eine Weile mein XMPP-MiniChat-Client “PRODROMUS”. Nun habe ich ihn endlich unter der AGPL veröffentlicht. “Prodromus” steht lateinisch für “Eilbote”.

PRODROMUS ist ein simpler XMPP-Client, der vollständig in JavaScript geschrieben ist. Er benutzt die großartige Bibliothek Strophe.js von Jack Moffit, um sich zu einem XMPP-Server zu verbinden und ermöglicht es somit dem Besucher, mit einer vorkonfigurierten Person via XMPP zu kommunizieren. PRODROMUS ist als Ergänzung zu einem Kontaktformular gedacht – er lässt sich in bestehende Websites einbinden und erweitert die Kontaktmöglichkeiten um Echtzeit-Kommunikation.

Eine kurze Installationsanleitung sowie die erforderlichen Voraussetzungen gibt es im Wiki.

FrOSCon-Programm-App für WebOS

Wer am kommenden Wochenende zur FrOSCon nach St. Augustin fährt, kann die Programmpunkte, die er besuchen möchte, bequem auf seinem Palm WebOS-Gerät planen.

Ich habe meine ursprünglich für die FOSDEM geschriebene WebOS-Anwendung erweitert und um eine Favoriten-Funktion ergänzt.

Die Anwendung habe ich zur Prüfung an Palm übermittelt – sie wird hoffentlich noch rechtzeitig bis zum Wochenende veröffentlicht. Wer sie bereits testen möchte, findet die Anwendung im Palm Beta feed – einfach diesen Link über das WebOS-Smartphone öffnen, dann kann die Anwendung einfach installiert werden.

Die Anwendung ist freie Software und steht unter der GPLv3, der Quelltext ist hier verfügbar.

Installation von Redmine und Git unter Ubuntu

Auf der Suche nach einer Alternative zur Software-Projektverwaltungssoftware Trac landete ich bei Redmine, einer in Ruby bzw. mit Hilfe von Rails geschriebenen Software. Die Features lassen sich sehen – vor allem die Multiprojekt-Unterstützung, Kalender und Gantt-Diagramm, Zeiterfassung und gute Unterstützung für Git sind im Vergleich zur Trac herausragend. Wie sich während der Installation herausstellte, ist auch das Authentifizierungs-Feature für SVN und Git via WebDAV absolut praktisch – über die Rechte der Projektteilnehmer in Redmine wird automatisch auch der Lese- und Schreibzugriff im Versionskontrollsystem gesteuert, die Benutzer müssen also nur an einer Stelle gepflegt werden.

Für alle, die Redmine installieren möchten, hier ein paar meiner Erfahrungen. Die Installation erfolgte auf einem System mit Ubuntu 9.10 Server, es wird ein Apache-HTTP-Server und MySQL vorausgesetzt. Es gibt viele Möglichkeiten, eine Ruby/Rails-Anwendung zu installieren – ich habe mich für die Variante mit Apache und Passenger (mod_rails) entschieden.

Damit Ruby/Rails-Anwendungen via Apache ausgeführt werden können, wird Passenger (“mod_rails”) installiert. Passenger ist auch in den Paketquellen von Ubuntu zu finden, jedoch will apt für die Installation den bei mir installierten apache2-mpm-prefork sowie php5 deinstallieren.

Update: Da seit Ubuntu 10.04 das in den Paketquellen enthaltene Passenger-Modul auch mit dem apache2-mpm-prefork kompatibel ist (der für PHP5 notwendig ist), kann das Modul nun auch direkt über die Paketquellen installiert werden – was die Installation erheblich verkürzt. Siehe den entsprechenden Abschnitt unten.

Installation von Passenger und weiteren Dependencies unter Ubuntu 9.10

Zuerst werden die für Redmine benötigten Pakete installiert.

sudo aptitude install ruby rails rubygems ruby1.8-dev libgemplugin-ruby libgemplugin-ruby1.8 libruby-extras libruby1.8-extras rubygems1.8 rake apache2-threaded-dev libapache-dbi-perl libapache2-mod-perl2 libdigest-sha1-perl libopenssl-ruby build-essential

Hinweis: bei mir wurde die über die Paketverwaltung installierte Version von Rails später nicht erkannt – und generell sollte man Rails möglichst nur auf eine Art und Weise installieren, entweder via Paketverwaltung oder gem. Deshalb sollte “rails” eventuell lieber gleich weggelassen werden. Installation via gem siehe unten.

Dann wird ein virtueller Apache-Host angelegt, dazu wird z.B. das Verzeichnis /var/www/redmine.example.lit/redmine angelegt.

Unter Ubuntu 9.10 ist das in den Paketquellen enthaltene Passenger-Apache-Modul nicht mit dem apache2-mpm-prefork kompatibel – der wiederum ist für PHP5 erforderlich. Deshalb habe ich mich für die Installation via gem entschieden:

sudo gem install passenger

Nach der Installation muss das Apache-Modul kompiliert werden, die benötigten Pakete sollten alle bereits installiert sein. Um das Modul zu erstellen, wird folgendes ausgeführt:

/var/lib/gems/1.8/bin/passenger-install-apache2-module

Nun wird man durch den Kompiliervorgang des Moduls geführt, eventuell fehlende Abhängigkeiten werden beschrieben und notwendige Schritte erläutert. Danach ist das apache2-Modul kompiliert und muss noch aktiviert werden. Dazu wird die Datei /etc/apache2/mods-available/passenger.load mit folgendem Inhalt angelegt:

LoadModule passenger_module /var/lib/gems/1.8/gems/passenger-2.2.9/ext/apache2/mod_passenger.so

Nun wird noch die Modul-Konfigurationsdatei (/etc/apache2/mods-available/passenger.conf) mit folgendem Inhalt angelegt:

PassengerRoot /var/lib/gems/1.8/gems/passenger-2.2.9
PassengerRuby /usr/bin/ruby1.8

(Die Pfade können bei neueren Versionen oder anderen Distributionen abweichen.)

Nun muss das Modul noch aktiviert und Apache neu gestartet werden:

sudo a2enmod passenger
/etc/init.d/apache2 restart

Installation von Passenger ab Ubuntu 10.04

Ab Ubuntu 10.04 können fast alle Abhängigkeiten (inkl. Passenger) direkt über die Paketverwaltung installiert werden:

sudo aptitude install ruby rails rubygems ruby1.8-dev libgemplugin-ruby libgemplugin-ruby1.8 libruby-extras libruby1.8-extras rubygems1.8 rake libapache-dbi-perl libapache2-mod-perl2 libdigest-sha1-perl libopenssl-ruby libapache2-mod-passenger

Hinweis: bei mir wurde die über die Paketverwaltung installierte Version von Rails später nicht erkannt – und generell sollte man Rails möglichst nur auf eine Art und Weise installieren, entweder via Paketverwaltung oder gem. Deshalb sollte “rails” eventuell lieber gleich weggelassen werden. Installation via gem siehe unten.

Installation von Redmine

Jetzt kann Redmine heruntergeladen werden. Für einfache spätere Updates wird das Auschecken des stable-Branchs via SVN oder git empfohlen. Dann reicht später ein Update über das Versionskontrollsystem zur Aktualisierung. Wem die Installation via Paketverwaltung lieber ist, kann Redmine seit Ubuntu 10.04 auch direkt aus den Paketquellen installieren, hat ggf. aber nicht die aktuellste Version. Dafür reicht ein “aptitude install redmine redmine-mysql” (für die Verwendung mit MySQL als Datenbank). Mehr im offiziellen How-To.

Für die Installation via SVN wird der aktuelle stabile Zweig ausgecheckt:

svn co http://redmine.rubyforge.org/svn/branches/0.9-stable/ /var/www/redmine.example.lit/redmine/

Nach dem Checkout sollte der Besitzer dieses Verzeichnisses und aller Unterordner/Dateien geändert werden. Entweder wird ein eigener Benutzer für Redmine angelegt oder es wird der Benutzer des Webservers (“www-data”) verwendet. Hintergrund: Passenger führt die Anwendung später mit diesem Benutzer aus! Deshalb sollte dies keinesfalls root sein.

sudo chown -R www-data:www-data /var/www/redmine.example.lit/redmine/

Ich habe mich für MySQL als Datenbank entschieden, es steht aber unter anderem auch SQLite zur Verfügung. Vorbereitend wird nun eine Datenbank (z.B. via phpMyAdmin) erstellt, ggf. mit eigenem DB-Benutzer:

CREATE DATABASE `redmine` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

Dann muss eine DB-Konfigurationsdatei aus der Beispieldatei erstellt und im Bereich “production” die richtigen DB-Verbindungsdaten angegeben werden:

cd /var/www/redmine.example.lit/redmine/config/
cp database.yml.example database.yml
nano database.yml

Anschließend wird der Mailversand konfiguriert:

cd /var/www/redmine.example.lit/redmine/config/
cp email.yml.example email.yml
nano email.yml

Dort muss bei Verwendung von sendmail nur folgendes eingetragen werden:

production:
  delivery_method: :sendmail

Bei der verwendeten SVN-Version muss noch ein Session-secret erzeugt werden, dies ist wohl bei den “richtigen Releases” nicht notwendig:

rake generate_session_store

Nun wird die Datenbankstruktur erzeugt und die Standard-Konfiguration in die Datenbank geschrieben. Dazu wird folgendes (im Wurzelverzeichnis der Installation) aufgerufen:

cd /var/www/redmine.example.lit/redmine/
sudo rake db:migrate RAILS_ENV="production"
sudo rake redmine:load_default_data RAILS_ENV="production"

Sollte die folgende folgende Fehlermeldung erscheinen:

Missing the Rails 2.3.5 gem. Please `gem install -v=2.3.5 rails`, update your RAILS_GEM_VERSION setting in config/environment.rb for the Rails version you do have installed, or comment out RAILS_GEM_VERSION to use the latest version installed.

oder die folgende:

The bundled mysql.rb driver has been removed from Rails 2.2. Please install the mysql gem and try again: gem install mysql. rake aborted!

muss Rails (wie oben erwähnt) oder der MySQL-Treiber für Rails noch wie beschrieben installiert werden. Außerdem muss ruby-openid installiert sein, damit das OpenID-Feature genutzt werden kann.

sudo gem install -v=2.3.5 rails
sudo gem install mysql
sudo gem install ruby-openid

Nun kann der virtuelle Apache-Host nach folgendem Muster konfiguriert werden (z.B. /etc/apache2/sites-available/redmine.example.lit):

   <virtualhost *:80>
      ServerName redmine.example.lit
      DocumentRoot /var/www/redmine.example.lit/redmine/public
      <directory /var/www/redmine.example.lit/redmine/public>
         AllowOverride all
         Options -MultiViews
      </directory>
   </virtualhost>

Nach dem Aktivieren des virtuellen Hosts und dem Neuladen der Apache-Konfiguration mittels

sudo a2ensite redmine.example.lit
/etc/init.d/apache2 reload

ist Redmine über die entsprechende (Sub-)Domain erreichbar. Nun kann Redmine über die Oberfläche konfiguriert werden. Die Administrator-Zugangsdaten sind admin/admin (und sollten gleich geändert werden).

Einrichten eines öffentlich lesbaren GIT-Repositorys via HTTP/WebDAV mit Redmine als Zugriffskontrolle

Nach dem Anlegen einiger Projekte habe ich für diese ein Git-Repository angelegt. Git wird der Einfachheit halber für die Nutzung via HTTP/WebDAV konfiguriert, auch wenn dies deutlich weniger performant als die anderen zur Verfügung stehenden Varianten ist. Ein weiterer Vorteil ist die Erreichbarkeit auch aus Umgebungen mit restriktiven Firewalls. Außerdem kann so die anfangs erwähnte Authentifizierung via Redmine genutzt werden.

Falls noch nicht vorhanden, muss git installiert werden.

sudo aptitude install git-core

Von einem installierten Apache2 mit mod_dav wird ausgegangen. Zuerst wird – am Besten außerhalb der DocumentRoot – ein Verzeichnis für das Repository angelegt. Danach wird ein git-Repository in diesem Ordner erstellt, das durch die Option –bare nicht mit einer Arbeitskopie in Verbindung steht. Anschließend wird der Benutzer und die Gruppe des Webservers als Eigentümer des Verzeichnisses gesetzt, bei Debian und Ubuntu ist dies “www-data”.

Wichtig ist, dass der Name des Repository-Ordners mit dem existierenden GIT-Projekt-Identifier übereinstimmt, damit Redmine später die Zuordnung gelingt.

cd /var/www/redmine.example.lit/
mkdir git
cd git
mkdir example-project
cd example-project
git --bare init
cd ..
sudo chown -R www-data:www-data example-project

Nun wird die Zugriffskontrolle via Redmine eingerichtet. Dazu wird erst einmal mod_perl, mod_dav und weitere Abhängigkeiten installiert und die erforderlichen Module aktiviert. Redmine stellt zur Authentifizierung ein Perl-Modul bereit.

sudo aptitude install libapache-dbi-perl libapache2-mod-perl2 libdbd-mysql-perl libdigest-sha1-perl
 
sudo a2enmod dav
sudo a2enmod dav_fs
sudo a2enmod perl

Dann wird das Redmine-Perl-Modul an die richtige Stelle verlinkt:

ln -s /var/www/redmine.example.lit/redmine/extra/svn/Redmine.pm /usr/lib/perl5/Apache/Redmine.pm

Nun muss ein virtueller Apache-Host für den Zugriff konfiguriert werden. Dazu wird z.B. ein neuer virtueller Apache-Host nach folgendem Muster konfiguriert (im unteren Teil den Namen sowie die Zugangsdaten für die Datenbank einsetzen). Das Verzeichnis, das als DocumentRoot angegeben ist, sollte existieren.

   <virtualhost *:80>
      ServerName code.example.lit
      DocumentRoot /var/www/redmine.example.lit/code
 
      PerlLoadModule Apache::Redmine
 
      Alias /git /var/www/redmine.example.lit/git
 
      <location /git>
          DAV on
 
          AuthType Basic
          Require valid-user
          AuthName "Git"
 
          Options +Indexes -ExecCGI -Includes
 
          PerlAccessHandler Apache::Authn::Redmine::access_handler
          PerlAuthenHandler Apache::Authn::Redmine::authen_handler
 
          RedmineDSN "DBI:mysql:database=redmine;host=localhost"
          RedmineDbUser "username"
          RedmineDbPass "password"
      </location>
   </virtualhost>

Anschließend ist das Git-Repository des Projekts “example-project” – jedenfalls laut Beispielkonfiguration – unter code.example.lit/git/example-project erreichbar. Falls das Projekt in Redmine auf “öffentlich” geschaltet ist, kann jeder auf dieses Repository lesend zugreifen. Schreibzugriffe haben alle Redmine-Benutzer, die dem Projekt als Mitglied zugeordnet sind.

Damit der Repository-Browser von Redmine das Repository findet, kann es eventuell nötig sein, in der Projektkonfiguration für das Repository “Git” auszuwählen und den (lokalen!) Pfad anzugeben, z.B. /var/www/redmine.example.lit/git/example-project

Sollte beim Anzeigen des Repositories in Redmine ein Fehler auftreten, kann dies daran liegen, dass es noch keinen Commit gab.

Weiterführende Hinweise finden sich auf folgenden Seiten:

XMPP und OneSocialWeb – Ausgabe 26 des OpenWebPodcasts

Eine neue Episode des OpenWebPodcasts ist online: in dieser Folge geht es um XMPP und OneSocialWeb, ein Forschungsprojekt von Vodafone, das ein freies, dezentrales Social Network auf Basis von XMPP und anderen Web-Standards entwerfen will.

Zu Gast: ich! Da dies mein erster Podcast ist, bitte ich, eventuell auftretende Nervosität zu entschuldigen…

Hier der Link zur Episode:
Blog-Beitrag mit Zusammenfassung und Links