So installierst du den LOMP Stack (OpenLiteSpeed, MySQL und PHP) unter Debian 12

OpenLiteSpeed ist eine schlanke und quelloffene Version des LiteSpeed Servers, der von LiteSpeed Technologies entwickelt wurde. Er unterstützt Apache Rewrite-Regeln, HTTP/2 und HTTP/3 sowie die Protokolle TLS v1.3 und QUIC. Er verfügt über eine WebGUI-basierte Administrationsoberfläche, die ihn von anderen Servern unterscheidet und einfacher zu verwalten ist.

Der LOMP Stack ist ein Akronym für Linux, OpenLiteSpeed, MySQL/MariaDB und PHP. Litespeed-Server sind für ihre Geschwindigkeit bekannt, vor allem in Verbindung mit PHP, das über das LiteSpeed Server Application Programming Interface (LSAPI) eingebunden wird. Der LiteSpeed PHP (LSPHP) Interpreter bedient dynamische PHP-Seiten über LSAPI.

In diesem Lernprogramm lernen wir, wie man einen OpenLiteSpeed Server auf einem Debian 12 Rechner installiert.

Voraussetzungen

  • Ein Server, auf dem Debian 12 läuft.
  • Ein Nicht-Root-Benutzer mit sudo-Rechten.
  • Ein vollständig qualifizierter Domainname (FQDN) wie example.com, der auf den Server verweist.
  • SELinux muss nicht deaktiviert oder konfiguriert werden, um mit OpenLiteSpeed zu arbeiten.
  • Stelle sicher, dass alles auf dem neuesten Stand ist.
    $ sudo apt update
    $ sudo apt upgrade
    
  • Ein paar Pakete, die dein System braucht.
    $ sudo apt install wget curl nano ufw software-properties-common dirmngr apt-transport-https gnupg2 ca-certificates lsb-release debian-archive-keyring unzip -y
    

    Einige dieser Pakete sind vielleicht schon auf deinem System installiert.

Schritt 1 – Firewall konfigurieren

Der erste Schritt besteht darin, die Firewall zu konfigurieren. Debian wird standardmäßig mit ufw (Uncomplicated Firewall) ausgeliefert.

Überprüfe, ob die Firewall aktiv ist.

$ sudo ufw status

Du wirst die folgende Ausgabe erhalten.

Status: inactive

Erlaube den SSH-Port, damit die Firewall die aktuelle Verbindung nicht unterbricht, wenn du sie aktivierst.

$ sudo ufw allow OpenSSH

Lasse auch HTTP- und HTTPS-Ports zu.

$ sudo ufw allow http
$ sudo ufw allow https

Öffne die Ports, die mit Openlitespeed zu tun haben.

$ sudo ufw allow 7080/tcp

Aktiviere die Firewall

$ sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup

Überprüfe den Status der Firewall erneut.

$ sudo ufw status

Du solltest eine ähnliche Ausgabe sehen.

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
80/tcp                     ALLOW       Anywhere
443                        ALLOW       Anywhere
7080/tcp                   ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
80/tcp (v6)                ALLOW       Anywhere (v6)
443 (v6)                   ALLOW       Anywhere (v6)
7080/tcp (v6)              ALLOW       Anywhere (v6)

Schritt 2 – Installiere OpenLiteSpeed

OpenLiteSpeed wird nicht in einem Paket für Debian 12 ausgeliefert. Deshalb werden wir unsere Kopie aus dem Quellcode erstellen.

Lade die OpenLiteSpeed-Quellcode-Datei herunter. Den Link zur aktuellen Quellcodedatei findest du auf der offiziellen Downloadseite von OpenLiteSpeed.

$ wget https://openlitespeed.org/packages/openlitespeed-1.7.18.src.tgz

Entpacke die Datei.

$ tar -zxf openlitespeed-*.tgz

Wechsle in das extrahierte Verzeichnis.

$ cd openlitespeed-1.7.18

Erstelle das Serverpaket.

$ sudo ./build.sh

Es kann sein, dass du gut 5-10 Minuten warten musst, bis der Prozess abgeschlossen ist. Ignoriere alle Warnungen, die du während des Prozesses erhältst. Wenn der Prozess abgeschlossen ist, erhältst du die folgende Ausgabe.

[100%] Linking CXX shared library modpagespeed.so
/usr/bin/ld: warning: 140.x25519-asm-x86_64.o.o: missing .note.GNU-stack section implies executable stack
/usr/bin/ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker
[100%] Built target modpagespeed
Start to pack files.
-e Building finished, please run ./install.sh for installation.
-e You may want to update the ols.conf to change the settings before installation.
-e Enjoy.

Sobald der Vorgang abgeschlossen ist, öffne die Datei ols.conf zur Bearbeitung.

$ sudo nano ols.conf

Bearbeite die Datei wie unten gezeigt.

#If you want to change the default values, please update this file.
#

SERVERROOT=/usr/local/lsws
OPENLSWS_USER=nobody
OPENLSWS_GROUP=nobody
OPENLSWS_ADMIN=navjot
OPENLSWS_EMAIL=navjot@example.com
OPENLSWS_ADMINSSL=yes
OPENLSWS_ADMINPORT=7080
USE_LSPHP7=yes
DEFAULT_TMP_DIR=/tmp/lshttpd
PID_FILE=/tmp/lshttpd/lshttpd.pid
OPENLSWS_EXAMPLEPORT=8088

