NGINX - LEMP Server - Installation Ubuntu 18.04

Aus Thomas-Krenn-Wiki
Zur Navigation springen Zur Suche springen

NGINX (engine-x) ist ein kostenloser Open Source High Performance HTTP, Reverse-Proxy und IMAP/POP3 Proxy Server. Er ist unter anderem wegen der hohen Performance und Stabilität, einfachen Konfiguration und den geringen Ressourcen-Anforderungen eine sehr gute Alternative zum Apache Webserver. Aus LAMP als Complete-Setup wird somit LEMP: Linux E(NGINX), Maria-DB, PHP. NGINX skaliert von der kleinen VPS (Virtual Private Server) bis hin zu komplexen Clustersystemen und wird unter anderem von einigen hochverfügbaren Anbietern wie Netflix, Cloudflare, Wordpress und Github eingesetzt. NGINX ist modular aufgebaut und unterstützt beispielsweise vHosts, FastCGI oder SSL.[1]

Diese Anleitung beschreibt ein Minimal Setup eines LEMP Servers, basierend auf Ubuntu 18.04, NGINX, Maria-DB und PHP 7.[2] Voraussetzung hierfür ist ein Server mit aktiver Netzwerkkonfiguration mit Internetzugriff zum Zugriff auf die Ubuntu Repositories.

Installation Webserver

Zuerst installiert man das Paket nginx:

 sudo apt install nginx 

Danach kann man schauen, ob der Webserver korrekt gestartet wurde:

 sudo systemctl status nginx  

Falls nginx nicht gestartet ist, kann man den Dienst hiermit starten:

 sudo systemctl start nginx  

In Ubuntu 18.04 gibt es die UFW (Firewall) welche standardmäßig keinen http und https Traffic nach außen erlaubt, für das Erlauben gibt es ein UFW Profil. Die auf dem System vorhanden UFW Profile kann man sich anzeigen lassen:

 sudo ufw app list  

Möchte man wissen was hinter den Paketen steckt (Ports), kann man sich mit sudo ufw app info "NameOfUFW-Profile" die Details anschauen. In diesem Fall verwenden Sie Nginx Full, dort ist Port 80 (http) und 443 (https) erlaubt.

 sudo ufw allow in "Nginx Full"  

Ruft man nun die IP des Webservers auf, sollte eine Willkommensnachricht vom nginx Webserver angezeigt werden: "Welcome to nginx!"


Installation Datenbankserver

Für die meisten Webanwendungen wird nicht nur ein Webserver benötigt, sondern auch eine Datenbank. Für diesen Zweck installieren Sie den MariaDB-Datenbankserver.

sudo apt install mariadb-server mariadb-client

Sollten hier keine Pakete gefunden werden können, kann es sein, dass Sie nicht alle Ubuntu Repositories eingebunden haben. Zur Installation von MariaDB sind die Ubuntu Universe Paketquellen erforderlich. Dazu bitte die Datei /etc/apt/sources.list editieren und auf die folgende Form abändern:

 deb http://archive.ubuntu.com/ubuntu bionic main universe
 deb http://archive.ubuntu.com/ubuntu bionic-security main
 deb http://archive.ubuntu.com/ubuntu bionic-updates main universe

Danach bitte mittels folgendem Befehl die Paketquellen aktualisieren:

sudo apt update

Nun sollten Sie MariaDB installieren können:

sudo apt install mariadb-server mariadb-client

Sobald die Installation fertig ist bitte den Status des Datenbank-Servers prüfen:

sudo systemctl status mysql


Datenbank Zugriff absichern

Nach der Installation sollte MariaDB mit dem mysql_secure_installation Tool abgesichert werden. Hierzu bitte ausführen:

sudo mysql_secure_installation

Sie werden nach dem aktuellen root-Passwort für MariaDB gefragt, da es noch kein Root-Passwort gibt, bitte einfach ENTER drücken und das Passwort-Feld leer lassen. Bitte wie folgt fortfahren:

Enter current password for root (enter for none): # ENTER drücken
Set root password? [Y/n] # ENTER drücken
New password: # Geben Sie ein sicheres Root-Passwort für die Datenbank ein
Re-enter new password: # Wiederholen Sie die Passwort Eingabe
Remove anonymous users? [Y/n] # ENTER drücken
Disallow root login remotely? [Y/n] # ENTER drücken
Remove test database and access to it? [Y/n] # ENTER drücken
Reload privilege tables now? [Y/n] # ENTER drücken

Nun haben wir nginx als Webserver und MariaDB als Datenbankserver installiert.

Administrations-User anlegen

Damit wir später mittels phpMyAdmin auch neue Datenbanken und User anlegen können legen wir einen Admin-Account an. Bitte beachten Sie, dass Sie unbedingt ein sehr starkes und sicheres Passwort verwenden sollten.

sudo mariadb -u root
create user admin@localhost identified by 'IHRPASSWORTIMKLARTEXT';
grant all privileges on *.* to admin@localhost with grant option;
flush privileges;
exit;

