mecker. mecker. mecker.

Redmine (+sqlite3) + Lighttpd + Thin

Heute mal eine Rarität. Während das Internetz zu 99% An­lei­tun­gen 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 Be­nut­zer­do­ku­men­ta­ti­on von nginx… erm… etwas dünn (faktisch null). Nun habe ich wohl merk­wür­di­ge Vor­stel­lun­gen, 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 In­ter­pre­ter auch Bloatware Scheiße ist. Ach, und als häufig genutzte Da­ten­bank­ba­ckends kommen noch leicht­ge­wich­ti­ge, re­la­tio­na­le Da­ten­ban­ken 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--.

Pre­re­qui­si­tes

Wir brauchen sqlite, headers und ‘nen Ruby-In­ter­pre­ter (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 re­gel­rech­te Whitelist, welche De­pen­den­cies funk­tio­nie­ren. Ich in­stal­lie­re 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 in­stal­lie­ren

Mein Webserver-Kon­fi­gu­ra­ti­on 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 Ver­zeich­nis 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 in­stal­lie­ren, 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 in­of­fi­zi­el­len 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 ver­ge­wis­sern, 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 au­to­ma­tisch.

# pwd # -> /home/www/posativ.org/redmine
# thin config -C /etc/thin/redmine.yml

Erstellt dann die basic-Kon­fi­gu­ra­ti­on, die ich dann wie folgt ab­ge­wan­delt 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 da­zu­ge­hö­ri­ge 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!

blog comments powered by Disqus