Webserver aufsetzen

Ich betreibe mein Blog ja auf einem fertig installierten und konfigurierten Server eines Providers. Auf solch einem Server ein Content Management System zu installieren ist ja nicht gerade die Schwierigkeit. Da ich jetzt auf Arbeit ein kleines Web-Projekt zu Testzwecken gestartet habe und somit keinen Provider hab, war ich „gezwungen“ den Server vom Betriebssystem bis zur letzten Extension selbst aufzusetzen. Ich mach das natürlich nicht zum ersten Mal, aber zu behaupten, ich mach es regelmäßig und ohne Zwischenfälle, wäre glatt gelogen. So auch diesmal – ich hab wieder fleißig Google bemüht und in diversen Foren und Blogs die notwendigen Infos zusammengetragen oder die Fehler durch Trial & Error behoben. Aus diesem Grund will ich das ganze hier (kurz) dokumentieren.

[Update – 04.Juli 2010 – ich hab den Link zu einer Quelle (Webmin installieren) deaktiviert, weil die verlinkte Seite, derzeit mit Malware infiziert zu sein scheint. Also Copy&Paste und Nutzung auf eigene Gefahr.]

[Update – 10. August 2010 – Da ich zur Zeit einen normalen PC als Webserver aufsetze sind mir noch ein paar ergänzende Details aufgefallen, die hier nicht fehlen sollten.]

Ich betreibe mein Blog ja auf einem fertig installierten und konfigurierten Server eines Providers. Auf solch einem Server ein Content Management zu installieren ist ja nicht gerade die Schwierigkeit. Da ich jetzt auf Arbeit ein kleines Web-Projekt zu Testzwecken gestartet habe und somit keinen Provider hab, war ich „gezwungen“ den Server vom Betriebssystem bis zur letzten Extension selbst aufzusetzen. Ich mach das natürlich nicht zum ersten Mal, aber zu behaupten, ich mach es regelmäßig und ohne Zwischenfälle, wäre glatt gelogen. So auch diesmal – ich hab wieder fleißig Google bemüht und in diversen Foren und Blogs die notwendigen Infos zusammengetragen oder die Fehler durch Trial & Error behoben. Aus diesem Grund will ich das ganze hier (kurz) dokumentieren.

Besonderheit an meinem System war (für mich), dass ich das ganze nicht auf einem Standard-PC gemacht hab, der als „Server“ verwendet wird, sondern auf einem HP Proliant ML370G5 – sicherlich mit Kanonen auf Spatzen geschossen, aber das gute Stück steht sonst nur ungenutzt rum, da kann es auch als Webserver sein Leben fristen.
Des Weiteren befindet sich der Server in einem „abgeschotteten“ Netz. Die Kommunikation mit dem Internet ist nur über einen Proxy-Server möglich, an dem man sich mit Passwort anmelden muss.

Betriebssystem

Da ich der Auffassung bin, dass so ein Webserver ohne grafische Oberfläche auskommen muss und überhaupt: Auf einen Server gehört m.E. kein Windows.
Also ist meine Wahl auf Debian 5 gefallen. Schnell das Netinst-Iso runtergeladen und ab dafür. Dabei handelt es sich um ein ca. 135MB großes CD-Image, dass nur mit dem Notwendigsten bestückt ist, um eine Installation zu starten. Alle weiteren Pakete werden während der Installation aus dem Internet geladen.
Ich hab eine „Standard“-Installation angestoßen und schon nach wenigen Schritten bin ich auf das erste Problemchen gestoßen. Während der Hardwareerkennung wird nach Firmware gefragt. Da es sich um einen Proliant-Server handelt, hat mich das aber nicht wirklich gewundert. Im DebianWiki gibt es eine Kompatibilitätsseite für HP Proliant und von dort gelangt man zum inoffiziellen Firmware-Paket (zip). Das ganze entpackt und auf einen Stick gezogen und in der Installation die Firmware vom Medium laden lassen. Der Installer erkennt den Stick automatisch und findet selbstständig in der Ordnerstruktur das passende Treiber-Paket (übrigens für die nicht ganz unwichtigen Netzwerkkarten).

