#!/usr/bin/env bash # pay 一键发布:交叉编译 → 传 ali → 备份 → 重启 → 探活(失败自动回滚)。 # 用法:在 pay 仓根目录执行 ./deploy.sh # 前提:~/.ssh/config 有 ali 别名;ali 上 systemd 服务名 pay、二进制 /opt/pay/payd。 # 密钥不在此脚本处理——运行时由 /etc/pay/pay.env(Bitwarden 灌)提供。 set -euo pipefail HOST=ali DIR=/opt/pay BIN=/tmp/payd-release echo "[1/4] 交叉编译 linux/amd64 …" GOOS=linux GOARCH=amd64 go build -o "$BIN" . echo "[2/4] 上传到 $HOST:$DIR/payd-new …" scp -q "$BIN" "$HOST:$DIR/payd-new" echo "[3/4] 备份旧版 + 切换 + 重启 …" ssh "$HOST" "cp $DIR/payd $DIR/payd.bak && mv $DIR/payd-new $DIR/payd && chmod +x $DIR/payd && systemctl restart pay" echo "[4/4] 探活 …" if ssh "$HOST" "curl -fsS --retry 8 --retry-delay 1 --retry-connrefused -o /dev/null -w 'health %{http_code}\n' http://127.0.0.1:8080/health"; then echo "✅ 发布完成(上一版已备份在 $DIR/payd.bak)" else echo "❌ 探活失败,自动回滚到上一版 …" ssh "$HOST" "cp $DIR/payd.bak $DIR/payd && systemctl restart pay" echo "↩️ 已回滚。请检查本次改动后重试。" exit 1 fi