Files

75 lines
3.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 部署指南(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` 一致即为同一份代码。