Inhaltsverzeichnis

Howto Lighttpd 1.4.23 + PHP5 + MYSQL + SSL + Perl

Author: F4RR3LL|sven
E-Mail: sven.richter@nixhelp.de
Stand: 23.07.2009



1.0 Download der Sourcen und Abhängigkeiten

aptitude -y install zlib1g libmysqlclient15-dev libpcre3-dev zlib1g-dev libbz2-dev \
libssl-dev debhelper libgtkhtml2-0 libgtkhtml2-dev gcc g++ flex libcurl3-dev libxpm-dev apache2-utils \
php5-cgi php5-gd php5-common php5-mysql psmisc openssl ssl-cert build-essential \
mysql-common mysql-server mysql-server-5.0 phpmyadmin 

Quellcode Lighttpd 1.4.25 runterladen.
Auf der Seite des Herstellers bitte vorher nachsehen, ob Updates oder eine neue Version des Lighty verfügbar ist.

cd /usr/src/
wget http://download.lighttpd.net/lighttpd/releases-1.4.x/lighttpd-1.4.23.tar.gz
wget http://download.nixhelp.de/sonstiges/lighttpd-1.4.7.tar.gz

Im Teil

1.1 Entpacken der Pakete

tar zxf lighttpd-1.4.23.tar.gz
tar zxf lighttpd-1.4.7.tar.gz

cp -R lighttpd-1.4.7/debian lighttpd-1.4.23
cd lighttpd-1.4.23/

Du fragst dich bestimmt, wieso muss ich die Version 1.4.7 runterladen. Es liegt daran, dass es in den neuen Sourcen vom Lighty kein 'debian' Verzeichnis mehr mit den Files die man zum erstellen eines .deb braucht gibt. Diese müssten entweder manuell erstellt werden oder man benutzt die Dateien aus einer älteren Version. Um die Geschichte zu vereinfachen, hab ich mich für die letztgenannte Variante entschieden.

1.2 Erläuterungen zu den Dateien im Debian Verzeichnis

Diese Dateien werden unseren Bedürfnissen angepasst

Datei Erklärung
changelog Informationen über Maintainer sowie Dateiinformation zum DEB
control Hier werden die Abhängigkeiten des Pakets zum bauen festgelegt
dirs Dateiverzeichnisse die bei der Installation erstellt werden wie htdocs, logs etc
lighttpd.conf Die Konfigurationsdatei des Lighty
lighttpd.postinst Postinstallationsskript für den Lighty
rules Wie der Name bereits sagt… welche Funktionen der Lighty bekommen soll wie ipv6 Support

2.0 Bearbeiten der Dateien im Debian Verzeichnis

Wir beschreiben nun die Installation mit PHP5.

2.1 Changelog

So könnte die changelog nach dem editieren aussehen. Dabei muss der Syntax sowie das Format genauso beachtet werden wie beschrieben. Nach dem editieren diese Datei ganz oben einfügen und abspeichern

|debian/changelog
lighttpd (1.4.23) unstable; urgency=low
 
  * updated to 1.4.23
 
 -- Max Mustermann <max@mustermann.tld>  Thu, 23 Jul 2009 22:55:00 +0100

2.2 Control

Hier legst du die Abhängigkeiten fest, mit welcher sich das Paket installieren läßt. Die ersten beiden dürfen nicht verändert werden. Hier ein kleines Beispiel mit PHP5. Bedenke immer: die Abhängigkeiten müssen vor dem bauen bzw. vor der Installation des DEB aufgelöst werden!

|debian/control
Source: lighttpd
Section: web
Priority: optional
Maintainer: Max Mustermann <max@mustermann.tld>
Build-Depends: debhelper (>= 4.0.0), libssl-dev, zlib1g-dev, libbz2-dev, libpcre3-dev, php5-common, php5-cgi, gcc, g++
Standards-Version: 3.6.0
 
Package: lighttpd
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends}
Provides: httpd, httpd-cgi
Suggests: openssl, rrdtool
Description:  A fast webserver with minimal memory footprint
 lighttpd is intended to be a frontend for ad-servers which have to deliver
 small files concurrently to many connections.

2.3 dirs

