In diesem Tutorial zeige ich eine (einfache) Installation und Konfiguration von „OpenBSD httpd“, MariaDB und PHP (FPM) und das unter OpenBSD (aktuell 6.2). Sofern nicht anders erwähnt, werden alle Befehle als root ausgeführt.
Um nachfolgend Programme zu installieren ist es notwendig eine entsprechende URL anzugeben wo diese gefunden werden.
Dazu erstellt man am einfachsten die Datei /etc/installurl mit einem Mirror in der Nähe des Server-Standorts, z.B.:
https://ftp.openbsd.org/pub/OpenBSD
Los gehts…
httpd
Warum der OpenBSD eigene httpd und kein anderer?
Der von OpenBSD mitgelieferte httpd-Dienst hat den Vorteil, dass dieser in einer Art „jail“ (Gefängnis) arbeitet. D.h. Die Welt des httpd-Dienstes besteht nur aus /var/www und der Dienst kann nicht auf externe Dateien (ausserhalb von /var/www/) zugreifen. Durch diesen Sachverhalt sind natürlich ein paar Anpassungen bei den anderen Diensten notwendig.
Da ich eine sichere Verbindung bevorzuge, generieren wir als erstes ein paar SSL-Zertifikate.
# openssl genrsa -out /etc/ssl/private/server.key 4096
Generating RSA private key, 4096 bit long modulus
...........................................................................................++
..................................................................................................................................................................................................................................................................................................................................++
e is 65537 (0x10001)
Hierbei ein 4096-Bit Private-Key erzeugt. Wie der Name schon sagt, handelt es sich um den privaten Schlüssel, welcher auf jeden Fall geschützt werden muss.
Mit diesem neuen Private-Key generieren wir nun das selbstsignierte Zertifikat.
openssl req -new -x509 -key /etc/ssl/private/server.key -out /etc/ssl/server.crt
Bei diesem Vorgang wird ein paar Angaben eintragen müssen, z.B. Region, E-Mail, etc. Da es sich um ein selbstsigniertes Zertifikat handelt, müssen die Angaben nicht unbedingt der Wahrheit entsprechen ;-)
Nachdem das SSL-Zertifikat nun erstellt ist, kümmern wir uns um die httpd-Konfiguration.
Hierzu erstellen wir die Datei /etc/httpd.conf mit folgendem Inhalt:
ext_addr="*"
server "default" {
listen on $ext_addr tls port 443
tls {
key "/etc/ssl/private/server.key"
certificate "/etc/ssl/server.crt"
}
}
types {
include "/usr/share/misc/mime.types"
}
Wie man sieht ist dieser Block recht selbsterklärend. Eine weitere Beispiel-Konfiguration findet man unter /etc/examples/httpd.conf.
Nun legen wir uns noch eine index.html unter /var/www/htdocs mit folgendem Inhalt an:
<html>
<body>
Hallo Welt!
</body>
<html>
Um den Dienst zu starten verwendet man:
/etc/rc.d/httpd -f start
oder
rcctl start httpd
Ein Aufruf der entsprechenden Seite im Browser mit https://[Server-IP] zeigt zwar eine Warnmeldung das diese Verbindung angeblich nicht sicher sei, aber das liegt nur daran, dass dieses SSL-Zertifikat selbstsigniert ist und von keiner autorisierten Gegenstelle gegengezeichnet wurde.
Nachdem eine Ausnahme für diese Warnung gemacht wurde, sollte Hallo Welt! im Browser angezeigt werden.
MariaDB
Da die Installation von MariaDB relativ schnell geht, führen wir diesen Schritt als nächstes durch…
Um MariaDB zu installieren verwendet man den Befehl: pkg_add mariadb-server
Nachdem die Installation durchgelaufen ist, muss die Datenbank noch erstellt werden.
Dies geschieht mit dem Befehl: mysql_install_db
Im Anschluss daran starten wir den Dienst mit:
/etc/rc.d/mysqld start
oder
rcctl start mysqld
Als letzten Schritt führt man den Befehl mysql_secure_installation
aus.
Hierbei bekommt man verschiedene Fragen gestellt und hat die Möglichkeit das MySQL-root Passwort zu setzen. Des weitern sollten die weiteren Fragen jeweils mit Ja beantwortet werden um eine gewisse Sicherheit zu gewährleisten.
Da, wie bereits weiter oben erwähnt, der httpd-Dienst nicht auf Dateien, Sockets oder ähnliches außerhalb von /var/www zugreifen kann muss die Konfiguration von MariaDB/MySQL hier etwas angepasst werden.
In der Datei /etc/my.cnf ist der MySQL-Socket standardmäßig auf folgenden Wert gesetzt:
socket = /var/run/mysql/mysql.sock
dies ändern wir nun auf folgenden Wert:
socket = /var/www/run/mysql/mysql.sock
Im Anschluss daran starten wir den Dienst noch einmal neu:
/etc/rc.d/mysqld restart
PHP
Die entsprechenden Pakete werden wir gewohnt installiert:
pkg_add php php-gd php-mysqli
Bei der Installation hat man die Auswahl zwischen verschiedenen Versionen. Ich persönlich verwende die neuste, welche im Angebot ist (Aktuell: 7.0.23).
Nun erweitern wir die httpd-Konfiguration um einen entsprechenden Block für .php-Dateien:
ext_addr="*"
server "default" {
listen on $ext_addr tls port 443
tls {
key "/etc/ssl/private/server.key"
certificate "/etc/ssl/server.crt"
}
location "*.php" {
fastcgi socket "/run/php-fpm.sock"
}
# Define server-specific log files relative to /logs
log { access "secure-access.log", error "secure-error.log" }
# Set max upload size to 513M (in bytes)
connection max request body 537919488
directory { index "index.php" }
}
types {
include "/usr/share/misc/mime.types"
}
Nun muss noch die MySQL-PHP-Erweiterung in die /etc/php-7.0.ini eingetragen werden, hierzu fügt man an das Ende der Datei:
extension=mysqli.so
Nun (re)starten wir die Dienste:
für httpd:
/etc/rc.d/httpd -f start
oder
rcctl start httpd
für PHP:
/etc/rc.d/php70_fpm start
oder
rcctl start php70_fpm
Autostart
Damit die Dienste auf nach einem Neustart des Systems automatisch gestartet werden, legt man, sofern noch nicht vorhanden, die Datei /etc/rc.conf.local mit folgendem Inhalt an:
httpd_flags=
pkg_scripts=mysqld php70_fpm
Die erste Zeile sorgt dafür das der httpd-Dienst gestartet wird und die zweite, dass der MySQL-Dienst und der PHP-FPM-Pool gestartet werden.