101 lines
3.0 KiB
Bash
101 lines
3.0 KiB
Bash
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
HOST="${DB_HOST:-db}"
|
|
PORT="${DB_PORT:-3306}"
|
|
NAME="${DB_NAME:-scmedia}"
|
|
USER="${DB_USER:-scmedia}"
|
|
PASS="${DB_PASS:-changeme}"
|
|
ROOT_PASS="${DB_ROOT_PASS:-${MARIADB_ROOT_PASSWORD:-}}"
|
|
MODE=""
|
|
ENV_PATH=""
|
|
|
|
while [ "${#}" -gt 0 ]; do
|
|
case "$1" in
|
|
--destroy)
|
|
MODE="--destroy"
|
|
shift
|
|
;;
|
|
--env)
|
|
ENV_PATH="${2:-}"
|
|
shift 2
|
|
;;
|
|
*)
|
|
shift
|
|
;;
|
|
esac
|
|
done
|
|
|
|
if [ -n "${ENV_PATH}" ]; then
|
|
if [ ! -f "${ENV_PATH}" ]; then
|
|
echo "Env file not found: ${ENV_PATH}" >&2
|
|
exit 1
|
|
fi
|
|
set -a
|
|
# shellcheck disable=SC1090
|
|
. "${ENV_PATH}"
|
|
set +a
|
|
fi
|
|
|
|
HOST="${DB_HOST:-db}"
|
|
PORT="${DB_PORT:-3306}"
|
|
NAME="${DB_NAME:-scmedia}"
|
|
USER="${DB_USER:-scmedia}"
|
|
PASS="${DB_PASS:-changeme}"
|
|
ROOT_PASS="${DB_ROOT_PASS:-${MARIADB_ROOT_PASSWORD:-}}"
|
|
PROTO_ARGS=()
|
|
if [ "${HOST}" = "localhost" ] || [ "${HOST}" = "127.0.0.1" ]; then
|
|
PROTO_ARGS=(--protocol=tcp)
|
|
fi
|
|
|
|
if [ -z "${ROOT_PASS}" ]; then
|
|
echo "Missing DB_ROOT_PASS/MARIADB_ROOT_PASSWORD for init" >&2
|
|
exit 1
|
|
fi
|
|
|
|
for i in $(seq 1 60); do
|
|
if mysqladmin ping -h"${HOST}" -P"${PORT}" "${PROTO_ARGS[@]}" -uroot -p"${ROOT_PASS}" --silent; then
|
|
break
|
|
fi
|
|
sleep 1
|
|
done
|
|
|
|
if [ "${MODE}" = "--destroy" ]; then
|
|
if mysql -h"${HOST}" -P"${PORT}" "${PROTO_ARGS[@]}" -uroot -p"${ROOT_PASS}" -N -e \
|
|
"SELECT 1 FROM mysql.user WHERE User='${USER}' AND Host='%';" | grep -q 1; then
|
|
mysql -h"${HOST}" -P"${PORT}" "${PROTO_ARGS[@]}" -uroot -p"${ROOT_PASS}" -e \
|
|
"REVOKE ALL PRIVILEGES, GRANT OPTION FROM '${USER}'@'%'; FLUSH PRIVILEGES;"
|
|
mysql -h"${HOST}" -P"${PORT}" "${PROTO_ARGS[@]}" -uroot -p"${ROOT_PASS}" -e \
|
|
"DROP USER '${USER}'@'%';"
|
|
fi
|
|
mysql -h"${HOST}" -P"${PORT}" "${PROTO_ARGS[@]}" -uroot -p"${ROOT_PASS}" -e \
|
|
"DROP DATABASE IF EXISTS \`${NAME}\`;"
|
|
echo "Destroyed database/user/privileges"
|
|
exit 0
|
|
fi
|
|
|
|
mysql -h"${HOST}" -P"${PORT}" "${PROTO_ARGS[@]}" -uroot -p"${ROOT_PASS}" -e \
|
|
"CREATE DATABASE IF NOT EXISTS \`${NAME}\` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
|
|
mysql -h"${HOST}" -P"${PORT}" "${PROTO_ARGS[@]}" -uroot -p"${ROOT_PASS}" -e \
|
|
"CREATE USER IF NOT EXISTS '${USER}'@'%' IDENTIFIED BY '${PASS}';"
|
|
mysql -h"${HOST}" -P"${PORT}" "${PROTO_ARGS[@]}" -uroot -p"${ROOT_PASS}" -e \
|
|
"GRANT ALL PRIVILEGES ON \`${NAME}\`.* TO '${USER}'@'%'; FLUSH PRIVILEGES;"
|
|
|
|
if mysql -h"${HOST}" -P"${PORT}" "${PROTO_ARGS[@]}" -u"${USER}" -p"${PASS}" "${NAME}" -e "SHOW TABLES LIKE 'items'" | grep -q items; then
|
|
echo "Schema already present, skip import"
|
|
exit 0
|
|
fi
|
|
|
|
SCHEMA_PATH="${SCHEMA_PATH:-/var/www/sql/schema.sql}"
|
|
if [ ! -f "${SCHEMA_PATH}" ]; then
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
PROJECT_ROOT="$(cd "${SCRIPT_DIR}/../.." && pwd)"
|
|
if [ -f "${PROJECT_ROOT}/sql/schema.sql" ]; then
|
|
SCHEMA_PATH="${PROJECT_ROOT}/sql/schema.sql"
|
|
fi
|
|
fi
|
|
|
|
echo "Importing schema.sql from ${SCHEMA_PATH}..."
|
|
mysql -h"${HOST}" -P"${PORT}" "${PROTO_ARGS[@]}" -u"${USER}" -p"${PASS}" "${NAME}" < "${SCHEMA_PATH}"
|
|
echo "Done"
|