Im Zuge des Prozesses muss eine Netzwerkkarte konfiguriert werden. Sofern man nicht via DHCP versorgt wird, müssen hier also IP, Netzmaske, Gateway und DNS angegeben werden.
Bei der Partitionierung der Festplatte(n) bin ich den Vorschlägen des Installers gefolgt und hab quasi gar nicht partitioniert, da es auf dem System nur einen Nutzer geben wird. Eine Webprovider würde das natürlich nicht machen, sondern zumindest die home-Verzeichnisse durch Partitionierung trennen.
Schließlich wird man gefragt, was man eigentlich installieren will. Grafische Oberfläche, Webserver, Datenbankserver, Fileserver, Druckserver … . Mit den Pfeiltasten zum Navigieren und der Leertaste zum An- und Abwählen hab ich hier die grafische Oberfläche abgewählt und Web- und Datenbankserver angewählt. Letzteres aus dem Grund, dass ein CMS für gewöhnlich auf einer Datenbank arbeitet. Standardmäßig wird als Datenbanksystem PostgreSQL installiert. Weiß man aber, dass das CMS der Wahl nur bsp. auf MySQL läuft, kann man den Datenbankserver auch abwählen und später manuell nachinstallieren.

HTTP-Proxy während der Installation

Wie oben erwähnt, steht mein Server hinter einem HTTP-Proxy, an dem ich mich auch noch anmelden muss. Debian fragt den Nutzer während der Installation, ob so ein Proxy eingestellt werden soll. Da der Dialog sehr minimal ist, ist man leider gezwungen Benutzernamen und Passwort im Klartext in der Proxy-Adresse einzutragen:

http://user:pw@host:port/

Aptitude – also die Paketverwaltung von Debian merkt sich diese Proxyangaben in der Datei

/etc/apt/apt.conf

im Klartext.

Fernadministration

Der Server wird in Zukunft in einem Serverraum stehen. Damit man nicht jedesmal dorthin muss und sich womöglich noch einen Schnupfen von der Klimaanlage holt, empfiehlt es sich, Möglichkeiten für die Fernadministration zu schaffen. Als erstes wäre da die Secure Shell zu nennen, mit der man von jedem anderen Rechner im Netzwerk (also auch von Windows-Rechnern aus) eine gesicherte Shell-Sitzung starten kann. Zu diesem Zweck reicht es mit dem Befehl

server:~# apt-get install ssh

das Stellvertreter-Paket ssh abzurufen. Mit diesem Paket werden automatisch weitere Bibliotheken etc. installiert. Nun noch mit

server:~# /etc/init.d/ssh start

den Dienst starten und schon kann man sich z.B. mit PuTTy auf dem Server anmelden.

Um das Ganze noch etwas komfortabler zu machen – vor allem das Wuseln in Konfigurationsdateien – installiere ich gern Webmin. Webmin ist eine Administrationsschnittstelle auf Web-Basis. Es ist modular aufgebaut und bietet für System, Hardware und Serverdienste diverse Module.
Webmin selbst wird nicht über die Repositories verteilt kann aber ohne Probleme als deb-Paket heruntergeladen und installiert werden. Wäre da nicht der Proxy. Damit wget nicht am Proxy scheitert, muss die Umgebungsvariable http_proxy belegt werden.

server:~# export http_proxy="http://user:pw@host:port"

anschließend wget mit der Option -proxy=on aufrufen. Für den Rest der Sitzung ist nun der Proxy aktiviert. Mit den Optionen -proxy-user und -proxy-passwd kann man die Anmeldedaten losgelöst von der Proxyadresse angeben. Das ist dann zwar immernoch Klartext, steht dann aber nicht in mehr Umgebungsvariable drin. Mit der Option -proxy=off kann man die Nutzung des Proxys wieder abschalten.
Auf die Art und Weise kann man also Webmin direkt runterladen

server:~# wget http://prdownloads.sourceforge.net/webadmin/webmin_XX.deb

wobei XX durch die aktuelle Version von Webmin zu ersetzen ist. Anschließend das Paket mit

server:~# dpkg --install webmin_XX.deb

installieren. [Update] Bei der Installation, kann es sein, dass dpkg sich über nicht aufgelöste Abhängigkeiten beschwert. Da dpkg das nicht von selbst kann, muss man u.U. anschließend 

