3.3 KiB
部署指南(VPS + Cloudflare 域名)
目标:https://pay.你的域名/ 对外提供收银页、体验页与商户 API。
0. 选 VPS 的唯一硬要求:能直连币安 API
币安对部分地区 IP(如美国)返回 451 Service unavailable from a restricted location。
香港、新加坡、日本等机房通常可用。开机后先验:
curl -s https://api.binance.com/api/v3/ping && echo OK
配置 1 核 1G 足够;网关是单进程、SQLite、每 3–4 秒一次 API 调用。
1. 安装
# 在 VPS 上(Debian/Ubuntu 为例)
sudo useradd -r -s /usr/sbin/nologin bpg
sudo mkdir -p /opt/bpaygate && sudo chown bpg:bpg /opt/bpaygate
# 方式一:本机交叉编译后上传
# cd server && GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -trimpath -buildvcs=false -ldflags="-s -w" -o bpaygate-linux .
# (-trimpath 与 -buildvcs=false 使构建可复现:同一提交在任何机器上得到相同哈希,便于核对线上版本)
# scp bpaygate-linux vps:/opt/bpaygate/bpaygate
# 方式二:VPS 上有 Go 直接 git clone 后 go build
2. 配置
sudo -u bpg cp config.example.env /opt/bpaygate/config.env
sudo -u bpg /opt/bpaygate/bpaygate -gen-key # 得到 API_AUTH_KEY
sudo -u bpg nano /opt/bpaygate/config.env
sudo chmod 600 /opt/bpaygate/config.env
必填:BASE_URL=https://pay.你的域名、API_AUTH_KEY、BINANCE_API_KEY/SECRET(只读,绑定 VPS 出口 IP)、BINANCE_UID。
对外体验建议:DEMO_ENABLED=true、DEMO_AMOUNTS=0.5,1、RECEIVE_LINK=<收款二维码解码内容>(见下)。
拿到 RECEIVE_LINK
币安 App → 支付 → 收款 → 保存二维码,用任意扫码工具读出内容,通常是 https://app.binance.com/... 形式的链接。
填入后网关会:① 服务端生成同样的二维码给桌面端扫;② 在手机端收银页放「打开币安 App」按钮直接唤起。
不填则只提供手动转账模式(或用 QR_IMAGE 指向二维码图片文件,仅提供扫码)。
3. 起服务
sudo cp deploy/bpaygate.service /etc/systemd/system/
sudo systemctl daemon-reload && sudo systemctl enable --now bpaygate
sudo journalctl -u bpaygate -f # 看到「监听 0.0.0.0:8080」即正常
网关只监听本机即可(LISTEN=127.0.0.1:8080),对外由下面的入口层负责 HTTPS。
4. 对外 HTTPS(二选一)
方案 B · Cloudflare Tunnel(推荐):不开公网端口、证书全托管、VPS 防火墙可以全关。
按 deploy/cloudflared.yml 头部注释五步走完,Cloudflare DNS 里会自动出现 pay.你的域名 的 CNAME。
方案 A · Caddy:deploy/Caddyfile 改域名后 caddy run,Cloudflare DNS 记录开代理时把 SSL/TLS 设为 Full (strict)。
5. 上线检查
curl https://pay.你的域名/healthz返回{"ok":true}- 打开
https://pay.你的域名/demo,手机与桌面各走一遍 - 币安后台确认 API Key 已绑定 VPS IP、仅读取权限
- 定期把收款账户余额转走,收款专号不放大额
6. 升级
替换二进制后 sudo systemctl restart bpaygate。数据库 schema 自动迁移(CREATE IF NOT EXISTS)。
核对线上版本:本机从目标提交用上面的可复现命令构建,sha256sum 与服务器上 /opt/bpaygate/bpaygate 一致即为同一份代码。