Wenn später das erstellte Paket installiert wird, müssen auch die Verzeichnispfade eingerichtet werden. Wir legen jetzt die Pfade für die Domain, der Subdomain … fest.
Wenn man sich folgendes Beispiel anschaut, werden sich noch offene Fragen selbst beantworten. Auch hier ist wieder der Syntax zu beachten, d.h. vor Beginn einer Pfadangabe kein Slash '/' eingeben.
Die Subdomain bezeichnen wir als 'download'.

|debian/dirs
usr/bin
usr/sbin
var/www/{domain,download}/htdocs
var/www/{domain}/secure
var/log/lighttpd

2.4 lighttpd.conf

Wir erreichen nun den Punkt der Konfiguration des späteren Lighty. Es wird die Domain sowie eine Subdomain incl. PHP konfiguriert. Hier muss man jetzt sehr sorgfältig vorgehen. Einen kleinen Fehler in der lighttpd.conf könnte entweder einen instabilen Lighty oder einen Abbruch der Installation verursachen.

|lighttpd.conf für 1.4.23
server.username = "www-data"
server.groupname = "www-data"
server.document-root = "/var/www/{domain}/htdocs/"
server.pid-file = "/var/run/lighttpd.pid"
server.errorlog = "/var/log/lighttpd/error.log"
accesslog.filename = "/var/log/lighttpd/access.log"
server.stat-cache-engine = "simple"
server.event-handler = "linux-sysepoll"
server.name = "www.DEINEDOMAIN.TLD"
server.max-fds = 2048
server.follow-symlink = "enable"
server.dir-listing = "disable"
server.max-keep-alive-idle = 10
server.modules = ( 
  "mod_access",
  "mod_status", 
  "mod_alias",
  "mod_auth",
  "mod_evasive",
  "mod_fastcgi",
  "mod_rewrite",
  "mod_redirect",
  "mod_accesslog" 
)
server.indexfiles = (
  "index.xhtml",
  "index.html",
  "index.htm",
  "index.php",
)
mimetype.assign = (
 ".pdf"     => "application/pdf",
 ".sig"     => "application/pgp-signature",
 ".spl"     => "application/futuresplash",
 ".class"   => "application/octet-stream",
 ".ps"      => "application/postscript",
 ".torrent" => "application/x-bittorrent",
 ".dvi"     => "application/x-dvi",
 ".pac"     => "application/x-ns-proxy-autoconfig",
 ".swf"     => "application/x-shockwave-flash",
 ".tgz"     => "application/x-tgz",
 ".mp3"     => "audio/mpeg",
 ".m3u"     => "audio/x-mpegurl",
 ".wma"     => "audio/x-ms-wma",
 ".wax"     => "audio/x-ms-wax",
 ".ogg"     => "application/ogg",
 ".wav"     => "audio/x-wav",
 ".xbm"     => "image/x-xbitmap",
 ".xpm"     => "image/x-xpixmap",
 ".xwd"     => "image/x-xwindowdump",
 ".asc"     => "text/plain",
 ".c"       => "text/plain",
 ".h"       => "text/plain",
 ".cc"      => "text/plain",
 ".cpp"     => "text/plain",
 ".hh"      => "text/plain",
 ".hpp"     => "text/plain",
 ".conf"    => "text/plain",
 ".log"     => "text/plain",
 ".text"    => "text/plain",
 ".txt"     => "text/plain",
 ".diff"    => "text/plain",
 ".patch"   => "text/plain",
 ".ebuild"  => "text/plain",
 ".eclass"  => "text/plain",
 ".rtf"     => "application/rtf",
 ".bmp"     => "image/bmp",
 ".tif"     => "image/tiff",
 ".tiff"    => "image/tiff",
 ".ico"     => "image/x-icon",
 ".mpeg"    => "video/mpeg",
 ".mpg"     => "video/mpeg",
 ".mov"     => "video/quicktime",
 ".qt"      => "video/quicktime",
 ".avi"     => "video/x-msvideo",
 ".asf"     => "video/x-ms-asf",
 ".asx"     => "video/x-ms-asf",
 ".wmv"     => "video/x-ms-wmv",
 ".tbz"     => "application/x-bzip-compressed-tar",
 ".tar.bz2" => "application/x-bzip-compressed-tar",
 ".tar.gz"  => "application/x-tgz",
 ".bz2"     => "application/x-bzip",
 ".gz"      => "application/x-gzip",
 ".tar"     => "application/x-tar",
 ".zip"     => "application/zip",
 ".jpeg"    => "image/jpeg",
 ".jpg"     => "image/jpeg",
 ".png"     => "image/png",
 ".gif"     => "image/gif",
 ".xhtml"   => "text/html",
 ".html"    => "text/html",
 ".htm"     => "text/html",
 ".dtd"     => "text/xml",
 ".xml"     => "text/xml",
 ".css"     => "text/css",
 ".js"      => "text/javascript",
 ".deb"     => "application/x-deb",
 ".php"     => "application/x-httpd-php",
 ""         => "text/plain",
)
static-file.exclude-extensions = (
 ".fcgi",
 ".php",
)
url.access-deny = (
 "~",
 ".ini",
 ".inc",
 ".cfg",
 ".tpl",
 ".bak",
 ".dist",
 ".orig",
 ".htaccess",
 ".htpasswd",
 ".example",
 ".sample",
 ".lang",
)
cgi.assign = (
 ".pl"  => "/usr/bin/perl",
 ".cgi" => "/usr/bin/perl"
)
fastcgi.server = ( ".php" =>
 ( "localhost" => 
 ( 
 "socket" => "/tmp/php-fastcgi.socket",
 "bin-path" => "/usr/bin/php5-cgi"
        )
  )
)
$SERVER["socket"] == ":80" {
$HTTP["host"] == "download.DEINEDOMAIN.TLD" {
server.document-root = "/var/www/download/htdocs/"
server.dir-listing = "disable"
accesslog.filename = "/var/log/lighttpd/download-access.log"
        }
}
$SERVER["socket"] == ":443" {
ssl.engine = "enable"
ssl.pemfile = "/etc/lighttpd/ssl/lighttpd.pem"
$HTTP["host"] == "secure.domain.de:443" {
server.document-root = "/var/www/{domain}/secure/"
connection.kbytes-per-second = 512
evasive.max-conns-per-ip = 5
accesslog.filename = "/var/log/lighttpd/secure.log"
status.status-url = "/server-status"
status.config-url = "/server-config"
status.statistics-url = "/server-statistics"
auth.backend = "htpasswd"
auth.backend.htpasswd.userfile = "/etc/lighttpd/password/admin.pwd"
auth.require = ("/" => (
   "method"  => "basic",
   "realm"   => "admin",
   "require" => "valid-user"
))
     }
}

