Apache2 Webserver

Wilkommen!

Herzlich Willkommen zu diesem Tutorial 🙂

Webhosting und seine eigene Webseite im Internet erreichbar und Präsent zu halten ist für viele Unternehmen ein muss. Gerade deshalb ist es wichtig die Grundkenntnisse zu wissen wie man in diesem Fall einen eigenen Webserver hostet, wartet und verschiedene Zusatz Anwendungen Ready macht 🙂

Was ist Apache2?

Apache2 ist ein Webserver, worüber Ihr eure Domain mit verknüpfen könnt oder eigene virtuelle vHosts anlegen und mit SSL Zertifikaten oder PHP Webseiten mit integrieren könnt und vielem mehr.

Mein Ziel ist es mit diesem Tutorial, die Praxis etwas näher kennenzulernen.

Was sind Virtuelle Host / vHost bei Apache2?

Nun, da man nicht unbedingt nur eine einzige Domain bei dem Apache2 Server als Limit hat sondern man ganz viele Miteinander bzw. Untereinander verknüpfen kann, ist hier die sehr gute Funktion die vHost Funktion. Wenn ich ein Verzeichnis für die Domain 1.example.com freigeben möchte, kann ich dies in der vHost Konfig festlegen und anpassen und das geht auch für weitere Domains wie z.B janhill.eu oder www.server-verstehen.de 🙂

Was ist PHP und MySQL?

Apache2 kann ohne weitere Konfiguration eine ganz gewöhnliche Webseite mit der HTML Sprache an den Client weitergeben und bearbeiten. Wenn man Z.b WordPress installieren und nutzen möchte, sieht dies hier etwas anders aus. Man braucht dafür die Skriptsprache und Erweiterung PHP und MySQL als Datenbankverbindung. Zugleich werde ich auch die Installation für phpmyadmin hier auch nochmal vorstellen wie man das alles installiert und nutzen kann.


1. So installierst Du den Apache2 Webserver

Logge dich auf deinem Linux Server via SSH2 Protokoll ein. Das kann in diesem Fall mit Putty oder weitere SFTP Clients gemacht werden. Achte darauf dich als root User einzuloggen da wir erweitere Rechte für diesen Vorgang benötigen.

apt-get update && apt-get upgrade -y
apt-get install apache2 -y

Mit diesen Befehlen aktualisieren wir 1. Die Kompletten repositorys 2. Bringen wir den Server auf den neusten Stand und installieren anschließend den apache2 Webserver.

2. Jetzt installieren wir PHP-8.0 und weitere Anwendungen für die PHP-8.0 Unterstützung

apt-get install curl -y

curl -fsSL https://packages.sury.org/php/apt.gpg -o /usr/share/keyrings/php-archive-keyring.gpg

apt install software-properties-common -y

add-apt-repository ppa:ondrej/php

apt update

apt install php8.0 php8.0-cli php8.0-common php8.0-curl php8.0-gd php8.0-intl php8.0-mbstring php8.0-mysql php8.0-opcache php8.0-readline php8.0-xml php8.0-xsl php8.0-zip php8.0-bz2 libapache2-mod-php8.0 -y

3. MySQL installieren und einrichten

apt install mariadb-server mariadb-client -y
mysql_secure_installation
MySQL Secure Installation

Jetzt richten wir den MySQL Server ein. Dabei wie im GIF Bild zu sehen, benutze ich den mysql_secure_installation Befehl um alles notwendige einzurichten. Dabei habe ich vorerst den root Unix Zugang aktiviert was aber nicht für den normal Gebrauch verwendet werden sollte. Dabei werden wir später mit nützlichen Befehlen uns neue Nutzeraccounts für die MySQL Datenbank für nur Webseiten & Co. erstellen. Der root Login ist eher für den Administrator/en gedacht.

Was noch wichtig zu wissen ist, dass diese Anleitung auf Debian 11 basierend ist. Bei anderen Distributionen wie Debian 10 oder Ubuntu, können jeweils zu diesen angegebenen Informationen, abweichend sein.

