#!/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