Die Anforderung war einen Webshop zu erstellen, der nach einen Denial-of-Service Attack schnell wieder Online genommen werden kann. OSCommerce, Opencart und wie auch andere, haben den Nachteil, wenn der Shop erstellt ist, wird dieser per Hand befüllt und es ist schwierig, Produkte automatisiert zu importieren.
Ich selbst verwende JTL-Wawi seit einigen Jahren und hatte schon einen angedockten JTL-Shop damit ausprobiert.
In der Freeware Version kann kostenfrei ein eigener Shop mit bis zu 500 Produkten angebunden werden. Dafür braucht es einen fertigen JTL-Shop oder auch andere und aus dem Warenwirtschaftssystem wird ein weiterer Verkaufskanal (der Shop) angegeben und die Produkte dann dort hineingesynced. Fertig.
Sprich nach einem Hackerangriff, einfach den Shop (Container) neu erstellen und die Produkte hineinsyncen :-)
Jetzt wird es spannend. Es gibt noch keine Anleitung, wie ein JTL-Shop unter Docker zu installieren ist. Ich verwendete zuerst die Konfiguration von Opencard (Dockerfile + docker-compose.yaml) und ging das Installation Setup von JTL-Shop durch und das sagte mir dann welche Komponenten dem Installations-Skript in dem Linux-Container fehlten. So tastete ich mich nach und nach an das Richtige Dockerfile und docker-compose.yaml File heran.
Auf der Synology habe müssen noch per Hand unter dem Docker-Verzeichnis, die Verzeichnisse:
- dbdata und - htdocs angelegt werden.
Nach dem Start dauerte es bei mir bis zu 10 Minuten bis die Container gestartet waren.
FROM php:8.2-apache
RUN apt-get update && apt-get install -y \
libfreetype-dev \
libjpeg62-turbo-dev \
libpng-dev \
libxml2-dev \
libxslt1-dev \
libzip-dev \
libonig-dev \
libcurl4-gnutls-dev \
libicu-dev \
unzip \
wget \
&& docker-php-ext-configure gd --with-freetype --with-jpeg \
&& apt-get install -y imagemagick \
&& docker-php-ext-install -j$(nproc) gd intl mbstring mysqli soap xml xsl zip pdo fileinfo pdo_mysql calendar bcmath \
&& a2enmod rewrite headers \
&& service apache2 restart
version: '3.8'
services:
web:
build: .
ports:
- "81:80"
depends_on:
- db
volumes:
- ./htdocs:/var/www/html
environment:
- APACHE_DOCUMENT_ROOT=/var/www/html
db:
image: mysql
restart: always
volumes:
- ./dbdata:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: rootpassword
MYSQL_DATABASE: opencart
MYSQL_USER: user
MYSQL_PASSWORD: password
ports:
- "3307:3307"
phpmyadmin:
image: phpmyadmin/phpmyadmin
restart: always
ports:
- '8081:80'
environment:
PMA_HOST: db
PMA_PORT: 3307
MYSQL_ROOT_PASSWORD: rootpassword
depends_on:
- db
volumes:
db_data:
Ob Ihr einen Container mit dem PHPMyadmin wollt bleibt Euch überlassen ;-).
Jetzt beginnt die JTL-Installation:
In die CLI des Docker Container gehen:
Mit wget www.dh3mfw.de/tmp/show-v5-4-1.zip habe ich das Installationsfile in den Container geholt. Und mit unzp show-v5-4-1.zip entpackt. Aufpassen im WWW-Root Verzeichnis entpacken ;-).
Wie es weitergeht ist dann recht gut, auf der JTL-Homepage ab Schritt 3 beschrieben.
http://<ip>:81/ --> Reload auf /Install/
Hier müssen die Rechte richtig gesetzt werden. In der Doku ist eine Zeile aufgeführt, allerdings hat diese bei mir nicht hingehauen. Ich verwende nun folgende Zeilen:
Erst bei der Konfiguration der Datenbankanbindung braucht es eine Änderung:
Host: NICHT localhost, sondern db --> so heist der Datenbank-Container
Benutzername + Passwort + Datenbankname, wie im docker-compose.yaml File definiert.
Dieser Vorgang hat bei mir teilweise 10Minuten gedauert !!
Da waren die Rechte des includes-Verzeichnisses und der INI-Datei nicht gesetzt. Ist in meiner TXT-Datei schon richtig eingetragen.
Fertig !!
