Skip to content Skip to sidebar Skip to footer

Aufbau einer klassischen LEMP Infrastruktur auf Ubuntu 18.04

Wenn du heute mit Webseiten zu tun hast, kommst immer wieder mit Infrastruktur zusammen. Neben der vielen Cloud Dienste und den gemanagten Servern bei Internet-Providern kannst du dir auch deine eigene Infrastruktur bauen. Ich zeige dir in diesem Artikel wie du den Aufbau einer LEMP Infrastruktur vornehmen kannst.

Vorab-Information: Ich verwende für diesen Artikel eine Ubuntu Standard Installation auf Basis der Version 18.04 . Du kannst diese Anleitung auch auf Debian benutzen, allerdings sind hier einige Repositories anders zu adressieren.

Was ist LEMP?

Du hast dich bestimmt schon gefragt – was meint der denn mit LEMP? Hat er sich verschrieben und meint LAMP?

Nein, die Bezeichnungen sind ähnlich, genauso die Funktionalität. Allerdings unterscheiden sich die beiden Infrastrukturen durch ihre benutzten Webserver-Applikationen. Dazu habe ich dir hier den Vergleich der Beiden aufgestellt:

LEMPLAMP
Betriebsystem LinuxLinux
Webservernginx (gesprochen: Engine-ex)
URL: nginx.org
Apache
URL: httpd.apache.org
DatenbankMySQL oder MariaDB
URL (MySQL): dev.mysql.com
MySQL oder MariaDB
URL (MariaDB): mariadb.org
Skript-SprachePHP
URL: php.net
PHP
URL: php.net

Wie du siehst bilden die vier Buchstaben die Anfangsbuchstaben der verwendeten Applikationen.
Anmerkung: Ursprünglich war MariaDB hier nicht vorgesehen. Da die Initial-Version von MariaDB ein Fork von MySQL ist und die Funktionalität deckungsgleich ist, taucht hier MariaDB immer wieder auf.

Welche Repositories verwendest du für LEMP?

Hier gibt es 2 verschiedene Herangehensweisen, du solltest dich auf jeden Fall vor der Installation für eine der Beiden entscheiden:

  • Repository des Betriebsystems (z.B. archive.ubuntu.com) oder
  • die Repositories der Software-Projekte

Für mich überwiegen die Vorteile der Repositories der Software-Projekte, denn dadurch habe ich immer sofort den Zugriff auf die aktuellsten Versionen (inkl. der Fehlerbehebungen). Das finde ich, ist gerade in der heutigen Zeit, auf Grund der Sicherheit ein wertvolles Pluspunkt. Dagegen spricht allerdings, dass die Redundanz und Lokalisierung dieser Server nicht in der Menge vorliegt, wie die von beispielsweise Ubuntu.

Aufbau der LEMP Infrastruktur

So, jetzt aber mal ran an die Installation. Während der Initialisierung der neuen virtuellen Maschine noch mal kurz erwähnt: Wir benötigen neben der oben genannten 4 Hauptapplikationen weitere Dinge wie beispielsweise Erweiterungen und Bibliotheken.

PHP – serverseitige, integrierte Skriptsprache

Viele Dinge, die du auf Webserver installieren kannst – TYPO3, WordPress oder Magento2 um nur einige Beispiele zu nennen basieren auf PHP. Aber auch selbst geschriebene Applikationen auf Basis von Symfony, Zend Framework, Laravel und vielen Weiteren benötigen selbige Skriptsprache.

Ich verwende hier das Launchpad-Projekt von Ondřej Surý – für mich das inoffizielle Projekt für PHP-Pakete. Aktuell (August 2019) findest du auf dort die PHP-Versionen:

5.6 – 7.0 – 7.1 – 7.2 – 7.3 – 7.4

sowie viele hilfreiche, vorkompilierte PECL-Erweiterungen.

Installation der PHP-Pakete

Sorge dafür, dass dein Ubuntu-System auf dem aktuellen Stand ist.

