Installationsanleitung Joomla 6 auf VPS
Wir arbeiten als User root für die Systembefehle, setzen aber am Ende die Berechtigungen für den User blog.
1. Vorbereitung & Download
Wechsle in das /var/www Verzeichnis deiner Domain und lade das Paket herunter.
Bash
cd /var/www/blog.EXAMPLE.TLD/web/
# Download des Pakets
wget "https://github.com/joomlagerman/joomla/releases/download/6.1.1v1/Joomla_6.1.1-Stable-Full_Package_German.tar.gz" -O joomla.tar.gz
2. Entpacken (Ohne Unterordner)
Um zu vermeiden, dass die Dateien in einem Ordner landen, entpacken wir sie direkt im aktuellen Verzeichnis.
Bash
# Direktes Entpacken in das aktuelle Verzeichnis
tar -xfz joomla.zip
# Aufräumen: Die Zip-Datei wird nicht mehr benötigt
rm joomla.zip
3. Berechtigungen anpassen
Da HestiaCP sehr strikt mit den User-Rechten ist, müssen wir sicherstellen, dass alle entpackten Dateien dem User blog gehören, damit Joomla später Erweiterungen installieren und Konfigurationen speichern kann.
Bash
# Besitzer rekursiv auf den Hestia-User setzen
chown -R blog:blog /home/blog/web/blog.EXAMPLE.TLD/public_html/
# Standard-Rechte setzen (755 für Ordner, 644 für Dateien)
find . -type d -exec chmod 755 {} +
find . -type f -exec chmod 644 {} +
4. Datenbank in HestiaCP anlegen
Bevor du die Web-Installation startest:
-
Logge dich in dein HestiaCP Panel ein.
-
Gehe zu DB (Datenbanken).
-
Erstelle eine neue Datenbank (z.B.
blog_db). -
Notiere dir den Datenbank-Namen, den User und das Passwort.
5. Web-Installer aufrufen
Öffne nun deinen Browser und besuche https://blog.EXAMPLE.TLD/.
-
Wähle die Sprache Deutsch.
-
Gib die Datenbank-Daten aus Schritt 4 ein.
-
Erstelle deinen Admin-Account.
Schritt 0: Subdomain als Webseite in ISPConfig anlegen
-
Logge dich in dein ISPConfig Panel ein.
-
Klicke in der oberen Hauptnavigation auf den Reiter Webseiten (Sites).
-
Klicke im linken Menü auf Neue Webseite hinzufügen (Add new website).
-
Fülle im Reiter Domain folgende Felder aus:
-
Server: Deinen VPS auswählen.
-
Domain: Hier die komplette Subdomain eintragen:
blog.EXAMPLE.TLD -
IPv4-Adresse: Wähle
*oder die primäre IP deines VPS. -
SSL: Haken setzen.
-
Let's Encrypt SSL: Haken setzen (damit das Zertifikat direkt generiert wird).
-
-
Klicke unten auf Speichern (Save).
Wichtig: Die Gedenkminute (Datalog)
ISPConfig arbeitet asynchron mit einer Job-Warteschlange. Oben in der roten Menüleiste erscheint nun ein blinkendes Kreis-Symbol mit einer Zahl (das Datalog).
-
Warte etwa 1 bis 2 Minuten, bis dieses Symbol verschwindet.
-
Erst dann hat ISPConfig im Hintergrund den Nginx-Vhost geschrieben, das Let's Encrypt Zertifikat geholt und die Ordnerstruktur auf der Festplatte angelegt.
Du kannst danach im Terminal prüfen, ob der Ordner existiert und wie dein Web-User heißt:
ls -la /var/www/blog.EXAMPLE.TLD/
In der Ausgabe siehst du dann in den Spalten für Besitzer und Gruppe den automatisch generierten User (z. B. web1:client1).
1. Vorbereitung & Download
Wechsle in das web-Verzeichnis deiner Domain und lade das offizielle Joomla-Paket herunter.
cd /var/www/blog.EXAMPLE.TLD/web/
# Download the archive
wget "https://github.com/joomlagerman/joomla/releases/download/6.1.1v1/Joomla_6.1.1-Stable-Full_Package_German.tar.gz" -O joomla.tar.gz
2. Entpacken
Entpacke die Dateien direkt in das aktuelle Verzeichnis und räume das Archiv danach auf.
# Extract the archive into the current directory
tar -xzf joomla.tar.gz
# Clean up: Remove the archive
rm joomla.tar.gz
3. Berechtigungen anpassen (Wichtig für ISPConfig)
ISPConfig ist extrem präzise bei den Dateirechten. Wenn die Dateien root gehören, wirft PHP einen 500 Internal Server Error oder 403 Forbidden.
Finde zuerst heraus, wie der Linux-User deiner Website in ISPConfig heißt (z. B. web1 und Gruppe client1). Das siehst du im ISPConfig-Panel unter Webseiten oder indem du im Verzeichnis nachschaust (ls -la /var/www/blog.EXAMPLE.TLD/).
Ersetze web1:client1 im folgenden Befehl mit deinen tatsächlichen Werten:
# Set owner and group recursively to the ISPConfig website user
chown -R web1:client1 /var/www/blog.EXAMPLE.TLD/web/
# Set standard permissions (755 for directories, 644 for files)
find . -type d -exec chmod 755 {} +
find . -type f -exec chmod 644 {} +
4. Datenbank in ISPConfig anlegen
Bevor du den Web-Installer startest, musst du die Datenbank über das Panel vorbereiten:
-
Logge dich in dein ISPConfig Panel ein.
-
Gehe zum Reiter Webseiten (Sites) -> Datenbank-Benutzer (Database Users) und klicke auf Neuen Benutzer hinzufügen. Erstelle dort den DB-User (z. B.
c1bloguser). -
Gehe danach auf Datenbanken (Databases) -> Neue Datenbank hinzufügen.
-
Wähle deine Domain aus, gib der Datenbank einen Namen (z. B.
c1joomla) und ordne ihr den eben erstellten Benutzer zu. -
Notiere dir den vollständigen Datenbank-Namen, den User (ISPConfig stellt oft ein Kürzel wie
c1voran) und das Passwort.
5. Web-Installer aufrufen
Öffne nun deinen Browser und besuche https://blog.EXAMPLE.TLD/.
-
Wähle die Sprache Deutsch.
-
Gib die Datenbank-Daten aus Schritt 4 ein (als Datenbank-Host nutzt du
localhost). -
Erstelle deinen Admin-Account.
1. Fix: 404 Fehler beim Healthcheck
Joomla versucht, über die API die URL aufzulösen, aber Nginx findet die Datei nicht, weil die Rewrite-Regeln für das Joomla-eigene Routing fehlen.
Gehe in ISPConfig zu deiner Webseite -> Optionen -> Nginx Direktiven und füge Folgendes ein:
location /api/ {
try_files $uri $uri/ /api/index.php?$args;
location ~ \.php$ {
include /etc/nginx/fastcgi_params;
fastcgi_pass unix:/run/php/web2.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
Speichern und warten, bis das Datalog durch ist. Das weist Nginx an, Anfragen an /api/ korrekt an die api/index.php weiterzureichen, statt sie im Dateisystem zu suchen.
2. Administrator-Ordner nur per Tailscale
Du kannst dies elegant lösen, indem du den Zugriff auf den /administrator-Pfad auf deine Tailscale-IP beschränkst. Ersetze in den Nginx-Direktiven die IP 100.XXX.XXX.XXX durch deine tatsächliche Tailscale-IP (ermittelt via tailscale ip -4).
Füge diesen Block unter die oben genannten Location-Blöcke ein:
location ^~ /administrator/ {
allow 100.64.0.0/10;
deny all;
try_files $uri $uri/ /administrator/index.php?$args;
location ~ \.php$ {
include /etc/nginx/fastcgi_params;
fastcgi_pass unix:/run/php/web2.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_intercept_errors on;
}
}
Wichtige Hinweise für diesen Schritt:
-
PHP-Pfad: Überprüfe im ISPConfig-Panel unter der Webseiten-Konfiguration, welcher PHP-FPM-Socket für deine Webseite genutzt wird. Der Pfad
/var/lib/php7.4-fpm/web1.sockist nur ein Beispiel. Wenn dortweb5.socksteht, musst du das imfastcgi_passanpassen. -
Test: Wenn du danach versuchst, den
/administrator-Ordner über deine öffentliche IP aufzurufen, solltest du einen403 ForbiddenFehler erhalten. Über die Tailscale-IP sollte es wie gewohnt funktionieren. -
Let's Encrypt: Da die Let's Encrypt-Challenge (
/.well-known/acme-challenge/) von ISPConfig global konfiguriert wird (außerhalb dieses Blocks), bleibt die automatische Zertifikatserneuerung weiterhin funktionsfähig.
Nachdem du die Direktiven gespeichert hast, teste die Konfiguration mit nginx -t auf der Konsole, um sicherzugehen, dass kein Syntaxfehler vorliegt.
Helix Ultimate Custom CSS (Neon-Dark-Theme)
Nachdem die Installation abgeschlossen ist und du das Helix Ultimate Template aktiviert hast, fügst du dein Custom-CSS wieder wie gewohnt ein (entweder über das Template-Backend oder direkt per micro in /var/www/blog.EXAMPLE.TLD/web/templates/shaper_helixultimate/css/custom.css). Das CSS bleibt von der ISPConfig-Migration komplett unberührt.