Installation PHP 7

Zur Kommunikation von Webserver und Datenbank wird PHP (Version 7.2) verwendet. Es wird mit folgenden Befehlen installiert:

sudo apt install php-fpm
sudo apt install php-mysql

PHP-MYSQL wird benötigt für die Kommunikation von PHP mit MYSQL (MariaDB). PHP-FPM ist ein FastCGI-Prozessmanager, welcher PHP-Prozesse vorhält, damit die Ladezeiten von Webseiten beschleunigt werden können. Bitte in der php.ini entsprechende Anpassungen vornehmen:

sudo nano /etc/php/7.2/fpm/php.ini 
 cgi.fix_pathinfo=0
sudo systemctl restart php7.2-fpm
sudo systemctl status php7.2-fpm

Auch hier sollte der Status nun auf active (running) stehen. Das Neustarten des Dienstes ist erforderlich, damit die Änderungen an der Konfigurationsdatei übernommen werden. Damit der Nginx überhaupt weiß, dass er den PHP-FPM nutzen soll, müssen wir die Konfigurations-Datei des Default-vHosts ändern:

nano /etc/nginx/sites-available/default
 server name IP-OR-FQDN;

Beispiel: server_name example.com;

Wegen des PHP-FPM sollte man in jedem der vHosts die entsprechenden Zeilen enthalten haben:

location ~ \.php$ {
include snippets/fastcgi-php.conf;
#
# # With php-fpm (or other unix sockets):
fastcgi_pass unix:/run/php/php7.2-fpm.sock;
# # With php-cgi (or other tcp sockets):
# fastcgi_pass 127.0.0.1:9000;
}
# deny access to .htaccess files, if Apache's document root
 # concurs with nginx's one
 #
 location ~ /\.ht {
 deny all;
 }

phpMyAdmin installieren

Zuerst installieren wir das phpMyAdmin Paket aus den Paketquellen.[3] Für die automatische Konfiguration treffen wir keine Auswahl, da wir weder apache2 noch lighttpd im Einsatz haben. Sofern der Installer nach einer automatischen Konfiguration mittels dbconfig-common fragt, bestätigen wir dies. Außerdem werden diverse Passwörter vergeben (bitte merken).

sudo apt install phpmyadmin

Danach wird ein Symlink vom Default-phpMyAdmin-Verzeichnis auf den WWW-Public-Folder gesetzt:

sudo ln -s /usr/share/phpmyadmin /var/www/html/phpmyadmin

Damit ein Aufruf via Browser möglich ist, muss nun noch ein vHost für NGINX erstellt werden, dazu bitte folgende Datei erstellen:

sudo nano /etc/nginx/sites-available/pma.example.com

Mit folgendem Inhalt befüllen:

 
server {
  listen 80;
  listen [::]:80;
  server_name pma.example.com;
  root /usr/share/phpmyadmin/;
  index index.php index.html index.htm index.nginx-debian.html;

  access_log /var/log/nginx/phpmyadmin_access.log;
  error_log /var/log/nginx/phpmyadmin_error.log;

  location / {
    try_files $uri $uri/ /index.php;
  }

  location ~ ^/(doc|sql|setup)/ {
    deny all;
  }

  location ~ \.php$ {
    fastcgi_pass unix:/run/php/php7.2-fpm.sock;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
    include snippets/fastcgi-php.conf;
  }

  location ~ /\.ht {
    deny all;
  }
}

Damit die Konfiguration aktiviert wird, muss man noch einen Symlink von der sites-available-Datei zum sites-enabled-Folder setzen:[4]

sudo ln -s /etc/nginx/sites-available/pma.example.com /etc/nginx/sites-enabled/

Nun den NGINX neustarten und phpMyAdmin sollte nun via Browser erreichbar sein:

sudo service nginx restart

Einzelnachweise

  1. nginx (nginx.org)
  2. Quick Reference LEMP Stack Install with PHP on Ubuntu (lemp.io, 14.01.2015)
  3. How to Install phpMyAdmin with Nginx (LEMP) on Ubuntu 18.04 LTS (linuxbabe.com, 18.05.2018)
  4. a2ensite for Nginx on Ubuntu (evermoretechnologies.com, 10.07.2017)


Foto Jonas Sterr.jpg

Autor: Jonas Sterr

Ich beschäftige mich mit den Themen Software Defined Storage, Proxmox Virtualisierung auf Basis von KVM, QEMU & Ceph im Produktmanagement der Thomas-Krenn.AG in Freyung. Proxmox ist meine absolute Leidenschaft und ich freue mich gerne über Kontaktanfragen und einen Austausch auf LinkedIn.


Das könnte Sie auch interessieren

Backup unter Linux mit rdiff-backup
Linux Storage Stack Diagramm
Zeitsynchronisation unter Linux mit DCF77 Funkuhr-Modul und ntpd