Einen Apache-Webserver mit PHP unter Ubuntu 18 aufsetzen

Webserver sind das Portal zur Seele des Internets. Was so geschwollen klingt, ist vermutlich auch so.

Ein Apache-Webserver ist schnell zu installieren, wenn man mal schnell WordPress irgendwo hinklatschen muss. Wir beginnen damit, die nötigen Pakete zu installieren. Übrigens: Unter Ubuntu 18.0 wird im Standard-Repository PHP 7.2 installiert.

sudo apt update
sudo apt install -y apache2 php libapache2-mod-php php-cli php-xml php-zip php-mysql php-gd php-imagick php-recode php-tidy php-curl php-mbstring php-xmlrpc

Das installiert eigentlich die nötigsten Dinge, die man so braucht. Alles andere kann nachinstalliert werden.

Als nächstes sollte die Rewrite-Mod aktiviert werden; das wird bei vielen Webseiten vorausgesetzt.

sudo a2enmod rewrite
sudo systemctl restart apache2

Als nächstes musst du dir überlegen, wie du die Dateistruktur der Webseite haben möchtest. Da sind die Geschmäcker verschieden; deshalb kann ich dir doch direkt meine Version aufschwatzen!

Die Webseite bekommt einen eigenen User (z.B. bfbfbf). Im Home-Verzeichnis dieses Users gibt es ein Subfolder namens <DomainnameHierEinfügen>, in dem wiederum httpdocs und logs liegen. Die eigentliche Webseite liegt unter httpdocs.

Also die folgenden Schritte durchführen:

# User anlegen
sudo adduser bfbfbf

# Zu User switchen
sudo su bfbfbf

# Website Verzeichnisse anlegen
mkdir ~/bjoern.falszewski.de
mkdir ~/bjoern.falszewski.de/httpdocs
mkdir ~/bjoern.falszewski.de/logs
chmod og-rx ~/bjoern.falszewski.de/logs
chmod 777 ~/bjoern.falszewski.de/logs

Als nächstes müssen wir Apache sagen, wo die Webseite liegt und wie sie heißt. Also nochmal als sudo-User einloggen und folgende Datei anlegen. Wie du die Datei nennst, ist eigentlich egal – wichtig ist das .conf am Ende.

sudo mcedit /etc/apache2/sites-available/bjoern.falszewski.de.conf

Der Inhalt der Datei sieht so aus:

# Host anlegen für einfaches HTTP
<VirtualHost *:80>
  # Name der Website
  ServerName bjoern.falszewski.de
  
  # Verzeichnis des Webroots
  DocumentRoot /home/bfbfbf/bjoern.falszewski.de/httpdocs

  # Logfiles:
  CustomLog /home/bfbfbf/bjoern.falszewski.de/logs/access.log combined
  ErrorLog /home/bfbfbf/bjoern.falszewski.de/logs/error.log
  LogLevel warn

  # Zugriffsrechte festlegen
  <Directory /home/bfbfbf/bjoern.falszewski.de>
    Options -Indexes +FollowSymLinks +MultiViews
    AllowOverride All
    Require all granted
  </Directory>
</VirtualHost>

Datei speichern und in Apache aktivieren; der Name ist der Dateiname vor dem .conf.

sudo a2ensite bjoern.falszewski.de

Anschließend die Config neu laden:

sudo systemctl reload apache2

Wenn du jetzt eine Datei in den httpdocs-Ordner legst, sollte diese erreichbar sein. Vergiss nicht, Domain und IP in deinem externen DNS-Dienst einzutragen!

SSL einrichten

Im Moment läuft deine Seite nur unter http und ist nicht verschlüsselt. Das ist nicht nur ultra-uncool, sondern datenschutztechnisch sehr bedenklich. Allerdings ist das leicht zu beheben. Anstatt, wie früher, ein paar Euros für ein Zertifikat auszugeben, gibt es mit Let’s Encrypt eine kostenlose und sichere Alternative!

Das muss aber erstmal installiert werden:

sudo apt update
sudo apt install -y software-properties-common
sudo add-apt-repository universe
sudo add-apt-repository ppa:certbot/certbot
sudo apt update
sudo apt install -y certbot python-certbot-apache

Anschließend reicht ein kleiner Aufruf, um den Wizard zu starten. Hier solltest du dich dazu entscheiden, einfache http Aufrufe direkt umleiten zu lassen – letsencrypt macht den Rest!

sudo certbot --apache
Björn Falszewski
6. Februar 2020
Disclaimer
Alle meine Artikel entstehen mit bestem Wissen und Gewissen, sind aber nicht perfekt und sollten immer nur als Ausgangspunkt für deine eigenen Recherchen bilden.

Sollte dir etwas Fehlerhaftes auffallen, freue ich mich über deine Nachricht!