LAMP (Deutsch)

From ArchWiki

Jump to: navigation, search
i18n
English
Español
Deutsch
Italiano
Türkçe
Русский
Česky
简体中文
Under construction / In Bearbeitung +++ This page is under construction and not completely translated yet, so feel free to join, edit and correct things on this page +++ Diese Seite ist noch in Bearbeitung und noch nicht vollständig übersetzt, also keine Scheu vorm Mitmachen, Bearbeiten und Dinge verbessern +++

Contents

Einführung

Diese Seite erklärt die Einrichtung eines Apache Webservers auf einem Arch Linux System. Ausserdem wird beschrieben, wie PHP und MySQL optional dazu installiert und in den Apache Server eingebunden werden. Diese Kombination wird häufig als LAMP bezeichnet (Linux, Apache, MySQL, PHP).

Falls der Webserver nur für Entwicklungs- und Testzwecke benötigt wird, könnte Xampp die bessere Wahl sein.

Installation

# pacman -Sy apache php php-apache mysql

Wir gehen davon aus, Apache, PHP und MySQL auf einmal zu installieren. Je nach Wunsch lassen sich Apache, PHP und MySQL aber auch einzeln installieren und die Anweisungen dann einfach in den entsprechenden Abschnitten im unteren Teil dieser Seite nachlesen.

Note: Neuer Standard Benutzer und Gruppe: Statt der Gruppe "nobody" läuft Apache jetzt standardmäßig unter Benutzer/Gruppe "http".Die httpd.conf muss angepasst werden, wenn "nobody" weiterhin genutzt werden soll.

Konfiguration

Apache

  • Erstellen des Benutzers http (dieser könnte bereits bestehen):
# useradd http
  • Dann muss die folgende Zeile in die Datei /etc/hosts eingefügt werden. (Gibt es die Datei nicht, so muss sie erstellt werden):
127.0.0.1  localhost.localdomain   localhost

Note: Soll ein anderer Hostname verwendet werden, muss er noch angehängt werden:

127.0.0.1  localhost.localdomain   localhost meinhostname
  • Bearbeitung von /etc/rc.conf: Falls ein Hostname gesetzt ist, sollte die Variable HOSTNAME die selbe sein; anderenfalls, sollte "localhost" benutzt werden:
#
# Networking
#
HOSTNAME="localhost"
  • Es muss sichergestellt sein, dass der Hostname in /etc/hosts erscheint, sonst lässt sich Apache nicht starten. Alternativ kann die Datei /etc/httpd/conf/httpd.conf als root bearbeitet werden und das folgende Modul auskommentiert werden:
LoadModule unique_id_module        modules/mod_unique_id.so

Danach sollte es folgendermaßen aussehen:

#LoadModule unique_id_module        modules/mod_unique_id.so


  • Der folgende Befehl, im Terminal als root ausgeführt, startet den HTTP-Server:
# /etc/rc.d/httpd start
  • Apache sollte jetzt ausgeführt werden. Ein Testbesuch mit einem Webbrowser auf http://localhost/ sollte die Apache Testseite anzeigen.
  • Um Apache beim hochfahren zu starten, muss die Datei /etc/rc.conf als root bearbeitet werden und der httpd Daemon hinzugefügt werden:
DAEMONS=(... httpd ...)

Oder diese Zeile in die Datei /etc/rc.local eingefügen:

/etc/rc.d/httpd start
  • Um Benutzer Verzeichnisse zu nutzen (z.B. ~/public_html), die per http://localhost/~user aufgerufen werden können, verfügbar zu machen, müssen die folgenden Zeilen in /etc/httpd/conf/extra/httpd-userdir.conf einkommentiert werden:
UserDir public_html

und

