|
LAMPS
"Kurze Anleitung zur Installation eines LAMP Servers (Linux, Apache,
Mysql, PHP)."
Das ist der Titel einer Website von Joerg Baach, www.mediathek.de, kann
aber direkt angesteuert werden: www.baach.de. Um es kurz zu machen,
hier kommt die Startseite und wer weiterführende Informationen
möchte, sollte beide Homepages ansteuern.
LAMPS - Tutorial:
Unter Linux Apache,
Mysql, PHP und
SSL installieren
Version 1.1
Inhalt
Einleitung
Was brauch ich denn so?
Installation
Konfiguration
Starten
Links
Einleitung
Achtung: Da ich im Augenblick auf Reisen bin, kann ich leider weder
Fehler korrigieren noch emails beantworten!
Dieses kleine Tutorial soll helfen, einen LAMP Server aufzusetzen und zu
konfigurieren. Aufsetzen heist für dieses Tutorial, selber alle
Software zu compilieren und installieren (Apache, PHP, MySQL). Das ist
für die ersten Schritte mit PHP natrülich nicht unbedingt
nötig. Bei den meisten Distributionen ist jetzt schon neben einem
Apache ein mod_ssl und ein mod_php dabei. Damit kann man Anfangen.
Möchte man dann doch ein eigenes System, dann hoffe
ich daß diese Anleitung helfen wird. Dabei gehe ich
davon aus, das der geneigte Leser ("Du") sein Linux als
solches schon am laufen hat.
Das hier ist eine überarbeitete Version. Der Hauptunterschied zur
alten Version ist, daß wir
beim Apache jetzt DSO benutzen.
Bei Problemen oder Korrekturen zu diesem Mini-Tutorial kannst Du mir
gerne eine mail an php@baach.de
schicken. Leider brauche ich manchmal etwas länger, bis ich die mails
beantworten kann.
Viel Spaß und liebe Grüße,
Jörg Baach
Was brauch ich denn so?
Der Name unseres kleinen Projektes - LAMP - gibt da schon ganz gute
Hinweise. Die verschiedenen Dateien solltest Du irgendwo auf Deinem Rechner
abspeichern -bei mir ist das '/usr/local/src/lamp/tarballs'.
- Linux
-
Ist ja, wie oben definiert, schon auf Deinem Rechner installiert. Dabei
sollte es egal sein, ob Du nun ein RedHat, eine SUSE oder ein Debian
verwendest. Falls es doch Probleme gibt, schick mir bitte eine mail.
Ich persönlich habe diese Anleitung zur Verwendung mit einer SUSE 6.x
geschrieben. Praktisch ist, wenn Du schon jetzt darauf achtest die
Pakete flex, bison, xdevel und libpng installiert zu haben - daß
spart später eine Menge Ärger.
- Apache
-
Klar, der Webserver als solches tut not. Du solltest Dir die aktuellen
Quellen runterladen, im Augenblick ist das Apache 1.3.26.
Homepage:
http://httpd.apache.org
Datei:
http://httpd.apache.org/dist/httpd/apache_1.3.26.tar.gz
- Mysql
-
Mysql wird uns als Datenbankserver dienen. Dieser wird in
erstaunlicher Geschwindigkeit gepflegt - es erscheinen alle ein oder zwei
Wochen neue Versionen. Im Augenblick ist die Version 3.23.52 die empfohlene
Version.
Homepage:
http://www.mysql.com
Datei:
http://www.mysql.com/Downloads/MySQL-3.23/mysql-3.23.52.tar.gz
Mirror:
http://ftp.gwdg.de/pub/misc/mysql/Downloads/MySQL-3.23/mysql-3.23.52.tar.gz
- PHP
-
Ganz wichtig - PHP. Aktuelle Release-Version ist PHP4. Wir nehmen die
aktuelle Version 4.2.3, und vergessen auch die Dokumentation nicht.
Homepage:
http://www.php.net
Mirror: http://www.php3.de
Datei:
http://www.php3.de/distributions/php-4.2.3.tar.gz
Dokumentation:
http://www.php3.de/distributions/manual.tar.gz
( Alternativ Deutsche Doku:
http://www.php3.de/manual/de/manual.zip)
- Erweiterungen
-
Mit den oben genannten Grundkomponenten könnte man jetzt schon
aufhören, aber es gibt noch ein paar nette Zusatzmodule, die man
unbedingt mitinstallieren sollte.
- SSL-Zubehör
-
Damit der Webserver auch abhörsichere Kommunikation mit den Clients
betreiben kann, sollte er SSL sprechen können. Dies bringt man ihm am
besten mit dem mod_ssl bei. Das mod_ssl setzt wiederum openssl voraus.
Openssl liefert, soweit ich das verstehe, die
Verschlüsselungsfunktionalität, mod_ssl integriert die
Funktionalität in den Webserver.
OpenSSL - in der aktuellen Version 0.9.6g
Homepage: http://www.openssl.org
Datei:
http://www.openssl.org/source/openssl-0.9.6g.tar.gz
mod_ssl - man muß darauf achten, daß
die Datei zum jeweiligen Apache passt.
Homepage:
http://www.modssl.org
Datei:
http://www.modssl.org/source/mod_ssl-2.8.10-1.3.26.tar.gz
- GD-Library
-
Möglicherweise möchtest Du mit PHP Buttons, Statistiken oder
andere bunte Bildchen dynamisch erzeugen. Hierzu brauchst Du die
GD-Library, damit Du die "Image functions" auch benutzen kannst. Hierbei
gibt es allerdings einen echten Sprung zwischen den Versionen: während
Versionen bis einschließlich 1.5 noch GIFS erzeugen, können
Versionen danach "nur" PNG und ab 1.8 auch JPEG. Also muß man
wählen. Ich wähle 1.8.4, weil ich mit JPEG alles machen kann, was
mich mit GIF auch machen wollte, nur daß ich damit endlich auch
große und bunte Bilder bearbeiten / erzeugen kann.
Für die GD-Library wird als "integraler Bestandteil" die zlib
gebraucht. Darüber hinaus braucht man auch noch die IJG JPEG software
(libjpeg), damit GD auch was von JPEG weiß. Außerdem ist es
gerade für die Buttons noch sehr sinnvoll, und für die GD Library
notwendig, sich die freetype Library zu installieren. Damit kann man
Textelemente mit TTF-Fonts in die Bilder einbauen - damit Dein Designer
nicht immer so laut schreit. ;-)
GD-Library
Homepage:
http://www.boutell.com/gd/
Datei - Version 1.8.4:
http://www.boutell.com/gd/http/gd-1.8.4.tar.gz
Zlib - Version 1.1.4
Homepage (eher Heimverzeichnis):
http://www.gzip.org/zlib/
Datei:
ftp://ftp.uu.net/graphics/png/src/zlib-1.1.4.tar.gz
IJG JPEG software - Version 6b
Homepage: www.ijg.org
Datei:
ftp://ftp.uu.net/graphics/jpeg/jpegsrc.v6b.tar.gz
Freetype - in der Version 1.3.1
Homepage:
http://www.freetype.org
Datei:
ftp://freetype.sourceforge.net/pub/freetype/freetype1/freetype-1.3.1.tar.gz
Jetzt sind wir mit dem Herunterladen fertig, und können übergehen
zum nächsten Schritt, der
Installation
Wir werden jetzt nach und nach die einzelnen Elemente installieren. Die
Reihenfolge ergibt sich daraus, welche Software welche Libraries
voraussetzt. Bei den Installationspfaden verfahre ich (bis auf einige
Ausnahmen), nach dem Schema "/usr/local/'paketname'/'versionsnummer'. Dann
wird von "/usr/local/'paketname'/current" ein Link auf
"/usr/local/'paketname'/'versionsnummer' gesetzt, und im weiteren
verwendet. Schreibe ich aber jedesmal auch noch extra dabei. Ein
Hinweis noch: die ganzen Schritte hier habe ich als 'root'
ausgeführt.
- Zunächst mal die gesamte Software auspacken:
cd /usr/local/src/lamp
tar -xzf tarballs/apache_1.3.26.tar.gz
tar -xzf tarballs/freetype-1.3.1.tar.gz
tar -xzf tarballs/gd-1.8.4.tar.gz
tar -xzf tarballs/mod_ssl-2.8.10-1.3.26.tar.gz
tar -xzf tarballs/mysql-3.23.52.tar.gz
tar -xzf tarballs/openssl-0.9.6g.tar.gz
tar -xzf tarballs/php-4.2.3.tar.gz
tar -xzf tarballs/zlib-1.1.4.tar.gz
tar -xzf tarballs/jpegsrc.v6b.tar.gz
- MySQL
Hierbei wird Mysql unter dem entsprechenden Pfad installiert, allerdings
als Datenverzeichnis "/var/mysql/data" verwendet. Dieses Datenverzeichnis
bleibt auch bei späteren Upgrades innerhalb der Versionsnummer
gleich.
Am Ende starten wir den Server und vergeben für Root ein Passwort,
damit nicht jeder in die Datenbank gelangt.
cd /usr/local/src/lamp/mysql-3.23.52/
./configure --prefix=/usr/local/mysql/3.23.52 --localstatedir=/var/mysql/data
make
make install
ln -s /usr/local/mysql/3.23.52 /usr/local/mysql/current
mkdir /var/mysql
mkdir /var/mysql/data
scripts/mysql_install_db
/usr/local/mysql/current/bin/safe_mysqld &
/usr/local/mysql/current/bin/mysqladmin -u root password 'geheim'
Wer will, kann noch den Startup-File an die entsprechende Stelle
kopieren, damit beim nächsten mal auch der Serverstart klappt. Bei
SUSE wie folgt:
cp support-files/mysql.server /etc/rc.d/init.d
chmod 744 /etc/rc.d/mysql.server
cd /etc/rc.d/rc2.d
ln -s ../init.d/mysql.server S20mysql.server
ln -s ../init.d/mysql.server K20mysql.server
- OpenSSL
OpenSSL wird hier unterhalb von /usr/local/openssl/0.9.6g installiert.
OpenSSL wird ja, wie oben schon gesagt, von mod_ssl gebraucht, daher zuerst
OpenSSL.
cd /usr/local/src/lamp/openssl-0.9.6g
./config --prefix=/usr/local/openssl/0.9.6g
make
make test
make install
ln -s /usr/local/openssl/0.9.6g /usr/local/openssl/current
- Apache und SSL
Zunächst wird der Apache zusammen mit mod_ssl gebaut. Wir erstellen
eine DSO-Version des Apache, was im wesentlichen heist, dass Zusatzmodule
wie z.B. PHP nicht fest in den Server eingebacken werden, sondern vom
Server dynamisch zugeladen werden. Das hat in der Anwendung den Effekt,
daß man beim Update von PHP nur noch PHP neu bauen muß, und
nicht mehr den ganzen Apache. Ich finds praktisch.
- mod_ssl und Apache vorbereiten
Hier werden zunächst die Quellen des Apache gepatcht.
Praktischerweise werden gleichzeitig schon alle für den
Apache-Configure-Aufruf notwendigen Parameter mitgegeben, d.h. es werden in
einem Schritt die Apache-Quellen gepatcht und konfiguriert. (Alle
Anweisungen ab dem prefix sind für den Indianer).
Besonderheiten: Es wird mit datadir als Pfad für die Webdokumente
/var/www angegeben, d.h die Dokumente, die über den Webserver
erreichbar sein werden, müssen in diesem Verzeichnis liegen. Dies
entspricht nicht der Vezeichnisstruktur, wie sie der von SuSE gelieferte
Apache verwendet!
cd /usr/local/src/lamp/mod_ssl-2.8.10-1.3.26
./configure --with-apache=../apache_1.3.26 \
--with-ssl=../openssl-0.9.6g \
--prefix=/usr/local/apache/1.3.26 \
--datadir=/var/www \
--enable-module=most \
--enable-shared=max \
--enable-module=ssl
- Apache bauen
Nun braucht nur noch der Apache gebaut werden. Ein Befehl, gut zu
schaffen :-).
cd /usr/local/src/lamp/apache_1.3.26
make
- Zertifikat erzeugen
Es wird ein Zertifikat zur späteren Verwendung für
SSL-Sitzungen erzeugt. Dieses wird von der eigenen CA unterschrieben, die
in diesem Schritt gleich mit angelegt wird.
make certificate TYPE=custom
Dabei wie folgt auf die Fragen antworten (Anführungszeichen
weglassen), und natürlich was sinnvolles einsetzen.
Zuerst wird nach Angaben zu der CA gefragt (Schritte 1 - 4).
Signature Algorithm: R
Country Name: "DE"
State or Province: "NRW"
Localty Name: "Rheda-Wiedenbrueck"
Organization Name: "Mediathek"
Organizational Unit Name: "CA"
Common Name: "Mediathek CA"
Email Address: "ca@mediathek.de"
Certificate Validity: "365"
Certificate Version: 3
Dann wird Schlüssel und selbssigniertes Zertifikat der CA erzeugt.
Hiernach wird dann nach Angaben zum Serverzertifikat gefragt.
Country Name: "DE"
State or Province: "NRW"
Localty Name: "Rheda-Wiedenbrueck"
Organization Name: "Mediathek"
Organizational Unit Name: "Webmaster"
Und jetzt ganz wichtig: den Namen angeben, unter dem später Dein
Rechner per SSL erreichbar sein wird (bei mir:
https://intern.mediathek.de).
Common Name: "intern.mediathek.de"
Email Address: "www@intern.mediathek.de"
Certificate Validity: "365"
Certificate Version: 3
Zuletzt wird gefragt, ob die Schlüssel verschlüsselt werden
sollen. Zunächst wird nach der CA gefragt, dann nach dem
Serverschlüssel. Da es sich bei mir um ein Testsystem handelt,
wähle ich keine Verchlüsselung. Bei einem Produktionssystem
sollte natürlich die Verschlüsselung eingeschaltet werden,
wenngleich dann auch bei jedem Neustart des Apache das Passwort für
den Server-Key eingeben werden muss.
Encrypt the private key now: n
Encrypt the private key now: n
- Apache installieren
Nun noch schnell den Apache installiert.
make install
ln -s /usr/local/apache/1.3.26 /usr/local/apache/current
- Libraries für Zusatzfunktionen in PHP bauen
Zunächst erstellen wir einmal von PHP benötigte Programme und
Libraries. Meiner Erfahrung nach kommt es hier eher zu Stress als nachher
bei PHP. Was bedeutet, dass man kann hier auch gut einen Teil
überspringen kann, wenn man ihn nicht braucht. Im Augenblick ist die
Entscheidung eher übersichtlich - wir bauen nur die GD-Library. Es
kann auch gut sein, dass Die schon bei Deiner Distro dabei ist, und Du die
vorhandene verwenden möchtest. Dann ueberspringe einfach diesen ganzen
Schritt.
- Freetype
Installation unter /usr/local. Freetype wird bei der Installation von
GD gebraucht. Ja, ich finde auch, daß der make-Aufruf krank
aussieht.
cd /usr/local/src/lamp/freetype-1.3.1
./configure --prefix=/usr/local
make
make install
Kommt es an dieser Stelle einem Abbruch bei dem Meldungen in der Form
"X11/cursorfont.h: No such file or directory" auftauchen, so liegt es
daran, dass die notwendigen X-Pakete nicht installiert sind. Ein guter
Kandidat ist das 'xdevel'-rpm. Solltest Du dieses nachinstallieren,
solltest Du im .../lamp/freetype... Verzeichnis die Dateien config.status
und config.cache löschen, bevor Du mit 'make clean' und './configure'
von vorne beginnst.
- Zlib
Hier wird die zlib unter /usr/local installiert.
cd /usr/local/src/lamp/zlib-1.1.4
./configure
make
make install
- IJG JPEG software
Die libjpeg wird unter /usr/local installiert. Stört sich
eigentlich auch nicht mit der von SUSE installierten libjpeg.
cd /usr/local/src/lamp/jpeg-6b
./configure \
--enable-shared \
--enable-static \
--prefix=/usr/local
make
make test
make install
- GD
Hier muss das Makefile angepasst werden. Wichtig sind die Zeilen mit
CFLAGS und LIBS. Die Defaulteinstellung benutzt nicht libjpg, libpng,
freetype - was wir aber genau benutzen wollen. Daher die vorgegebenen
Zeilen kommentieren, und die Alternativen auskommentieren.
Bei den INCLUDEIDRS und den LIBDIRS habe ich jeweils einen Zusatz in der
Form '-I/usr/local/include/freetype2' bzw. '-L/usr/local/lib' gemacht. Hat
geholfen :-). Zuletzt bitte auch nochmal nachschauen, ob
INSTALL_LIB=/usr/local/lib, INSTALL_INCLUDE=/usr/local/include und
INSTALL_BIN=/usr/local/bin gesetzt ist.
cd /usr/local/src/lamp/gd-1.8.4
make
make install
- PHP vorbereiten und kompilieren
Hier ist wichtig, daß der config-file-path auf /etc gesetzt ist.
Man sollte sich diesen Ort unbedingt merken, sonst wird man später
verweifeln.
cd /usr/local/src/lamp/php-4.2.3
./configure \
--with-apxs=/usr/local/apache/current/bin/apxs \
--with-mysql=/usr/local/mysql/current \
--with-zlib \
--with-ftp \
--with-gd \
--with-jpeg-dir=/usr/local/lib \
--enable-versioning \
--enable-track-vars=yes \
--enable-url-includes \
--enable-sysvshm=yes \
--enable-sysvsem=yes \
--with-config-file-path=/etc
make
- PHP installieren, Restarbeiten und Apache starten
Es wird das PHP-Modul installiert, und das wichtige PHP-Handbuch noch in
den Pfad für die Webdokumente kopiert.
Außerdem wird eine php.ini nach /etc kopiert.
Wichtig vielleicht auch noch die "chown" Anweisung. Die Dokumente brauchen
wirklich nicht root gehören. Statt dessen wähle ich hier als
Gruppe wwwadmin - bei mir ist das Verzeichnis /var/www via Samba
freigegeben, und alle Nutzer der Gruppe wwwadmin haben Zugriffsrechte auf
dieses Verzeichnis.
make install
cp /usr/local/src/lamp/php-4.2.3/php.ini-dist /etc/php.ini
mkdir /var/www/htdocs/phpmanual
cd /var/www/htdocs/phpmanual
tar -xzf /usr/local/src/lamp/tarballs/manual.tar.gz
ln -s manual.html index.html
chown -R nobody.wwwadmin /var/www
chmod 700 /usr/local/apache/current/bin/apachectl
Die nächsten Schritte braucht man nur machen, wenn dies die erste
LAMP installation ist.
ln -s /usr/local/apache/current/bin/apachectl /etc/rc.d/init.d/apachectl
cd /etc/rc.d/rc2.d
ln -s ../init.d/apachectl S20apachectl
ln -s ../init.d/apachectl K20apachectl
Eventuell wird noch ein alter Apache beim Start automatisch aufgerufen -
daher bei Bedarf die entsprechenden alten Einträge löschen:
rm S20apache
rm K20apache
Arbeitet man auf der Maschine lokal, und loggt sich grafisch ein, kann
man die links entsprechend auch noch für den Runlevel 3 setzen, also
den Runlevel mit graphischem Login.
cd /etc/rc.d/rc3.d
ln -s ../init.d/apachectl S20apachectl
ln -s ../init.d/apachectl K20apachectl
rm S20apache
rm K20apache
Zuletzt sollte man in der /usr/local/apache/current/bin/apachctl noch
einen Parameter "-DSSL" in den httpd-Aufruf unterhalb der Abteilung start
einbauen. Dies ist notwendig, damit der Apache auch mit
SSL-Unterstützung angestartet wird.
start)
if [ $RUNNING -eq 1 ]; then
echo "$0 $ARG: httpd (pid $PID) already running"
continue
fi
#Original:
#if $HTTPD ; then
#gaendert, -DSSL eingefuegt:
if $HTTPD -DSSL; then
echo "$0 $ARG: httpd started"
else
echo "$0 $ARG: httpd could not be started"
ERROR=3
fi
;;
Konfiguration
Nun müssen eigentlich nur noch zwei Schritte unternommen werden:
Konfiguration der httpd.conf für den Apache und Konfiguration der
php3.ini.
- httpd.conf
Editiere die /usr/local/apache/current/conf/httpd.conf, die zentrale
Konfigurationsdatei für Deinen Apache. Ersetze zunächst alle
Vorkommnisse von "1.3.26" durch "current", damit Du in Zukunft bei neueren
Versionen die httpd.conf nur umkopieren brauchst.
Nun in der httpd.conf die Zeile mit
AddType application/x-httpd-php .php
finden, und das Kommentarzeichen entfernen. Ich selbst füge gerne
noch ein paar weitere Endungen ein, damit alle möglichen Seiten
geparst werden:
AddType application/x-httpd-php .php .phtml .php3 .html .htm
Nicht schlecht ist es auch noch, wenn man neben einer index.html auch
eine index.php3 als Default-Index-Seite konfiguriert. Husch husch zur Zeile
mit DirectoryIndex, und wie folgt ergänzt:
DirectoryIndex index.html index.php index.htm
- php.ini
Die /etc/php.ini sollte soweit eigentlich ganz in Ordnung sein. Trotzdem
mal reinschauen. Erläuterungen findest Du im PHP3-Manual (Du weist
doch noch, wo Du es hinkopiert hast, oder?).
Starten
Und nun das hoffentlich finale Ereignis. Den Server anstarten.
/etc/rc.d/init.d/apachectl start
Dann mal mit
lynx localhost
probieren, ob's funktioniert. Wenn nicht, ist
/usr/local/apache/current/logs/error_log Deine erste Anlaufstelle.
Bei wem beim Start vom Apache eine Fehlermeldung der Form
Cannot load /usr/local/apache/current/libexec/libphp4.so into server:
libmysqlclient.so.10: cannot open shared object file: No such file or directory
/etc/init.d/apachectl start: httpd could not be started
erscheint, der sollte in der Datei /etc/ld.so.conf noch den Pfad
/usr/local/mysql/current/lib/mysql
hinzufügen, und mit dem Aufruf von
ldconfig
die Bibliotheken verfügbar machen.
Links
Hier noch ein paar Links auf weiterführende Seiten zu diesem Thema.
- phpMyAdmin
-
Wer länger als auch nur 5 Minuten Spaß an seinem LAMP System
haben will, wird um dieses Tool nicht herumkommen wollen. Grafisches Mysql
Frontend fürs Web. Natürlich in PHP. Wirklich gut.
Homepage:
http://www.phpwizard.net/phpMyAdmin/
- Thawte
-
Steht der LAMP Server im Internet, und man will den Lesern das
Akzeptieren der CA-Zertifikate irgendwelcher Pseudo-CAs ersparen (mit so
einer Pseudo-CA haben wir ja oben das Server-Zeritifikat unterschrieben),
sollte man sich ein Zertifikat von einer CA holen, deren Zertifikate mit
Netscape oder IE ausgeliefert werden.
Thawte sitzt in Südafrika,
macht gute Checks, ist relativ billig, außerdem gibts da kostenlose
Client-Zertifikate.
Homepage: http://www.thawte.com
- mod_dav
-
Und wie bekommt man die Seiten auf den Server? Normalerweise per ftp.
Fortgeschritten per webdav. Ist eine interessante Erweiterung des
HTTP-Protokolls, die es einem erlaubt, vernünftig Datein via Apache
auf den Server aufzuspielen und gemeinsam an Dateien zu arbeiten.
Homepage: http://www.webdav.org/mod_dav/
|