4. PHPMyAdmin Installation

Um jetzt unseren MySQL Server besser verwalten zu können, ist es hier sehr nützlich, eine PHPMyAdmin Instanz aufzusetzen.

Wir gehen also mit dem Befehl cd /usr/share in das Ziel-Verzeichnis, laden uns mit

wget https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.zip -O phpmyadmin.zip

das PHPMyAdmin Archiv herunter und entpacken dieses mit unzip phpmyadmin.zip.

Sollte die Erweiterung unzip auf dem Linux Server fehlen, so könnt Ihr dies mit apt-get install unzip -y nach installieren.

Anschließend können wir wieder das Archiv mit rm phpmyadmin.zip entfernen um nicht unnötig Festplattenspeicherplatz zu belegen.

Jetzt müssen wir passend zu den Konfigurationen weiter unten das Verzeichnis umbenennen mit mv phpMyAdmin-*-all-languages phpmyadmin.

Nun vergeben wir die benötigen Rechte mit chmod -R 0755 phpmyadmin. Danach schreiben wir dazu passend die Konfiguration für PHPMyAdmin.

nano /etc/apache2/conf-available/phpmyadmin.conf

# Fügt nun in der Config folgendes ein.

Alias /phpmyadmin /usr/share/phpmyadmin

<Directory /usr/share/phpmyadmin>
    Options SymLinksIfOwnerMatch
    DirectoryIndex index.php
</Directory>

<Directory /usr/share/phpmyadmin/templates>
    Require all denied
</Directory>
<Directory /usr/share/phpmyadmin/libraries>
    Require all denied
</Directory>
<Directory /usr/share/phpmyadmin/setup/lib>
    Require all denied
</Directory>
a2enconf phpmyadmin

systemctl reload apache2

Jetzt können wir über unseren Web-Browser uns in PHPMyAdmin einloggen. Gebt also somit nur die Doamin/IP in die Adresssuche ein und dahinter /phpmyadmin

Hier geben wir unsere IP/Domain ein und dahinter /phpmyadmin

Die Zugangsdaten haben wir bei mysql_secure_installation festgelegt. Ich habe hier in diesem Tutorial den Standart root Login für Administratoren aktiviert und kann mich somit direkt mit root in PHPMyAdmin einloggen. Was hierbei aber zu beachten gilt zur Sicherheit erstellen wir neben den root User, einen neuen Nutzer mit eingeschränkten Rechten für die Webseiten.

5. Neuen Nutzer in PHPMyAdmin erstellen

Hier im kurzem Video zu sehen, wie man die Rechte einstellt. Dabei ist es hier nur wichtig, dass der neue Nutzer nur auf seiner eigenen Datenbank arbeiten darf und nicht andere einsehen oder verändern kann. Das darf nur in diesem Fall der root User dessen Administratoren nur in Benutzung haben. Das gibt für mich persönlich eine bessere Struktur und Aufteilung der Rechte.

2. Apache2 – So erstellst eigene vHosts

Damit man unter mehrere Web-Verzeichnisse seine Domains hosten und aufteilen kann, gibt es bei Apache2 eine besondere Funktion, die vHost Funktion.

Ich möchte euch dies einmal genauer erklären wie dies funktioniert und wie man zugleich auch ein kostenlose Zertifikat für jede separate Domain/Alias erstellen und installieren kann.

1. Eine Domain nur über das HTTP Protokoll hosten / vHosts

Um Beispielsweise die Domain dns1.janhill.eu auf meiner vHosts anzulegen, erstelle ich eine Konfigurationsdatei mit

nano /etc/apache2/sites-available/website1.conf

Der Name der Datei in diesem fall website1.conf kann natürlich frei bearbeitet werden.

<VirtualHost *:80>

        ServerName dns1.janhill.eu

        DocumentRoot /var/www/website1

        ErrorLog /var/log/apache2/error.log

        LogLevel warn

        CustomLog /var/log/apache2/access.log combined

        ServerSignature On

</VirtualHost>

