Froxlor unter Debian & Ubuntu installieren: Schritt-für-Schritt mit APT-Paket

Vom frischen Server zum laufenden Server-Panel: APT-Repository einbinden, Datenbank-User anlegen, Web-Installer, Cron und config-services — der offizielle Weg ohne Abkürzungen.

Froxlor ist ein Open-Source-Serverpanel für Shared-Hosting-Szenarien, eine quelloffene Alternative zu Plesk oder cPanel, allerdings mit anderem Funktionsumfang und ohne kommerziellen Support. Auf Debian und Ubuntu wird Froxlor offiziell als APT-Paket gepflegt; Updates laufen damit über den normalen Distributions-Mechanismus mit (manuell per apt upgrade oder automatisiert über unattended-upgrades). Dieser Beitrag geht den Installationsweg Schritt für Schritt durch, orientiert an der offiziellen Froxlor-Dokumentation und ohne Abkürzungen, die später Probleme machen.

Voraussetzungen

Laut offizieller Doku braucht Froxlor in der aktuellen Generation:

  • Betriebssystem: Debian oder Ubuntu (offiziell unterstützte LTS-Versionen)
  • PHP: Doku-Spannweite 7.4 bis 8.5, praktisch für Neu-Installationen mindestens PHP 8.2, weil 7.4 seit November 2022 und 8.0/8.1 seit Ende 2023/2024 End-of-Life sind und keine Sicherheits-Updates mehr erhalten.
  • Datenbank: Offiziell getestet mit MySQL 8.4 oder MariaDB 11.7. In der Praxis läuft Froxlor auch mit dem, was die Distribution mitbringt: Debian 12 liefert MariaDB 10.11 (LTS-Branch), Ubuntu 24.04 ebenfalls. Für eine Neuinstallation aus den Distro-Quellen also völlig ausreichend.
  • Webserver: Apache 2 oder nginx
  • PHP-Erweiterungen: session, ctype, xml, filter, posix, mbstring, curl, gmp, json
  • Backup: Auch wenn dieser Beitrag von einem frischen Server ausgeht, kostet ein Snapshot oder Image vor der Installation nichts und spart bei Fehlkonfigurationen viel Zeit.

Wer Froxlor frisch aufsetzt, fährt mit einem minimalen Debian 12 (Bookworm) oder Ubuntu 24.04 LTS am unkompliziertesten, weil die nötigen Pakete in beiden Repos in passenden Versionen vorliegen.

Hinweis: Froxlor übernimmt nach der Installation einen erheblichen Teil der Serverkonfiguration, von Apache/nginx über Postfix/Dovecot bis zu PHP-FPM-Pools. Auf produktiven Systemen mit bestehender Konfiguration ist das problematisch. Empfehlung: Froxlor immer auf einem frischen Server installieren, nicht auf einen produktiven aufpfropfen.

Schritt 1: Repository und GPG-Key hinzufügen

Die offizielle Froxlor-Doku empfiehlt die Installation über das eigene APT-Repository, weil Updates so über den normalen Paketlauf mitkommen. Vorab die Grundpakete für Repository-Handling:

apt -y install apt-transport-https lsb-release ca-certificates curl gnupg

Anschließend den GPG-Key herunterladen, mit dem das Repository signiert ist:

curl -sSLo /usr/share/keyrings/deb.froxlor.org-froxlor.gpg https://deb.froxlor.org/froxlor.gpg

Jetzt die Repository-Quelle eintragen, abhängig davon, ob Debian oder Ubuntu läuft:

Variante Debian

sh -c 'echo "deb [signed-by=/usr/share/keyrings/deb.froxlor.org-froxlor.gpg] https://deb.froxlor.org/debian $(lsb_release -sc) main" > /etc/apt/sources.list.d/froxlor.list'

Variante Ubuntu

sh -c 'echo "deb [signed-by=/usr/share/keyrings/deb.froxlor.org-froxlor.gpg] https://deb.froxlor.org/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/froxlor.list'

$(lsb_release -sc) setzt automatisch den passenden Codenamen ein, also bookworm auf Debian 12, noble auf Ubuntu 24.04 usw. (Das Paket lsb-release wurde im ersten Schritt bereits installiert.)

Schritt 2: Paketquellen aktualisieren und Froxlor installieren

apt update
apt install froxlor

Das Paket nutzt in Debian-typischer Manier Alternativ-Abhängigkeiten (apache2 | lighttpd | nginx, mariadb-server | default-mysql-server), d. h. Apache wird als Standard installiert, sofern kein anderer Webserver bereits vorhanden ist. Wer nginx möchte, installiert ihn vor Froxlor; dann erkennt der Alternative-Mechanismus das und überspringt Apache. Mit installiert werden außerdem MariaDB-Server und die geforderten PHP-Pakete in der Version der Distribution. Die Verzeichnisstruktur landet unter /var/www/froxlor/.