#You can set password here
#OPENLSWS_PASSWORD=

Füge hier nicht dein Passwort ein. Wir werden das Passwort später über die Befehlszeile festlegen. Wenn du fertig bist, speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.

Jetzt, wo OpenLiteSpeed erstellt ist, können wir es installieren.

$ sudo ./install.sh

Das Installationsskript installiert und aktiviert den Dienst lsws für den Server. Wenn du fertig bist, erhältst du die folgende Ausgabe.

Updating webcache manager, please waiting ...
Downloading latest shared code tar file...
Checking tar file md5...
Removing existing shared code directory...
Extracting downloaded shared code...
Removing local shared code tar file...
Updating lscmctl script...
Done!

-e Installation finished, Enjoy!

-e Your webAdmin password is kXjWTl5j, written to file /usr/local/lsws/adminpasswd.

Starte den OpenLiteSpeed-Server.

$ sudo systemctl start lsws

Überprüfe den Status des Dienstes.

$ sudo systemctl status lsws
? lsws.service - LSB: lshttpd
     Loaded: loaded (/etc/init.d/lsws; generated)
     Active: active (running) since Wed 2023-09-27 15:55:13 UTC; 4h 18min ago
       Docs: man:systemd-sysv-generator(8)
      Tasks: 4 (limit: 4652)
     Memory: 79.2M
        CPU: 37.823s
     CGroup: /system.slice/lsws.service
             ??64164 "openlitespeed (lshttpd - main)"
             ??64171 "openlitespeed (lscgid)"
             ??64184 "openlitespeed (lshttpd - #01)"
             ??64185 "openlitespeed (lshttpd - #02)"

Sep 27 15:55:11 lomp systemd[1]: Starting lsws.service - LSB: lshttpd...
Sep 27 15:55:13 lomp systemd[1]: Started lsws.service - LSB: lshttpd.

Überprüfe die Version des installierten Servers.

$ /usr/local/lsws/bin/lshttpd -v
LiteSpeed/1.7.18 Open (BUILD built: Tue Aug 29 12:59:39 UTC 2023)
        module versions:
        lsquic 3.2.0
        modgzip 1.1
        cache 1.64
        mod_security 1.4 (with libmodsecurity v3.0.9)

Erstelle das Administrator-Passwort

Du kannst das Administratorkennwort verwenden, das du während der Installation erhalten hast. Du solltest jedoch dein eigenes erstellen, indem du es zurücksetzt. Führe das Skript zum Zurücksetzen des Passworts aus.

$ sudo /usr/local/lsws/admin/misc/admpass.sh

Du wirst die folgende Ausgabe erhalten. Wähle deinen Benutzernamen und gib ein sicheres Passwort ein.

Please specify the user name of administrator.
This is the user name required to login the administration Web interface.

User name [admin]: navjot

Please specify the administrator's password.
This is the password required to login the administration Web interface.

Password: 
Retype password: 
Administrator's username/password is updated successfully!

Du kannst nun das neue Administrator-Passwort verwenden.

Öffne http://<YOURSERVERIP>:7080, um auf das Administrationspanel von OpenLiteSpeed zuzugreifen. Bei der ersten Anmeldung warnt dein Browser, dass deine Verbindung nicht privat ist. Klicke auf „Erweitert“ und dann auf „Risiko akzeptieren und fortfahren“ (bei Firefox) oder „Weiter zu <YOURSERVERIP>(unsafe)“ (bei Chromium-basierten Browsern). Du wirst die Warnung nicht mehr sehen.

Du solltest die Anmeldeseite sehen.

OpenLiteSpeed Anmeldeseite

Gib die Anmeldedaten ein, die du zuvor festgelegt hast, und klicke auf die Schaltfläche Anmelden, um fortzufahren.

Du erhältst den folgenden Bildschirm.

OpenLiteSpeed Admin Panel

Schritt 3 – MariaDB installieren

Debian wird nicht mehr mit einem MySQL-Server ausgeliefert. Deshalb werden wir den MySQL-Ersatz, MariaDB, verwenden. Bevor wir jedoch weitermachen, müssen wir das LiteSpeed-Repository aktualisieren. Das über das Installationsprogramm hinzugefügte Litespeed-Repository funktioniert nicht richtig.

Öffne die Datei /etc/apt/sources.list.d/lst_debian_repo.list zum Bearbeiten.

$ sudo nano /etc/apt/sources.list.d/lst_debian_repo.list

Ändere den Inhalt der Datei, indem du das Debian 11 (bullseye) hinzufügst. Wir können Debian 12 (bookworm) nicht verwenden, da das Repository dafür nicht aktualisiert wird.

deb http://rpms.litespeedtech.com/debian/ bullseye main

Wenn du fertig bist, speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.

Installiere den MariaDB-Server.

$ sudo apt install mariadb-server

Der MariaDB-Dienst wird nach der Installation automatisch gestartet und ausgeführt.

Überprüfe den Status des Dienstes.

$ sudo systemctl status mariadb

Du erhältst die folgende Ausgabe.

? mariadb.service - MariaDB 10.11.3 database server
     Loaded: loaded (/lib/systemd/system/mariadb.service; enabled; preset: enabled)
     Active: active (running) since Fri 2023-09-29 01:21:09 UTC; 1min 26s ago
       Docs: man:mariadbd(8)
             https://mariadb.com/kb/en/library/systemd/
   Main PID: 361450 (mariadbd)
     Status: "Taking your SQL requests now..."
      Tasks: 10 (limit: 4652)
     Memory: 190.8M
        CPU: 411ms
     CGroup: /system.slice/mariadb.service
             ??361450 /usr/sbin/mariadbd

Führe das MariaDB-Sicherheitsskript aus.

$ sudo mariadb-secure-installation

Du wirst nach dem Root-Passwort gefragt. Drücke die Eingabetaste, denn wir haben kein Passwort dafür festgelegt.

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
haven't set the root password yet, you should just press enter here.

Enter current password for root (enter for none):

Als Nächstes wirst du gefragt, ob du zur Unix-Socket-Authentifizierungsmethode wechseln möchtest. Mit dem unix_socket Plugin kannst du deine Betriebssystem-Zugangsdaten verwenden, um dich mit dem MariaDB-Server zu verbinden. Da du bereits ein geschütztes Root-Konto hast, gibst du n ein, um fortzufahren.

OK, successfully used password, moving on...

Setting the root password or using the unix_socket ensures that nobody
can log into the MariaDB root user without the proper authorisation.

You already have your root account protected, so you can safely answer 'n'.

Switch to unix_socket authentication [Y/n] n

Als nächstes wirst du gefragt, ob du dein Root-Passwort ändern möchtest. Unter Debian 12 ist das Root-Passwort eng mit der automatischen Systemwartung verknüpft, daher solltest du es nicht ändern. Gib n ein, um fortzufahren.

 ... skipping.

You already have your root account protected, so you can safely answer 'n'.

Change the root password? [Y/n] n

Als nächstes werden dir einige Fragen gestellt, um die Sicherheit von MariaDB zu verbessern. Gib Y ein, um anonyme Benutzer zu entfernen, Remote-Root-Logins zu verbieten, die Testdatenbank zu entfernen und die Berechtigungstabellen neu zu laden.

 ... skipping.

By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] y
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] y
 ... Success!

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] y
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

Du kannst die MariaDB-Shell aufrufen, indem du sudo mysql oder sudo mariadb in die Befehlszeile eingibst.

Schritt 4 – PHP installieren

Da wir unser Paket aus dem Quellcode erstellt haben, kompiliert und baut es eine alte Version von PHP, die nicht zur Verwendung empfohlen wird. Du kannst sie mit dem folgenden Befehl überprüfen.

$ /usr/local/lsws/fcgi-bin/lsphp -v
PHP 5.6.40 (litespeed) (built: May 10 2023 23:03:31)
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies

Deshalb müssen wir die neueste Version von PHP kompilieren und installieren. Doch bevor wir fortfahren, müssen wir die Build-Tools installieren.

$ sudo apt install build-essential autoconf libtool bison re2c pkg-config

Der nächste Schritt ist die Installation der Pakete, die für den PHP-Build-Prozess benötigt werden.

$ sudo apt install libssl-dev libsqlite3-dev zlib1g-dev libcurl4-openssl-dev libonig-dev libzip-dev libmemcached-dev libreadline-dev libgmp-dev libpng-dev libjpeg-dev libwebp-dev libxpm-dev libicu-dev libfreetype6-dev libxslt-dev libldb-dev libtidy-dev libvips-dev libsodium-dev libavif-dev libldap2-dev libxml2-dev libkrb5-dev libc-client2007e-dev libpq-dev libargon2-0 libargon2-dev libbz2-dev libffi-dev libc-client-dev libpspell-dev flex libgmp3-dev libmcrypt-dev libmhash-dev freetds-dev libmariadb-dev libmariadb-dev-compat libncurses5-dev libpcre3-dev libaspell-dev librecode-dev libsnmp-dev

Als Nächstes laden wir den PHP-Quellcode herunter. Wir laden die Version PHP 8.2.10 herunter, die zum Zeitpunkt der Erstellung dieses Artikels die neueste Version ist.

$ cd ~
$ wget https://www.php.net/distributions/php-8.2.11.tar.gz

Entpacke die Dateien.

$ tar -xzf php-8.2.11.tar.gz

Wechsle in das heruntergeladene Verzeichnis.

$ cd php-8.2.11

Als Nächstes führst du das configure-Skript mit den folgenden Optionen aus. Die Option --enable-litespeed ist wichtig.

$ sudo ./configure --prefix=/usr/local/lsws/lsphp82 --enable-bcmath --enable-calendar --enable-exif --enable-ftp --enable-gd --enable-intl --enable-mbregex --enable-mbstring --enable-mysqlnd --enable-opcache --enable-shmop --enable-soap --enable-sockets --enable-sysvsem --enable-sysvshm --with-avif --with-curl --with-ffi --with-freetype --with-gettext --with-gmp --with-imap --with-imap-ssl --with-jpeg --with-kerberos --with-libxml --with-ldap  --with-mysqli --with-mysql-sock=/run/mysqld/mysqld.sock --with-openssl --with-password-argon2 --with-pdo-mysql=mysqlnd --with-pdo-pgsql=/usr/bin/pg_config --with-pear --with-pspell --with-readline --with-sodium --with-tidy --with-webp --with-xpm --with-xsl --with-zip --with-zlib --enable-litespeed

