Entwicklungsumgebung für einen modified Shop auf Docker
Ziel war es, eine Docker Umgbung zu bauen die es mir ermöglicht schnell eine Testumgebung für die PHP basierende modified eCommerce Shopsoftware zu erstellen.
Voraussetzung für die weitere Beschreibung sind:
- Docker und Docker-Compose sind installiert
- Die Shopsoftware liegt in einem Verzeichnis auf dem Docker Server (hier ./devserver)
- Ein Backup der Shopdatenbank liegt vor (hier ./anon-shop-datenbanken.sql)
- Ein Mailgateway ist bekannt (hier mail.intranet.lcl)
Ausgangspunkt war diese Beschreibung.
Die Verzeichnisstruktur ist die folgende:
├── anon-shop-datenbanken.sql
├── devserver
├── docker-compose.yml
├── php.ini
├── php-shop/
└── Dockerfile
└── ssmtp.conf
Basis für die Docker Images bilden die Standard Images
- mariadb
- php:7.2.1-apache
Fangen wir “von oben an”. In der Datei docker-compose.yml werden die Komponenten meiner Umgebung festgelegt.
version: "2"
services:
web:
build:
context: ./php-shop
volumes:
- ./devserver:/var/www/html
- ./php.ini:/usr/local/etc/php/conf.d/php.ini
- ./ssmtp.conf:/etc/ssmtp/ssmtp.conf:ro
environment:
- ALLOW_OVERRIDE=true
networks:
shop-network:
ipv4_address: 172.221.199.2
mariadb:
image: mariadb:10.1
volumes:
- ./shopdb:/var/lib/mysql
- ./anon-shop-datenbanken.sql:/docker-entrypoint-initdb.d/dump.sql
environment:
TZ: "Europe/Rome"
MYSQL_ALLOW_EMPTY_PASSWORD: "no"
MYSQL_ROOT_PASSWORD: geheim
MYSQL_USER: shop_admin
MYSQL_PASSWORD: geheimshop
MYSQL_DATABASE: shop
networks:
shop-network:
ipv4_address: 172.221.199.3
networks:
shop-network:
driver: bridge
ipam:
config:
- subnet: 172.221.199.0/24
Ich habe damit einen Container für die Datenbank und einen für Apache mit PHP.
Im Datenbank Container wird die Shopdatenbank mit den Anmeldedaten angelegt. Der Ablageort ist auf meinem Host im Unterverzeichnis ./shop-db. Wenn der Container erstellt wird erfolgt automatische ein Import meiner anonymisierten Backupdaten des Livesystems.
Der “Applikationscontainer” erhält
- die Stelle an welcher das Container Images definiert wird
- mein lokales Verzeichnis devserver mit den Shop PHP Dateien
- einer eigenen PHP ini (wahrscheinlich nicht unbedingt notwendig)
- die Konfiguration für den den Mail (kann man auch drauf verzichten)
Da wir noch zusätzliche PHP Module brauchen und den Mailer installieren wollen erweitern wird das Standard PHP Image in einer eigenen Dockerfile Konfiguration im Verzeichnis ./php-shop
more ./php-shop/Dockerfile
FROM php:7.2.1-apache
MAINTAINER Hagen Bauer
# diese Bibliothek brauche ich fuer php-gd
RUN apt update && apt-get install -y libpng-dev
# Damit wir mailen koennen.
RUN apt-get install -q -y ssmtp mailutils
# PHP Module die fuer modified noch fehlen
RUN docker-php-ext-install pdo pdo_mysql mysqli gd
# Sonst geht gar nichts.
RUN a2enmod rewrite
In der configure.php des Webshops muss man dann noch die Anpassungen vornehmen. Insbesondere der Verweis auf die Datenbank ist zu ändern und die IP Adresse wenn kein DNS vorhanden ist.
define('DB_SERVER', 'mariadb'); // eg, localhost - should not be empty for productive servers
define('DB_SERVER_USERNAME', 'shop_admin');
define('DB_SERVER_PASSWORD', 'geheimshop');
Und dann kann es losgehen.
docker-compose up
sudo docker-compose up
Creating network "docker_shop-network" with driver "bridge"
Creating docker_mariadb_1
Creating docker_web_1
Attaching to docker_web_1, docker_mariadb_1
web_1 | AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.24.0.3. Set the 'ServerName' directive globally to suppress this message
web_1 | AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.24.0.3. Set the 'ServerName' directive globally to suppress this message
.....
.....
mariadb_1 | Initializing database
mariadb_1 | 2019-01-12 8:44:01 139939452352512 [Note] /usr/sbin/mysqld (mysqld 10.1.37-MariaDB-1~bionic) starting as process 66 ...
mariadb_1 | 2019-01-12 8:44:01 139939452352512 [Note] InnoDB: Using mutexes to ref count buffer pool pages
mariadb_1 | 2019-01-12 8:44:01 139939452352512 [Note] InnoDB: The InnoDB memory heap is disabled
mariadb_1 | 2019-01-12 8:44:01 139939452352512 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
.....
.....
mariadb_1 | /usr/local/bin/docker-entrypoint.sh: running /docker-entrypoint-initdb.d/dump.sql
.....
.....
mariadb_1 | 2019-01-12 8:44:17 139873975470080 [Warning] 'proxies_priv' entry '@% root@3271e27acf02' ignored in --skip-name-resolve mode.
mariadb_1 | 2019-01-12 8:44:17 139873975470080 [Note] mysqld: ready for connections.
mariadb_1 | Version: '10.1.37-MariaDB-1~bionic' socket: '/var/run/mysqld/mysqld.sock' port: 3306 mariadb.org binary distribution
Möchte man in der Datenbank etwas prüfen geht das mit
sudo docker exec -it docker_mariadb_1 /bin/bash
Dort kann man sich dann normal an der Datenbank anmelden und die DB prüfen.
Eigentlich sollte man sich jetzt mit
http://172.221.199.2/
An dem Server anmelden können.
Damit die Mails versendet werden muss man die Mail Einstellungen noch anpassen wenn der Mailversand in der Entwicklungsumgebung anders geregelt ist als in der Produktivumgebung.