pagetop/tools/db-setup.sh

82 lines
3.2 KiB
Bash

#!/bin/bash
# Carga variables de entorno si existe el archivo .env
if [ -f ./.env ]; then
source ./.env
else
echo "Warning: .env file not found. Values will be prompted if not set."
fi
# Función para solicitar una variable si no está definida, con un valor por defecto opcional
read_if_not_set() {
local var_name=$1
local prompt_message=$2
local default_value=$3
if [ -z "${!var_name}" ]; then
if [ -n "$default_value" ]; then
read -p "$prompt_message [default: $default_value]: " user_input
declare -g $var_name="${user_input:-$default_value}"
else
read -p "$prompt_message: " user_input
declare -g $var_name="$user_input"
fi
fi
}
# Función para solicitar una contraseña si no está configurada
pass_if_not_set() {
local var_name=$1
local prompt_message=$2
if [ -z "${!var_name}" ]; then
read -sp "$prompt_message: " user_input
echo
declare -g $var_name="$user_input"
fi
}
# Función para solicitar las variables necesarias según el sistema de base de datos
initial_setup() {
read_if_not_set "DB_SYSTEM" "Enter database system (mysql/psql/sqlite)" "mysql"
case "$DB_SYSTEM" in
mysql)
read_if_not_set "DB_HOST" "Enter MySQL host" "localhost"
read_if_not_set "DB_PORT" "Enter MySQL port" "3306"
read_if_not_set "DB_NAME" "Enter database name" "database"
read_if_not_set "DB_USER" "Enter database user" "username"
pass_if_not_set "DB_PASS" "Enter password for database user \"$DB_USER\""
read_if_not_set "DB_ADMIN" "Enter MySQL admin user" "root"
pass_if_not_set "DB_ADMIN_PASS" "Enter MySQL admin password"
# Verifica la contraseña del administrador de MySQL
MYSQL_PWD="$DB_ADMIN_PASS" mysql -u "$DB_ADMIN" -h "$DB_HOST" -P "$DB_PORT" -e "SELECT 1;" >/dev/null 2>&1
if [ $? -ne 0 ]; then
echo "Error: Invalid MySQL admin password. Please check and try again."
exit 1
fi
;;
psql)
read_if_not_set "DB_HOST" "Enter PostgreSQL host" "localhost"
read_if_not_set "DB_PORT" "Enter PostgreSQL port" "5432"
read_if_not_set "DB_NAME" "Enter database name" "database"
read_if_not_set "DB_USER" "Enter database user" "username"
pass_if_not_set "DB_PASS" "Enter password for database user \"$DB_USER\""
read_if_not_set "DB_ADMIN" "Enter PostgreSQL admin user" "postgres"
pass_if_not_set "DB_ADMIN_PASS" "Enter PostgreSQL admin password"
# Verifica la contraseña del administrador
PGPASSWORD="$DB_ADMIN_PASS" psql -U "$DB_ADMIN" -h "$DB_HOST" -p "$DB_PORT" -c "\q" 2>/dev/null
if [ $? -ne 0 ]; then
echo "Error: Invalid PostgreSQL admin password. Please check and try again."
exit 1
fi
;;
sqlite)
read_if_not_set "DB_NAME" "Enter SQLite database name" "database.sqlite"
;;
*)
echo "Error: Invalid database system. Please choose either 'mysql', 'psql', or 'sqlite'."
exit 1
;;
esac
}