- 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>
127 lines
3.4 KiB
Bash
Executable file
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}"
|
|
}
|