Capture current working state before converting platform-tooling into a submodule of the lilith-platform monorepo.
202 lines
6.7 KiB
Bash
Executable file
202 lines
6.7 KiB
Bash
Executable file
#!/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:-noeviction}"
|
|
|
|
# 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
|
|
}
|