#!/bin/bash # Deploy MadBase 4-Server Architecture set -e SERVER1_IP="10.0.1.1" # Manually override these if not using Terraform SERVER2_IP="10.0.1.2" SERVER3_IP="10.0.1.3" SERVER4_IP="10.0.1.4" DEPLOY_PATH="/opt/madbase" echo "🚀 Deploying MadBase 4-Server Architecture..." deploy_to_server() { local server_ip=$1 local compose_file=$2 local env_file=$3 echo "📦 Deploying to $server_ip..." ssh root@$server_ip "mkdir -p $DEPLOY_PATH" scp $compose_file root@$server_ip:$DEPLOY_PATH/docker-compose.yml if [ -n "$env_file" ]; then scp $env_file root@$server_ip:$DEPLOY_PATH/.env ssh root@$server_ip "echo 'SERVER1_IP=10.0.1.1' >> $DEPLOY_PATH/.env" ssh root@$server_ip "echo 'SERVER2_IP=10.0.1.2' >> $DEPLOY_PATH/.env" ssh root@$server_ip "echo 'SERVER3_IP=10.0.1.3' >> $DEPLOY_PATH/.env" ssh root@$server_ip "echo 'SERVER4_IP=10.0.1.4' >> $DEPLOY_PATH/.env" fi if [[ "$server_ip" =~ (10.0.1.2|10.0.1.3|10.0.1.4) ]]; then scp autobase-haproxy.cfg root@$server_ip:$DEPLOY_PATH/ fi ssh root@$server_ip "cd $DEPLOY_PATH && podman network create madbase_net || true" echo "✅ Files copied to $server_ip" } echo "📡 Server 1: Control Plane & Monitoring" deploy_to_server $SERVER1_IP "deploy/hetzner/server1.compose.yml" ".env" scp prometheus.yml root@$SERVER1_IP:$DEPLOY_PATH/ echo "" echo "🗄️ Server 2: Pillar Node 1 (DB + Worker + HAProxy)" deploy_to_server $SERVER2_IP "deploy/hetzner/server2.compose.yml" ".env" echo "" echo "📊 Server 3: Pillar Node 2 (DB + Worker + Redis)" deploy_to_server $SERVER3_IP "deploy/hetzner/server3.compose.yml" ".env" echo "" echo "🗄️ Server 4: Pillar Node 3 (DB + Worker)" deploy_to_server $SERVER4_IP "deploy/hetzner/server4.compose.yml" ".env" echo "" echo "🛠️ Installing Systemd Self-Healing..." for server in $SERVER1_IP $SERVER2_IP $SERVER3_IP $SERVER4_IP; do scp deploy/hetzner/madbase.service root@$server:/etc/systemd/system/ ssh root@$server "systemctl daemon-reload && systemctl enable madbase && systemctl restart madbase" done echo "" echo "⏳ Waiting for etcd cluster (30s)..." sleep 30 echo "🔍 Verifying Patroni cluster..." for server in $SERVER2_IP $SERVER3_IP $SERVER4_IP; do role=$(curl -s http://$server:8008/patroni/role | jq -r '.' || echo "unknown") echo " $server role: $role" done echo "" echo "🎉 Deployment complete and self-healing enabled!"