Wenn wir die Config Datei abgespeichert haben, tun wir nur noch das Verzeichnis erstellen worauf die Webseite später abgelegt werden kann. Zudem aktivieren wir nur mit a2ensite die entsprechende vHosts Konfiguration die wir vorher erstellt haben.

mkdir -p /var/www/website1
a2ensite website1.conf
systemctl reload apache2
Hier zu sehen das leere Webverzeichnis unserer angelegten vHosts

2. Eine Domain nur über das HTTP(s) Protokoll hosten / vHosts

Damit wir auch unsere Webseite vor Traffic Schnüfflern schützen, können wir mit der folgenden Konfiguration eine Webseite sicher im Internet erreichbar machen und zudem mit einem gültigen SSL-Zertifikat von Let’s Encrypt sichern über das HTTP(s) Protokoll.

Dafür müssen wir zunächst den certbot installieren. Den certbot wir ganz einfach mit apt-get install certbot -y auf unseren Linux Server installieren.

certbot certonly --standalone -d dns1.janhill.eu --staple-ocsp -m youremail@example.com --agree-tos

Mit den ersten Certbot Befehl, erstellen wir für die Beispieldomain ein echtes SSL-Zertifikat. Dieses ist nur 3 Monate lang gültig und muss anschließend rechtzeitig verlängert werden.

Wenn wir noch einen www. vor unsere Domain haben möchten, können wir auch weitere Domain/Aliase mit direkt in den Certbot Befehl eintragen.

certbot certonly --standalone -d dns1.janhill.eu -d www.dns1.janhill.eu --staple-ocsp -m youremail@example.com --agree-tos


Tipp: Das Apache2 Modul für den Certbot installieren

apt-get install python3-certbot-apache -y

Hier wird das Apache2 Modul für den Certbot nachinstalliert. Dies kann als Alternative Validierung des Zertifikats genutzt werden.

certbot certonly --apache -d www.example.com --staple-ocsp -m youremail@example.com --agree-tos

Bitte stelle zuvor sicher das die Domain entsprechend beim vHosts hinterlegt und die Konfiguration aktiv ist.

<VirtualHost *:80>

        ServerName www.example.com

        DocumentRoot /var/www/website1

        ErrorLog /var/log/apache2/error.log

        LogLevel warn

        CustomLog /var/log/apache2/access.log combined

        ServerSignature On

</VirtualHost>
systemctl reload apache2

<VirtualHost *:443>
    ServerName dns1.janhill.euServerAlias www.dns1.janhill.eu
DocumentRoot /var/www/website1
    SSLEngine on
    SSLCertificateKeyFile /etc/letsencrypt/live/dns1.janhill.eu/privkey.pem
    SSLCertificateFile /etc/letsencrypt/live/dns1.janhill.eu/fullchain.pem
</VirtualHost>

<VirtualHost *:80>
        ServerName dns1.janhill.eu
DocumentRoot /var/www/website1
        ErrorLog /var/log/apache2/error.log
        LogLevel warn
        Redirect permanent / https://www.dns1.janhill.eu/
        CustomLog /var/log/apache2/access.log combined
        ServerSignature On
</VirtualHost>

Das ist eine Editierte Version mit HTTP(s) Unterstützung für die Beispieldomain dns1.janhill.eu. Das Setup können wir wie folgt als Beispiel in unsere Konfigurationsdatei abspeichern in nano /etc/apache2/sites-available/website1.conf

Anschließend nach einer neuen Änderung bitte diesen Befehl wieder ausführen um die neuen vHosts Einstellungen zu übernehmen.


systemctl reload apache2

Fazit

Mit Apache2 kann man seinen eigenes Webprojekt online erreichbar machen. Dabei ist es egal wie viele Domains dabei bei der vHosts oder an Zertifikaten hinterlegt sind. Ob WordPress, Joomla oder seine eigene Entwicklung hosten und online bereit stellen, mit Apache2 wird dies schnell und einfach ermöglicht.

2 thoughts on “Apache2 Webserver – vHost – MySQL & PHP Tutorial

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert