#!/usr/bin/env bash set -euo pipefail DIR="/opt/hx-ki/com2-stack" ENVF="$DIR/.env" COMPOSE="$DIR/docker-compose.yml" MA="hxki-mautic" MY="hxki-mariadb" echo "=== COM2 ยท MAUTIC INSTALL ONE-SHOT (no guessing) ===" echo "Compose: $COMPOSE" echo "Env: $ENVF" echo [ -f "$COMPOSE" ] || { echo "FAIL: missing $COMPOSE"; exit 1; } [ -f "$ENVF" ] || { echo "FAIL: missing $ENVF"; exit 1; } docker inspect "$MA" >/dev/null 2>&1 || { echo "FAIL: missing container $MA"; exit 1; } docker inspect "$MY" >/dev/null 2>&1 || { echo "FAIL: missing container $MY"; exit 1; } # --- [1] Ground truth DB params from mautic container env ------------------- DB_HOST="$(docker inspect "$MA" --format '{{range .Config.Env}}{{println .}}{{end}}' | awk -F= '/^MAUTIC_DB_HOST=/{print $2}' | tail -n1)" DB_USER="$(docker inspect "$MA" --format '{{range .Config.Env}}{{println .}}{{end}}' | awk -F= '/^MAUTIC_DB_USER=/{print $2}' | tail -n1)" DB_PASS="$(docker inspect "$MA" --format '{{range .Config.Env}}{{println .}}{{end}}' | awk -F= '/^MAUTIC_DB_PASSWORD=/{print $2}' | tail -n1)" DB_NAME="$(docker inspect "$MA" --format '{{range .Config.Env}}{{println .}}{{end}}' | awk -F= '/^MAUTIC_DB_NAME=/{print $2}' | tail -n1)" [ -n "${DB_HOST:-}" ] || { echo "FAIL: MAUTIC_DB_HOST missing in container env"; exit 1; } [ -n "${DB_USER:-}" ] || { echo "FAIL: MAUTIC_DB_USER missing in container env"; exit 1; } [ -n "${DB_PASS:-}" ] || { echo "FAIL: MAUTIC_DB_PASSWORD missing in container env"; exit 1; } [ -n "${DB_NAME:-}" ] || { echo "FAIL: MAUTIC_DB_NAME missing in container env"; exit 1; } echo "[1] DB (ground truth): host=$DB_HOST db=$DB_NAME user=$DB_USER pass=***" # --- [2] MariaDB root password from MariaDB container env (no guessing) ----- ROOTPW="$(docker inspect "$MY" --format '{{range .Config.Env}}{{println .}}{{end}}' \ | awk -F= '/^(MARIADB_ROOT_PASSWORD|MYSQL_ROOT_PASSWORD)=/{print $2}' | tail -n1 || true)" [ -n "${ROOTPW:-}" ] || { echo "FAIL: MariaDB root PW not found in container env"; exit 1; } echo "[2] MariaDB root PW present (not shown)" # Wait until MariaDB accepts root connections echo "[2a] Wait MariaDB ready (max 60s)" for i in {1..60}; do if docker exec -i "$MY" sh -lc "mariadb -uroot -p\"$ROOTPW\" -e 'SELECT 1' >/dev/null 2>&1"; then echo " OK: MariaDB ready" break fi sleep 1 [ "$i" -eq 60 ] && { echo "FAIL: MariaDB not ready"; docker logs --tail=120 "$MY" || true; exit 1; } done # Ensure DB + user + grants match the *existing* state (no data loss) echo "[2b] Align DB user/grants to existing DB (no data loss)" docker exec -i "$MY" sh -lc "mariadb -uroot -p\"$ROOTPW\" < cannot do scripted install without guessing image internals." exit 1 fi # Run install with explicit params (no guessing) docker exec "$MA" sh -lc "php $CONSOLE mautic:install --force \ --db_host='$DB_HOST' --db_name='$DB_NAME' --db_user='$DB_USER' --db_password='$DB_PASS' \ --admin_username='$MAUTIC_ADMIN_USERNAME' --admin_password='$MAUTIC_ADMIN_PASSWORD' --admin_email='$MAUTIC_ADMIN_EMAIL'" echo "OK: install command executed" fi echo echo "=== DONE ===" echo "Admin user: $MAUTIC_ADMIN_USERNAME" echo "Admin email: $MAUTIC_ADMIN_EMAIL" echo "Admin pass: (steht in $ENVF)"