lighttpd + MySQL + Ruby on Rails + FastCGI

Ich habe diese Anleitung geschrieben, da ich kein wirklich durchgehendes Tutorial gefunden habe, welches das Aufsetzen eines lighttpd Webservers mit FastCGI und Ruby on Rails beschreibt. Ich verwende Fußnoten um auf andere Anleitungen zu verweisen, die mir nützlich waren und die dir vielleicht auch weiterhelfen.

Als Ausgangsposition solltest du ein funktionierendes Linuxsystem haben. Ich nutze für diese Anleitung Debian 4.0 Etch in der Minimalinstallation. Es kann also sein das du gegebenenfalls die Befehle anpassen, einen anderen Paketmanager nutzen oder andere Paketnamen verwenden musst oder manche Pakete einfach schon vorhanden sind.

lighttpd installieren

Als erstes benötigst du ein paar Pakete um lighttpd kompilieren zu können.  (1)

sudo apt-get install build-essential libpcre3-dev zlib1g-dev libbz2-dev subversion libssl-dev debhelper

die neueste Lighttpd Version. Geh auf http://www.lighttpd.net/download und kopiere dir den Downloadlink. Bei mir ist die 1.4.20 die aktuellste Version. Hol dir das Paket, entpacke es und wechsel in das entpackte Verzeichnis.

wget http://download.lighttpd.net/lighttpd/releases-1.4.x/lighttpd-1.4.28.tar.gz
tar -xzf lighttpd-1.4.28.tar.gz
cd lighttpd-1.4.28

Mit einem einfachen

./configure

kannst du testen welche Pakete dir noch fehlen.  Wenn das fehlerfrei durchläuft, kannst du dich um das Paket bauen kümmern.

svn checkout svn://svn.lighttpd.net/lighttpd/branches/post-upload-cleanup/debian debian
nano debian/changelog

Füge jetzt ganz oben folgendes ein:

lighttpd (1.4.28) unstable; urgency=low

  * updated to 1.4.28

 -- Your Name <[email protected]>  Mon, 9 Feb 2009 17:48:00 -0000

Achte darauf, dass du die Version einträgst, die du runtergeladen hast. Jetzt noch schnell kopieren

cp debian/changelog changelog

Jetzt als root folgendes ausführen:

dpkg-buildpackage

Jetzt wird lighttpd kompiliert. Nachdem es fertig ist, wechsele ein Verzeichnis höher und installiere das Paket.

cd ..
dpkg -i lighttpd_1.4.28_i386.deb

Nun ist lighttpd erfolgreich auf deinem System!

MySQL installieren

Hier sollte ein einfaches

apt-get install mysql-server

genügen.  Der Benutzer root erhält hierbei standardmässig ein leeres Passwort. Wenn dir das zu unsicher ist oder du deine Datenbank mit Programmen wie phpmyadmin öffentlich zugänglich gemacht hast solltest du mit

mysqladmin -u root -p password "geheim"

ein root-Passwort vergeben. Wenn du Rails nur mal auf deinem lokalen Rechner testen willst, kann du diesen Schritt übersrpingen. ((http://wiki.ubuntuusers.de/MySQL#Benutzer))

Ruby on Rails installieren

Hole dir als erstes die neueste Version von Ruby auf http://www.ruby-lang.org/de/downloads/. Bei mir ist das Ruby 1.8.7-p72.

wget ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7-p72.tar.gz
tar -xzf ruby-1.8.7-p72.tar.gz
cd ruby-1.8.7-p72

Nun musst du die ganze Sache wieder kompilieren und installieren. Hier kann es wieder sein, dass der configure Befehl abbricht, weil Pakete fehlen, diese eventuell noch per apt-get install nachinstallieren.

./configure
make
make install

Unter Debian/Ubuntu bietet sich statt dem letzten Befehl ein "checkinstall" an um ein Paket zu erstellen und dieses zu installieren. (ggf. muss hier dann vorher ein "sudo apt-get install checkinstall" ausgeführt werden)

Wenn alles ohne Fehler durchläuft, hast du ein funktionierendes Ruby.

Nun brauchst du noch RubyGems,  Ruby's eigenen Paketmanager. Dieser funktioniert genauso wie aptitude, bloß halt für Ruby. Du kannst dir die aktuelle Version auf http://rubyforge.org/frs/?group_id=126 runterladen. Nach dem Download kannst du RubyGems dann direkt installieren.

wget http://rubyforge.org/frs/download.php/45905/rubygems-1.3.1.tgz
tar -xzf rubygems-1.3.1.tgz
cd rubygems-1.3.1
sudo ruby setup.rb

Bei manchen System kann es notwendig sein ein --prefix=/usr an den letzten Befehl anzuhängen.

Jetzt kannst du alle benötigten Gem-Pakete und deren Abhängigkeiten per

gem install rails rake mysql fcgi

installieren. Hier kann es passieren, dass mysql und fcgi nicht installiert werden können. Mit

apt-get install libmysqlclient15-dev libfcgi-dev

kann dieses Problem behoben werden.

Ein Railsprogramm erstellen

Jetzt kannst du mit

rails myfirstapp -D -d mysql

deine erste Ruby on Rails Applikation erstellen. Der Name kann natürlich auch anders lauten. Die Option -D erzeugt den Dispatcher für unsere FCGI-Anbindung. Die Option -d mysql erzeugt eine Anbindung an die MySQL-Datenbank. http://guides.rubyonrails.org/gettingstartedwithrails.html#creatingtheblog_application

http://guides.rubyonrails.org/gettingstartedwithrails.html#configuringadatabase

Jetzt kannst du mit

rake db:create

eine Datenbank für deine Railsapplikation erzeugen.

Mit FastCGI und lighttpd starten

Um dein Rails-Programm mit FastCGI ((http://www.fastcgi.com/)) und lighttpd nutzen zu können, musst du jetzt nur noch eine Änderung in der lighttpd.conf vornehmen.

nano /etc/lighttpd/lighttpd.conf

Am Ende der Datei folgendes einfügen: ((https://help.ubuntu.com/community/RubyOnRails#Lighttpd))

server.modules   += ( "mod_fastcgi", "mod_rewrite" )

$HTTP["host"] == "localhost" {
        server.document-root = "/home/to/myfirstapp/public/"

        server.dir-listing          = "disable"
        server.error-handler-404 = "/dispatch.fcgi"

        fastcgi.server      = ( ".fcgi" => ( "myfirstapp" => (
                "min-procs"       => 1,
                "max-procs"       => 1,
                "socket" => "/tmp/ruby-myfirstapp.socket",
                "bin-path" => "/home/to/myfirstapp/public/dispatch.fcgi",
                "bin-environment" => ( "RAILS_ENV" => "development" )
        ) ) )

}

Jetzt den Server mit

/etc/init.d/lighttpd restart

neustarten und im Browser localhost aufrufen. Herzlichen Glückwunsch, du hast es geschafft! Viel Spass beim Rails nutzen!