server:~# apt-get install -f

ausführen. Dieser Befehl installiert fehlende Pakete nach und konfiguriert Webmin. Die Webminoberfläche ist nun über

http://serverhost:10000/

erreichbar. In der Konfiguration von Webmin (auch dafür gibt es ein eigenes Modul) lässt sich der Zugriff auf diese Seite dann bequem auf einzelne IPs oder Adressbereiche beschränken (Vorsicht: Nicht sich selbst aussperren!). Betreibt man auf dem Webserver oder idealerweise sogar davor eine Firewall, kann man dies auch dort definieren:

iptables -A INPUT -t tcp -d ziel-ip --dport 10000 -s quell-ip -j ACCEPT

Diese Regel wäre für eine Firewall auf dem Webserver serlbst. Auf einer dedizierten Firewall würde man statt INPUT die FORWARD-Kette ansprechen.

Serverdienste einrichten

Mein CMS der Wahl ist Joomla. Damit hab ich schon viel gearbeitet und auch wenn ich kein PHP-Programmierer bin, find ich mich darin gut zurecht. Joomla läuft auf jedem Webserver mit MySQL und PHP.

Der Apache2-Dienst wird bereits installiert, wenn man beim Aufsetzen des Servers den Rechner als Webserver einrichten lässt. Die aktuelle PHP-Version muss man u.U. in aptitude noch nachziehen. Die Daten für die Webseiten liegen dann standardmäßig im Ordner

/var/www/

Für Joomla braucht man nun noch einen MySQL-Server. Mit

server:~# apt-get install mysql-server

wird dieser installiert. Wie bei ssh ist dies ein Stellvertreterpaket, dass die aktuelle MySQL-Version (bzw. die notwendige, wenn das Paket benötigt wird um Abhängigkeiten aufzulösen) installiert. Bei der Einrichtung noch ein root-Passwort vergeben (das ist dann der Superuser des Datenbanksystems) und der Rest lässt sich über Webmin machen.
Dort kann man nun schon direkt eine leere Datenbank erstellen sowie einen Nutzer, der nur auf der Datenbank operieren darf. Grund dafür ist, dass man in Joomla einen Nutzer angeben muss, dessen Passwort im Klartext in der configuration.php gespeichert wird und ich möchte nicht, dass hier der Superuser der Datenbank steht, der ja prinzipiell alles darf.

Bevor es an die Installation von Joola selbst geht, muss man PHP noch beibringen, dass es ein Datenbanksystem gibt. Mit

server:~# apt-get install php5-mysql

wird ein Paket eingerichtet, das genau das tut. Es stellt die Verbindung aus PHP-Skripten zur Datenbank her. Ist das Paket nicht installiert, beschwert sich Joomla bei der Installation, dass kein MySQL vorhanden wäre.

Joomla installieren

Zu guter Letzt kann man nun ganz bequem aus der Konsole die aktuelle Joomla-Version auf deutsch herunterladen:

server:~# wget http://www.joomla.de/images/eigene-dateien-joomla/↵
Joomla_1.5.XX-Stable-Full_Package_German.zip

und mit

server:~# unzip Joomla_1.5.18-Stable-Full_Package_German.zip -d /var/www/[ggf. Zielordner]

direkt in den Zielordner im www-Verzeichnis entpacken. Dazu muss man ggf. noch unzip installieren.

Da Joomla als Benutzer www-data agiert, kriegt das gesamte Verzeichnis noch einen neuen Besitzer und Gruppe und schließlich die Rechte zum Scheiben, Lesen und Ausführen:

server:~# chgrp -r www-data /var/www/[ggf. Zielordner]
server:~# chown -r www-data /var/www/[ggf. Zielordner]
server:~# chmod -R 755 /var/www/[ggf. Zielordner]

