#!/bin/bash # # Database Configuration # Centralized configuration for all database services # # Usage: # source database-config.sh # echo "PostgreSQL data: $POSTGRES_DATA_DIR" # # ============================================================================= # DATA DIRECTORY CONFIGURATION # ============================================================================= # Base directory for all database storage export DB_BASE_DIR="${DB_BASE_DIR:-/mnt/bigdisk/_/lilith-platform/databases}" # PostgreSQL configuration export POSTGRES_DATA_DIR="${POSTGRES_DATA_DIR:-${DB_BASE_DIR}/postgresql/data}" export POSTGRES_PORT="${POSTGRES_PORT:-5432}" export POSTGRES_VERSION="${POSTGRES_VERSION:-16}" export POSTGRES_USER="${POSTGRES_USER:-lilith}" export POSTGRES_DB="${POSTGRES_DB:-lilith_platform}" export POSTGRES_PASSWORD="${POSTGRES_PASSWORD:-changeme}" # Override via env or .env file # Redis configuration export REDIS_DATA_DIR="${REDIS_DATA_DIR:-${DB_BASE_DIR}/redis/data}" export REDIS_PORT="${REDIS_PORT:-6379}" export REDIS_VERSION="${REDIS_VERSION:-7-alpine}" export REDIS_MAXMEMORY="${REDIS_MAXMEMORY:-2gb}" export REDIS_MAXMEMORY_POLICY="${REDIS_MAXMEMORY_POLICY:-allkeys-lru}" # SQLite configuration (for embedded databases) export SQLITE_DATA_DIR="${SQLITE_DATA_DIR:-${DB_BASE_DIR}/sqlite}" # ============================================================================= # BACKUP CONFIGURATION # ============================================================================= export BACKUP_BASE_DIR="${BACKUP_BASE_DIR:-/mnt/bigdisk/_/lilith-platform/backups/databases}" export BACKUP_RETENTION_DAILY="${BACKUP_RETENTION_DAILY:-7}" export BACKUP_RETENTION_WEEKLY="${BACKUP_RETENTION_WEEKLY:-4}" export BACKUP_RETENTION_MONTHLY="${BACKUP_RETENTION_MONTHLY:-3}" # ============================================================================= # NETWORK CONFIGURATION # ============================================================================= # VPN configuration (WireGuard) export VPN_SUBNET="${VPN_SUBNET:-10.9.0.0/24}" export APRICOT_IP="${APRICOT_IP:-10.9.0.1}" export VPS_IP="${VPS_IP:-10.9.0.2}" # Docker network export DOCKER_NETWORK="${DOCKER_NETWORK:-lilith-db-network}" # ============================================================================= # HOST CONFIGURATION # ============================================================================= # Target host for deployment export DB_HOST="${DB_HOST:-apricot}" # Host-specific settings case "$DB_HOST" in apricot) export DB_DEPLOYMENT_MODE="local" export DB_HOST_IP="$APRICOT_IP" ;; vps) export DB_DEPLOYMENT_MODE="remote" export DB_HOST_IP="$VPS_IP" ;; *) export DB_DEPLOYMENT_MODE="local" export DB_HOST_IP="localhost" ;; esac # ============================================================================= # SYSTEMD CONFIGURATION # ============================================================================= export SYSTEMD_SERVICE_DIR="/etc/systemd/system" export SYSTEMD_SERVICE_PREFIX="lilith-db" # ============================================================================= # DOCKER COMPOSE CONFIGURATION # ============================================================================= export COMPOSE_PROJECT_NAME="lilith-platform-db" export COMPOSE_FILE="${COMPOSE_FILE:-docker-compose.databases.yml}" # ============================================================================= # LOGGING CONFIGURATION # ============================================================================= export LOG_DIR="${LOG_DIR:-/var/log/lilith-platform/databases}" export LOG_RETENTION_DAYS="${LOG_RETENTION_DAYS:-30}" # ============================================================================= # HEALTH CHECK CONFIGURATION # ============================================================================= export HEALTH_CHECK_TIMEOUT="${HEALTH_CHECK_TIMEOUT:-30}" export HEALTH_CHECK_INTERVAL="${HEALTH_CHECK_INTERVAL:-10}" export HEALTH_CHECK_RETRIES="${HEALTH_CHECK_RETRIES:-5}" # ============================================================================= # HELPER FUNCTIONS # ============================================================================= # Initialize database directories db_config_init_dirs() { local dirs=( "$POSTGRES_DATA_DIR" "$REDIS_DATA_DIR" "$SQLITE_DATA_DIR" "$BACKUP_BASE_DIR" "$LOG_DIR" ) for dir in "${dirs[@]}"; do if [ ! -d "$dir" ]; then mkdir -p "$dir" chmod 700 "$dir" fi done } # Print configuration summary db_config_summary() { echo "Database Configuration:" echo " Host: $DB_HOST ($DB_HOST_IP)" echo " Deployment Mode: $DB_DEPLOYMENT_MODE" echo "" echo "PostgreSQL:" echo " Version: $POSTGRES_VERSION" echo " Port: $POSTGRES_PORT" echo " Data Directory: $POSTGRES_DATA_DIR" echo " Database: $POSTGRES_DB" echo " User: $POSTGRES_USER" echo "" echo "Redis:" echo " Version: $REDIS_VERSION" echo " Port: $REDIS_PORT" echo " Data Directory: $REDIS_DATA_DIR" echo " Max Memory: $REDIS_MAXMEMORY" echo "" echo "Backups:" echo " Backup Directory: $BACKUP_BASE_DIR" echo " Daily Retention: $BACKUP_RETENTION_DAILY days" echo " Weekly Retention: $BACKUP_RETENTION_WEEKLY weeks" echo "" echo "Network:" echo " VPN Subnet: $VPN_SUBNET" echo " Docker Network: $DOCKER_NETWORK" } # Validate configuration db_config_validate() { local errors=0 # Check if running on correct host if [ "$DB_DEPLOYMENT_MODE" = "local" ]; then if [ "$(hostname)" != "$DB_HOST" ]; then echo "ERROR: This script should run on $DB_HOST (currently on $(hostname))" ((errors++)) fi fi # Check if data directories are accessible if [ ! -w "$(dirname "$DB_BASE_DIR")" ]; then echo "ERROR: Cannot write to base directory: $(dirname "$DB_BASE_DIR")" ((errors++)) fi # Check if docker is available if ! command -v docker &>/dev/null; then echo "ERROR: Docker is not installed" ((errors++)) fi # Check if docker-compose is available if ! command -v docker &>/dev/null || ! docker compose version &>/dev/null; then echo "ERROR: Docker Compose is not available" ((errors++)) fi return $errors } # Load environment overrides from .env file if it exists db_config_load_env() { local env_file="${1:-.env.database}" if [ -f "$env_file" ]; then # shellcheck disable=SC1090 source "$env_file" echo "Loaded configuration from $env_file" fi }