Newer
Older
cortex-hub / deploy_test_nodes.sh
#!/bin/bash
# deploy_test_nodes.sh: Spawns N test agent nodes on the production host for mesh testing.
# Usage: ./deploy_test_nodes.sh [COUNT] (default 2)

COUNT=${1:-2}
HOST="${REMOTE_HOST:-192.168.68.113}"
USER="${REMOTE_USER:-axieyangb}"
PASS="${REMOTE_PASS}"

# Load credentials from GitBucket if not in environment
if [ -z "$PASS" ]; then
    if [ -f "/app/.env.gitbucket" ]; then source "/app/.env.gitbucket"; fi
    GITBUCKET_TOKEN="${GITBUCKET_TOKEN}"
    SNIPPET_ID="${DEPLOYMENT_SNIPPET_ID}"
    if [ -n "$GITBUCKET_TOKEN" ] && [ -n "$SNIPPET_ID" ]; then
        TMP_SECRETS=$(mktemp -d)
        if git clone "https://yangyangxie:${GITBUCKET_TOKEN}@gitbucket.jerxie.com/git/gist/yangyangxie/${SNIPPET_ID}.git" "$TMP_SECRETS" &> /dev/null; then
            source "$TMP_SECRETS/.env.production"
            PASS="${REMOTE_PASSWORD:-$PASS}"
        fi
        rm -rf "$TMP_SECRETS"
    fi
fi

if [ -z "$PASS" ]; then echo "Error: REMOTE_PASS not found."; exit 1; fi

REMOTE_PROJ="/home/coder/project/cortex-hub"
AGENT_DIR="$REMOTE_PROJ/agent-node"

echo "🚀 Deploying $COUNT test nodes to $HOST..."

# We use docker run instead of compose to allow scaling with unique names/IDs easily
# without modifying the persistent docker-compose.yml on the server.

sshpass -p "$PASS" ssh -o StrictHostKeyChecking=no "$USER@$HOST" << EOF
  # 1. Ensure the base image is built
  cd $AGENT_DIR
  echo '$PASS' | sudo -S docker build -t agent-node-base .

  # 2. Cleanup any previous test nodes
  echo "Cleaning up old test nodes..."
  echo '$PASS' | sudo -S docker ps -a --filter "name=cortex-test-node-" -q | xargs -r sudo docker rm -f

  # 3. Spawn N nodes
  for i in \$(seq 1 $COUNT); do
    NODE_ID="test-node-\$i"
    CONTAINER_NAME="cortex-test-node-\$i"
    
    echo "[+] Starting \$CONTAINER_NAME..."
    
    echo '$PASS' | sudo -S docker run -d \\
      --name "\$CONTAINER_NAME" \\
      --network cortex-hub_default \\
      -e AGENT_NODE_ID="\$NODE_ID" \\
      -e AGENT_NODE_DESC="Scalable Test Node #\$i" \\
      -e GRPC_ENDPOINT="ai_hub_service:50051" \\
      -e AGENT_SECRET_KEY="cortex-secret-shared-key" \\
      -e AGENT_TLS_ENABLED="false" \\
      agent-node-base
  done

  echo "✅ Spawning complete. Currently running test nodes:"
  echo '$PASS' | sudo -S docker ps --filter "name=cortex-test-node-"
EOF

echo "✨ Done! Check https://ai.jerxie.com/nodes to see the new nodes join the mesh."