2.5 lighttpd.postinst

Als nächstes bearbeiten wir diese Datei. Es können auf diesem Weg noch zusätzliche Befehle ausgeführt werden, wie Änderung von Dateiberechtigungen, Erstellung eines Users oder ein komplettes chroot für den Lighty bei der Installation des DEBs. Hier findest du ein Beispiel für eine Lighty Standardinstallation:

|debian/lighttpd.postinst
#! /bin/sh
# postinst script for lighttpd
#
# see: dh_installdeb(1)
 
set -e
 
# summary of how this script can be called:
#        * <postinst> `configure' <most-recently-configured-version>
#        * <old-postinst> `abort-upgrade' <new version>
#        * <conflictor's-postinst> `abort-remove' `in-favour' <package>
#          <new-version>
#        * <deconfigured's-postinst> `abort-deconfigure' `in-favour'
#          <failed-install-package> <version> `removing'
#          <conflicting-package> <version>
# for details, see http://www.debian.org/doc/debian-policy/ or
# the debian-policy package
#
 
case "$1" in
    configure)
       chown www-data:www-data /var/log/lighttpd
       echo "Installation Lighttpd + PHP5-FCGI erfolgreich abgeschlossen"
    ;;
 
    abort-upgrade|abort-remove|abort-deconfigure)
 
    ;;
 
    *)
        echo "postinst called with unknown argument \`$1'" >&2
        exit 1
    ;;
esac
 
# dh_installdeb will replace this with shell code automatically
# generated by other debhelper scripts.
 
#DEBHELPER#
 
exit 0

2.6 Rules

Wie der Name sagt, kann man in diesem Teil den 'configure' Skript ein paar Parameter übergeben, wie z.B. IPv6 deaktivieren usw.
Hier beachte aber bitte, es kann bei bestimmten Funktionen vorkommen, dass zusätzliche Abhängigkeiten aufgelöst werden müssen, da sonst ein Bau des deb nicht ausgeführt wird. Wir richten uns weiterhin an die im Howto beschriebenen Vorgaben:
Wir suchen uns den entsprechenden Teil und editieren diesen entsprechend:

