Redmine (+sqlite3) + Lighttpd + Thin
Heute mal eine Rarität. Während das Internetz zu 99% Anleitungen zu Apache + Redmine + Passenger und zu einem großen Anteil (1%) auch Redmine + nginx + Mongrel/Thin im Angebot hat, habe ich auf diese Bloatware Apache keinen Bock und finde die Benutzerdokumentation von nginx… erm… etwas dünn (faktisch null). Nun habe ich wohl merkwürdige Vorstellungen, aber ich find’ lighttpd wirklich hübsch.
Redmine kennt man ja derweil, das ist auch so eine Bloatware, die auf einer Bloatware läuft, deren Interpreter auch Bloatware Scheiße ist. Ach, und als häufig genutzte Datenbankbackends kommen noch leichtgewichtige, relationale Datenbanken wie MySQL und PostgreSQL hinzu. Sqlite3 geht, aber das zu erwähnen ist ja unwichtig. Und mit diesen Ansprüchen, Redmine mit nur 100-150 MB RAM statt 300 MB laufen zu lassen, bin ich relativ alleine. Die Anleitung bezieht sich übrigens nur auf Debian Squeeze. Außerdem nutze ich die Ruby Enterprise Edition, weil RAM--.
Prerequisites
Wir brauchen sqlite, headers und ‘nen Ruby-Interpreter (64-Bit). Und alles als root!
# apt-get install libsqlite3-dev
# wget http://rubyenterpriseedition.googlecode.com/files/ruby-enterprise_1.8.7-2011.03_amd64_debian6.0.deb
# dpkg -i ruby-enterprise_1.8.7-2011.03_amd64_debian6.0.deb
# which ruby # -> /usr/local/bin/ruby
# which gem # -> /usr/local/bin/gem
# rm ruby-enterprise_1.8.7-2011.03_amd64_debian6.0.deb
So, weil Redmine ein bisschen behindert ist, gibt es eine regelrechte Whitelist, welche Dependencies funktionieren. Ich installiere hier Version 1.2.1.
# gem install sqlite3
# gem install rails -v=2.3.11
# gem install rack -v=1.1.0
# gem install i18n -v=0.4.2
# gem install rake -v=0.8.7
## rails|rack|rake --version müssen die installierten anzeigen, sonst läuft's schief.
## deinstallieren falscher Versionen: gem uninstall -v=x.y.z lib
Redmine installieren
Mein Webserver-Konfiguration ist wie folgt. Ich habe einen Benutzer www, der den lighttpd ausführt und der in /home/www/ zu Hause ist. Je virtuellen Host ist im Verzeichnis die Domain, z.b. posativ.org, blog.posativ.org, in welchen dann das servierte Zeug liegen soll. Ich plane, Redmine per Sub-URI, also nicht in /, sondern unter /redmine zu installieren, daher liegt mein Redmine in /home/www/posativ.org/redmine/.
Weil ich Git mag und mir kein Subversion ins Haus kommt, ist mein Redmine vom inoffiziellen Mirror auf GitHub:
$ pwd # -> /home/www/posativ.org/
$ git clone https://github.com/edavis10/redmine.git
$ git checkout 1.2.1
$ cat config/database.yml
production:
adapter: sqlite3
database: db/redmine.db
$ rake generate_session_store
$ RAILS_ENV=production rake db:migrate
Jetzt kann man sich kurz vergewissern, ob Redmine irgendwie läuft: ruby script/server webrick -e production. Auf http://localhost:3000/ wartet ein WEBrick-Server. Btw, login & password sind admin & admin.
Thin + mod_proxy
Wir brauchen erstmal thin, als root:
# gem install thin
# thin install
# /usr/sbin/update-rc.d -f thin defaults
Das ermöglicht ein bequemes invoke-rc.d thin start|stop und startet thin beim Hochfahren automatisch.
# pwd # -> /home/www/posativ.org/redmine
# thin config -C /etc/thin/redmine.yml
Erstellt dann die basic-Konfiguration, die ich dann wie folgt abgewandelt habe:
---
address: 127.0.0.1
pid: tmp/pids/thin.pid
timeout: 30
port: 3001
wait: 30
log: log/thin.log
max_conns: 1024
require: []
environment: production
max_persistent_conns: 512
daemonize: true
chdir: /home/www/posativ.org/redmine
prefix: /redmine
Über prefix lässt sich ganz leicht die Sub-URI definieren. Jetzt noch thin starten:
# invoke-rc.d thin start
[start] /etc/thin/redmine.yml ...
Die dazugehörige lighttpd.conf sieht so aus:
server.modules += ("mod_proxy")
$HTTP["url"] =~ "/redmine" {
proxy.server = ("" =>
(("host" => "127.0.0.1", "port" => 3001)))
}
Wenn das klappt, dann gibt’s jetzt hier ein Redmine (Theme) zu sehen. Hurraa!