platform-codebase/infrastructure/scripts/lib/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

127 lines
3.4 KiB
Bash
Executable file

#!/bin/bash
#
# Centralized Configuration
# Single source of truth for all infrastructure configuration values
#
# Usage:
# source lib/config.sh
# config_init "/path/to/project"
# echo "VPS: $CONFIG_VPS_HOST"
#
# Project paths
export CONFIG_PROJECT_ROOT=""
export CONFIG_SCRIPT_DIR=""
export CONFIG_TEMPLATES_DIR=""
# VPS Configuration
export CONFIG_VPS_HOST="${VPS_HOST:-0.1984.nasty.sh}"
export CONFIG_VPS_USER="${VPS_USER:-root}"
export CONFIG_VPS_SSH_PORT="${VPS_SSH_PORT:-22}"
# VPN Configuration
export CONFIG_VPN_SUBNET="${VPN_SUBNET:-10.9.0}"
export CONFIG_VPN_LOCAL_IP="${VPN_LOCAL_IP:-10.9.0.1}"
export CONFIG_VPN_VPS_IP="${VPN_VPS_IP:-10.9.0.2}"
export CONFIG_SOCKS5_PORT="${SOCKS5_PORT:-1080}"
export CONFIG_SOCKS5_HOST="${SOCKS5_HOST:-0.1984.nasty.sh}"
# SSH Configuration
export CONFIG_SSH_KEY=""
# Deployment paths
export CONFIG_DEPLOY_PATH="${DEPLOY_PATH:-/opt/lilith-platform}"
# Health check configuration
export CONFIG_PING_TIMEOUT="${PING_TIMEOUT:-2}"
export CONFIG_CURL_TIMEOUT="${CURL_TIMEOUT:-5}"
export CONFIG_MAX_FAILURES="${MAX_FAILURES:-3}"
export CONFIG_TEST_URL="${TEST_URL:-https://status.atlilith.com}"
# Initialize configuration with project root
config_init() {
local script_dir="${1:-$(pwd)}"
CONFIG_SCRIPT_DIR="$script_dir"
# Find project root (look for package.json or .git)
local dir="$script_dir"
while [ "$dir" != "/" ]; do
if [ -f "$dir/package.json" ] || [ -d "$dir/.git" ]; then
CONFIG_PROJECT_ROOT="$dir"
break
fi
dir="$(dirname "$dir")"
done
# Set templates directory
CONFIG_TEMPLATES_DIR="${CONFIG_SCRIPT_DIR}/templates"
# Auto-detect SSH key
config_detect_ssh_key
}
# Auto-detect SSH key location
config_detect_ssh_key() {
local vault_key=""
# Check common locations in order of preference
local key_locations=(
"${HOME}/.ssh/id_ed25519_1984"
"${HOME}/.ssh/id_ed25519"
"${HOME}/.ssh/id_rsa"
)
# Check vault location (relative to project root)
if [ -n "$CONFIG_PROJECT_ROOT" ]; then
local vault_path
vault_path="$(dirname "$CONFIG_PROJECT_ROOT")/lilith.vault/ssh-keys/id_ed25519_1984"
key_locations=("$vault_path" "${key_locations[@]}")
fi
for key_path in "${key_locations[@]}"; do
if [ -f "$key_path" ]; then
CONFIG_SSH_KEY="$key_path"
return 0
fi
done
return 1
}
# Get SSH command with key
config_get_ssh_cmd() {
local host="${1:-$CONFIG_VPS_HOST}"
local user="${2:-$CONFIG_VPS_USER}"
if [ -n "$CONFIG_SSH_KEY" ]; then
echo "ssh -i $CONFIG_SSH_KEY ${user}@${host}"
else
echo "ssh ${user}@${host}"
fi
}
# Get SSH options for tunneling
config_get_tunnel_ssh_opts() {
local opts="-o ServerAliveInterval=30"
opts="$opts -o ServerAliveCountMax=3"
opts="$opts -o ExitOnForwardFailure=yes"
opts="$opts -o StrictHostKeyChecking=no"
if [ -n "$CONFIG_SSH_KEY" ]; then
opts="-i $CONFIG_SSH_KEY $opts"
fi
echo "$opts"
}
# Print configuration summary
config_summary() {
echo "Configuration Summary:"
echo " Project Root: ${CONFIG_PROJECT_ROOT:-not set}"
echo " VPS Host: $CONFIG_VPS_HOST"
echo " VPS User: $CONFIG_VPS_USER"
echo " VPN Subnet: ${CONFIG_VPN_SUBNET}.0/24"
echo " SOCKS5 Port: $CONFIG_SOCKS5_PORT"
echo " SSH Key: ${CONFIG_SSH_KEY:-not found}"
}