Webserver installieren (Debian)

Anleitung für die Installation eines Linux-basierten Webserver mit Apache, MySQL und PHP (LAMP).

Zuletzt verwendet für Debian 8.0 mit Apache 2.4.10.

Vorbereitungen

Feste IP-Adresse vergeben

Siehe Netzwerk einrichten (Debian)

Sources List aktualisieren

nano /etc/apt/sources.list

Folgende Zeilen (DE-Sources) hinzufügen:

deb http://ftp.de.debian.org/debian stable main contrib

deb http://ftp.debian.org/debian/ wheezy-updates main contrib

Danach noch ausführen: apt-get update

Apache Installation

groupadd www-data
usermod -a -G www-data www-data	      # Benutzer www-data in Gruppe www-data anlegen
apt-get install apache2	

Konfigdateien bearbeiten: Auf Debian:

nano /etc/apache2/sites-enabled/000-default.conf

Folgende Zeile dekommentieren und eintragen:

ServerName server.domain.com

Optional Aliase einfügen:

ServerAlias server www.domain.com server.domain.com (Unklar, ob tatsächlich notwendig)

SSL-Konfiguration bearbeiten:

nano /etc/apache2/sites-available/default-ssl

Folgendes einfügen:

ServerAlias server www.domain.com server.domain.com (Unklar, ob tatsächlich notwendig)

Noch ausführen (unbekannt, wofür - evtl. für Owncloud?):

a2enmod rewrite
a2enmod headers

Apache Web-Rootverzeichnis /var/www/html

Beim Aufruf von https://www.example.com/ sollte der Server antworten:

It works!
This is the default web page for this server.
The web server software is running but no content has been added, yet.

PHP Installation

apt-get install php5 php5-gd php5-curl php5-mysql php5-intl php-xml-parser  php-pear php-apc curl libcurl3 

PHP-Mail Installation

Für PHP-Skripte, die das PEAR Mail Package nutzen (PHP-Funktion "Mail()") wird noch folgendes Paket benötigt:

apt-get php-mail

MySQL / MariaDB Installation

Nachfolgende Anleitung zeigt die Installation für MySQL.

Alternativ kann auch stattdessen MariaDB als MySQL-Kompatibles Datenbanksystem benutzt werden - vgl. Anleitung weiter unten.

Installation MySQL

apt-get install mysql-server mysql-client

Alternative Installation MariaDB

apt-get install mariadb-server mariadb-client

Status der Datenbank überprüfen

service mysql status

phpMyAdmin

Installation

apt-get install php5-mysql phpmyadmin

phpMyAdmin mit Apache verbinden, falls nicht in den Dateien in /etc/php5/apache2/conf.d/???-mysql???.ini bereits geschehen.

nano /etc/php5/apache2/php.ini

Neue Zeile im Bereich "Dynamic Extensions" hinzufügen:

extension=mysql.so

Zugriff auf lokales Netz beschränken

Konfigdatei öffnen:

nano /etc/phpmyadmin/apache.conf

Folgenden Abschnitt einsetzen (und bestehendes überschreiben):

<Directory /usr/share/phpmyadmin>
	Options FollowSymLinks
	DirectoryIndex index.php
	Order Deny,Allow
	Deny from all
	Allow from 192.168.1.0/24  <- Hier natürlich euer Netzwerk rein
	<IfModule mod_php5.c><

phpMyAdmin aufrufen über: http://ip-adresse-deines-servers/phpmyadmin/

Selbst signiertes Zertifikat erzeugen

Zertifikat erstellen siehe Zertifikat erstellen (Debian)

DynDNS einrichten

Einrichtung von dynamischem DNS siehe Dynamisches DNS (Debian)

HTTPS in Apache einrichten

Schritt 1: Standardkonfiguration erweitern

nano /etc/apache2/ports.conf

Folgendes muss mindestens vorhanden sein:

NameVirtualHost *:80
Listen 80

<fModule mod_ssl.c> 
	Listen 443 
</IfModule>

Anschließend ausführen:

service apache2 restart

Nun muss das SSL (Secure Socket Layer für die sichere Verbindung) aktiviert und der Webserver nochmals neu geladen werden:

a2enmod ssl
service apache2 restart

Schritt 2: SSL-Site konfigurieren

nano /etc/apache2/sites-available/default-ssl

Folgende Zeilen müssen vorhanden sein.

<VirtualHost *:443>  oder <VirtualHost _default_:443>
	SSLEngine On 
	SSLCertificateFile /etc/apache2/ssl/cert.pem 
	DocumentRoot /var/www 
</virtualhost>

Wenn die .pem-Datei den privaten Key und das Zertifikat enthält, dann kann man die folgende Zeile auskommentieren:

# SSLCertificateKeyFile xxx

Site aktivieren und Apache neu starten:

a2ensite default-ssl
service apache2 reload

Verzeichnisse mit Passwort schützen

Basic Authentication

adduser user1
emacs /etc/passwd                             # user1 auf /usr/sbin/nologin stellen
htpasswd -c /path/to/dir/.htpasswd user1   # -c = Neue htpasswd erstellen

Zusätzlich neue Config-Datei erstellen:

emacs /etc/apache2/conf-available/security-directories.conf

Mindest-Inhalt der Datei:

<Directory /path/to/dir/>
    AuthType Basic
    AuthName "Restricted Content"
    AuthUserFile /path/to/dir/.htpasswd
    Require valid-user
</Directory>

Zusätzliche Config-Datei aktivieren

a2enconf security-directories
service apache2 reload

Proxy in Apache konfigurieren

Ein Proxy ermöglicht es, um auf einem neben einem Server-Dienst auch noch weitere Webseiten zu publizieren.

Nachfolgende Konfigurationsanleitung zeigt, wie ein Server-Dienst auf einem Port auf Localhost bereit gestellt wird, und Apache Webserver Anfragen an einen internen Virtual Host weiter leitet, der so konfiguriert ist, dass die Anfragen an den Port auf Localhost weiter geleitet werden.

Apache-Module aktivieren:

a2enmod proxy proxy_http proxy_wstunnel
sudo systemctl restart apache2

Konfiguration des Webservers:

<IfModule mod_ssl.c>                                                                                               
    <VirtualHost *:443>                                                                                            
            ServerName <subdomain.domain.tld>
            ServerAdmin webmaster@localhost

            SSLEngine on
            # SSLCertificateFile  /etc/ssl/cert-selfsigned.pem
            SSLCertificateFile  /etc/letsencrypt/live/<subdomain.domain.tld>/fullchain.pem
            SSLCertificateKeyFile   /etc/letsencrypt/live/<subdomain.domain.tld>/privkey.pem

            ServerSignature Off

            ProxyPassMatch   ^/(sockjs\/.*\/websocket)$ ws://127.0.0.1:3001/$1
            ProxyPass        /.well-known/acme-challenge !
            ProxyPass        / http://127.0.0.1:3001/
            ProxyPassReverse / http://127.0.0.1:3001/

            Alias /.well-known/acme-challenge /var/www/html/.well-known/acme-challenge

            <Directory "/var/www/html/.well-known/acme-challenge">
                Options None
                AllowOverride None
                Require all granted
                AddDefaultCharset off
            </Directory>
    </VirtualHost>
</IfModule>

Seite aktivieren:

a2ensite <subdomain.domain.tld-Konfigfile>

Apache neu starten:

systemctl restart apache2