Superschnelle Anleitung, wie man sich einen Webserver unter Ubuntu aufbaut

Superschnelle Anleitung, wie man sich einen Webserver unter Ubuntu aufbaut

Zum Entwickeln von Webanwendungen benötigt man einen Webserver. PHP hat mittlerweile einen eigenen Webserver on Board, der ist allerdings für den Produktiveinsatz nicht geeignet. Außerdem kann der PHP-Webserver nicht alles, was ein echter Webserver, wie der Apache kann. Der Webserver wird über nen virtuellen Host aufrufbar sein und ich erkläre auch, wie man ein Let's Encrypt-SSL-Zertifikat hinterlegt. Als Server habe ich hier Ubuntu 18.04 LTS verwendet, alles geht aber auch mit Ubuntu 16.04 LTS oder Debian. Bei Fedora, Arch, CentOS funktioniert die Installation des Webservers ähnlich, man installiert dann nicht über apt, sondern Pacman, dnf oder yum.

Wichtig: Ich kann dir an dieser Stelle nicht erklären, was Linux ist oder wie man die Shell startet. Ein wenig Grundwissen setze ich voraus.

SICHERHEIT: Die Mädels und Jungs aus der Linux-statt-Windows-Gruppe bei Facebook haben mich darauf hingewisen, dass ich auf jedenfall noch folgende Punkte erwähnen sollte:

  • In dieser Anleitung lernst du die einfachste Installation eines Lamp-Systems.
  • Sicherheitsrelevante Themen sind nicht Teil dieses Tutorials, beachte dazu bitte noch den allerletzten Absatz, bei dem ich auf einige Sicherheitsartikel zum Thema Apache und Linux verlinkt habe.
  • PHPMyAdmin wird hier installiert, weil die nötigen Abhängigkeiten für einen Lamp-Stack bereits vorhanden sind
  • Weitere Sicherheitstipps könnt ihr mir gerne in die Kommentare schreiben.
Update: Es gibt nun auch ein Tutorial darüber, wie man seinen Webserver absichert.

Wie installiert man PHP und Apache2?

Zuerst brauchen wir den Webserver und einen PHP-Interpreter. Zuerst aktualisieren wir den Paketquellen-Cache und installieren evtl. die neuesten Versionen veralteter Pakete

sudo apt update && sudo apt upgrade

Abbbildung 1

Da wir später sowieso mySQL-Datenbanken administrieren wollen, empfieht sich die Eingabe folgendes Befehls:

sudo apt install phpmyadmin

Wir bestätigen die Installation der Pakete und Abhängigkeiten mit JA und eine aktuelle Apache/PHP-Laufzeitumgebung wird automatisiert installiert.

Abbildung 2

Währenddessen fragt uns die Paketkonfiguration, welchen Webserver wir benutzen möchten. Wir wählen natürlich Apache2 aus und lassen die Installation weiterlaufen.

Abbildung 3

Wir gehen mal davon aus, dass noch keine einzige Datenbank konfiguriert ist, also wählen wir im folgenden Fenster vorläufig erst mal NO aus und machen weiter.

Abbildung 4

Herzlichen Glückwunsch, Apache ist nun installiert. Wir können die Konfiguration des Webservers nun prüfen, indem wir entweder lynx installieren, oder einfach dies hier eingeben:

wget http://localhost/

Eine Datei namens index.html wird nun heruntergeladen, dies beweist, dass unser Webserver funktioniert.

MySQL bzw. MariaDB einrichten

Wir haben nun einen komplett lauffähigen PHP-Webserver. PHP ohne eine Datenbank dahinter ist allerdings ziemlich sinnfrei. Eine Installation eines mySQL-Datenbankservers ist also Pflicht. Der gute, alte, treue Begleiter namens mySQL wurde durch MariaDB ersetzt. Dabei handelt es sich um einen 99.999 % kompatiblen Datenbankserver, der den Quasistandard für PHP-Datenbank-Projekte darstellt. Zuerst benötigen wir, wie gehabt, die Pakete.

Aktuell (Mai 2018) scheint es bei Ubuntu 18.04 LTS einen Bug zu geben, bei dem man Mariadb-Server nicht einfach so installieren kann, man muss erst alle Reste von MySQL entfernen

sudo apt purge mysql* mariadb*

Erst anschließend funktioniert:

apt install mariadb-server

Danach wird Mariadb-Server installiert!

Abbildung 5

Konfigurieren des ersten Benutzers

Aktuell können wir über unseren phpmyadmin noch nicht auf MariaDB zugreifen. Ausschließlich das Arbeiten über die Shell ist möglich. Das ist zwar völlig ausreichend, aber echt nicht wirklich komfortabel. Ohne einen User geht hier mal gar nichts. Direkt nach der Installation gibt es nur den Root-Benutzer. Der reicht aus, um über die Shell zu arbeiten. Viel anderes darf der aber nicht. Wir gehen nun in MariaDB und legen fest, dass phpmyadmin nun auch funktionieren darf:

sudo mysql -uroot

Tatsächlich sind wir nun auf der Datenbank-Ebene angekommen. Wir sind drin. Allerdings verlassen wir MySQL noch einmal durch die Eingabe von quit; und starten folgendes:

sudo mysql_secure_installation

MySQL stellt uns einige Fragen und gibt auch Anmerkungen dazu. Wir legen uns jetzt einen User für unsere Webanwendungen an. Der User soll im Grunde alles können, was root kann, aber eben nicht root sein 😉

