3d99940658
Sandbox Deployment Platform — Go control plane + agents, NextJS dashboard, nginx reverse proxy. Cross-compile via Docker; deploy via sshpass to 172.18.136.92 (micro) and 172.18.139.186 (gateway). - control-plane: HTTP API, WS hub, SQLite (modernc.org/sqlite) for progress, .log files for log persistence - agent-micro / agent-gateway: alpine:3.20 + bind-mounted repo, binary exec'd in container, no Dockerfile build step - dashboard: NextJS static export + shadcn/ui components, single WebSocket hook - docker-compose.yml: three services on alpine:latest with docker socket bind for agents - scripts/: build.sh (golang:1.23-alpine cross-compile), deploy.sh, patch-nginx.sh (idempotent nginx splice), ssh wrappers Runtime model: pass-through Bitbucket creds per deploy, never logged or persisted on the agent. Control plane never touches git or docker directly — agents do all the work locally.
57 lines
2.2 KiB
Bash
Executable File
57 lines
2.2 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Push the built binaries and dashboard to both SDP VMs.
|
|
#
|
|
# 92 (micro): ~/SDP/agent-micro
|
|
# 186 (gateway): ~/SDP/control-plane, ~/SDP/agent-gateway, ~/SDP/dashboard
|
|
#
|
|
# On 186 we also splice the SDP location into nginx's existing default site
|
|
# and reload. Run scripts/build.sh first.
|
|
|
|
set -euo pipefail
|
|
cd "$(dirname "$0")/.."
|
|
REPO_ROOT="$(pwd)"
|
|
|
|
# ponytail: paths can be overridden by env so the same script works from CI.
|
|
HOST_92="${SDP_92_HOST:-administrator@172.18.136.92}"
|
|
PASS_92="${SDP_92_PASS:-password}"
|
|
HOST_186="${SDP_186_HOST:-administrator@172.18.139.186}"
|
|
PASS_186="${SDP_186_PASS:-Bre@kthrough2312}"
|
|
|
|
if ! command -v sshpass >/dev/null 2>&1; then
|
|
echo "sshpass not found. Install with: brew install sshpass" >&2
|
|
exit 1
|
|
fi
|
|
|
|
SSH_92="sshpass -p $PASS_92 ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o LogLevel=ERROR"
|
|
SCP_92="sshpass -p $PASS_92 scp -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o LogLevel=ERROR"
|
|
SSH_186="sshpass -p $PASS_186 ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o LogLevel=ERROR"
|
|
SCP_186="sshpass -p $PASS_186 scp -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o LogLevel=ERROR"
|
|
|
|
# ponytail: Wipe-and-replace. The deploys are stateful on the VM only via
|
|
# SQLite + .log files in ~/SDP/data — we keep that. Binaries and the
|
|
# dashboard are replaced cleanly.
|
|
REMOTE_RESET='rm -rf ~/SDP/bin ~/SDP/dashboard && mkdir -p ~/SDP/bin ~/SDP/dashboard'
|
|
|
|
echo "==> 92: $HOST_92"
|
|
$SSH_92 "$HOST_92" "$REMOTE_RESET"
|
|
$SCP_92 "$REPO_ROOT/bin/agent-micro" "$HOST_92:~/SDP/bin/agent-micro"
|
|
$SSH_92 "$HOST_92" "chmod +x ~/SDP/bin/agent-micro"
|
|
echo " agent-micro copied"
|
|
|
|
echo
|
|
echo "==> 186: $HOST_186"
|
|
$SSH_186 "$HOST_186" "$REMOTE_RESET"
|
|
$SCP_186 "$REPO_ROOT/bin/control-plane" "$HOST_186:~/SDP/bin/control-plane"
|
|
$SCP_186 "$REPO_ROOT/bin/agent-gateway" "$HOST_186:~/SDP/bin/agent-gateway"
|
|
$SCP_186 -r "$REPO_ROOT/dashboard/out/." "$HOST_186:~/SDP/dashboard/"
|
|
$SSH_186 "$HOST_186" "chmod +x ~/SDP/bin/control-plane ~/SDP/bin/agent-gateway"
|
|
echo " control-plane, agent-gateway, dashboard copied"
|
|
|
|
# Patch nginx on 186
|
|
echo
|
|
echo "==> 186: patching nginx"
|
|
"$REPO_ROOT/scripts/patch-nginx.sh"
|
|
|
|
echo
|
|
echo "done."
|