Wenn das Skript fertig ist, solltest du folgende Ausgabe erhalten.

+--------------------------------------------------------------------+
| License:                                                           |
| This software is subject to the PHP License, available in this     |
| distribution in the file LICENSE. By continuing this installation  |
| process, you are bound by the terms of this license agreement.     |
| If you do not agree with the terms of this license, you must abort |
| the installation process at this point.                            |
+--------------------------------------------------------------------+

Thank you for using PHP.

Kompiliere den Quellcode.

$ sudo make -j $(nproc)

Wenn du fertig bist, erhältst du eine ähnliche Ausgabe.

/bin/bash /home/navjot/php-8.2.11/libtool --silent --preserve-dup-deps --tag CC --mode=link cc -shared -I/home/navjot/php-8.2.11/include -I/home/navjot/php-8.2.11/main -I/home/navjot/php-8.2.11 -I/home/navjot/php-8.2.11/ext/date/lib -I/usr/include/libxml2 -I/usr/include/x86_64-linux-gnu -I/usr/include/libpng16 -I/usr/include/freetype2 -I/usr/include/c-client -I/home/navjot/php-8.2.11/ext/mbstring/libmbfl -I/home/navjot/php-8.2.11/ext/mbstring/libmbfl/mbfl -I/usr/include/postgresql -I/usr/include/pspell -I/usr/include/tidy -I/home/navjot/php-8.2.11/TSRM -I/home/navjot/php-8.2.11/Zend  -D_GNU_SOURCE -I/usr/include/c-client  -fno-common -Wstrict-prototypes -Wformat-truncation -Wlogical-op -Wduplicated-cond -Wno-clobbered -Wall -Wextra -Wno-strict-aliasing -Wno-unused-parameter -Wno-sign-compare -g -O2 -fvisibility=hidden -Wimplicit-fallthrough=1 -DZEND_SIGNALS     -o ext/opcache/opcache.la -export-dynamic -avoid-version -prefer-pic -module -rpath /home/navjot/php-8.2.11/modules -L/usr/lib/x86_64-linux-gnu/mit-krb5 -L/usr/lib/x86_64-linux-gnu ext/opcache/ZendAccelerator.lo ext/opcache/zend_accelerator_blacklist.lo ext/opcache/zend_accelerator_debug.lo ext/opcache/zend_accelerator_hash.lo ext/opcache/zend_accelerator_module.lo ext/opcache/zend_persist.lo ext/opcache/zend_persist_calc.lo ext/opcache/zend_file_cache.lo ext/opcache/zend_shared_alloc.lo ext/opcache/zend_accelerator_util_funcs.lo ext/opcache/shared_alloc_shm.lo ext/opcache/shared_alloc_mmap.lo ext/opcache/shared_alloc_posix.lo ext/opcache/jit/zend_jit.lo ext/opcache/jit/zend_jit_gdb.lo ext/opcache/jit/zend_jit_vm_helpers.lo -lrt
/bin/bash /home/navjot/php-8.2.11/libtool --silent --preserve-dup-deps --tag CC --mode=install cp ext/opcache/opcache.la /home/navjot/php-8.2.11/modules

Build complete.
Don't forget to run 'make test'.

Sobald du fertig bist, führe den folgenden Befehl aus, um die Version zu überprüfen.

$ ./sapi/litespeed/php -v
PHP 8.2.11 (litespeed) (built: Sep 28 2023 18:40:08)
Copyright (c) The PHP Group
Zend Engine v4.2.11, Copyright (c) Zend Technologies

Installiere PHP.

$ sudo make install

Du erhältst die folgende Ausgabe.

Installing shared extensions:     /usr/local/lsws/lsphp82/lib/php/extensions/no-debug-non-zts-20220829/
Installing PHP CLI binary:        /usr/local/lsws/lsphp82/bin/
Installing PHP CLI man page:      /usr/local/lsws/lsphp82/php/man/man1/
Installing PHP LiteSpeed binary:  /usr/local/lsws/lsphp82/bin/
Installing phpdbg binary:         /usr/local/lsws/lsphp82/bin/
Installing phpdbg man page:       /usr/local/lsws/lsphp82/php/man/man1/
Installing PHP CGI binary:        /usr/local/lsws/lsphp82/bin/
Installing PHP CGI man page:      /usr/local/lsws/lsphp82/php/man/man1/
Installing build environment:     /usr/local/lsws/lsphp82/lib/php/build/
Installing header files:          /usr/local/lsws/lsphp82/include/php/
Installing helper programs:       /usr/local/lsws/lsphp82/bin/
  program: phpize
  program: php-config
Installing man pages:             /usr/local/lsws/lsphp82/php/man/man1/
  page: phpize.1
  page: php-config.1
Installing PEAR environment:      /usr/local/lsws/lsphp82/lib/php/
[PEAR] Archive_Tar    - installed: 1.4.14
[PEAR] Console_Getopt - installed: 1.4.3
[PEAR] Structures_Graph- installed: 1.1.1
[PEAR] XML_Util       - installed: 1.4.5
warning: pear/PEAR dependency package "pear/Archive_Tar" installed version 1.4.14 is not the recommended version 1.4.4
[PEAR] PEAR           - installed: 1.10.13
Wrote PEAR system config file at: /usr/local/lsws/lsphp82/etc/pear.conf
You may want to add: /usr/local/lsws/lsphp82/lib/php to your php.ini include_path
Installing PDO headers:           /usr/local/lsws/lsphp82/include/php/ext/pdo/

