78 lines
2.5 KiB
Bash
Executable File
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
|