18.2 Einrichten des Servers
Wahl der Server-Software
Die Schwierigkeit liegt u. a. an den vielen Möglichkeiten, den Server zu installieren. Standardlösungen, wie z. B. der Einsatz von Apache mit FastCGI, haben sich nicht als praxistauglich erwiesen.
Sie müssen nicht nur entscheiden, welches Betriebssystem zum Einsatz kommen soll und welche Webserver-Software installiert werden soll, sondern auch, mit welcher Schnittstelle die Rails-Applikation an den Webserver angebunden wird.
Load Balancing
Um der Belastung von vielen Anfragen standhalten zu können, muss meist auch ein sogenanntes Load Balancing konfiguriert werden, das die Anfragen an verschiedene Instanzen Ihrer Rails-Applikation verteilt, die entweder auf einem oder auf verschiedenen Servern installiert sind. Die folgende Auflistung zeigt die möglichen Varianten:
- Server-Betriebssystem:
Linux (z. B. Debian, Ubuntu, Red Hat, Fedora, SUSE, ...), Unix (freeBSD, Solaris, ...), Windows, OS X Server und weitere
- Webserver:
Apache, Lighttpd, Nginx
- Schnittstelle zwischen Webserver und Applikation:
CGI, FastCGI, Mongrel
- Datenbanksystem:
MySQL, PostgreSQL, Oracle
- Load Balancing:
Pound, Apache-Modul mod_proxy_balancer
Jede mögliche Kombination zu zeigen, würde den Rahmen dieses Buches sprengen. Deshalb werden wir eine aus unserer Erfahrung Best-Practice-Lösung zeigen, die auch von vielen anderen Entwicklern so eingesetzt wird:
- Server-Betriebssystem:
Ubuntu Linux oder Debian Linux
- Webserver:
Apache 2.2
- Schnittstelle zwischen Webserver und Applikation:
Mongrel
- Datenbanksystem:
MySQL
- Load Balancing:
Apache-Modul mod_proxy_balancer
Nginx
Der russische Webserver Nginx wird aufgrund seiner Geschwindigkeit und seines schlanken Aufbaus unter Administratoren und Rails-Entwicklern immer beliebter. Jedoch gibt es noch keine ausreichende Dokumentation. Deshalb werden wir den Apache-Webserver einsetzen, der aufgrund seiner großen Verbreitung sehr gut dokumentiert ist und für den zahlreiche Bücher auf dem deutschen Markt verfügbar sind (z. B. »Apache 2« von Sascha Kersken im Verlag Galileo Press).
Ubuntu 7.10
Da wir mindestens Apache Version 2.2.x und Ruby 1.8.6 benötigen, ist es empfehlenswert, mindestens Ubuntu 7.10 einzusetzen. Die hier beschriebene Anleitung wurde auf Ubuntu 7.10 durchgeführt.
Der Grund, warum wir Ubuntu gegenüber Debian den Vorzug geben, liegt darin, dass Ubuntu aktuellere Pakete anbietet. Dies ist insbesondere für Rails wichtig.
Virtualisierung |
Auf dedizierten Servern ist es sehr empfehlenswert, eine Virtualisierungssoftware, wie z. B. XEN, VMWare, Virtual Linux oder OpenVZ einzusetzen. Hiermit ist es möglich, mehrere virtuelle Server auf einer Hardware zu installieren. Virtuelle Server eignen sich auch zum Üben. Wenn etwas schiefgeht, werden die anderen virtuellen Server nicht betroffen. XEN und VMware sind bei den Server-Admnistratoren sehr beliebt. Wenn Sie jedoch nur Linux-basierte virtuelle Server benötigen, empfehlen wir die Verwendung von OpenVZ (siehe http://openvz.org/ ). |
Root-Zugang
Wir gehen im Folgenden davon aus, dass Ihr Provider Ihnen Ubuntu installiert und Ihnen einen Root-User-Zugang zur Verfügung gestellt hat.
Loggen sich zunächst mit Ihrem Root-User auf den Server ein. Gegebenenfalls können Sie mit dem Befehl sudo -s einen Root-Zugang erhalten.
Deploy-User anlegen
Wir werden einen User mit dem Namen deploy anlegen. Unter diesem Usernamen werden die Übertragungen auf den Server ausgeführt. Sie können auch einen beliebigen anderen Usernamen verwenden.
Listing User deploy anlegen
adduser deploy
Adding user `deploy' ...
Adding new group `deploy' (1000) ...
Adding new user `deploy' (1000) with group `deploy' ...
Creating home directory `/home/deploy' ...
Copying files from `/etc/skel' ...
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Changing the user information for deploy
Enter the new value, or press ENTER for the default
Full Name []:
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Is the information correct? [y/N] y
Paketmanagement konfigurieren
sources.list
Als Nächstes aktualisieren wir das Paketmanagement, das für die Installation der Server-Software zuständig ist. In /etc/apt/sources.list wird festgelegt, von welchen Quellen (Repositories) die Pakete geladen werden. Um sicherzustellen, dass alle Pakete, die wir in diesem Kapitel installieren, auch verfügbar sind, ersetzen wir den Inhalt der Datei /etc/apt/sources.list durch folgenden Inhalt:
Listing /etc/apt/sources.list
# Ubuntu supported packages # GPG key: 437D05B5 deb http://de.archive.ubuntu.com/ubuntu gutsy main restricted deb http://de.archive.ubuntu.com/ubuntu gutsy-updates main restricted deb http://security.ubuntu.com/ubuntu gutsy-security main restricted deb-src http://de.archive.ubuntu.com/ubuntu gutsy main restricted deb-src http://de.archive.ubuntu.com/ubuntu gutsy-updates main restricted deb-src http://security.ubuntu.com/ubuntu gutsy-security main restricted # Ubuntu community supported packages # GPG key: 437D05B5 deb http://de.archive.ubuntu.com/ubuntu gutsy universe multiverse deb http://de.archive.ubuntu.com/ubuntu gutsy-updates universe multiverse deb http://security.ubuntu.com/ubuntu gutsy-security universe multiverse deb-src http://de.archive.ubuntu.com/ubuntu gutsy universe multiverse deb-src http://de.archive.ubuntu.com/ubuntu gutsy-updates universe multiverse deb-src http://security.ubuntu.com/ubuntu gutsy-security universe multiverse
Beachten Sie, dass dies nur für Ubuntu 7.10 (alias Gutsy) korrekt ist. Anders als hier abgedruckt, müssen Sie die Quellenangaben immer in eine Zeile schreiben, so dass jede Zeile mit deb * beginnt. Wir konnten das aus Platzgründen hier leider nicht realisieren. Weitere Informationen zu sources.list finden Sie unter http://railsbuch.de/urls/12 .
Paketsystem aktualisieren
Nachdem wir die Quellen geändert haben, muss das Paketsystem entsprechend aktualisiert werden:
Listing Server updaten
aptitude update aptitude upgrade
Compiler und Tools
Für einige Erweiterungen (z. B. Mongrel) werden Compiler (z. B. GCC) und passende Tools (make) benötigt, die wir einfach wie folgt installieren können:
Listing Compiler und Tools installieren
aptitude install build-essential wget
Mit dem Tool wget können wir u. a. Dateien von anderen Servern downloaden.
Pakete mit aptitude statt mit apt-get installieren |
Das Paketverwaltuns-Tool aptitude ist vor dem älteren Tool apt-get zu bevorzugen, da u.a. Konflikte besser gelöst werden. |
Installation von Subversion und Erstellung eines Repository
Installation
Im Folgenden werden Sie den einfachsten Weg kennenlernen, um Subversion auf dem Server zu installieren und ein Repository für den User deploy zu erstellen. Es wird hier nicht gezeigt, wie man die Subversion-Repositories mittels Apache, SSL und Authentifizierung für mehrere Benutzer konfiguriert.
Die Installation des Subversion-Servers kann leicht durch die Installation des gleichnamigen Pakets erfolgen. Die Subversion-Repositories legen wir im Verzeichnis /srv/svn an:
Listing Subversion-Paket installieren
aptitude install subversion mkdir /srv/svn
Erstellung eines Repository
Die Erstellung eines Repository erfolgt mit dem Befehl svnadmin create <name-des-repository> . Anschließend setzen wir die Rechte auf den User deploy:
Listing Anlegen eines Repository für das Beispielprojekt Railsair
svnadmin create /srv/svn/railsair chown -R deploy:deploy /srv/svn/railsair
svn import
Das Repository ist nun eingerichtet und kann auf dem Client mit dem Befehl svn import importiert werden (siehe Abschnitt 7.13).
Der Zugriff auf das Repository erfolgt bei unser Konfiguration über die URL svn+ssh://domain/srv/svn/railsair mit dem User deploy.
Installation von Ruby und Co.
Bevor wir Ruby on Rails installieren, müssen vorher noch der Ruby-Interpreter und der Paketmanager RubyGems installiert werden. Außerdem werden weitere erforderliche Pakete installiert:
Listing Installation von Ruby
aptitude install ruby1.8 ruby1.8-dev ruby rdoc irb irb1.8 \ libopenssl-ruby libzlib-ruby zlib1g
Neueste Version von RubyGems
Da wir unbedingt die neueste Version von RubyGems benötigen, werden wir diesmal die Installation manuell vornehmen:
Listing Manuelle Installation von RubyGems
wget \ http://rubyforge.org/frs/download.php/29548/rubygems-1.0.1.tgz tar xzvf rubygems-1.0.1.tgz cd rubygems-1.0.1 ruby setup.rb gem update --system
Falls der letzte Befehl scheitert, muss ein symbolischer Link erstellt werden:
sudo ln -s /usr/bin/gem1.8 /usr/bin/gem
MySQL
Installation
MySQL5
Als Nächstes installieren wir den Datenbankserver MySQL 5. Während der Installation werden Sie aufgefordert, ein Passwort für den Root-User des Datenbankservers festzulegen.
Listing Installation von MySQL 5
aptitude install mysql-server-5.0 libmysqlclient15-dev
Das Paket libmysqlclient15-dev ist u. a. für den Zugriff von Ruby auf das Datenbanksystem notwendig.
Anschließend können Sie mit mysql -uroot -p überprüfen, ob Sie sich mit dem eben festgelegten Passwort anmelden können.
Ruby-MySQL- Binding
Damit Ruby auf MySQL zugreifen kann, installieren wir ein sogenanntes Ruby-MySQL-Binding:
gem install mysql
Datenbank für das Beispielprojekt anlegen
Für unser Beispielprojekt legen wir eine Datenbank an und vergeben ein Passwort für den User railsair . Es ist empfehlenswert, für jede Datenbank einen eigenen User mit Passwort anzulegen. Wir verwenden als Usernamen den Projektnamen.
Listing Datenbank und Rechte für User railsair anlegen
#mysql -uroot -p Enter password: Welcome to the MySQL monitor. ... mysql> create database railsair; Query OK, 1 row affected (0.02 sec) mysql> grant all on railsair.* to railsair@localhost identified by 'geheim'; Query OK, 0 rows affected (0.00 sec) mysql> quit Bye
Installation von SQLite3
Keine Server-Software erforderlich
Für kleinere Applikationen kann auch SQLite3 verwendet werden. Im Gegensatz zu MySQL wird für SQLite3 keine Server-Software installiert, sondern lediglich eine Programmierbibliothek für den Zugriff auf die Datenbankdateien:
Listing Installation SQLite3
aptitude install sqlite3 libsqlite3-dev gem install sqlite3-ruby
Installation von Rails
Die Installation von Rails erfolgt über den gem -Befehl:
Listing Installation von Rails
gem install rails
Weitere RubyGem-Pakete können auch auf diese Weise installiert werden.
Installation von einer älteren Rails-Version |
Mit dem Befehl gem install -v 1.2.6 rails können Sie die Rails-Version 1.2.6 installieren, damit auf Ihrem Server auch »ältere« Rails-Applikationen lauffähig sind. |
Installation und Konfiguration von Mongrel
HTTP-Server
Mongrel ist ein HTTP-Server, der speziell für das Hosten von Ruby on Rails und anderen Ruby-basierten Web-Applikationen entwickelt wurde. Somit kann auf den Einsatz vom langsamen CGI und dem auf dem Apache-Server fehleranfälligen FastCGI verzichtet werden.
Mehrere Mongrel-Server
Ein Mongrel-Server bzw. -Hintergrundprozess kann nur eine Rails-Applikation ausführen. Da Rails aber nur einen Benutzer gleichzeitig bedienen kann, müssen wir mehrere Mongrel-Server gleichzeitig auf dem Server (oder mehreren Servern) ausführen. Jeder Mongrel-Server wird unter einem anderen Port ausgeführt. Für die Verwaltung von mehreren Mongrel-Servern wird das RubyGem-Paket Mongrel Cluster eingesetzt.
Die Installation von Mongrel Cluster erfolgt wie folgt:
Listing Installation von Mongrel Cluster
gem install mongrel_cluster
...
Successfully installed gem_plugin-0.2.3
Successfully installed daemons-1.0.9
Successfully installed fastthread-1.0.1
Successfully installed cgi_multipart_eof_fix-2.5.0
Successfully installed mongrel-1.1.3
Successfully installed mongrel_cluster-1.0.5
...
Wie man an der Ausgabe erkennt, werden automatisch die abhängigen Pakete mitinstalliert.
Weiterer Webserver erforderlich
Obwohl Mongrel ein HTTP-Server ist, kommen wir nicht ohne einen weiteren Webserver aus. Dies hat vor allem folgende Gründe:
- zu langsam zum Ausliefern von statischen Dateien
Eine Rails-Applikation verwendet eine Reihe von statischen Dateien wie Bilder, CSS-, JavaScript-Dateien und weitere. Apache und andere Webserver können diese Dateien viel effizienter ausliefern.
- geringer Funktionsumfang
Da Mongrel ein spezialisierter HTTP-Server ist, besitzt er z. B. keine Funktion, um Weiterleitungen (Redirects) usw. zu konfigurieren.
Apache-Webserver
Wir verwenden den Apache-Webserver für unsere Rails-Applikation, um genau zwei Aufgaben zu erfüllen:
- Alle Anfragen von statischen Dateien sollen direkt vom Apache-Server ausgeliefert werden. Dazu gehören nicht nur Bilder und CSS-Dateien, sondern auch zwischengespeicherte HTML-Dateien, die durch den Caching-Mechanismus (falls aktiviert) von Rails generiert werden; siehe Kapitel 16. Apache führt diese Aufgabe schneller als Mongrel aus.
- Alle anderen Anfragen werden an einen Mongrel-Server delegiert. Da in der Regel mehrere Mongrel-Server gleichzeitig laufen, um mehrere Benutzer gleichzeitig zu bedienen, muss der Apache-Server die Anfragen entsprechend sinnvoll auf die Mongrel-Server verteilen. Dazu wird das Modul mod_proxy_balancer eingesetzt, das in Apache 2.2 integriert ist.
Abbildung Apache- und Mongrel-Server
Installation von Apache 2.2.x
Für die Installation des Apache-Webservers reicht folgender Befehl:
Listing Installation von Apache
aptitude install apache2
Module aktivieren
Damit das Verteilen (Proxy) und das Weiterleiten (Redirect) funktionieren, müssen noch Module für Apache aktiviert werden:
Listing Module aktivieren
a2enmod rewrite a2enmod proxy a2enmod proxy_http a2enmod proxy_balancer
Außerdem muss noch eine Einstellung in der Datei proxy.conf im Verzeichnis /etc/apache2/mods-available vorgenommen werden:
Ersetzen Sie die Zeilen
<Proxy *> AddDefaultCharset off Order deny,allow Deny from all #Allow from .example.com </Proxy>
durch die folgenden Zeilen:
<Proxy *> Order allow,deny Allow from all </Proxy>
Anschließend starten wir den Apache-Server mit /etc/init.d/apache2 restart neu, um die Einstellungen wirksam zu machen.
Apache testen
Rufen Sie im Webbrowser die IP-Adresse Ihres Servers auf, um die Erreichbarkeit des Webservers zu testen:
Abbildung Aufruf des Webservers nach Installation
Ihre Meinung
Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.