Shop-Hosting selber gemacht: JTL-Shop auf dem eigenen Hetzner-Server mit Coolify

Shop Hosting selber gemacht: Das Wichtigste in Kürze
Shop Hosting selber gemacht heißt: Ihr JTL-Shop läuft nicht bei einem Shared Hoster, sondern auf einem eigenen Server, etwa bei Hetzner. Mit Docker und Coolify wird daraus kein Bastelprojekt, sondern ein wiederholbares Setup, das bei jedem Git-Push neu baut.
- Server: eigener Linux-Server, für Coolify laut Hersteller mindestens 2 CPU-Kerne, 2 GB RAM und 10 GB Speicher
- Werkzeug: Coolify verbindet Git-Repository, Docker-Build, Domain und SSL-Zertifikat
- Vorlage: unser frei nutzbares Repository jtl-shop-to-coolify mit Dockerfile und Docker Compose
- Dienste: Shop (PHP 8.3 mit Apache), MariaDB, Redis und ein Cron-Dienst
- Wichtigste Falle: Shop-URL in JTL-Wawi immer mit https:// eintragen
- Ihre Verantwortung: Backups, Updates und Sicherheit des Servers
Sie wollen den Shop lieber betreiben lassen, statt den Server selbst zu pflegen? Auf unserer Seite JTL-Shop sehen Sie, was wir übernehmen.
Warum JTL-Shop selbst hosten?
Bei vielen Shared-Hosting-Paketen bestimmt der Hoster PHP-Version, Speicherlimits und Laufzeiten. Für JTL-Shop ist das schnell zu eng: Große Bild-Abgleiche aus JTL-Wawi brauchen hohe Upload-Limits und lange Laufzeiten, neue Shop-Versionen eine aktuelle PHP-Version.
Auf einem eigenen Server legen Sie diese Werte selbst fest. Sie entscheiden, wann ein Update eingespielt wird, und können eine Kopie des Shops zum Testen starten. Der Preis dafür: Sie sind für den Betrieb verantwortlich, vom Betriebssystem bis zum Backup.
Was JTL für den Shop voraussetzt
Laut JTL-Guide braucht JTL-Shop 5 diese Umgebung:
| Bereich | Anforderung laut JTL |
|---|---|
| Betriebssystem | Linux, zum Beispiel Debian oder Ubuntu |
| Webserver | Apache 2.2 oder 2.4 mit mod_rewrite und .htaccess-Unterstützung |
| PHP | ab Shop-Version 5.7 mindestens PHP 8.3 |
| Datenbank | MySQL oder MariaDB, ab Shop 5.2.3 bis einschließlich MariaDB 10.11 |
| PHP-Module | unter anderem SimpleXML, Imagick, Curl, Iconv, MBString, Tokenizer, Intl, PDO (MySQL) |
| PHP-Einstellungen | max_execution_time mindestens 120 Sekunden, memory_limit mindestens 128 MB |
Das Docker-Image in unserem Repository baut genau darauf auf: ein PHP-8.3-Image mit Apache, die benötigten Erweiterungen und MariaDB 10.11 als Datenbank. Die PHP-Limits liegen bewusst deutlich über dem Minimum, damit auch große Bild-Abgleiche durchlaufen.
Der Aufbau: vier Container auf einem Server
Das Setup besteht aus vier Diensten, die Docker Compose gemeinsam startet:
- shop: JTL-Shop auf PHP 8.3 mit Apache, OPcache und den nötigen PHP-Erweiterungen
- db: MariaDB 10.11 mit utf8mb4 als Zeichensatz
- redis: Zwischenspeicher, den Sie im Shop als Cache nutzen können
- cron: ruft alle fünf Minuten
jtl_cron.phpauf, damit geplante Aufgaben des Shops laufen
Coolify sitzt davor. Der Reverse Proxy nimmt die Anfragen für Ihre Domain an, stellt das SSL-Zertifikat bereit und leitet an den Shop-Container weiter.

