Files
hx-ki.com2/COM2_MAUTIC_FIX_RUN_ON_SERVER_ONE_SHOT.sh
2026-03-06 15:22:40 +00:00

78 lines
2.5 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
COMPOSE="/opt/hx-ki/com2-stack/docker-compose.yml"
ENVF="/opt/hx-ki/com2-stack/.env"
MY="hxki-mariadb"
MA="hxki-mautic"
CA="hx-caddy"
echo "=== COM2 · MAUTIC FIX (run on server only) ==="
[ -f "$COMPOSE" ] || { echo "FAIL: missing $COMPOSE"; exit 1; }
[ -f "$ENVF" ] || { echo "FAIL: missing $ENVF"; exit 1; }
# load .env (simple KEY=VALUE)
set -a
. "$ENVF"
set +a
# bring up mariadb first
docker compose -f "$COMPOSE" up -d "$MY"
# root pw from .env or container env
ROOTPW="${MARIADB_ROOT_PASSWORD-${MYSQL_ROOT_PASSWORD-}}"
if [ -z "${ROOTPW:-}" ]; then
ROOTPW="$(docker inspect "$MY" --format '{{range .Config.Env}}{{println .}}{{end}}' \
| awk -F= '/^(MARIADB_ROOT_PASSWORD|MYSQL_ROOT_PASSWORD)=/{print $2}' | tail -n1 || true)"
fi
[ -n "${ROOTPW:-}" ] || { echo "FAIL: cannot determine MariaDB root password"; exit 1; }
# mautic creds STRICTLY from .env (must exist)
DB_NAME="${MAUTIC_DB_NAME-${MYSQL_DATABASE-mautic}}"
DB_USER="${MAUTIC_DB_USER-${MYSQL_USER-mautic}}"
DB_PASS="${MAUTIC_DB_PASSWORD-${MYSQL_PASSWORD-}}"
[ -n "${DB_USER:-}" ] || { echo "FAIL: MAUTIC_DB_USER or MYSQL_USER missing in .env"; exit 1; }
[ -n "${DB_PASS:-}" ] || { echo "FAIL: MAUTIC_DB_PASSWORD or MYSQL_PASSWORD missing in .env"; exit 1; }
echo "DB_NAME=$DB_NAME"
echo "DB_USER=$DB_USER"
echo "DB_PASS=***"
# wait mariadb ready
for i in {1..40}; 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 40 ] && { echo "FAIL: MariaDB not ready"; exit 1; }
done
# align user/db/grants (no data loss)
docker exec -i "$MY" sh -lc "mariadb -uroot -p\"$ROOTPW\" <<SQL
CREATE DATABASE IF NOT EXISTS \\\`$DB_NAME\\\`;
CREATE USER IF NOT EXISTS '$DB_USER'@'%' IDENTIFIED BY '$DB_PASS';
ALTER USER '$DB_USER'@'%' IDENTIFIED BY '$DB_PASS';
GRANT ALL PRIVILEGES ON \\\`$DB_NAME\\\`.* TO '$DB_USER'@'%';
FLUSH PRIVILEGES;
SQL"
echo "OK: grants aligned"
# restart mautic and caddy (if present in compose)
docker compose -f "$COMPOSE" up -d --force-recreate "$MA" "$CA" || true
echo "=== STATUS ==="
docker ps --format 'NAME={{.Names}} STATUS={{.Status}} PORTS={{.Ports}}' | egrep 'hxki-|hx-caddy' || true
echo "=== CADDY -> MAUTIC CHECK ==="
if docker exec -i "$CA" sh -lc "wget -qO- http://$MA/ >/dev/null"; then
echo "OK_CADDY_TO_MAUTIC"
else
echo "FAIL_CADDY_TO_MAUTIC"
echo "--- mautic logs (tail 120) ---"
docker logs --tail=120 "$MA" || true
exit 1
fi