Überprüfe die PHP-Installation. Es gibt zwei PHP-Binärdateien im Verzeichnis /usr/local/lsws/lsphp82/bin. Das eine ist die normale php, die Kommandozeilenversion, und das andere ist die Litespeed-Version lsphp. Die zweite ist die, die wir verwenden werden.

$ /usr/local/lsws/lsphp82/bin/lsphp -v
PHP 8.2.11 (litespeed) (built: Sep 28 2023 18:40:08)
Copyright (c) The PHP Group
Zend Engine v4.2.11, Copyright (c) Zend Technologies

Du kannst die Liste der aktivierten PHP-Module überprüfen.

$ /usr/local/lsws/lsphp82/bin/php --modules
[PHP Modules]
bcmath
calendar
Core
ctype
curl
date
dom
exif
FFI
fileinfo
filter
ftp
gd
gettext
gmp
hash
iconv
imap
intl
json
ldap
libxml
mbstring
mysqli
mysqlnd
openssl
pcre
PDO
pdo_mysql
pdo_pgsql
pdo_sqlite
Phar
posix
pspell
random
readline
Reflection
session
shmop
SimpleXML
soap
sockets
sodium
SPL
sqlite3
standard
sysvsem
sysvshm
tidy
tokenizer
xml
xmlreader
xmlwriter
xsl
zip
zlib

[Zend Modules]

Kopiere die Datei php.ini-production aus dem Installationsordner in den Ordner /usr/local/lsws/lsphp82/lib.

$ sudo cp php.ini-production /usr/local/lsws/lsphp82/lib/php.ini

Wir werden OpenLiteSpeed später für die Zusammenarbeit mit PHP konfigurieren.

Öffne die php.ini zum Bearbeiten.

$ sudo nano /usr/local/lsws/lsphp82/lib/php.ini

Suche die Variable include_path und ändere ihren Wert wie unten gezeigt.

$ ;;;;;;;;;;;;;;;;;;;;;;;;;
; Paths and Directories ;
;;;;;;;;;;;;;;;;;;;;;;;;;

; UNIX: "/path1:/path2"
include_path = /usr/local/lsws/lsphp82/lib/php

Wenn du fertig bist, speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.

Schritt 5 – MariaDB konfigurieren

Melde dich in der MariaDB-Shell an.

$ sudo mysql

Erstelle eine Testdatenbank. Ersetze testdb durch den entsprechenden Datenbanknamen deiner Wahl.

mysql> CREATE DATABASE testdb;

Erstelle einen Testbenutzer. Ersetze testuser durch einen geeigneten Benutzernamen. Ersetze Your_Password123 durch ein sicheres Passwort.

mysql> CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'Your_Password123';

Erteile dem Benutzer alle Rechte für die Datenbank.

mysql> GRANT ALL PRIVILEGES ON testdb.* TO 'testuser'@'localhost';

Da wir den Root-Benutzer nicht ändern, solltest du einen weiteren SQL-Benutzer für die Durchführung von Verwaltungsaufgaben anlegen, die eine Passwortauthentifizierung erfordern. Wähle ein sicheres Passwort für diesen Benutzer.

MariaDB> GRANT ALL ON *.* TO 'navjot'@'localhost' IDENTIFIED BY 'Yourpassword32!' WITH GRANT OPTION;

Lösche die Benutzerrechte.

mysql> FLUSH PRIVILEGES;

Beende die MySQL-Shell.

mysql> exit

Schritt 6 – OpenLiteSpeed konfigurieren

Ändere den HTTP-Port wieder auf 80

Ändern wir den Standard-HTTP-Port auf 80. Melde dich mit den soeben erstellten Anmeldedaten in deinem Administrationsbereich unter http://<YOURSERVERIP>:7080 an.

Rufe den Abschnitt Listeners auf der linken Seite auf. Du wirst die Standard-Listener mit dem Port 8080 sehen.

OpenLiteSpeed Listener

Klicke auf die Schaltfläche Anzeigen, um die detaillierte Konfiguration zu sehen. Auf der nächsten Seite unter Listener Standard > Allgemeine Seite klickst du auf das Symbol Bearbeiten und änderst den Port von 8080 in 80.

OpenLiteSpeed Standard-Listener

OpenLiteSpeed Listener Bearbeiten

Klicke auf Speichern und starte dann den Server neu, indem du auf die Schaltfläche Gnadenloser Neustart klickst.

OpenLiteSpeed Server neu starten

Schritt 7 – PHP konfigurieren

In diesem Schritt müssen wir unsere Kopie von PHP 8.2 mit dem Server verknüpfen.

Klicke auf der linken Seite auf den Abschnitt Serverkonfiguration und dann auf den Reiter Externe App. Dort siehst du eine bestehende LiteSpeed App für PHP. Wir werden einige Änderungen an ihr vornehmen.

OpenLiteSpeed Externe Anwendungen

Klicke auf die Schaltfläche Bearbeiten, um die PHP-App zu bearbeiten.

Als Nächstes musst du die Konfiguration wie unten gezeigt anpassen. Lasse alle anderen Felder leer.

Name: lsphp
Address: uds://tmp/lshttpd/lsphp.sock
Max Connections: 35
Environment: PHP_LSAPI_MAX_REQUESTS=500
             PHP_LSAPI_CHILDREN=35
             LSAPI_AVOID_FORK=200M
Initial Request Timeout (secs): 60
Retry Timeout : 0
Persistent Connection: Yes
Response Buffering: no
Start By Server: Yes(Through CGI Daemon)
Command: lsphp82/bin/lsphp
Back Log: 100
Instances: 1
Priority: 0
Memory Soft Limit (bytes): 2047M
Memory Hard Limit (bytes): 2047M
Process Soft Limit: 1400
Process Hard Limit: 1500

Klicke auf Speichern, wenn du fertig bist.

LiteSpeed SAPI App

Jetzt, da wir unsere eigene PHP 8.2-App erstellt haben, müssen wir dem Server mitteilen, dass er sie verwenden soll. Da wir den Standardeintrag bearbeitet haben, ist er bereits konfiguriert. Starte den Server neu, indem du auf die Schaltfläche Gnadenloser Neustart klickst.

Um zu testen, ob dein PHP korrekt umgestellt wurde, besuche http://<YOURSERVERIP>/phpinfo.php in deinem Browser.

OpenLiteSpeed PHP Infos

PHP neu starten

Wenn du auf OpenLiteSpeed die php.ini bearbeitest oder ein neues PHP-Modul installierst, werden die Änderungen bei einem Neustart des Servers nicht angezeigt. Dafür musst du den PHP-Prozess neu starten. Als Erstes musst du die Prozess-IDs für den lsphp Prozess ausfindig machen.

$ ps aux | grep lsphp
nobody    500747  0.9  0.8 121104 34928 ?        S    05:58   0:00 lsphp
nobody    500748  0.0  0.4 121104 16760 ?        Ss   05:58   0:00 lsphp
navjot    500751  0.0  0.0   3876  1908 pts/0    S+   05:58   0:00 grep lsphp

Beende die Prozesse von lsphp manuell.

$ sudo kill -9 500747
$ sudo kill -9 500748

Starte den Server neu.

$ sudo systemctl restart lsws

Schritt 8 – VirtualHost erstellen

Zuerst müssen wir Verzeichnisse für unseren virtuellen Host erstellen.

$ sudo mkdir /usr/local/lsws/example.com/{html,logs} -p

Das Verzeichnis html wird die öffentlichen Dateien enthalten und das Verzeichnis logs die Serverprotokolle.

Als Nächstes öffnest du die Verwaltungskonsole, rufst links den Bereich Virtuelle Hosts auf und klickst auf die Schaltfläche Hinzufügen.

Virtuelle Hosts Zusammenfassung

Fülle die Werte wie angegeben aus

Virtual Host Name: example.com
Virtual Host Root: $SERVER_ROOT/example.com/
Config File: $SERVER_ROOT/conf/vhosts/$VH_NAME/vhconf.conf
Follow Symbolic Link: Yes
Enable Scripts/ExtApps: Yes
Restrained: Yes
External App Set UID Mode: Server UID

OpenLiteSpeed Virtual Host Einstellungen

Klicke auf die Schaltfläche Speichern, wenn du fertig bist. Du bekommst die folgende Fehlermeldung, weil die Konfigurationsdatei noch nicht existiert. Klicke auf den Link, um die Konfigurationsdatei zu erstellen.

Konfiguration des virtuellen Hosts

Klicke erneut auf die Schaltfläche Speichern, um die Erstellung des virtuellen Hosts abzuschließen.

Sobald der virtuelle Host erstellt ist, gehe zu Virtuelle Hosts -> Wähle Virtuellen Host(example.com) -> Allgemein und ändere die Konfiguration wie angegeben.

Document Root: $VH_ROOT/html/
Domain Name: example.com
Enable GZIP Compression: Yes
Enable Brotli Compression: Yes

OpenLiteSpeed Virtual Host Allgemeiner Abschnitt

Klicke auf die Schaltfläche Speichern, wenn du fertig bist. Als nächstes müssen wir die Indexdateien einrichten. Klicke auf die Schaltfläche Bearbeiten neben Indexdateien unter dem Abschnitt Allgemein. Stelle die folgenden Optionen ein.

Use Server Index Files: No
Index files: index.php, index.html, index.htm
Auto Index: No

OpenLiteSpeed Index Dateien

Klicke auf Speichern, wenn du fertig bist. Als Nächstes müssen wir die Logdateien auswählen. Gehe zum Abschnitt Log, klicke auf Bearbeiten unter Virtual Host Log und trage die folgenden Werte ein. Lass die anderen Einstellungen unverändert.

Use Server’s Log: Yes
File Name: $VH_ROOT/logs/error.log
Log Level: ERROR
Rolling Size (bytes): 10M
Keep Days: 30
Compress Archive: Not Set

OpenLiteSpeed Virtual Host Log

Du kannst als Log Level DEBUG wählen, wenn du auf einem Entwicklungsrechner arbeitest.

Klicke auf Speichern und dann auf das Pluszeichen im Abschnitt Zugriffsprotokoll, um einen neuen Eintrag hinzuzufügen. Fülle die folgenden Werte ein.

Log Control: Own Log File
File Name: $VH_ROOT/logs/access.log
Piped Logger: Not Set
Log Format: Not Set
Log Headers: Not Set
Rolling Size (bytes): 10M
Keep Days: 30
Compress Archive: Not Set
Bytes log: Not Set

OpenLiteSpeed Zugriffsprotokoll

Klicke auf Speichern, wenn du fertig bist. Als Nächstes müssen wir die Zugriffskontrolle im Abschnitt Sicherheit konfigurieren. Lege die folgenden Werte fest.

Allowed List: *
Denied List: Not set

OpenLiteSpeed Zugangskontrolle

Klicke auf Speichern, wenn du fertig bist. Als Nächstes müssen wir die Definition des Skript-Handlers festlegen. Klicke auf das Pluszeichen (+), um eine neue Definition hinzuzufügen. Lege die folgenden Werte fest.

Suffixes: php
Handler Type: LiteSpeed SAPI
Handler Name: [Server Level]: lsphp

OpenLiteSpeed Script Handler Definition

Klicke auf Speichern, wenn du fertig bist. Als Nächstes musst du die Rewrite Control im Abschnitt Rewrite festlegen. Stelle die folgenden Werte ein.

Enable Rewrite: Yes
Auto Load from .htaccess: Yes
Log Level: Not Set

OpenLiteSpeed Rewrite Control

Klicke auf Speichern, wenn du fertig bist. Zu guter Letzt müssen wir die Listener einstellen. Gehe zum Abschnitt Listeners und klicke auf die Schaltfläche View neben Default Listener. Klicke dann auf die Schaltfläche Hinzufügen unter Virtuelle Host-Zuordnungen, um eine neue Zuordnung hinzuzufügen, und lege die folgenden Werte fest.

Virtual Host: example.com
Domains: example.com

OpenLiteSpeed Virtual Host Mappings

Klicke auf Speichern, wenn du fertig bist. Klicke nun auf die Schaltfläche Gnadenloser Neustart, um alle oben genannten Änderungen zu übernehmen und den Server neu zu starten.

Schritt 9 – SSL installieren

Um SSL in OpenLiteSpeed einzurichten, müssen wir zwei Zertifikate einrichten. Ein selbstsigniertes Zertifikat für den gesamten Server und ein Let’s Encrypt-Zertifikat für den standortspezifischen Server.

Im Administrationsbereich ist bereits ein selbstsigniertes Zertifikat vorinstalliert, das im Verzeichnis /usr/local/lsws/admin/conf zu finden ist.

Erstellen wir zunächst das selbstsignierte Zertifikat für den Gesamtserver.

$ cd ~
$ openssl req -x509 -days 365 -newkey rsa:4096 -keyout key.pem -out cert.pem -nodes

Du wirst eine ähnliche Ausgabe erhalten.

-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:
State or Province Name (full name) []:
Locality Name (eg, city) [Default City]:
Organization Name (eg, company) [Default Company Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:example.com
Email Address []:navjot@example.com

Du kannst in allen Feldern die Eingabetaste drücken und sie leer lassen. Gib deine Domain für den Common Name und deine E-Mail-Adresse ein.

Erstelle das Verzeichnis für die selbstsignierten Zertifikate.

$ sudo mkdir /usr/local/lsws/certs

Kopiere das Zertifikat in das Verzeichnis /usr/local/lsws/certs.

$ sudo mv *.pem /usr/local/lsws/certs

Wir müssen Certbot installieren, um die von Let’s Encrypt angebotenen kostenlosen SSL-Zertifikate zu generieren.

Du kannst Certbot entweder über das Repository von Debian installieren oder die neueste Version mit dem Snapd-Tool herunterladen. Wir werden die Snapd-Version verwenden. Bei Debian 12 ist Snapd noch nicht installiert.

Installiere das Snapd-Paket.

$ sudo apt install -y snapd

Führe die folgenden Befehle aus, um sicherzustellen, dass deine Version von Snapd auf dem neuesten Stand ist.

$ sudo snap install core
$ sudo snap refresh core

Gib den folgenden Befehl ein, um Certbot zu installieren.

$ sudo snap install --classic certbot

Stelle mit folgendem Befehl sicher, dass der Certbot-Befehl ausgeführt werden kann, indem du einen symbolischen Link auf das Verzeichnis /usr/bin erstellst.

$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

Überprüfe die Installation.

$ certbot --version
certbot 2.6.0

Führe den folgenden Befehl aus, um ein SSL-Zertifikat zu erzeugen.

Beziehe das SSL-Zertifikat. Das Webroot-Verzeichnis wird auf das zuvor konfigurierte öffentliche HTML-Verzeichnis gesetzt.

$ sudo certbot certonly --webroot -w /usr/local/lsws/example.com/html/ --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m name@example.com -d example.com

Erstelle ein Diffie-Hellman-Gruppenzertifikat.

$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096

Überprüfe den Certbot-Erneuerungsplanerdienst.

$ sudo systemctl list-timers

Du findest snap.certbot.renew.service als einen der Dienste, die zur Ausführung vorgesehen sind.

NEXT                        LEFT        LAST                        PASSED       UNIT                         ACTIVATES
.....
Sat 2023-09-30 18:12:21 UTC 2h 59min left  Sat 2023-09-30 14:22:18 UTC 50min ago   apt-daily.timer            apt-daily.service
Sat 2023-09-30 18:54:00 UTC 3h 41min left  -                           -           snap.certbot.renew.timer   snap.certbot.renew.service
Sun 2023-10-01 00:00:00 UTC 8h left        -                           -           dpkg-db-backup.timer       dpkg-db-backup.service

Um zu überprüfen, ob die SSL-Erneuerung einwandfrei funktioniert, führe einen Probelauf des Prozesses durch.

$ sudo certbot renew --dry-run

Wenn du keine Fehler siehst, ist alles in Ordnung. Dein Zertifikat wird automatisch erneuert.

Öffne nun die Verwaltungskonsole, gehe zu Listeners >> Add New Listener und füge die folgenden Werte hinzu.

Listener Name: SSL
IP Address: ANY IPv4
Port: 443
Secure: Yes

OpenLiteSpeed SSL Listener

Klicke auf Speichern, wenn du fertig bist. Als Nächstes gehst du zum Abschnitt Virtuelle Host-Zuordnungen unter dem SSL-Listener, indem du auf SSL klickst, auf die Schaltfläche Hinzufügen klickst und die folgenden Werte einträgst.

Virtual Host: example.com
Domains: example.com

OpenLiteSpeed Virtual Host Mappings

Klicke auf Speichern, wenn du fertig bist. Als Nächstes gehst du zu Listeners >> SSL Listener >> SSL Tab >>SSL Private Key & Certificate (Schaltfläche Edit) und gibst die folgenden Werte für das selbstsignierte Zertifikat ein, das wir zuvor erstellt haben.

Private Key File: /home/user/key.pem
Certificate File: /home/user/cert.pem
Chained Certificate: Yes

OpenLIteSpeed Selbstsignierter SSL Schlüssel und Zertifikat

Klicke auf Speichern, wenn du fertig bist. Gehe dann zu Listeners >> SSL Listener >> Registerkarte SSL >> SSL-Protokoll (Schaltfläche Bearbeiten) und gib die folgenden Werte für das SSL-Protokoll und die Verschlüsselungsdetails ein.

Protocol Version: TLS v1.2 TLS v1.3
Ciphers: ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305
Enable ECDH Key Exchange: Yes
Enable DH Key Exchange: Yes
DH Parameter: /etc/ssl/certs/dhparam.pem

OpenLiteSpeed SSL-Protokolle

Klicke auf Speichern, wenn du fertig bist. Als nächstes gehst du zu Virtuelle Hosts >> example.com >> Registerkarte SSL >> SSL Private Key & Certificate (Schaltfläche Bearbeiten) und gibst die folgenden Werte für das Let’s Encrypt-Zertifikat ein.

Private Key File: /etc/letsencrypt/live/example.com/privkey.pem
Certificate File: /etc/letsencrypt/live/example.com/fullchain.pem
Chained Certificate: Yes

OpenLiteSpeed Let's Encrypt SSL Schlüssel und Zertifikat

Klicke auf Speichern, wenn du fertig bist. Als nächstes gehst du zu Virtuelle Hosts >> example.com >> Registerkarte SSL >> OCSP Stapling (Schaltfläche Bearbeiten) und gibst die folgenden Werte ein, um OCSP Stapling zu aktivieren.

Enable OCSP Stapling: Yes
OCSP Response Max Age(Secs): 300
OCSP Responder: http://r3.o.lencr.org

OpenLiteSpeed OCSP-Heftung

Klicke auf Speichern, wenn du fertig bist. Als nächstes gehst du zu Virtuelle Hosts >> example.com >> Registerkarte SSL >> Sicherheit (Schaltfläche Bearbeiten) und gibst die folgenden Werte ein, um das HTTP3/QUIC-Protokoll zu aktivieren.

Enable HTTP3/QUIC: Yes

Die anderen Optionen brauchen wir nicht zu aktivieren, da sie standardmäßig aktiviert sind.

OpenLiteSpeed HTTP3/QUIC Protokoll

Klicke auf Speichern, wenn du fertig bist.

Starte den Server neu, indem du auf die Schaltfläche Gnadenloser Neustart klickst.

Schritt 10 – Testseite

Erstelle eine Testdatei in deinem html Verzeichnis.

$ sudo nano /usr/local/lsws/example.com/html/index.php

Füge den folgenden Code in den Nano-Editor ein.

<html>
<head>
    <h2>OpenLiteSpeed Server Install Test</h2>
</head>
    <body>
    <?php echo '<p>Hello,</p>';

    // Define PHP variables for the MySQL connection.
    $servername = "localhost";
    $username = "testuser";
    $password = "Your_Password123";

    // Create a MySQL connection.
    $conn = mysqli_connect($servername, $username, $password);

    // Report if the connection fails or is successful.
    if (!$conn) {
        exit('<p>Your connection has failed.<p>' .  mysqli_connect_error());
    }
    echo '<p>You have connected successfully.</p>';
    ?>
</body>
</html>

Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst. Öffne die URL https://example.com in einem Browser und du solltest die folgende Seite sehen.

OpenLiteSpeed Website Test

Die Testseite ist jetzt voll funktionsfähig. Du kannst den Server nun nutzen, um dynamische PHP-Websites und -Anwendungen bereitzustellen.

Fazit

Damit ist unser Tutorium zur Installation des LOMP Stack (OpenLiteSpeed, MySQL und PHP) auf einem Debian 12 Server abgeschlossen. Wenn du noch Fragen hast, schreibe sie in die Kommentare unten.

Das könnte dich auch interessieren …