Files
explorer-monorepo/scripts/install-rpc-access-gate-nginx-via-ssh.sh
defiQUG f46bd213ba refactor: rename SolaceScanScout to Solace and update related configurations
- Updated branding from "SolaceScanScout" to "Solace" across various files including deployment scripts, API responses, and documentation.
- Changed default base URL for Playwright tests and updated security headers to reflect the new branding.
- Enhanced README and API documentation to include new authentication endpoints and product access details.

This refactor aligns the project branding and improves clarity in the API documentation.
2026-04-10 12:52:17 -07:00

160 lines
3.6 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
RENDER_SCRIPT="$SCRIPT_DIR/render-rpc-access-gate-nginx.sh"
PRODUCT_SLUG=""
SERVER_NAME=""
SSH_HOST=""
REMOTE_PATH=""
REMOTE_TEST_CMD="nginx -t"
REMOTE_RELOAD_CMD="systemctl reload nginx"
INTERNAL_SECRET="${ACCESS_INTERNAL_SECRET:-}"
VALIDATOR_URL="http://127.0.0.1:8081/api/v1/access/internal/validate-key"
UPSTREAM_URL=""
APPLY=0
usage() {
cat <<'EOF'
Safely render and install an explorer-managed RPC edge gate onto a remote nginx host.
Default mode is plan-only. Use --apply to copy the rendered config, run nginx -t,
and reload nginx over SSH.
Usage:
bash explorer-monorepo/scripts/install-rpc-access-gate-nginx-via-ssh.sh \
--product thirdweb-rpc \
--server-name thirdweb-rpc.example.org \
--ssh-host root@192.168.11.217 \
--internal-secret "$ACCESS_INTERNAL_SECRET" \
[--remote-path /etc/nginx/conf.d/thirdweb-rpc-gated.conf] \
[--validator-url http://127.0.0.1:8081/api/v1/access/internal/validate-key] \
[--upstream http://192.168.11.217:8545] \
[--apply]
EOF
}
while [[ $# -gt 0 ]]; do
case "$1" in
--product)
PRODUCT_SLUG="$2"
shift 2
;;
--server-name)
SERVER_NAME="$2"
shift 2
;;
--ssh-host)
SSH_HOST="$2"
shift 2
;;
--remote-path)
REMOTE_PATH="$2"
shift 2
;;
--internal-secret)
INTERNAL_SECRET="$2"
shift 2
;;
--validator-url)
VALIDATOR_URL="$2"
shift 2
;;
--upstream)
UPSTREAM_URL="$2"
shift 2
;;
--remote-test-cmd)
REMOTE_TEST_CMD="$2"
shift 2
;;
--remote-reload-cmd)
REMOTE_RELOAD_CMD="$2"
shift 2
;;
--apply)
APPLY=1
shift
;;
-h|--help)
usage
exit 0
;;
*)
echo "Unknown argument: $1" >&2
usage >&2
exit 1
;;
esac
done
if [[ -z "$PRODUCT_SLUG" || -z "$SERVER_NAME" || -z "$SSH_HOST" ]]; then
echo "ERROR: --product, --server-name, and --ssh-host are required." >&2
exit 1
fi
if [[ -z "$INTERNAL_SECRET" ]]; then
echo "ERROR: --internal-secret is required. Set ACCESS_INTERNAL_SECRET or pass --internal-secret." >&2
exit 1
fi
REMOTE_PATH="${REMOTE_PATH:-/etc/nginx/conf.d/${PRODUCT_SLUG}-gated.conf}"
TMP_RENDER="$(mktemp)"
trap 'rm -f "$TMP_RENDER"' EXIT
render_args=(
--product "$PRODUCT_SLUG"
--server-name "$SERVER_NAME"
--internal-secret "$INTERNAL_SECRET"
--validator-url "$VALIDATOR_URL"
--output "$TMP_RENDER"
)
if [[ -n "$UPSTREAM_URL" ]]; then
render_args+=(--upstream "$UPSTREAM_URL")
fi
bash "$RENDER_SCRIPT" "${render_args[@]}" >/dev/null
echo "== RPC access gate installer =="
echo "Product: $PRODUCT_SLUG"
echo "Server name: $SERVER_NAME"
echo "SSH host: $SSH_HOST"
echo "Remote path: $REMOTE_PATH"
echo "Validator: $VALIDATOR_URL"
if [[ -n "$UPSTREAM_URL" ]]; then
echo "Upstream: $UPSTREAM_URL"
fi
echo
echo "-- Rendered config preview --"
sed -n '1,220p' "$TMP_RENDER"
echo
if [[ "$APPLY" -ne 1 ]]; then
cat <<EOF
Plan only. No remote changes were made.
To apply:
bash explorer-monorepo/scripts/install-rpc-access-gate-nginx-via-ssh.sh \\
--product "$PRODUCT_SLUG" \\
--server-name "$SERVER_NAME" \\
--ssh-host "$SSH_HOST" \\
--internal-secret '***' \\
--apply
EOF
exit 0
fi
echo "Copying rendered config to $SSH_HOST:$REMOTE_PATH ..."
scp "$TMP_RENDER" "$SSH_HOST:$REMOTE_PATH"
echo "Testing nginx config on $SSH_HOST ..."
ssh "$SSH_HOST" "$REMOTE_TEST_CMD"
echo "Reloading nginx on $SSH_HOST ..."
ssh "$SSH_HOST" "$REMOTE_RELOAD_CMD"
echo "Install complete."