JTL-Shop mit Coolify einrichten: Schritt für Schritt
1. Server und Coolify vorbereiten
Mieten Sie einen Linux-Server, zum Beispiel einen Cloud-Server bei Hetzner, und installieren Sie Coolify nach der offiziellen Anleitung. Coolify nennt als Minimum 2 CPU-Kerne, 2 GB RAM und 10 GB freien Speicher. Shop, Datenbank und Bilder brauchen zusätzlich Platz, planen Sie also großzügiger.
Richten Sie eine Firewall ein, die nur SSH und die Ports für Web und Coolify zulässt. Zeigen Sie mit einem DNS-Eintrag Ihre Shop-Domain auf die IP des Servers.
2. Repository anlegen und Shop-ZIP ablegen
Übernehmen Sie das Repository jtl-shop-to-coolify in ein eigenes, privates Git-Repository. Das ZIP-Paket von JTL-Shop 5 laden Sie aus Ihrem JTL-Kundenkonto herunter und legen es in den Ordner shop/.
Beim Build sucht das Dockerfile die erste ZIP-Datei in diesem Ordner, entpackt sie und setzt die Dateirechte. Ist das ZIP größer als 100 MB, brauchen Sie Git LFS, denn GitHub lehnt größere Dateien ab.
3. Zugangsdaten festlegen
Kopieren Sie .env.example nach .env und tragen Sie eigene, starke Passwörter für die Datenbank ein. Die .env gehört nicht ins Repository. In Coolify hinterlegen Sie dieselben Werte als Umgebungsvariablen.
4. Ressource in Coolify anlegen
In Coolify legen Sie eine neue Ressource vom Typ Docker Compose an, verbinden das Repository und wählen den Branch. Achten Sie auf den Dateinamen: Coolify erwartet standardmäßig docker-compose.yaml. Dann tragen Sie Ihre Domain ein und starten das Deployment.
5. Installationsassistent durchlaufen
Rufen Sie https://<ihre-domain>/install auf. Als Datenbank-Host tragen Sie db ein, den Namen des Datenbank-Dienstes, nicht localhost. Name, Benutzer und Passwort kommen aus Ihrer .env.
Nach der Installation entfernen Sie laut JTL das Verzeichnis install/ und nehmen der Datei includes/config.JTL-Shop.ini.php die Schreibrechte.
6. JTL-Wawi anbinden
In JTL-Wawi tragen Sie die Shop-URL ein, immer mit https://. Danach starten Sie den ersten Abgleich und prüfen, ob Artikel und Bilder ankommen.
Typische Fehler beim selbst gehosteten Shop
Diese Fehler sind uns in echten Deployments begegnet. Die Lösungen stecken bereits im Repository:
- Wawi-Abgleich bricht ab: Die Shop-URL steht in der Wawi mit http://. Der Proxy leitet auf https:// um, und der Abgleich folgt dieser Umleitung bei POST-Anfragen nicht. Lösung: https:// eintragen und ein gültiges Zertifikat nutzen.
- Bild-Abgleich scheitert bei großen Mengen: PHP-Upload-Limits und die Größe der Anfragen am Proxy sind zu klein. Beides ist im Setup auf 512 MB angehoben, und der Proxy muss die Einstellung auch wirklich auf den Shop anwenden.
- Installationsassistent erscheint nach jedem Deployment: Die Konfigurationsdatei lag nur im Image. Das Setup sichert sie bei jedem Start in ein eigenes Volume und stellt sie wieder her.
- Datenbankfehler im Assistenten:
localhostals Host sucht einen lokalen Socket, den es im Shop-Container nicht gibt. Lösung: Host db. - Template-Änderungen erscheinen nicht: OPcache prüft geänderte Dateien nicht, wenn die Zeitstempelprüfung ausgeschaltet ist, oder der Smarty-Cache liefert alte Seiten. Cache leeren oder Zeitstempelprüfung aktivieren.
- Build bricht ab: Werden PHP-Erweiterungen aus dem Quellcode kompiliert, dauert der Build lange und braucht viel Speicher. Das Dockerfile nutzt deshalb vorgefertigte Erweiterungen.
Daten, Updates und Backups
Alles, was sich im Betrieb ändert, liegt in Docker-Volumes und bleibt bei einem neuen Deployment erhalten: Artikelbilder, Mediendateien, Exporte, Templates, Plugins, Uploads, der Smarty-Cache, die Konfiguration und die Datenbank.
Ein Shop-Update läuft so: neues ZIP in shop/ ablegen, pushen, neu bereitstellen. Beim Start vergleicht das Setup die Version des Standard-Templates NOVA im Image mit der im Volume. Weichen sie ab, wird das neue NOVA eingesetzt, das alte gesichert und der Template-Cache geleert. Anschließend starten Sie im Shop-Backend das Datenbank-Update und leeren den Cache.
Eigene Anpassungen gehören deshalb in ein Child-Template, nie direkt in NOVA. Wie Sie Updates, Plugins und Backups planen, beschreibt unsere Checkliste zur JTL-Shop Wartung.
Selbst hosten oder hosten lassen?
| Selbst hosten | Betreuen lassen | |
|---|---|---|
| Geeignet für | Teams mit Linux- und Docker-Erfahrung | Händler, die sich aufs Verkaufen konzentrieren |
| Kontrolle | volle Kontrolle über Server und Versionen | Kontrolle bleibt bei Ihnen, Betrieb beim Dienstleister |
| Aufwand | Updates, Backups, Überwachung und Sicherheit selbst | feste Abläufe und ein Ansprechpartner |
| Risiko | Fehler fallen oft erst im Betrieb auf | Updates werden vorher getestet |
Mit dem Repository steht die technische Grundlage. Der laufende Betrieb bleibt die eigentliche Arbeit: Betriebssystem-Updates, Shop-Updates, Backups, Überwachung und die Reaktion, wenn nachts der Abgleich hängt.
Das übernimmt RemotaTech
Als JTL-Servicepartner aus Wesseling zwischen Köln und Bonn setzen wir das Setup für Sie auf oder übernehmen den Betrieb eines bestehenden Servers:
- Einrichtung: Server, Coolify, Domain, SSL und das Docker-Setup für Ihren JTL-Shop
- Anbindung: Abgleich mit JTL-Wawi, Zahlungsarten und Versand
- Infrastruktur: Server, Netzwerk und Firewall, auch vor Ort, über unseren Bereich Hardware und Netzwerk
- Betrieb: Updates, Backups und Überwachung im Rahmen von JTL Support und Wartung
Sie erhalten nach dem Erstgespräch ein Festpreis-Angebot für Einrichtung und Betreuung.
Jetzt Beratung zum eigenen Shop-Hosting anfragen
Sie wollen Ihren JTL-Shop auf einen eigenen Server umziehen oder neu aufsetzen? Schildern Sie uns kurz Ihre Ausgangslage: aktueller Hoster, Shop-Version, Anzahl der Artikel und Bilder.
Beratung anfragen oder direkt ein Erstgespräch vereinbaren. Den Umfang Ihres Projekts können Sie vorab im Projekt-Konfigurator zusammenstellen.
Häufige Fragen
Kann ich JTL-Shop auf einem eigenen Server betreiben?
Welche PHP-Version braucht JTL-Shop 5?
Was ist Coolify?
Warum schlägt der Abgleich zwischen JTL-Wawi und dem Shop fehl?
Gehen bei einem neuen Deployment meine Shop-Daten verloren?
Lohnt sich eigenes Shop-Hosting gegenüber einem Managed Hoster?
Termin direkt buchen
Kostenloses Erstgespräch – 30 Minuten, unverbindlich. Wählen Sie einfach einen freien Slot.
Lassen Sie uns über Ihr Projekt sprechen!