Kurz zur Erklärung: chgrp ändert die besitzende Gruppe, chown den Besitzer und chmod die Rechte auf den angegebenen Ordner. Die Option -r führt diese Operation rekursiv auf alle Unterordner und enthaltenen Dateien aus. Bei chmod heißt diese Option -R, weil das kleine r für die Zuordnung vom Leserecht reserviert ist. Um den Befehl kurz zu halten, habe ich die Rechte im Oktal-Modi angegeben. Die drei Ziffern stehen also der Reihenfolge nach für Besitzer, Gruppe und Jeden. Man kann die Rechte Lesen (4), Schreiben (2) und Ausführen (1) vergeben. Durch aufaddieren der zu setzenden Rechte, erhält man die kennzeichnende eindeutige Ziffer. Der Besitzer der Dateien und Ordner darf alles (7=4+2+1=Lesen+Schreiben+Ausführen), die Gruppe und alle anderen dürfen Lesen und Ausführen (5=4+1=Lesen+Ausführen). Also im Ergebnis: 755.

Ab jetzt kann man sich von der Konsole lösen und über den Browser der Wahl direkt auf die Joomla-Installation zugreifen. Wie man Joomla installiert ist beispielsweise hier ausführlich beschrieben und ansonsten selbsterklärend.

SEO und mod_rewrite

Möchte man lesbare Links (also SEF – Search Engine Friendly), aktiviert man dies in der Joomla-Konfiguration und benennt die htaccess.txt in .htaccess gem. Anleitung um. Ergebnis: es geht nichts mehr. Grund dafür ist, dass der jungfräuliche Apache das Modul rewrite noch gar nicht kennt. Dem Apache bringt man das wie folgt bei:

server:~# updatedb
server:~# locate mod_rewrite.so

Diese Befehle dienen erstmal dazu, das gesuchte Modul zu finden. Als Ergebnis sollte in etwa

/usr/lib/apache2/modules/mod_rewrite.so

herauskommen. Im nächsten Schritt wird die Datei rewrite.load im unten angegebenen Ordner angelegt und befüllt.

server:~# cd /etc/apache2/mods-enabled/
server:~# touch rewrite.load
server:~# vi rewrite.load

In die Datei wird nun die Zeile

LoadModule rewrite_module /usr/lib/apache2/modules/mod_rewrite.so

eingetragen. Unter Umständen variiert der angegebene Pfad, je nachdem, was locate weiter oben ausgegeben hat. Als nächstes mit

server:~# vi /etc/apache2/sites-available/default

die Einstellungen bearbeiten. Irgendwo in der geöffneten Datei gibt es die Zeilen

Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all

In der zweiten Zeile ersetz man nun None durch all, so dass dort steht

Options Indexes FollowSymLinks MultiViews
AllowOverride all
Order allow,deny
allow from all

Die Datei speichern und abschließend den Webserver neu starten:

server:~# /etc/init.d/apache2 restart

Das war es und die Links sollten nun lesbar sein und funktionieren.

Quellen sofern nicht im Text genannt

Und weil ich wie gesagt, kein Ober-Nerd bin und alles auswendig weiß, sind hier meine Quellen, die mir beim Aufsetzen geholfen haben:

wget und die Sache mit dem Proxy
http://blog.taragana.com/index.php/archive/how-to-use-wget-through-proxy/

mod_rewrite aktivieren
http://www.lavluda.com/2007/07/15/how-to-enable-mod_rewrite-in-apache22-debian/

Webmin installieren
http://www.debianadmin.com/webmin-installation-and-configuration-in-debian-and-ubuntu-linux.html

1 Comment

  • […] Das Aufsetzen eines Joomla-tauglichen Webservers habe ich ja schonmal ausführlich beschrieben. Jetzt stand ich vor der Aufgabe, diesen Webserver SSL-tauglich zu machen. Ich muss zugeben, von SSL und dem Erstellen von Zertifikaten nur wenig Ahnung zu haben. Dementsprechend bin ich auch erstmal einem Tutorial gefolgt, dass im Nachhinein betrachtet sehr rudimentär ist: Ich hatte ein Zertifikat erstellt, hier was kopiert, da was symbolisch verlinkt, den Apache-Webserver etwas umkonfiguriert und SSL lief. Mit Firefox war dieses Tutorial einigermaßen brauchbar. Ich brauchte das Zertifikat nur einmalig genehmigen und es lief. Der Internet Explorer sieht das allerdings etwas anders. Bei jedem neuen Besuch der Seite, beschwerte dieser sich über Zertifikatsfehler, gegen die auch das Importieren des Zertifikats nicht half. […]

Post a Comment