74 lines
2.4 KiB
Bash
74 lines
2.4 KiB
Bash
#!/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!"
|