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

Shop Hosting selber gemacht: Server mit Containern, Warenkorb und Vorhängeschloss für einen sicheren JTL-Shop

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:

BereichAnforderung laut JTL
BetriebssystemLinux, zum Beispiel Debian oder Ubuntu
WebserverApache 2.2 oder 2.4 mit mod_rewrite und .htaccess-Unterstützung
PHPab Shop-Version 5.7 mindestens PHP 8.3
DatenbankMySQL oder MariaDB, ab Shop 5.2.3 bis einschließlich MariaDB 10.11
PHP-Moduleunter anderem SimpleXML, Imagick, Curl, Iconv, MBString, Tokenizer, Intl, PDO (MySQL)
PHP-Einstellungenmax_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.php auf, 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.

Ablauf beim Shop Hosting selber gemacht: Git-Repository, Docker-Build und Server mit Containern für Shop, Datenbank, Cache und Cron hinter HTTPS
Abb. 1: Vom Git-Push zum laufenden Shop. Coolify baut das Image und startet Shop, Datenbank, Cache und Cron.

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: localhost als 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 hostenBetreuen lassen
Geeignet fürTeams mit Linux- und Docker-ErfahrungHändler, die sich aufs Verkaufen konzentrieren
Kontrollevolle Kontrolle über Server und VersionenKontrolle bleibt bei Ihnen, Betrieb beim Dienstleister
AufwandUpdates, Backups, Überwachung und Sicherheit selbstfeste Abläufe und ein Ansprechpartner
RisikoFehler fallen oft erst im Betrieb aufUpdates 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?

Ja. JTL-Shop 5 lässt sich auf einem eigenen Linux-Server betreiben, zum Beispiel einem Cloud-Server bei Hetzner. Laut JTL braucht der Shop einen Apache-Webserver mit mod_rewrite und .htaccess-Unterstützung, eine passende PHP-Version und eine MySQL- oder MariaDB-Datenbank. Mit Docker und Coolify lässt sich diese Umgebung reproduzierbar aufsetzen.

Welche PHP-Version braucht JTL-Shop 5?

Laut JTL-Guide benötigt JTL-Shop 5 ab Version 5.7 mindestens PHP 8.3. Das Coolify-Setup von RemotaTech nutzt deshalb ein PHP-8.3-Image mit Apache. Prüfen Sie vor jedem Shop-Update die Systemvoraussetzungen im offiziellen Guide, denn JTL hebt die Mindestversion mit neuen Releases an.

Was ist Coolify?

Coolify ist eine Plattform, die Sie selbst auf Ihrem Server installieren und über eine Weboberfläche bedienen. Sie verbindet ein Git-Repository mit dem Server, baut daraus Docker-Container, richtet Domains mit SSL-Zertifikat ein und stellt bei jedem Push neu bereit. Laut Coolify braucht der Server mindestens 2 CPU-Kerne, 2 GB RAM und 10 GB freien Speicher.

Warum schlägt der Abgleich zwischen JTL-Wawi und dem Shop fehl?

Häufigste Ursache in einem Setup mit Reverse Proxy: In JTL-Wawi ist die Shop-URL mit http:// eingetragen. Der Proxy leitet auf https:// um, der Wawi-Abgleich folgt dieser Umleitung bei POST-Anfragen nicht und bricht ab. Tragen Sie die Shop-URL mit https:// ein und sorgen Sie für ein gültiges Zertifikat.

Gehen bei einem neuen Deployment meine Shop-Daten verloren?

Nicht, wenn Bilder, Uploads, Templates, Plugins, Datenbank und die Konfigurationsdatei in Docker-Volumes liegen. Das Setup von RemotaTech legt dafür eigene Volumes an und sichert die config.JTL-Shop.ini.php bei jedem Start. Ein Backup der Volumes und der Datenbank ersetzt das trotzdem nicht.

Lohnt sich eigenes Shop-Hosting gegenüber einem Managed Hoster?

Eigenes Hosting gibt Ihnen volle Kontrolle über PHP-Version, Ressourcen und Updates. Dafür übernehmen Sie Betriebssystem-Updates, Backups, Überwachung und Sicherheit selbst. Wer dafür keine Zeit oder kein Know-how im Team hat, lässt den Betrieb besser von einem Dienstleister betreuen.

Termin direkt buchen

Kostenloses Erstgespräch – 30 Minuten, unverbindlich. Wählen Sie einfach einen freien Slot.

oder

Projekt konfigurieren

Lassen Sie uns über Ihr Projekt sprechen!