user@system: sudo apt update
user@system: sudo apt dist-upgrade -y

Sofern der Kernel aktualisiert wurde solltest du das System neustarten.
Damit hast du auf jeden Fall schon mal einen sauberen Setup, auf den du aufsetzen kannst. Jetzt fügen wir das Launchpad PPA (personal package archives) hinzu.

user@system: sudo add-apt-repository ppa:ondrej/php
# LC_ALL=C.UTF-8 add-apt-repository ppa:ondrej/php
  More info: https://launchpad.net/~ondrej/+archive/ubuntu/php
 Press [ENTER] to continue or Ctrl-c to cancel adding it.
user@system: sudo apt update

Jetzt hast du die Pakete im Index verfügbar und kannst diese via apt / apt-get installieren. Zuerst wählen wir mal die grundsätzlich benötigten Pakete, später können Weitere einfach hinzugefügt werden.
Hinweis: Ich wähle die aktuell stabile Version 7.3

user@system: sudo apt install php7.3 php7.3-cli php7.3-common php7.3-dev php7.3-fpm php7.3-intl php7.3-mysql php7.3-opcache
user@system: php -v
 PHP 7.3.8-1+ubuntu18.04.1+deb.sury.org+1 (cli) (built: Aug  7 2019 09:52:12) ( NTS )
 Copyright (c) 1997-2018 The PHP Group
 Zend Engine v3.3.8, Copyright (c) 1998-2018 Zend Technologies
     with Zend OPcache v7.3.8-1+ubuntu18.04.1+deb.sury.org+1, Copyright (c) 1999-2018, by Zend Technologies

Damit haben wir die Installation von PHP erstmal abgeschlossen und können uns dem Webserver widmen.

nginx – der Webserver

Die Webserver-Software nginx gibt es seit Mitte der 2000er. Mittlerweile hat der modular aufgebaute Webserver einen hohen Marktanteil erreicht. Ich verwende ihn gerne, denn im Gegensatz zu Apache empfinde ich die Konfiguration als deutlich einfacher und die Einsatzmöglichkeit höher. nginx ist der zentrale Baustein im Aufbau einer LEMP Infrastruktur. Außerdem kannst du mit dieser Applikation weit mehr tun, als deine Webseite auszuliefern:

  • Lastenverteilung / Load Balancing
  • Reverse Proxy
  • E-Mail Proxy (IMAP und POP3)
  • Web Application Firewall (WAF) mit Hilfe der Erweiterung naxsi

Es gibt noch 2 weitere Produkte – nginx plus und nginx unit – auf die möchte ich allerdings nicht weitereingehen.

Installation von nginx

Wie auch schon bei PHP verwenden wir genauso ein alternatives Repository. Dieses Mal verwenden wir das nginx.org – eigene Repository – dort liegen alle bereits vorkompilierten Pakete. Zuerst installieren wir – sofern nicht vorhanden – benötigte Software:

user@system: sudo apt install curl gnupg2 ca-certificates lsb-release

Jetzt erstellen wir die apt nginx.list Datei. Wichtig ist – du muss dich entscheiden welche Pakete-Versionen du anschließend installieren willst:

  • stable (die aktuelle, als stabile Version deklariert)
  • mainline (die aktuellste Version – ich würde es als Vorabversion bezeichnen)

Ich benutze das stable Release, daher ergibt sich für mich für mich folgende Konfiguration:

user@system: echo "deb http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" | sudo tee /etc/apt/sources.list.d/nginx.list
deb http://nginx.org/packages/ubuntu bionic nginx
user@system: curl -fsSL https://nginx.org/keys/nginx_signing.key | sudo apt-key add -
OK
user@system: sudo apt-key fingerprint ABF5BD827BD9BF62
pub   rsa2048 2011-08-19 [SC] [expires: 2024-06-14]
       573B FD6B 3D8F BC64 1079  A6AB ABF5 BD82 7BD9 BF62
 uid           [ unknown] nginx signing key <signing-key@nginx.com>

