platform-codebase/infrastructure/scripts/database/database-config.sh
Quinn Ftw b5fe73edd0 feat(infra): database stack, reconciliation, and VPS setup scripts
- Add PostgreSQL + Redis deployment stack
- Add reconciliation framework for fleet management
- Add VPS setup scripts (nginx, wireguard)
- Add dev environment bootstrap scripts
- Update service-registry and systemd configs

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-26 00:37:52 -08:00

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:-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
}