18Sep/190

LEMP: Debian, NGINX + Certbot, MariaDB, PHP

In diesem Tutorial zeigen wir, wie man sein Debian System für das Hosten von einer oder mehreren Webseiten vorbereitet.
Wir werden keine Optimierungen der Konfigurationen durchführen, es gibt je nach Art der Webseite oder Servertyp verschiedene Möglichkeiten die Konfigurationen weiter zu optimieren. NGINX, MySQL bzw. MariaDB und PHP (LEMP) erhalten lediglich die Grundkonfiguration, die für unsere Webseite (eine phpinfo Datei) benötigt werden.

1. Installation der Software

NGINX, Certbot, PHP Installation:

:~# apt install nginx python3-certbot-nginx php-fpm php-mysql zip unzip pwgen

MariaDB kann mit folgendem Befehl installiert werden:

:~# apt install mariadb-server

Eine Installation über die bereits konfigurierten Standard-Paketquellen installiert nicht zwingend die aktuelle stable MariaDB Version. Falls Sie die aktuellen MariaDB Pakete benötigen, besuchen Sie bitte: Official MariaDB Repo und folgen Sie der Anleitung.

2. Konfiguration der Software

Nach der Installation der Software sollte zunächst die Datenbank abgesichert und konfiguriert werden:

:~# mysql_secure_installation && mysql_upgrade
:~#mysql

 Welcome to the MariaDB monitor.  Commands end with ; or \g.
 Your MariaDB connection id is 55
 Server version: 10.4.6-MariaDB-1:10.4.6+maria~buster mariadb.org binary distribution
 Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
 Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. 

Anschließend starten wir den Certbot, welcher für unseren default vmXXXX.contaboserver.net Hostnamen ein Zertifikat beantragen wird.
Man kann hier auch jede andere Webseite konfigurieren.

Wichtig: Falls Sie weitere Domains absichern möchten, dann einfach mit der "-d" Option direkt hinterm dem Befehl, Certbot muss und sollte nicht mehrmals ausgeführt werden.

:~# certbot --nginx -d $(hostname) -d vmXXXX.contaboserver.net

Certbot wird eine Konfiguration der abgesicherten Website in /etc/nginx/sites-enabled/ erstellen.

Als nächstes konfigurieren wir PHP, damit der NGINX Webserver weiß, wo der PHP-Interpreter lauscht. Wir prüfen nun, wie PHP konfiguriert ist und wo es verfügbar ist:

:~# grep "listen =" /etc/php/7.3/fpm/pool.d/www.conf
listen = /run/php/php7.3-fpm.sock

In diesem Fall ist PHP über UNIX Socket konfiguriert, Änderungen nehmen wir keine vor. Die oben geprüfte php-pool Konfiguration bietet sehr viele Möglichkeiten PHP zu optimieren.
Öffnen Sie nun die /etc/nginx/sites-enabled/default Datei mit einem Editor, eine PHP-Sektion ist bereits sichtbar, diese muss für jede Webseite welche PHP benötigt, hinzugefügt werden. Außerdem muss folgende Zeile um "index.php" erweitert werden:

index index.php index.html index.htm;
location ~ .php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.3-fpm.sock;
}

:~# systemctl restart nginx

Wir werden nun phpMyAdmin herunterladen und verfügbar machen.
phpMyAdmin ist unter Debian 10 leider nicht einfach über "apt install phpmyadmin" verfügbar, vermutlich wird das Paket verfügbar werden, sobald die aktuelle Alpha Version zu "Stable" wird.
Für den Download besuchen Sie Official phpMyAdmin Website. Unter Debian 10 ist PHP 7.3 Standard, daher benötigen wir die Alpha Version von phpMyAdmin für volle Kompatibilität. Diese Version ist noch in der Testphase.

:~# mkdir /var/www/phpmyadmin
:~# cd /var/www/phpmyadmin/
:~# wget https://files.phpmyadmin.net/phpMyAdmin/5.0.0-alpha1/phpMyAdmin-5.0.0-alpha1-all-languages.zip
&& unzip phpMyAdmin-5.0.0-alpha1-all-languages.zip
:~# mv phpMyAdmin-5.0.0-alpha1-all-languages/* .

Wir importieren nun die Datenbank und erstellen einen Nutzer.
Passwörter können mittels "pwgen" erstellt werden:

:~# mysql < sql/create_tables.sql
:~# mysql

CREATE USER 'phpmyadminuser'@'localhost'  IDENTIFIED BY 'USE ONLY SECURE PASSWORDS !!';
GRANT SELECT, INSERT, UPDATE, DELETE ON phpmyadmin.* TO 'phpmyadminuser'@'localhost'
IDENTIFIED BY 'USE ONLY SECURE PASSWORDS !!'; FLUSH PRIVILEGES;

Jetzt konfigurieren wir phpMyAdmin in der config.inc.php Datei, folgende Zeilen müssen angepasst werden:

/* User used to manipulate with storage */
  $cfg['Servers'][$i]['controlhost'] = 'localhost';
  $cfg['Servers'][$i]['controlport'] = '3306';
  $cfg['Servers'][$i]['controluser'] = 'phpmyadminuser';

:~# cp -p config.sample.inc.php config.inc.php
:~# pwgen 32 1 #Copy the password for blowfish secret
:~# chown www-data: /var/www/phpmyadmin -R

Abschließend können wir die Seite über NGINX erreichbar machen, wir nutzen hier wieder den Hostnamen unseres Servers und tragen in der server {} Sektion folgende Konfiguration ein:

    location /phpmyadmin {
           root /var/www/phpmyadmin/;
           index index.php index.html index.htm;
           location ~ ^/phpmyadmin/(.+\.php)$ {
                   try_files $uri =404;
                   root /var/www/phpmyadmin/;
                   fastcgi_pass unix:/run/php/php7.3-fpm.sock;
                   fastcgi_index index.php;
                   fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
           }
           location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ {
                   root /var/www/phpmyadmin/;
           }
    }

Posted by: Gianni-Donato | Tagged as: , , , , , , No Comments