ZFShang 完整安装部署指南
从零开始,手把手教你搭建 ZFShang 授权管理系统。包含宝塔面板配置、系统安装、Loader 扩展编译、代码加密全流程
1 服务器 & 宝塔面板安装
1.1 服务器要求
| 项目 | 最低配置 | 推荐 |
|---|---|---|
| 操作系统 | CentOS 7 / Ubuntu 18.04 | CentOS 8+ / Ubuntu 22.04 |
| 内存 | 1 GB | 2 GB+ |
| 磁盘 | 20 GB | 40 GB+ SSD |
| Web 服务器 | Nginx 1.18+ | Nginx 1.22+ |
| PHP | 7.4 | 8.1 / 8.2 |
| 数据库 | MySQL 5.7 | MySQL 8.0 |
| PHP 扩展 | openssl pdo_mysql json mbstring fileinfo gd redis curl sodium | |
1.2 安装宝塔面板
SSH 登录服务器后执行:
1.3 安装 LNMP 环境
登录宝塔面板 -> 软件商店:
openssl、pdo_mysql、mbstring、fileinfo、gd、redis 已启用(缺 redis 会导致安装向导环境检查不通过,缺 pdo_mysql 会报 could not find driver)。2 站点创建 & 配置
2.1 创建站点
宝塔面板 -> 网站 -> 添加站点:
/www/wwwroot/zfshang.cn)2.2 上传源码
使用宝塔文件管理器上传 ZIP 并解压,或通过 Git 克隆到网站根目录。
2.3 配置 Nginx 伪静态
宝塔面板 -> 网站 -> 点击域名 -> 伪静态:
install/nginx.conf.example。敏感目录用 ^~ 前缀匹配而非正则 ~,避免误伤 public 内的正常路径。502 排查:确认此段 fastcgi_pass / include enable-php-XX.conf 与站点实际 PHP 版本一致(宝塔:站点→配置文件→PHP 版本)。2.4 设置文件权限
2.5 修改网站运行目录(关键,安装前必须完成)
public/ 文件夹,否则无法访问安装向导!宝塔面板 -> 网站 -> 点击域名 -> 网站目录 -> 选择 /www/wwwroot/zfshang.cn/public -> 保存。
原因:系统入口 index.php 位于 public/ 内,项目根目录没有 index.php。运行目录不指向 public,访问根域名会得到 403/404。
3 数据库创建 & 系统安装
3.1 创建数据库
方式一:宝塔面板 -> 数据库 -> 添加数据库(如果建站时已创建,跳过)
方式二:phpMyAdmin -> 新建数据库,字符集选择 utf8mb4_general_ci
3.2 运行安装向导
public/index.php 检测到配置文件缺失后自动加载。不要访问 /install/——该路径会被伪静态规则拦截(403/404)。install/ 目录。public/.user.ini(宝塔防跨站配置),若其 open_basedir 路径与实际部署路径不一致,删除或修正该文件后重启 PHP。3.3 部署 Loader(如需代码加密)
见下方「步骤 4:Loader 扩展编译 & 部署」。如不使用代码加密功能可跳过。
4 Loader 扩展编译 & 部署
4.1 安装 Docker(推荐)
4.2 一键编译 Loader(Docker,推荐)
public/downloads/loaders/。可用 --php=7.4,8.1 只编指定版本、--name=完整扩展名 指定 Loader 扩展名(多授权点/多厂商时)。详见 loader/docker/README.md。4.3 本机编译 Loader(不装 Docker 时)
done: 3 ok / 2 skip 表示编译完成。skip 表示该 PHP 版本未安装,属正常。--all 会自动编译全部已安装版本(7.4~8.4)并拷贝到 public/downloads/loaders/。⚠️ 本机编译受服务器 glibc 版本限制:服务器系统较新时,产物在 CentOS 7 等老系统会报 GLIBC_2.x not found,对外分发请优先使用 4.2 的 Docker 方案。4.4 验证下载路径
确认能看到 blue_rpbp_loader-*.so 文件。若需要为多个授权点/厂商编译不同扩展名的 Loader,使用 ./build.sh --all --name=完整扩展名(如 --name=pingguo_loader);不传则默认读后台「系统设置」中的 Loader 扩展名。
4.5 客户侧安装 Loader
5 加密密钥配置 & 初次打包
5.1 验证密钥
系统首次运行时已自动生成加密密钥,位于 storage/.encryption_key。
5.2 管理后台配置
5.3 添加产品 & 初次打包
6 后台主要设置清单
| 页面 | 功能 | 说明 |
|---|---|---|
/admin/settings | 系统设置 | 站点名称、SMTP 邮件、支付设置(支付宝/微信/QQ)、登录/产品/重要/下载设置 |
/admin/vip | VIP 套餐 | VIP 价格、时长、排序 |
/admin/products | 产品管理 | 添加/编辑产品、授权参数 |
/admin/licenses | 授权管理 | 手动添加授权、吊销、查看详情 |
/admin/keys | 密钥管理 | RSA/KEK 密钥轮换、弃用、Loader 下载 |
/admin/package | 授权打包 | 上传 ZIP -> 注入 SDK -> 加密 -> 下载 |
7 常见问题排查
Q: 安装时提示 "fileinfo 扩展未安装" 或 "Redis 扩展未通过"
宝塔面板 -> 软件商店 -> PHP 设置 -> 安装扩展 -> 搜索对应扩展(fileinfo / redis)-> 安装 -> 重启 PHP。Redis 是安装向导必查项,缺它环境检查不通过。
Q: 访问站点 403 Forbidden,无法进入安装向导
① 检查网站运行目录是否已指向 public/;② 检查站点根目录是否有 public/.user.ini,其 open_basedir 路径若与实际部署路径不符会导致 PHP 拒绝读取 install 目录,删除或修正后重启 PHP。
Q: 安装完成后间歇性 403 / 405,过 1 分钟自动恢复
服务器防火墙(宝塔 Nginx 防火墙 / CC 防护)将你误判为攻击并临时拉黑约 60 秒。到「Nginx 防火墙 -> 拦截日志」确认,将自己的 IP 加入白名单或调高 CC 阈值。与程序代码无关。
Q: 编译 Loader 时报错
确保三个 C 源文件(zfshang_loader.c、crypto.c、license.c)已上传到 loader/ 目录。推荐用 Docker 一键编译:cd loader/docker && ./build.sh(容器内自带 gcc / PHP dev,不依赖服务器环境);也可用 ./build.sh --all 本机编译。
Q: 打包后客户代码运行报错
检查:1) 是否安装了正确版本的 Loader 扩展;2) License 文件在项目根目录;3) 域名与 License 绑定一致。
Q: 加密密钥需要备份吗?
必须备份!密钥文件位于 storage/.encryption_key。丢失意味着所有已加密代码无法解密。
Q: 如何更换加密密钥?
/admin/keys -> 点击「更新 KEK 对称主密钥」。注意:旧加密文件需重新打包。
Q: 邮件发送失败
/admin/settings 配置 SMTP。推荐使用 QQ邮箱/163邮箱的 SMTP 服务(需开启授权码)。