Damit haben wir die Konfiguration vorgenommen, den Schlüssel für apt importiert und verifiziert und können jetzt infolgedessen die Installation des Paketes vornehmen:

user@system: sudo apt update
user@system: sudo apt install nginx
user@system: sudo service nginx status
 ● nginx.service - nginx - high performance web server
    Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
    Active: inactive (dead)
      Docs: http://nginx.org/en/docs/
user@system: sudo service nginx start
user@system: sudo service nginx status
  nginx.service - nginx - high performance web server
    Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
    Active: active (running) since Tue 2019-08-20 15:19:41 CEST; 1s ago
      Docs: http://nginx.org/en/docs/
   Process: 13624 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS)
  Main PID: 13630 (nginx)
     Tasks: 2 (limit: 2299)
    CGroup: /system.slice/nginx.service
            ├─13630 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
            └─13631 nginx: worker process

Jetzt hast du den Webserver installiert und gestartet und somit lauscht nginx auf Port 80 und nimmt Anfragen entgegen.

Aufbau einer klassischen LEMP Infrastruktur auf Ubuntu 18.04 - screenshot nginx default screen

Sofern alles geklappt hat, erscheint beim Aufruf von http://[IP-ADRESSE]/ im Browserfenster das Bild.

Zusatz: Installation von certbot

Als kleinen Zusatz: Nachdem der Webserver läuft und nur der unverschlüsselte Port 80 angesprochen wird, möchtest du sicherlich auch die verschlüsselte Variante verwenden. Neben den vielen kostenpflichtigen SSL-Zertifikaten gibt es auch die Variante von Let´s Encrypt – hier bekommst du kostenlose Zertifikate die von den gängigen Browsern akzeptiert werden. certbot ist ein hilfreiches Tool, mit dem du nach der erfolgten Installation solche Zertifikate zu beantragen und automatisch zu installieren und zu aktivieren kannst. Ebenso sorgt certbot dafür, dass die Zertifikate verlängert werden.

Zuerst müssen wir das Launchpad PPA hinzufügen, dazu sind folgende Befehle notwendig:

user@system: sudo apt update
user@system: sudo apt install software-properties-common
user@system: sudo add-apt-repository universe
'universe' distribution component is already enabled for all sources.
user@system: sudo add-apt-repository ppa:certbot/certbot
 This is the PPA for packages prepared by Debian Let's Encrypt Team and backported for Ubuntu(s).
  More info: https://launchpad.net/~certbot/+archive/ubuntu/certbot
 Press [ENTER] to continue or Ctrl-c to cancel adding it.
user@system: sudo apt update

Danach kannst du die notwendigen Pakete installieren:

user@system: sudo apt install certbot python-certbot-nginx

Damit ist certbot installiert und kann verwendet werden. Am Einfachsten mit du verwendest den Aufruf certbot

Zusatz: Firewall und Freischaltung der Ports

Sofern du das System mit einer Firewall absichern möchtest, kann ich dir die Firewall ufw empfehlen. Hierzu habe ich einen eigenen Artikel geschrieben: Konfiguration einer lokalen Firewall iptables mit ufw

Dort findest du alle Informationen und kannst die notwendigen Ports (80 und 443) freischalten.

Konfiguration: Ein neuer virtueller Host

Zuletzt noch die Konfiguration eines neuen virtuellen Hosts, so dass du dann deine Applikation laufen lassen kannst. Beachte: die folgende Konfiguration ist eine Standard-Konfiguration, einige Applikationen brauchen aufgrund ihrer Programmierung unter Umständen noch weitere Konfiguration’s-Elemente. Die Datei wird im Verzeichnis: /etc/nginx/sites-available abgelegt und später mit dem Befehl ln -s /etc/nginx/sites-available/demo.com.conf /etc/nginx/sites-enabled/ aktiviert.

