安装教程
站长支付安装在一台 Linux 服务器上。本页按宝塔面板讲:nginx、MySQL、Redis 都用宝塔安装和管理,按下面的顺序操作即可。
环境要求
| 项目 | 要求 |
|---|---|
| 服务器 | Linux x86_64,glibc 2.17 及以上 |
| 系统服务 | systemd 219 及以上 |
| Web 服务 | nginx |
| 数据库 | MySQL 8.0 及以上 |
| 缓存 | Redis 6.2 及以上 |
| 时区 | UTC+8 |
| 本机端口 | 2282 |
- 服务器:安装包只有 Linux x86_64 一种
- 系统服务:从 CentOS 7 自带的 systemd 219 起都兼容
- 数据库:向导建表要求 MySQL 8.0 及以上,MariaDB 和 8.0 以下的 MySQL 会被拒绝
- 缓存:向导只检查 Redis 能否连通,不检查版本,请装 6.2 及以上
- 时区:库里的时间不带时区,按服务器时区记录,服务器请保持 UTC+8
- 本机端口:
2282是网关,nginx 把请求转给它;只听127.0.0.1,不用对外开放;2282被别的程序占用时网关起不来
MySQL、Redis、nginx 在宝塔里安装即可。服务器还要能访问外网,收款请求要发到各支付通道。
上传安装包
拿到发行包(zpay-版本号.tar.gz)之后,按下面三步把这个安装包上传到服务器并解压;包没有解压密码。
- 把域名解析到服务器,在宝塔「网站」里为这个域名建好站点。站点目录默认在
/www/wwwroot/下,以域名命名。 - 用宝塔「文件」把安装包上传到站点目录。
- 打开宝塔「终端」,进入站点目录解压:
cd /www/wwwroot/你的站点目录
tar -xzf zpay-版本号.tar.gz -C /www/wwwroot/你的站点目录 --strip-components=1把命令里的 你的站点目录 换成实际的目录名,版本号 换成安装包文件名里的版本号。安装包最外层是一个 zpay-版本号 目录,--strip-components=1 会去掉这一层;解压后站点目录下直接是 runtime、admin、user、templates、static、install 六个目录,以及 version.json、changelog.json。
装成系统服务
在宝塔「终端」里依次执行:
cd /www/wwwroot/你的站点目录
chmod -R u=rwX,go=rX .
chmod 755 runtime/bin/*
cd runtime/bin
sudo ./zpay-supervisor install两条 chmod 把文件权限改对,install 接着做这几件事:
- 装好系统服务
rzpay.target、rzpay-gateway.service、rzpay-worker.service,并设为开机自启; - 写出管理命令
/usr/local/bin/zpay,再放一个指向它的/usr/sbin/zpay; - 先启动网关的安装向导,worker 等向导写好配置后再启动;
- 把站点目录的
index.html换成「还差最后一步」页,页上是这台机器要粘贴的 nginx 配置。
终端最后会提示下一步:配置 nginx,再用浏览器打开站点。装好后的权限如下:
| 位置 | 权限 | 说明 |
|---|---|---|
| 站点目录和程序目录 | 755 | nginx 要能进入 |
| 普通文件 | 644 | 能读到即可 |
runtime/bin/ 下的三个程序 | 755 | 要有执行权限 |
runtime/config/ 下的配置 | 640 | 含数据库密码,不要放宽 |
storage/ | 755 | 日志和上传的文件 |
- 不要用
chmod -R 777。 - 服务默认以 root 身份运行,文件属主不用改;后台在线更新后要自动重启,也需要 root 身份。
- 站点目录的路径里不能有空格、引号、
%、反斜杠,否则install会拒绝安装。 - 已经用 root 登录时,命令前的
sudo可以不写。
配置 nginx
服务装好后打开你的域名,会看到「站长支付已装好服务,还差最后一步:配置 nginx 反向代理」页,页上是这台机器要粘贴的完整配置,端口和站点目录已按本机填好。宝塔给站点生成的配置文件原样保留,只往里加两段。
先清空伪静态
- 打开「网站 → 设置 → 伪静态」,把编辑框里的内容全选删掉,再保存。在下拉框里选「无」不算清空。
- 「反向代理」里加过的条目全部删掉。
这两处各带一条 location /,留着会和第二段冲突,nginx 报 duplicate location "/"。
第一段:粘在 server 外
打开「网站 → 设置 → 配置文件」,把下面这段粘在文件最上面、server 那一行之前:
upstream zpay_gateway {
server 127.0.0.1:2282;
keepalive 64;
}
map $http_x_forwarded_proto $zpay_forwarded_proto {
default $scheme;
https https;
http http;
}upstream 和 map 只能放在 server { } 外面,放进里面 nginx 起不来。map 让网关知道访客用的是 http 还是 https,前面有 CDN 时也一样。
第二段:粘在 server 里
把下面这段粘进 server { } 里面,建议放在 #REWRITE-END 那一行之后:
client_max_body_size 16m;
proxy_http_version 1.1;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $zpay_forwarded_proto;
proxy_set_header Connection "";
proxy_read_timeout 600s;
proxy_send_timeout 600s;
proxy_cache off;
location ^~ /.well-known/ { }
location ^~ / { proxy_pass http://zpay_gateway; }location ^~ /把所有请求交给网关。^~不能删:宝塔建站自带的图片、js、css 规则是正则,去掉^~后会被它们抢先匹配,后台和安装向导的静态文件打不开。Host要用$http_host,不要改成$host:用带端口的地址访问时端口会丢,后台打开是一片空白。- 不要再加
proxy_set_header X-Real-IP $remote_addr,网关从X-Forwarded-For里取访客 IP。 proxy_cache off关掉反代缓存:查单、回调、收银台都不能被缓存。/.well-known/那一行让宝塔申请证书时的校验文件照常从磁盘读取;保存时报duplicate location "/.well-known/"就删掉这一行。server_name、root和证书设置都不用动。
保存生效
保存配置文件(宝塔保存时会先检查语法),再重载 nginx,然后刷新「还差最后一步」页,就会进入安装向导。
走安装向导
还没安装时,打开站点的任何地址都会跳到安装向导 /install。向导共七步,每一步都实际检测一次,不通过不能往下走:
| 步骤 | 做什么 |
|---|---|
| 检查目录 | 确认程序能读写自己的目录 |
| 检查程序 | 核对三个程序和页面资源 |
| 连接数据库 | 填写 MySQL 连接信息 |
| 初始化数据库 | 空库建表,或沿用已有数据 |
| 连接 Redis | 填写 Redis 连接信息 |
| 站点信息 | 设置第一个超级管理员 |
| 安装完成 | 等服务就绪,进入管理后台 |
- 连接数据库:库要先在宝塔里建好,向导不建库;主机默认
127.0.0.1、端口3306、表前缀zp_,填好后点「验证并继续」 - 初始化数据库:空库点「下一步」建表;已有站长支付数据的库可以点「下一步」沿用,也可以点「全新安装」删掉这些表重建,删掉的数据无法恢复;缺表的库不能沿用
- 连接 Redis:主机默认
127.0.0.1、端口6379、10号库,没设密码就留空 - 站点信息:空库在这一步创建第一个超级管理员,密码 6–16 个字符;库里已有管理员时只核对账号,不创建、不改密码。点「完成安装」写出配置文件
runtime/config/zpay.toml和安装锁runtime/.installed - 安装完成:服务以 root 运行时,5 秒后由 systemd 自动启动网关和 worker,页面每 2 秒检查一次,就绪后点「进入管理后台」;不能自动启动时,页面会提示在终端执行
sudo zpay并选 1
装好以后再访问 /install 会跳回首页。
注意事项
| 现象 | 处理 |
|---|---|
执行 install 报 Permission denied | 重跑「装成系统服务」里的命令 |
.user.ini 报 Operation not permitted | 宝塔给它加了保护,可以不管 |
保存配置报 duplicate location "/" | 清空伪静态,删掉反向代理条目 |
保存配置报 duplicate upstream | 第一段粘了两次,只留一份 |
保存配置报 duplicate location "/.well-known/" | 删掉第二段里的 /.well-known/ 一行 |
nginx 报 host not found in upstream "zpay_gateway" | 第一段没粘,或粘进了 server 里 |
| 打开域名还是「还差最后一步」页 | nginx 配置还没生效 |
| 用 IP 能打开,用域名打不开 | 配置粘进了 nginx 主配置 |
| 用 IP 加端口打开后台一片空白 | Host 要用 $http_host |
| 打开站点是 502 | 网关没在运行,查状态和日志 |
| 初始化数据库被拒 | 装 MySQL 8.0 及以上后换库重试 |
| 「未找到与该账号匹配的超级管理员」 | 填库里已有的超级管理员账号 |
| 等了 3 分钟服务还没就绪 | 多半连不上 MySQL 或 Redis |
| 想重新走安装向导 | 删掉配置和安装锁后重启 |
install报Permission denied:解压时丢了执行权限;后台的 js、css 全是 403 也是这个原因- 「还差最后一步」页:常见原因是伪静态没清空、反向代理条目没删、粘错了文件、两段位置粘反
- 用 IP 能打开、用域名打不开:要粘的是这个站点自己的配置文件,里面能看到你的
server_name - 502 与服务没就绪:用
zpay status看进程,用journalctl -u rzpay-gateway.service -n 50看原因 - 重新走安装向导:先备份再删掉
runtime/config/zpay.toml和runtime/.installed,执行sudo zpay选 3 重启,安装向导会重新出现;库里的数据不受影响
日常启停与排查
管理命令
在服务器终端输入 sudo zpay,输入序号后回车:
站长支付服务管理
1) 启动
2) 停止
3) 重启
4) 查看状态
0) 退出
看日志:journalctl -u rzpay-gateway.service -u rzpay-worker.service
请输入序号后回车:也可以直接带子命令:
sudo zpay start
sudo zpay stop
sudo zpay restart
zpay status- 菜单和启动、停止、重启都要 root 权限;
zpay status列出每个进程的状态、PID、运行时长和监听端口。 - 提示找不到
zpay命令时,用全路径/usr/local/bin/zpay。 - 进程意外退出时,systemd 会在 3 秒后自动重新拉起。
- 安装向导没走完时,启动和重启只会拉起安装向导。
查看日志
sudo journalctl -u rzpay-gateway.service -f
sudo journalctl -u rzpay-worker.service -f日志文件在站点目录的 storage/logs/gateway/ 和 storage/logs/worker/ 下,每天一个,文件名如 zpay-gateway.log.YYYY-MM-DD。
检查状态
zpay status
curl -fsS http://127.0.0.1:2282/readyz/readyz实际连一次 MySQL 和 Redis,都正常时返回{"status":"ready"},否则返回 503。
后台入口
管理后台的地址固定是你的域名加 /admin,商户中心是 /user。站长支付没有另设后台安全入口,不需要找回。
更新程序
登录管理后台,左侧菜单最底部显示当前版本;出现「新版本」或「发现新版本」时点它,在确认框里点「确认更新」。更新终端跑完后,服务按改动范围自动重启,页面自动刷新。
服务不是以 root 身份运行时不能自动重启,终端会提示在服务器执行 sudo zpay restart。