Skip to content. | Skip to navigation

Personal tools

Navigation

You are here: Home / LAMP TUTORIAL

LAMP TUTORIAL

by Jörg Baach last modified Oct 23, 2013 09:29 AM
a rather outdated tutorial

 

LAMPS - Tutorial : Unter Linux Apache, Mysql, PHP und SSL installieren

Version 1.1

Inhalt

Inhalt
Einleitung
Was brauch ich denn so?
Installation
Konfiguration
Starten
Links

Einleitung

Achtung: dieses Tutorial ist veraltet. Vielleicht komme ich dazu, es irgendwann zu aktualisieren.

 

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 mich 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.

 

  1. 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
  2. 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
  3. 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
  4. 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

       

  5. 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
  6. 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

     

  7. 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.

  1. 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
  2. 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/

 



Creative Commons License
This work is licensed under a Creative Commons License.

 

Add comment

You can add a comment by filling out the form below. Plain text formatting.

Question: What is 6 times 7?
Your answer: