75 lines
3.3 KiB
Markdown
75 lines
3.3 KiB
Markdown
# 部署指南(VPS + Cloudflare 域名)
|
||
|
||
目标:`https://pay.你的域名/` 对外提供收银页、体验页与商户 API。
|
||
|
||
## 0. 选 VPS 的唯一硬要求:能直连币安 API
|
||
|
||
币安对部分地区 IP(如美国)返回 `451 Service unavailable from a restricted location`。
|
||
香港、新加坡、日本等机房通常可用。开机后先验:
|
||
|
||
```bash
|
||
curl -s https://api.binance.com/api/v3/ping && echo OK
|
||
```
|
||
|
||
配置 1 核 1G 足够;网关是单进程、SQLite、每 3–4 秒一次 API 调用。
|
||
|
||
## 1. 安装
|
||
|
||
```bash
|
||
# 在 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. 配置
|
||
|
||
```bash
|
||
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. 起服务
|
||
|
||
```bash
|
||
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` 一致即为同一份代码。
|