36 lines
2.0 KiB
Bash
36 lines
2.0 KiB
Bash
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
# 1. Безопасная загрузка .env: убираем комментарии, удаляем \r (Windows-переносы) и делаем export
|
|
export $(grep -v '^#' .env | sed 's/\r$//' | xargs)
|
|
|
|
echo "=== 1. Параметры из .env ==="
|
|
grep -E '^(HAN_PG_HOST|HAN_PG_PORT|KEYCLOAK_DB_)' .env | grep -v PASSWORD || echo "Переменные не найдены!"
|
|
|
|
# 2. Проверка TCP (используем переменные, а не хардкод)
|
|
echo -e "\n=== 2. Проверка TCP (${HAN_PG_HOST}:${HAN_PG_PORT}) ==="
|
|
if command -v nc &> /dev/null; then
|
|
nc -zv "${HAN_PG_HOST}" "${HAN_PG_PORT}" || echo "❌ Не удалось подключиться по TCP"
|
|
else
|
|
echo "⚠️ Утилита nc не найдена, пропускаем проверку TCP"
|
|
fi
|
|
|
|
# 3. Проверка подключения psql
|
|
echo -e "\n=== 3. Проверка подключения к БД ==="
|
|
|
|
# ВАЖНО: Передаем пароль через переменную окружения, чтобы скрипт не зависал!
|
|
# Если KEYCLOAK_DB_PASSWORD пуст, psql все равно спросит его вручную.
|
|
export PGPASSWORD="${KEYCLOAK_DB_PASSWORD:-}"
|
|
|
|
# Проверяем, установлен ли psql
|
|
if ! command -v psql &> /dev/null; then
|
|
echo "❌ Утилита psql не найдена на хост-машине. Установите postgresql-client."
|
|
exit 1
|
|
fi
|
|
|
|
# Выполняем запрос. Используем переменную порта и добавляем fallback для sslrootcert, если он не задан
|
|
psql "host=${HAN_PG_HOST} port=${HAN_PG_PORT} dbname=han_chat user=${KEYCLOAK_DB_USERNAME} sslmode=verify-full sslrootcert=${PG_CA_HOST_PATH:-}" \
|
|
-c "SELECT current_user, current_schema(); SHOW search_path;"
|
|
|
|
# Очищаем пароль из окружения после выполнения (хорошая практика)
|
|
unset PGPASSWORD |