Schritt 3: Privilegierten Datenbank-Nutzer anlegen

Froxlor braucht für den Web-Installer einen privilegierten MySQL/MariaDB-User, der später Datenbanken und Benutzer für Kundenkonten anlegen darf. Den unprivilegierten Anwender (Standardname froxlor) erstellt der Installer selbst; der hier angelegte „froxroot" ist nur das Werkzeug dafür.

Im MariaDB-/MySQL-Client als root einloggen und ausführen:

CREATE USER 'froxroot'@'localhost' IDENTIFIED BY 'CHANGEM3';
GRANT ALL PRIVILEGES ON *.* TO 'froxroot'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;

Das Passwort CHANGEM3 ist nur ein Platzhalter und durch ein eigenes, ausreichend langes zu ersetzen. Wichtig laut Froxlor-Doku: keine Leerzeichen oder Anführungszeichen verwenden, weil diese später in Konfigurationsdateien Probleme machen können.

Schritt 4: Web-Installer aufrufen

Der eigentliche Installer ist eine geführte Browser-Oberfläche. Aufruf im Browser:

http://<ip-oder-hostname>/froxlor

Hier werden in mehreren Schritten abgefragt:

  1. Zugangsdaten des privilegierten DB-Users (oben angelegt)
  2. Name und Passwort des unprivilegierten DB-Users, den Froxlor sich selbst anlegen soll
  3. Daten des Admin-Accounts für das Froxlor-Webinterface
  4. Systemeinstellungen wie Hostname und Server-IP

Nach Abschluss leitet der Installer auf den Login-Bildschirm weiter. Anmeldung mit den Admin-Daten aus Schritt 4.

Hinweis zu HTTPS: Der Erstaufruf über http:// ist für die reine Installation in Ordnung, weil das System noch im Aufbau ist. Sobald die erste echte Domain hinter dem Panel hängt, sollte das Froxlor-Webinterface zwingend per TLS abgesichert werden, entweder über die in Froxlor integrierte Let's-Encrypt-Anbindung oder ein selbst gepflegtes Zertifikat. Admin-Logins über Klartext-HTTP sind in Produktion nicht akzeptabel.

Schritt 5: Cronjob einrichten

Ohne Froxlor-Cron passiert nichts Sichtbares: Neu angelegte Kunden, Domains oder Mailpostfächer existieren zwar in der Datenbank, werden aber erst durch den Cron-Lauf in echte Webserver-Configs und Mail-Accounts übersetzt. Die Doku formuliert das eindeutig: „running the commands for Other (system) → Cronjob for froxlor is required in order for froxlor to work".

Im Froxlor-Backend unter System → Cronjob wird die nötige Crontab-Zeile angezeigt. Eintragen in die System-Crontab über:

crontab -e

Die Standardzeile ruft das Froxlor-CLI minütlich auf, etwa:

* * * * * /usr/bin/php /var/www/froxlor/bin/froxlor-cli froxlor:cron

Der genaue Pfad zum CLI-Skript wird vom Backend ausgegeben. Bitte den dort genannten Pfad verwenden, nicht den hier abgedruckten, falls die Installation in ein anderes Verzeichnis gelegt wurde.

Schritt 6: Dienste konfigurieren (config-services)

Damit Apache/nginx, Postfix, Dovecot und PHP-FPM die richtigen Konfigurationsdateien bekommen, liefert Froxlor ein Setup-Skript mit, das Distribution-typische Templates schreibt:

cd /var/www/froxlor/
bin/froxlor-cli froxlor:config-services --create

Der Befehl ist interaktiv und fragt Punkt für Punkt durch, welche Dienste konfiguriert werden sollen. Laut Froxlor-Doku müssen für moderne Setups beim System-Abschnitt mindestens zwei Optionen aktiviert sein:

  • libnssextrausers: damit Froxlor Webserver- und Mail-Nutzer ohne MySQL-Lookup auflösen kann (deutlich performanter als das alte libnss-mysql).
  • php-fpm: PHP-FPM als PHP-Handler (per-vHost konfigurierbar, klare Prozesstrennung pro Kunde).

Bei nginx-Setups wird stattdessen nginx ausgewählt, ansonsten bleibt der Ablauf identisch. Die Templates erzeugen passende Apache-, nginx-, Postfix- und Dovecot-Konfigurationen auf Basis der in Froxlor gespeicherten Einstellungen.

Schritt 7: System-Einstellungen aktivieren und Configs neu bauen lassen

Im Froxlor-Webinterface unter System → Einstellungen müssen passend zur Schritt-6-Auswahl die folgenden Schalter umgelegt werden (Doku-Zitat: „at least the following options must be selected"):

  • PHP-FPM Enabled: Yes
  • Froxlor VirtualHost settings → Use PHP-FPM in froxlor host: Yes
  • System settings → Use libnss-extrausers instead of libnss-mysql: Yes

Anschließend wird unter System → Configfiles neu bauen ein Rebuild angestoßen, und beim nächsten Cron-Lauf werden die produktiven Konfigurationsdateien geschrieben.

Schritt 8: Erste Domain anlegen und prüfen, ob alles greift

Als Schnelltest: Im Froxlor-Backend einen Kunden anlegen, eine Test-Domain dazu, eine kurze index.html ins Kunden-Webroot ablegen und im Browser aufrufen. Erfolgt der Aufruf sauber über die richtige IP und das richtige PHP-FPM-Pool, sind Cron + Service-Templates korrekt durchgelaufen.

Wenn nichts erscheint, hilft fast immer: einmal den Cron manuell auslösen und auf Fehler achten:

/usr/bin/php /var/www/froxlor/bin/froxlor-cli froxlor:cron --debug

Häufige Stolpersteine

1. „Es passiert nichts nach dem Anlegen einer Domain". Erste Diagnose: läuft der Cron? Ist die Crontab-Zeile aus Schritt 5 wirklich im richtigen User-Crontab? Der Froxlor-Cron muss als root laufen, denn er schreibt in /etc/apache2/, /etc/nginx/, /etc/postfix/, /etc/dovecot/ und triggert Service-Reloads. Ein User-Cron im Home eines unprivilegierten Accounts hat hier zwangsläufig keine Schreibrechte.

2. Webinstaller hängt auf Schritt 1 fest. Fast immer: privilegierter DB-User hat kein GRANT OPTION, oder das Passwort enthält Sonderzeichen, die in den generierten PHP-Configs Probleme machen. Lösung: mit dem CREATE-USER-Block aus Schritt 3 neu anlegen.

3. „libnss-extrausers wirkt nicht." Die Distro muss das Paket installiert haben (libnss-extrausers), und in /etc/nsswitch.conf muss extrausers in den passwd:/group:/shadow:-Zeilen eingetragen sein. Das Setup-Skript aus Schritt 6 schreibt das normalerweise mit, sollte aber nach dem Rebuild geprüft werden.

4. PHP-Version passt nicht. Die offiziell unterstützte Spanne ist PHP 7.4 bis 8.5, sicherheitsmäßig sinnvoll ist heute nur noch PHP 8.2 oder neuer (alles darunter ist End-of-Life). Wer auf einer alten Distribution mit PHP 7.0/7.2 hängt, bindet das Sury-PHP-Repository ein oder aktualisiert die Distribution. Keine Froxlor-Installation auf PHP-Versionen ohne Sicherheits-Patches.

5. Firewall vergessen. Froxlor selbst öffnet keine Ports im Kernel-Filter. Vor dem Live-Schalten müssen mindestens 80/443 (Web), 25/465/587 (SMTP), 143/993 (IMAP), 110/995 (POP3) und der SSH-Port konfiguriert sein. ManageSieve (4190) und MySQL (3306) sollten nicht öffentlich offen sein.

Updates: warum die APT-Variante sich lohnt

Bei der Tarball-Installation müssen Updates manuell heruntergeladen, ersetzt und ggf. Migrationen ausgeführt werden. Über das APT-Repository übernimmt das der normale Distro-Mechanismus:

apt update && apt upgrade

Froxlor wird wie jedes andere Paket aktualisiert; nach größeren Versionssprüngen prüft das Paket selbst, ob Datenbankmigrationen nötig sind. Für produktive Systeme ist das eine spürbare Vereinfachung und zugleich ein Sicherheitsgewinn, weil Patches schneller ankommen.

Zu unattended-upgrades: Sicherheits-Updates der Distribution sollten automatisch laufen, das Froxlor-Repository dagegen würde ich nicht in die unbeaufsichtigte Aktualisierung aufnehmen. Major-Versionssprünge können Datenbankmigrationen oder Anpassungen an den generierten Service-Templates auslösen, die man sich besser vor dem apt upgrade kurz ansieht.

Fazit

Froxlor lässt sich auf Debian und Ubuntu in unter einer Stunde komplett aufsetzen: APT-Paket, privilegierter DB-User, Web-Installer, Cron, config-services, Rebuild. Wer diese Reihenfolge einhält und vor allem den Cron vor der ersten Domain einrichtet, hat anschließend ein wartbares Panel, das sich über den normalen apt-Lauf aktuell hält. Wirklich kritisch ist nur ein Punkt: Frischer Server, nichts darauf. Froxlor will Webserver, Mail-Setup und PHP-FPM selbst konfigurieren, und das verträgt sich nicht mit existierenden Installationen.

Quellen

Froxlor sauber aufgesetzt, von Anfang an?

Ob Erstinstallation, Migration eines bestehenden Plesk- oder ISPConfig-Setups oder Hardening eines bereits laufenden Froxlor-Servers: Ich unterstütze bei Einrichtung, Konfiguration und Betrieb.

Anfrage senden