server {
  server_name [DOMAIN];
  root [PFAD];
  index index.php;
  add_header Strict-Transport-Security "max-age=15768000;" always;
  client_max_body_size 20M;

  location / {
    rewrite ^/sitemap(-+([a-zA-Z0-9_-]+))?.xml$ "/index.php?xml_sitemap=params=$2" last;
    rewrite ^/sitemap(-+([a-zA-Z0-9_-]+))?.xml.gz$ "/index.php?xml_sitemap=params=$2;zip=true" last;
    rewrite ^/sitemap(-+([a-zA-Z0-9_-]+))?.html$ "/index.php?xml_sitemap=params=$2;html=true" last;
    rewrite ^/sitemap(-+([a-zA-Z0-9_-]+))?.html.gz$ "/index.php?xml_sitemap=params=$2;html=true;zip=true" last;
    try_files $uri $uri/ /index.php?$args;
  }

  location = /favicon.ico {
    log_not_found off;
    access_log off;
  }

  location ~* .(js|css|png|jpg|jpeg|gif|ico|woff|woff2)$ {
    expires max;
    log_not_found off;
  }

  location ~ .php$ {
    fastcgi_split_path_info ^(.+.php)(/.+)$;
    fastcgi_pass unix:/run/php/php7.3-fpm.sock;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
  }

  location ~ /.ht {
    deny all;
  }

  listen 80;
}

Bei der Konfiguration ist es wichtig, den Pfad sowie die Domain auszutauschen. Zuvor solltest du die Domain natürlich auf die entsprechende IP-Adresse lenken.

MariaDB, die Datenbank in der LEMP Infrastruktur

Wie bereits erwähnt, zuvor war MySQL das Synonym für das M in LAMP/LEMP, entscheide ich mich heute für MariaDB. Beide Applikationen sind sich sehr ähnlich, obgleich mir das OpenSource-Produkt als auch seine Philosophie besser gefällt. Sollte dir MySQL besser gefallen, so ist der Installations-Schritt ein anderer.

Installation von MariaDB

Im folgenden Block nun die Installation von MariaDB. Wie bereits erwähnt basiert die Datenbank-Software auf einen frühen Fork von MySQL. Aktuell ist hier die Version 10.4. Du verwendest auch hier am Besten ein offiziell gelistetes Repository der MariaDB Foundation. Unter downloads.mariadb.org kannst du dir eines aussuchen – ich entscheide mich kurzum in diesen Artikel für die Infrastruktur der Hochschule Esslingen.

user@system: sudo apt install software-properties-common
user@system: sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8
user@system: sudo add-apt-repository 'deb [arch=amd64,arm64,ppc64el] http://mirror2.hs-esslingen.de/mariadb/repo/10.4/ubuntu bionic main'
user@system: sudo apt update

Nachdem die oberen Schritte erledigt sind, kannst du jetzt den Datenbank-Server installieren und konfigurieren:

user@system: sudo apt install mariadb-server mariadb-client
user@system: sudo mysql_secure_installation

Fazit: Aufbau einer LEMP Infrastruktur

Wir haben jetzt das Betriebssystem auf den aktuellen Stand gebracht und die Werkzeuge für einen LEMP-Server installiert. Zudem haben wir certbot installiert um auch verschlüsselte HTTP-Verbindungen (HTTPS) verwenden zu können. Somit hast du jetzt einen fertigen Webserver, den du mittels einer Applikation mit Leben füllen kannst. Viel Spaß dabei.

Du hast eine Frage, Kritik oder Anmerkung zu diesem Artikel? So hast du im Folgenden die Möglichkeit ein Kommentar zu hinterlassen.

Lesetipp: Wenn du gerade damit anfängst, dich in nginx einzuarbeiten, kann ich dir jedenfalls noch weitere Artikel empfehlen:


Foto: unsplash-logoKate Trysh

Kommentare anzeigenKommentare schließen

Hinterlasse ein Kommentar