Webserver installieren (Debian): Unterschied zwischen den Versionen

Aus MattWiki
Keine Bearbeitungszusammenfassung
 
(20 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
Anleitung für die Installation eines Linux-basierten Webserver mit Apache, MySQL und PHP (LAMP).
Anleitung für die Installation eines Linux-basierten Webserver mit Apache, MySQL und PHP (LAMP).


== Voraussetzungen ==
Zuletzt verwendet für Debian 8.0 mit Apache 2.4.10.
* Debian Wheezy 7.2
* [[Superuser (Linux)|Superuserzugriff]]


== Vorbereitungen ==
== Vorbereitungen ==
=== Feste IP-Adresse vergeben ===
=== Feste IP-Adresse vergeben ===
Siehe [[Netzwerk einrichten (Debian)]]
Siehe [[Netzwerk einrichten (Debian)]]
Zeile 22: Zeile 21:
== Apache Installation ==
== Apache Installation ==
  <nowiki>groupadd www-data
  <nowiki>groupadd www-data
usermod -a -G www-data www-data
usermod -a -G www-data www-data       # Benutzer www-data in Gruppe www-data anlegen
apt-get install apache2 </nowiki>
apt-get install apache2 </nowiki>


Konfigdateien bearbeiten
Konfigdateien bearbeiten: Auf Debian:


<code>nano /etc/apache2/apache2.conf</code>
nano /etc/apache2/sites-enabled/000-default.conf</code>


Am Ende folgendes eintragen:
Folgende Zeile dekommentieren und eintragen:


  ServerName server.domain.com
  ServerName server.domain.com


<code>nano /etc/apache2/sites-available/default</code>
Optional Aliase einfügen:


Folgendes einfügen:
ServerAlias server www.domain.com server.domain.com (Unklar, ob tatsächlich notwendig)


ServerAlias server server.domain.com (Unklar, ob tatsächlich notwendig)
SSL-Konfiguration bearbeiten:


<code>nano /etc/apache2/sites-available/default-ssl</code>
nano /etc/apache2/sites-available/default-ssl


Folgendes einfügen:
Folgendes einfügen:


  ServerAlias server server.domain.com (Unklar, ob tatsächlich notwendig)
  ServerAlias server www.domain.com server.domain.com (Unklar, ob tatsächlich notwendig)
Noch ausführen (unbekannt, wofür - evtl. für Owncloud?):
Noch ausführen (unbekannt, wofür - evtl. für Owncloud?):
Zeile 51: Zeile 50:


Apache Web-Rootverzeichnis
Apache Web-Rootverzeichnis
<code>/var/www/</code>
<code>/var/www/html</code>


Beim Aufruf von https://www.example.com/ sollte der Server antworten:
Beim Aufruf von https://www.example.com/ sollte der Server antworten:
Zeile 61: Zeile 60:
== PHP Installation ==
== PHP Installation ==
  apt-get install php5 php5-gd php5-curl php5-mysql php5-intl php-xml-parser  php-pear php-apc curl libcurl3  
  apt-get install php5 php5-gd php5-curl php5-mysql php5-intl php-xml-parser  php-pear php-apc curl libcurl3  
 
== MySQL Installation ==
== PHP-Mail Installation ==
  <nowiki>apt-get install mysql-server mysql-client php5-mysql
Für PHP-Skripte, die das PEAR Mail Package nutzen (PHP-Funktion "Mail()") wird noch folgendes Paket benötigt:
mysql restart</nowiki>
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 ==
== phpMyAdmin ==
=== Installation ===
=== Installation ===
  <nowiki>apt-get install libapache2-mod-auth-mysql php5-mysql phpmyadmin</nowiki>
  <nowiki>apt-get install php5-mysql phpmyadmin</nowiki>


phpMyAdmin mit Apache verbinden, falls nicht in den Dateien in <code>/etc/php5/apache2/conf.d/???-mysql???.ini</code> bereits geschehen.
phpMyAdmin mit Apache verbinden, falls nicht in den Dateien in <code>/etc/php5/apache2/conf.d/???-mysql???.ini</code> bereits geschehen.
Zeile 76: Zeile 91:
Neue Zeile im Bereich "Dynamic Extensions" hinzufügen:
Neue Zeile im Bereich "Dynamic Extensions" hinzufügen:


<code>extension=mysql.so</code>  
<code>extension=mysql.so</code>


=== Zugriff auf lokales Netz beschränken ===
=== Zugriff auf lokales Netz beschränken ===
Konfigdatei öffnen:
Konfigdatei öffnen:


<code>nano /etc/apache2/conf.d/phpmyadmin.conf</code>
<code>nano /etc/phpmyadmin/apache.conf</code>
 
(Symlink auf /etc/phpmyadmin/apache.conf)


Folgenden Abschnitt einsetzen (und bestehendes überschreiben):
Folgenden Abschnitt einsetzen (und bestehendes überschreiben):


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


phpMyAdmin aufrufen über: http://ip-adresse-deines-servers/phpmyadmin/
phpMyAdmin aufrufen über: http://ip-adresse-deines-servers/phpmyadmin/
 
== Selbst signiertes Zertifikat erzeugen ==
== Selbst signiertes Zertifikat erzeugen ==


Zertifikat erstellen siehe [[Zertifikat erstellen (Debian)]]


'''''Evtl. Standardpfad verwenden? Standardpfad ist vermutlich /etc/ssl/xxx'''''
== DynDNS einrichten ==
 
 
<nowiki>mkdir -p /etc/apache2/ssl


openssl req -new -x509 -days 365 -nodes -out /etc/apache2/ssl/cert.pem -keyout /etc/apache2/ssl/cert.pem</nowiki>
Einrichtung von dynamischem DNS siehe [[Dynamisches DNS (Debian)]]


Folgende Werte eingeben:
== HTTPS in Apache einrichten ==
Country Name: DE
State or Province: .  ("." entspricht "leer")
Locality Name: .
Organization Name: .
Organizational Unit Name: .
Common Name (FQDN-Name): domain.tld
E-Mail Address: webmaster@localhost


<nowiki>ln -sf /etc/apache2/ssl/cert.pem /etc/apache2/ssl/`/usr/bin/openssl x509 -noout -hash < /etc/apache2/ssl/cert.pem`
chmod 600 /etc/apache2/ssl/cert.pem</nowiki>
Zertifikat überprüfen:
openssl x509 -noout -in cert.pem -issuer -subject -dates -fingerprint
== Apache für HTTPS einrichten ==
=== Schritt 1: Standardkonfiguration erweitern ===
=== Schritt 1: Standardkonfiguration erweitern ===
<code>nano /etc/apache2/ports.conf</code>
<code>nano /etc/apache2/ports.conf</code>
Zeile 158: Zeile 154:
Wenn die .pem-Datei den privaten Key und das Zertifikat enthält, dann kann man die folgende Zeile auskommentieren:
Wenn die .pem-Datei den privaten Key und das Zertifikat enthält, dann kann man die folgende Zeile auskommentieren:


  <nowiki># SSLCertificateKeyFile xxx</nowiki>
  # SSLCertificateKeyFile xxx


Site aktivieren und Apache neu starten:
Site aktivieren und Apache neu starten:


  <nowiki>a2ensite default-ssl
  a2ensite default-ssl
service apache2 reload</nowiki>
service apache2 reload
 
[[Category:Debian]]
== 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
 
 
[[Category:Linux]]
[[Category:LAMP]]
[[Category:Kryptographie]]

Aktuelle Version vom 28. Dezember 2018, 01:05 Uhr

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