also gehen wir wieder in mysql als User root rein

sudo mysql -uroot

Nun erstellen wir den Benutzer marcel mit dem Passwort ***

CREATE USER 'marcel'@'%' IDENTIFIED VIA mysql_native_password USING '***';
GRANT ALL PRIVILEGES ON *.* TO 'marcel'@'%' REQUIRE NONE WITH
GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0;

Die Usertabellen müssen anschließend neu geladen werden:

flush privileges;

Wenn du nun localhost/phpmyadmin aufrufst, kannst du dich mit deinem Benutzer einloggen

Abbildung 6

die erste Website

Unsere erste Website soll unter http://mytestsite.loc erreichbar sein. Starte eine root-shell, indem du zum Beispiel sudo -i eingibst oder sudo /bin/bash ausführst, da wir nun einige Aufgaben als Root erstellen müssen.

Vhost erstellen

Wechsele bitte in das Konfigurationsverzeichnis vom Apachen

cd /etc/apache2/sites-available

Bitte kopiere die Datei 000-default.conf nach mytestsite.loc.conf

cp 000-default.conf mytestsite.loc.conf

Nun kannst du die neue mytestsite.loc.conf bearbeiten:

nano mytestsite.loc.conf

Ich habe hier mal eine einfache vhost-Datei hingelegt, bei der festgelegt ist, dass der Quellcode deiner Website im /home/[user]/www/mytestsite.loc hinterlegt wurde. Besser und sicherer ist es, die Webseiten in anderen Ordnern wie zum Beispiel /var/www/ zu hinterlegen, allerdings musst du dann deinen User noch zur Gruppe www-data zufügen oder aber alle Quellen im Webverzeichnis als root bearbeiten. Beim Auslagern in /home/[user]/www entfällt dieser Schritt, aber der Apache-Dienst wurstelt halt bei deinen Heimatdateien rum.

Hier also mal meine Beispieldatei. Wie gesagt: username ist dein Linux-Standardbenutzername

<VirtualHost *:80>
    ServerName mytestsite.loc

    ServerAdmin deine@email.adresse
    DocumentRoot /home/username/mytestsite_loc/
    <Directory /home/username/mytestsite_loc/>
        AllowOverride All
        Require all granted
        Allow from All
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

Nun musst du diese Seite noch aktivieren. Gehe wieder in die Shell und activiere die Site:

a2ensite mytestsite.loc

Nun musst du deinen Apache noch einmal durchstarten.

systemctl restart apache2

Virtuellen Host aufrufen

Wenn du in deinen Browser nun http://mytestsite.loc/ aufrufst, wird nichts passieren, die Verbindung wird scheitern. Das liegt daran, dass der DNS-Eintrag der Seite nicht aufgelöst werden kann. Du musst deinem Client (also deinem Entwicklungsrechner noch mitteilen, dass ein Aufruf von http//mytestsite.loc/ umgeleitet werden muss auf die IP vom Apache-Webserver. Angenommen, dein Linuxserver hat die IP-Adresse 192.168.114.193, so musst du folgendes tun:

Auf deinem Client-PC, mit dem du auf den Server zugreifen willst musst du die Hosts-Datei verändern. Unter Linux findest du die Datei unter /etc/hosts - bei Windows 10 ist die Dateibezeichnung c:\Windows\system32\drivers\etc\hosts. Um die Datei bearbeiten zu können, benötigst du sowohl unter Linux als auch unter Windows Administrator bzw. Root-Rechte.

Schreibe also folgende neue Zeile in die hosts-Datei:

192.168.114.193 mytestsite.loc

Die IP-Adresse deines Servers ist allerdings aktuell vielleicht dynamisch, daher solltest du dir überlegen, deinem Webserver eine feste IP-Adresse im LAN zu geben.

Feste IP für den Webserver vergeben

Finde zuerst einmal heraus, welche Netzwerkkarten du überhaupt im Rechner drin hast. Mit

sudo ifconfig -a

zeigt dir Linux an, welche Karten verbaut sind und welche IP-Adressen diese Karten haben. Die Netzwerkkarte heißt in der Regel eth0 oder enp0s x. Und der Karte enp0s müssen wir nun eine feste IP verpassen:

 

Abb 7

Auto [interface] legt fest, dass die Karte nach einem Boot immer aktiviert ist. Dem Interface enp0s8 inet wird eine static (statische) IP-Adresse zugewissen. Die address lautet 192.168.114.193. Die Netzwerkmaske und das entsprechende Netzwerk werden benstimmt. Auch die IP des Routers kannst du über gateway festlegen. Da der Router oft auch der DNS-Server ist, kannst du optional auch dns-nameservers festlegen.

Fazit

Diese Anleitung erstellt dir einen voll funktionsfähigen Apachen mit PHP und MySQL. Du kannst PHP-Skripte ausführen, du kannst mySQL über PHPmyadmin administrieren und du kannst beliebig viele Hosts anlegen.

War doch gar nicht so schwer, oder?

Sicherheit

Nachdem dein Server nun läuft, solltest du ihn so gut, wie möglich, absichern. Eine gute Grundlage dafür findest du unter diesem Link.Ein sehr gutes englischsprachiges Tutorial gibt's bei Geekflare.

Leider hat hier noch keiner seinen Senf zum Thema abgegeben. Sei du doch der erste. Oder die erste. Oder das letzte.

Über...