<Directory /home/*/public_html>
  AllowOverride FileInfo AuthConfig Limit Indexes
  Options MultiViews Indexes SymLinksIfOwnerMatch ExecCGI
  <Limit GET POST OPTIONS PROPFIND>
    Order allow,deny
    Allow from all
  </Limit>
  <LimitExcept GET POST OPTIONS PROPFIND>
    Order deny,allow
    Deny from all
  </LimitExcept>
</Directory>

Es muss sichergestellt sein, dass die Rechte des home-Verzeichnis so gesetzt sind, dass Apache darauf zugreifen kann. Das home-Verzeichnis und ~/public_html muss für andere ausführbar sein. Das wird hiermit erledigt:

$ chmod o+x ~
$ chmod o+x ~/public_html

Es gibt sicherlich andere, sichere Wege die Rechte hierfür zu setzen, zum Beispiel mit der Erstellung einer speziellen Gruppe, die es nur Apache und dem Benutzer selbst erlaubt auf das Verzeichnis zuzugreifen... Je nach dem wie paranoid man ist.

Erweiterte Optionen

Diese Optionen in /etc/httpd/conf/httpd.conf könnten interessant sein:

 # Listen 80

Das ist der Port, auf den Apache lauscht. Beim Internetzugriff über einen Router muss der Port freigegeben sein.

 # ServerAdmin sample@sample.com

Das ist die Administrator E-Mail-Adresse, die z.B. auf Fehlerseiten angezeigt wird.

 # DocumentRoot "/srv/http"

In diesem Verzeichnis sollten die Webseiten liegen. Das Verzeichnis kann auch geändert werden, doch darf dann nicht vergessen werden das

<Directory "/srv/http">

zu ändern, oder es erscheint ein 403 Error (Mangel an Zugriffsrechten), wenn versucht wir auf das neue Stammverzeichnis zuzugreifen.

PHP

PHP ist jetzt quasi sofort ohne großen Aufwand verfügbar.

  • Diese zeilen müssen in /etc/httpd/conf/httpd.conf eingefügt werden:

WICHTIG: Die Zeilen sollten am Ende der "LoadModule"-Liste oder am Ende der Datei platziert werden.

LoadModule php5_module modules/libphp5.so
Include conf/extra/php5_module.conf
  • Falls das DocumentRoot ausserhalb von /home/ liegt, muss es zu open_basedir in /etc/php/php.ini hinzugefügt werden, wie hier:
open_basedir = /home/:/tmp/:/usr/share/pear/:/pfad/zum/documentroot

WICHTIG: Das sollte nicht mehr notwendig sein (18.08.2009)
Vorschlag - Das DocumentRoot wird wie folgend hinzugefügt: Das ist der Standard

open_basedir = /srv/http:/home/:/tmp/:/usr/share/pear/
  • Den Apache neustarten, um die Änderungen wirksam zu machen (als root):
# /etc/rc.d/httpd restart
  • Ein PHP Test mit einem simplen, aber sehr informativen Skript:
<?php
  phpinfo();
?>

Die Datei als phpinfo.php und nach /srv/http oder nach ~/public_html kopieren, falls eine solche Konfiguration erlaubt wurde. Save this file as test.php and copy to /srv/http/ or to ~/public_html if you permitted such a configuration.

WICHTIG: Falls der PHP Code nicht ausgeführt wird, muss Folgendes zur /etc/httpd/conf/httpd.conf hinzugefügt werden:

 AddType application/x-httpd-php .php
 AddType application/x-httpd-php-source .phps

Fortgeschrittene Optionen

  • Daran denken einen File Handler für .phtml in /etc/httpd/conf/extra/php5_module.conf, falls das benötigt wird:
DirectoryIndex index.php index.phtml index.html
  • Falls das libGD Modul benötigt wird, muss das php-gd Paket installiert und in der /etc/php/php.ini einkommentiert werden:
;extension=gd.so

wird zu

extension=gd.so

Acht geben, welche Erweiterung einkommentiert wird, da diese manchmal zuvor in einem erklärenden Kommentar vor der Zeile, die einkommentiert werden soll, erwähnt wird.

Note: PHP-gd benötigt libpng, libjpeg und freetype2
  • Falls Fehler angezeigt werden sollen, um den PHP-Code von Fehler zu befreien, muss diese Zeile der /etc/php/php.ini geändert werden:
display_errors = Off

wird zu

display_errors = On
  • Falls das mcrypt Modul gewünscht wird, muss das Paket php-mcrypt installiert und in der /etc/php/php.ini einkommentiert werden:
;extension=mcrypt.so

wird zu

extension=mcrypt.so

MySQL

  • MySQL muss, wie im MySQL-Wiki beschrieben, konfiguriert werden.
  • In der /etc/php/php.ini (befindet sich auf älteren Systemen in /usr/etc) muss die folgende Zeile einkommentiert werden (Das ; muss entfernt werden):
extension=mysql.so
  • Achtung: Einige Nutzer haben einen Schreibfehler in dieser Zeile entdeckt. Es muss sichergestellt sein, dass es ;extension=mysql.so heißt und nicht ;extension=msql.so.
  • Für die Webskripte können Benutzer mit weniger Rechten mit dem bearbeiten der Tabellen in der mysql Datenbank hinzugefügt werden. Danach muss MySQL neu gestartet werden, damit die Änderungen wirksam werden. Nicht vergessen, die Tabelle mysql/users zu überprüfen. Falls es dort einen zweiten Eintrag für root gibt und beim Hostnamen kein Passwort gesetzt ist, kann womöglich jeder vollen Zugriff erlangen. Siehe im nächsten Abschnitt mehr darüber.
  • Im Terminal (als root) ausführen:
# /etc/rc.d/mysqld start
  • Der Apache kann auch einfach neu gestartet werden. Wieder im Terminal (als root) ausführen:
# /etc/rc.d/httpd restart
  • MySQL sollte jetzt laufen. Jetzt muss das root Passwort gesetzt werden und kann dann mit folgendem getestet werden:
# mysqladmin -uroot password password
# mysql -uroot -ppassword

Type exit to exit from the CLI MySQL client

  • Edit /etc/rc.conf (to start MySQL at boot):
DAEMONS=(... mysqld ...)

Or add this line to rc.local:

/etc/rc.d/mysqld start
  • You can get the "error no. 2013: Lost Connection to mysql server during query" message instantly whenever you try to connect to the MySQL daemon by TCP/IP. This is the TCP wrappers system (tcpd), which uses the hosts_access(5) system to allow or disallow connections.
  • If you're running into this problem, be sure to add this to your /etc/hosts.allow file:
 # mysqld : ALL : ALLOW
 # mysqld-max : ALL : ALLOW
 # and similar for the other MySQL daemons.
  • Notes: The examples above are the simplest case, telling tcpd to allow connections from anywhere. You may wish to use a more-appropriate choice of permissible sources instead of ALL. Just make sure that localhost and the IP address (numeric or DNS) of the interface by which you connect are specified.
  • You might also need to edit /etc/my.cnf and comment out the skip-networking line as such:
skip-networking

to

#skip-networking

More Resources

Personal tools