From ef0fa39ce4dcc3f3233c94792e3c04110e7d0969 Mon Sep 17 00:00:00 2001 From: wangjia Date: Fri, 3 Jul 2026 22:49:52 +0800 Subject: [PATCH] =?UTF-8?q?chore:=20=E5=8A=A0=E4=B8=80=E9=94=AE=E5=8F=91?= =?UTF-8?q?=E5=B8=83=E8=84=9A=E6=9C=AC=20deploy.sh=EF=BC=88=E7=BC=96?= =?UTF-8?q?=E8=AF=91=E2=86=92=E4=BC=A0ali=E2=86=92=E5=A4=87=E4=BB=BD?= =?UTF-8?q?=E2=86=92=E9=87=8D=E5=90=AF=E2=86=92=E6=8E=A2=E6=B4=BB=EF=BC=8C?= =?UTF-8?q?=E5=A4=B1=E8=B4=A5=E8=87=AA=E5=8A=A8=E5=9B=9E=E6=BB=9A=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_019UQmqWmV67sXGLrb3U1XXn --- README.md | 8 +++++++- deploy.sh | 29 +++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 1 deletion(-) create mode 100755 deploy.sh diff --git a/README.md b/README.md index 7c93022..f48114e 100644 --- a/README.md +++ b/README.md @@ -60,8 +60,14 @@ pay/ ## 构建部署 +**一键发布到 ali(推荐)**: +```bash +./deploy.sh # 交叉编译 linux/amd64 → 传 ali → 备份 → 重启 pay → 探活(失败自动回滚) +``` + +手动构建: ```bash go build -o payd . # 纯 Go,无需 gcc,可直接拷到阿里云 Linux 运行 ``` -生产改 `config.yaml`:`server.mode: release`、`base_url` 为正式 HTTPS 域名、商户 `production: true` 并换正式密钥。 +生产改 `config.yaml`:`server.mode: release`、`base_url` 为正式 HTTPS 域名、商户 `production: true`;密钥走环境变量(`/etc/pay/pay.env`,Bitwarden 灌),不入库。 diff --git a/deploy.sh b/deploy.sh new file mode 100755 index 0000000..3752543 --- /dev/null +++ b/deploy.sh @@ -0,0 +1,29 @@ +#!/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