|debian/rules
config.status: configure
	dh_testdir
	# Add here commands to configure the package.
	CFLAGS="$(CFLAGS)" ./configure --host=$(DEB_HOST_GNU_TYPE) \
		--build=$(DEB_BUILD_GNU_TYPE)\
		 --prefix=/usr \
		--mandir=\$${prefix}/share/man \
		--infodir=\$${prefix}/share/info \
		--sysconfdir=/etc/lighttpd \
		--libdir=/usr/lib/lighttpd \
		--with-openssl \
		--disable-ipv6

Somit haben wir erstmal die erste Hürde genommen und können nun zum Bau des Pakets fortschreiten.

3.0 Bau des Pakets

Bevor wir nun anfangen mit dem Bau des debs, empfehle ich dringend nochmals alle editierten Dateien nach Tippfehlern oder evtl. vergessenen Funktionen zu überprüfen.

dpkg-buildpackage

Sollten keine Fehler während des Kompiliervorgangs aufgetreten sein, befindet sich eine Ebene tiefer in /usr/src das fertige DEB mit deinem persönlich angepassten Lighttpd der Version 1.4.23

cd ..
dpkg -i $DEBNAME.deb

!!!Wenn der Lighty nun mit Fehlern den Start abbricht, nicht beeinflussen lassen, alles wird gut ;)!!!

4.0 Erstellung Zertifikat und Verzeichnisschutz

SSL Zerfitikat erstellen:

mkdir -p /etc/lighttpd/ssl
 
openssl req -new -nodes -x509 -keyout /etc/lighttpd/ssl/lighttpd.pem -out /etc/lighttpd/ssl/lighttpd.pem -days 3650
chown www-data:www-data /etc/lighttpd/ssl/lighttpd.pem
chmod 600 /etc/lighttpd/ssl/lighttpd.pem

Das schaut dann folgendermaßen aus:

Country Name (2 letter code) [AU]:DE
State or Province Name (full name) [Some-State]:$deinbundesland
Locality Name (eg, city) []:$deinestadt
Organization Name (eg, company) [Internet Widgits Pty Ltd]:$deinebezeichnung(firma etc)
Organizational Unit Name (eg, section) []:$gruppenname
Common Name (eg, YOUR name) []:mail.meinedomain.tld
Email Address []:$mailadmin@mainedomain.tld


Verzeichnisschutz erstellen:

mkdir /etc/lighttpd/password/
htpasswd -cmd /etc/lighttpd/password/download.pwd $downloaduser
htpasswd -cmd /etc/lighttpd/password/admin.pwd $adminuser

Wer weitere User hinzufügen möchte, muss das 'c' weglassen, also 'htpasswd -md …'

5.0 Mysqlpass erstellen und PhpMyAdmin nutzbar machen

Per default ist mysql mit dem User root ohne Passwort, das soll so natürlich nicht sein.
Also erstellt ihr auf der Konsole nach folgendem Schema ein Passwort:

mysqladmin -u root -p password 'IhrNeuesMysqlRootPasswort'\\
Enter password: hier einfach mit Enter bestätigen, da zu Beginn noch kein Passwort gesetzt ist

PhpMyAdmin wird per default in /var/www/phpmyadmin verlinkt. Wenn ihr euch allerdings obige Lighttpd.config
anschaut, werdet ihr feststellen das wir dorthin kein öffentliches oder auch geschützes Verzeichnis legen.
Es bietet sich an phpmyadmin in den verschlüsselten Passwortgeschützten bereich zu schieben.

cp -R /var/www/phpmyadmin /var/www/{domain}/secure/

Euer PhpMyAdmin ist nun per http://secure.domain.de/phpmyadmin erreichbar.

6.0 Start / Test an go ;)

So, nachdem nun alles eingestellt ist könnt ihr euren Lighty neu starten.

/etc/init.d/lighttpd restart


Wenn dieser läuft könnt ihr den Server testen.
Legt dazu folgende Datei an →

nano /var/www/domain/htdocs/test.php


und folgender Inhalt→

<?php phpinfo(); ?>

Das ganze nun speichern.

Check : http://deinedomain.de/test.php

Viel Spaß mit Lighty

Gruß Sven

Zurück zum Index