- 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.
160 lines
3.6 KiB
Bash
Executable File
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."
|