Mit Mautic 6 ist eine moderne, überarbeitete Version des beliebten Open-Source-Marketingtools erschienen. Der Umstieg bringt nicht nur viele neue Features, sondern auch technische Anforderungen wie PHP 8.1+, ein neues Installationssystem – und den Umstieg auf .env-Konfiguration.
In dieser Anleitung zeige ich dir, wie du Mautic 6 sauber und nachhaltig mit Docker aufsetzt – inklusive Lösung typischer Fehler wie dem bekannten .env missing
-Fehler.
✅ Voraussetzungen
Bevor du loslegst, solltest du Folgendes auf deinem System installiert haben:
- Docker
- Docker Compose
- Git
- Ein bisschen Terminal-Erfahrung 😉
Allgemein
🧠 Wie ist Mautic aufgebaut? – Struktur und wichtige Dateien erklärt
Bevor wir in den praktischen Teil einsteigen oder tiefer in Konfigurationsdetails gehen, lohnt sich ein kurzer Blick auf die grundlegende Struktur von Mautic 6 und die wichtigsten Dateien im Docker-Setup.
📁 Die Verzeichnisstruktur von Mautic (im Container)
Wenn du Mautic in einem Docker-Container installierst, liegt der Mautic-Code standardmäßig im Verzeichnis:
/var/www/html/
Dort findest du unter anderem:
Datei / Ordner | Beschreibung |
---|---|
.env | Enthält alle Umgebungsvariablen (z. B. DB-Zugang, Umgebung, Debug-Modus) |
index.php | Startpunkt für den Webzugriff – leitet alles in das Symfony-Framework |
app/ | Kernkonfiguration von Symfony + Mautic |
bin/console | CLI-Werkzeug für Cronjobs, Wartung usw. |
config/ | Projektweite Symfony-Konfiguration (ab Symfony 5+) |
public/ | Öffentlicher Webzugriff (wenn Webroot geändert wird) |
vendor/ | Abhängigkeiten – wird durch Composer installiert |
var/ | Cache, Logs, temporäre Daten |
🐳 Docker-Setup: Was machen die einzelnen Dateien?
Beim Einsatz von Docker erzeugen wir einige zusätzliche Dateien, um Mautic automatisiert starten zu können. Hier ein Überblick:
🧱 Dockerfile
– Das Herzstück
Hier wird definiert:
- welches PHP-Basis-Image verwendet wird (z. B. php:8.2-apache)
- welche PHP-Erweiterungen installiert werden (z. B. pdo_mysql, mbstring, gd)
- woher der Mautic-Quellcode kommt (GitHub-Release)
- wie Mautic vorbereitet und kopiert wird
- welches Entrypoint-Skript den Startprozess steuert
⚙️ docker-compose.yml
Definiert die Dienste, die zusammenarbeiten:
mautic
: der Webcontainer mit PHP und Apachedb
: eine MariaDB-Instanz für die Datenbank- Volumes zur Persistenz der Daten
🔧 common/docker-entrypoint.sh
Ein Bash-Skript, das beim Start des Containers ausgeführt wird. Es sorgt dafür, dass:
- Mautic-Dateien nur kopiert werden, wenn das Zielverzeichnis leer ist
- die
.env
-Datei korrekt gesetzt wird - Cronjobs (falls aktiviert) automatisch gestartet werden
services:
mautic:
build: .
ports:
- "8080:80"
depends_on:
- db
db:
image: mariadb:10.6
🗒️ common/.env
Die wichtigste Konfigurationsdatei für Mautic 6. Hier stehen alle Umgebungsvariablen, z. B.:
APP_ENV=prod
MAUTIC_DB_HOST=db
MAUTIC_DB_USER=mautic
MAUTIC_DB_PASSWORD=mauticpass
🧪 common/makeconfig.php
und makedb.php
Mautic braucht regelmäßige Cronjobs, damit Kampagnen, E-Mail-Versand und Segmentupdates funktionieren. Diese Datei definiert die wichtigsten Befehle, z. B.:
*/5 * * * * www-data php /var/www/html/bin/console mautic:segments:update
💡 Zusammenfassung
- Die Mautic-Webdateien liegen in
/var/www/html
- Die Konfiguration läuft über
.env
(nicht mehr überlocal.php
) - Docker verwendet zusätzliche Skripte zur Automatisierung (z. B.
entrypoint.sh
) - Cronjobs werden als separate Datei mitgeliefert
- Die Datenbank liegt in einem eigenen Container (MariaDB)
Innstallation
📁 Projektstruktur vorbereiten
Erstelle ein neues Verzeichnis:
mkdir mautic6-docker && cd mautic6-docker
mkdir common
touch Dockerfile docker-compose.yml
Erstelle darin folgende Dateien:
mautic6-docker/
├── Dockerfile
├── docker-compose.yml
├── common
Lege zusätzlich die Dateien im common/
-Verzeichnis an:
touch common/docker-entrypoint.sh common/makeconfig.php common/makedb.php common/mautic.crontab common/.env
🐳 Dockerfile
– Basis für Mautic
Das Dockerfile basiert auf php:8.2-apache
, installiert alle nötigen Abhängigkeiten für Mautic 6, lädt den Quellcode herunter und konfiguriert das System so, dass beim Start alles reibungslos läuft.
FROM php:8.2-apache
LABEL vendor="Mautic"
LABEL maintainer="Thomas Baldermann (durch eigenen namen ersetzen)<th@it-hub.at>"
# Argument für Version
ARG MAUTIC_VERSION=6.0.1
ENV MAUTIC_VERSION=${MAUTIC_VERSION}
# Abhängigkeiten & PHP-Extensions
RUN apt-get update && apt-get install --no-install-recommends -y \
ca-certificates \
cron \
git \
unzip \
zip \
curl \
wget \
libcurl4-openssl-dev \
libicu-dev \
libpng-dev \
libjpeg-dev \
libfreetype6-dev \
libxml2-dev \
libzip-dev \
libonig-dev \
libpq-dev \
libssl-dev \
libwebp-dev \
mariadb-client \
nano \
&& docker-php-ext-configure gd --with-freetype --with-jpeg \
&& docker-php-ext-install -j$(nproc) \
gd \
intl \
mbstring \
mysqli \
pdo \
pdo_mysql \
xml \
zip \
bcmath \
opcache \
sockets \
curl \
exif \
&& docker-php-ext-enable \
gd \
intl \
mbstring \
mysqli \
pdo_mysql \
xml \
zip \
bcmath \
opcache \
sockets \
curl \
exif \
&& apt-get clean && rm -rf /var/lib/apt/lists/*
# Composer installieren
COPY --from=composer:2 /usr/bin/composer /usr/bin/composer
# Apache Rewrite aktivieren
RUN a2enmod rewrite
# Mautic herunterladen und entpacken (direkt in /var/www/html)
RUN curl -sSL https://github.com/mautic/mautic/releases/download/${MAUTIC_VERSION}/${MAUTIC_VERSION}.zip -o mautic.zip \
&& unzip mautic.zip -d /var/www/html \
&& rm mautic.zip \
&& chown -R www-data:www-data /var/www/html
# .env-Datei kopieren an den richtigen Ort
COPY common/.env /var/www/html/.env
# Eigene PHP-Konfiguration (inkl. zend.assertions = -1)
ENV PHP_INI_DATE_TIMEZONE='UTC' \
PHP_MEMORY_LIMIT=512M \
PHP_MAX_UPLOAD=512M \
PHP_MAX_EXECUTION_TIME=300
RUN echo "memory_limit=${PHP_MEMORY_LIMIT}" > /usr/local/etc/php/conf.d/99-custom.ini \
&& echo "upload_max_filesize=${PHP_MAX_UPLOAD}" >> /usr/local/etc/php/conf.d/99-custom.ini \
&& echo "max_execution_time=${PHP_MAX_EXECUTION_TIME}" >> /usr/local/etc/php/conf.d/99-custom.ini \
&& echo "date.timezone=${PHP_INI_DATE_TIMEZONE}" >> /usr/local/etc/php/conf.d/99-custom.ini \
&& echo "zend.assertions=-1" >> /usr/local/etc/php/conf.d/99-custom.ini
# ENV-Variablen für Mautic (korrekter DB-User)
ENV MAUTIC_RUN_CRON_JOBS=true \
MAUTIC_RUN_MIGRATIONS=false \
MAUTIC_DB_USER=mautic \
MAUTIC_DB_NAME=mautic \
MAUTIC_DB_PORT=3306
# Volume für persistente Daten
VOLUME /var/www/html
# Init-Skripte & Cronjobs
COPY common/docker-entrypoint.sh /entrypoint.sh
COPY common/makeconfig.php /makeconfig.php
COPY common/makedb.php /makedb.php
COPY common/mautic.crontab /etc/cron.d/mautic
RUN chmod 644 /etc/cron.d/mautic && chmod +x /entrypoint.sh
# Entrypoint & Apache Start
ENTRYPOINT ["/entrypoint.sh"]
CMD ["apache2-foreground"]
📄 Konfigurationsdateien erstellen
common/docker-entrypoint.sh
#!/bin/bash
set -e
MAUTIC_DIR="/var/www/html"
if [ -z "$(ls -A $MAUTIC_DIR)" ]; then
echo "Kopiere Mautic-Dateien nach $MAUTIC_DIR..."
cp -R /usr/src/mautic/* "$MAUTIC_DIR"
cp /usr/src/mautic/.env "$MAUTIC_DIR/.env"
chown -R www-data:www-data "$MAUTIC_DIR"
fi
if [ "$MAUTIC_RUN_CRON_JOBS" = "true" ]; then
echo "Cron-Dienst wird gestartet..."
cron
fi
exec "$@"
Ausführbar machen:
dos2unix common/docker-entrypoint.sh
chmod +x common/docker-entrypoint.sh
common/.env
APP_ENV=prod
APP_DEBUG=0
MAUTIC_DB_HOST=db
MAUTIC_DB_PORT=3306
MAUTIC_DB_NAME=mautic
MAUTIC_DB_USER=mautic
MAUTIC_DB_PASSWORD=mauticpass
common/makeconfig.php
:
common/makeconfig.php
:<?php
echo "makeconfig.php ausgeführt.\n";
common/makedb.php
:
common/makedb.php
:
<?php
echo "makedb.php ausgeführt.\n";
common/mautic.crontab
:
common/mautic.crontab
:
*/5 * * * * www-data php /var/www/html/bin/console mautic:segments:update >> /var/log/cron.log 2>&1
*/10 * * * * www-data php /var/www/html/bin/console mautic:campaigns:update >> /var/log/cron.log 2>&1
*/15 * * * * www-data php /var/www/html/bin/console mautic:campaigns:trigger >> /var/log/cron.log 2>&1
*/30 * * * * www-data php /var/www/html/bin/console mautic:emails:send >> /var/log/cron.log 2>&1
docker-compose.yml
docker-compose.yml
version: '3.8'
services:
mautic:
build: .
container_name: mautic
ports:
- "8080:80"
environment:
- MAUTIC_DB_HOST=db
- MAUTIC_DB_USER=mautic
- MAUTIC_DB_PASSWORD=mauticpass
- MAUTIC_DB_NAME=mautic
- MAUTIC_RUN_CRON_JOBS=true
- MAUTIC_RUN_MIGRATIONS=false
volumes:
- mautic_data:/var/www/html
depends_on:
- db
db:
image: mariadb:10.6
container_name: mautic-db
restart: always
environment:
- MYSQL_ROOT_PASSWORD=rootpass
- MYSQL_DATABASE=mautic
- MYSQL_USER=mautic
- MYSQL_PASSWORD=mauticpass
volumes:
- db_data:/var/lib/mysql
volumes:
mautic_data:
db_data:
🚀 Installation starten
sudo docker-compose build --no-cache
sudo docker-compose up -d
🧪 Fehler: .env
fehlt?
Wenn du beim ersten Start folgende Fehlermeldung bekommst:
Unable to read the "/var/www/html/.env" environment file.
Dann hast du vermutlich vergessen, die .env
-Datei ins Zielverzeichnis zu kopieren(Container). Achte darauf, dass dein entrypoint.sh
diese Zeile enthält:
cp /usr/src/mautic/.env "$MAUTIC_DIR/.env"
Im Container kannst du prüfen, ob sie vorhanden ist:
docker exec -it mautic bash
ls -la /var/www/html/.env
cat /var/www/html/.env
Öffne danach im Browser:
http://localhost:8080 – Du wirst direkt durch die Mautic-Installation geführt.
🔐 Bonus-Tipps
- SMTP-Anbieter integrieren (Mailgun, Amazon SES, etc.) – nur bei großer Anzahl an Mails
- Reverse Proxy mit HTTPS (Traefik oder nginx)
- Automatisches DB-Backup per Cron oder Docker Volume Snapshots