Keep frozen research conclusions and code; raw ledgers and secrets stay out of git. Co-authored-by: Cursor <cursoragent@cursor.com>
96 lines
3.0 KiB
Bash
Executable File
96 lines
3.0 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# 部署 MM_EDGE_EXP_001 → jack@jackyu66.com:/www/Project/nautilus_mm
|
|
#
|
|
# 默认:
|
|
# SSH_HOST=jack@jackyu66.com
|
|
# SSH_KEY=~/Project/deploy/zun_hk/id_ed25519_hk
|
|
# REMOTE_DIR=/www/Project/nautilus_mm
|
|
#
|
|
# 覆盖:export SSH_HOST=... SSH_KEY=... REMOTE_DIR=...
|
|
set -euo pipefail
|
|
|
|
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
|
|
SSH_HOST="${SSH_HOST:-jack@jackyu66.com}"
|
|
SSH_KEY="${SSH_KEY:-${HOME}/Project/deploy/zun_hk/id_ed25519_hk}"
|
|
REMOTE_DIR="${REMOTE_DIR:-/www/Project/nautilus_mm}"
|
|
|
|
if [[ ! -f "$SSH_KEY" ]]; then
|
|
echo "SSH key not found: $SSH_KEY"
|
|
exit 1
|
|
fi
|
|
chmod 400 "$SSH_KEY" 2>/dev/null || true
|
|
|
|
SSH_OPTS=(-i "$SSH_KEY" -o StrictHostKeyChecking=accept-new)
|
|
SSH=(ssh "${SSH_OPTS[@]}" "$SSH_HOST")
|
|
RSYNC_E="ssh ${SSH_OPTS[*]}"
|
|
|
|
echo "==> stop remote probe before sync (if running)"
|
|
"${SSH[@]}" "systemctl --user stop mm-edge-probe 2>/dev/null || true"
|
|
|
|
echo "==> sync $ROOT → $SSH_HOST:$REMOTE_DIR"
|
|
"${SSH[@]}" "mkdir -p '$REMOTE_DIR' '$REMOTE_DIR/logs/maker_edge'"
|
|
rsync -avz --delete \
|
|
-e "$RSYNC_E" \
|
|
--exclude '.venv' \
|
|
--exclude '__pycache__' \
|
|
--exclude '*.pyc' \
|
|
--exclude 'logs/maker_edge/*.jsonl' \
|
|
--exclude 'logs/maker_edge/*.txt' \
|
|
--exclude 'logs/maker_edge_smoke' \
|
|
--exclude '.env' \
|
|
"$ROOT/" "$SSH_HOST:$REMOTE_DIR/"
|
|
|
|
echo "==> remote setup (uv venv + user systemd)"
|
|
"${SSH[@]}" "REMOTE_DIR='$REMOTE_DIR' bash -s" <<'REMOTE'
|
|
set -euo pipefail
|
|
export PATH="$HOME/.local/bin:$PATH"
|
|
cd "$REMOTE_DIR"
|
|
if [[ ! -f .env ]]; then
|
|
cp .env.example .env
|
|
{
|
|
echo ""
|
|
echo "# Server Data Collection — MM_EDGE_EXP_001"
|
|
echo "EXPERIMENT_ID=MM_EDGE_EXP_001"
|
|
echo "PROBE_VERSION=probe_v0.1"
|
|
echo "EXCHANGE_NAME=binance_usdm"
|
|
echo "BINANCE_ENVIRONMENT=TESTNET"
|
|
echo "ENABLE_TRADING=false"
|
|
echo "QUOTE_TTL_SECS=30"
|
|
echo "MAX_ABS_INVENTORY=0.005"
|
|
echo "HTTP_PROXY="
|
|
echo "HTTPS_PROXY="
|
|
echo "MAKER_EDGE_LOG_DIR=${REMOTE_DIR}/logs/maker_edge"
|
|
} >> .env
|
|
echo "CREATED .env — fill BINANCE_API_KEY / BINANCE_API_SECRET"
|
|
else
|
|
echo ".env exists — left untouched"
|
|
fi
|
|
|
|
if [[ ! -x "$HOME/.local/bin/uv" ]]; then
|
|
curl -LsSf https://astral.sh/uv/install.sh | sh
|
|
fi
|
|
uv python install 3.12
|
|
rm -rf .venv
|
|
uv venv .venv --python 3.12
|
|
uv pip install -r requirements.txt --python .venv/bin/python
|
|
|
|
mkdir -p "$HOME/.config/systemd/user"
|
|
sed -e "s|/www/Project/nautilus_mm|${REMOTE_DIR}|g" \
|
|
deploy/mm-edge-probe.user.service > "$HOME/.config/systemd/user/mm-edge-probe.service"
|
|
systemctl --user daemon-reload
|
|
systemctl --user enable mm-edge-probe.service
|
|
loginctl enable-linger "$(whoami)" 2>/dev/null || true
|
|
echo "User systemd installed (not started — fill keys first)."
|
|
echo " nano $REMOTE_DIR/.env"
|
|
echo " systemctl --user start mm-edge-probe"
|
|
echo " journalctl --user -u mm-edge-probe -f"
|
|
REMOTE
|
|
|
|
echo ""
|
|
echo "==> done"
|
|
echo "1) ssh -i $SSH_KEY $SSH_HOST"
|
|
echo "2) nano $REMOTE_DIR/.env # TESTNET keys"
|
|
echo "3) systemctl --user start mm-edge-probe"
|
|
echo "4) ./scripts/probe_status.sh"
|
|
echo "5) ./scripts/pull_report.sh"
|