Skip to content

上线部署记录

1. 基本背景(AI助手配置)

1.1 Discuz! 插件项目环境说明

本插件项目采用三环境架构:开发环境、测试环境与生产环境,确保插件在全流程中具备可控性与高可用性。


1.1.1 开发环境

  • 操作系统:Windows 10 Pro 64位
  • 开发工具
  • Visual Studio Code v1.100.2
  • MobaXterm Personal Edition v23.5 (通过SSH连接远程服务器)
  • 插件路径
  • 开发版本目录:

    D:\3 Work\58halifax\ProjectDev\DVersion\插件名文件夹
    
  • 发布版本目录:

    D:\3 Work\58halifax\ProjectDev\RVersion\插件名文件夹
    
  • 用途

  • 本地代码开发、初步测试
  • 版本归档与整理
  • 远程上传测试与部署

1.1.2 测试环境

  • 部署位置:阿里云服务器
  • 公网IP47.99.192.57
  • 系统配置
  • 操作系统:Debian 11
  • Web服务:Nginx
  • PHP版本:7.4.33
  • 数据库:MariaDB Ver 15.1
  • 目录结构
  • 开发版本路径:

    /home/ecs-user/ProjectDev/Dversion/插件名文件夹
    
  • 发布版本路径:

    /home/ecs-user/ProjectDev/Rversion/插件名文件夹
    
  • Discuz! 安装目录:

    /var/www/html/58haiwaiweb
    
  • 插件部署运行目录:

    /var/www/html/58haiwaiweb/source/plugin/插件名文件夹
    
  • 用途

  • 插件部署与功能测试
  • 提交路径变更验证
  • 测试通过后发布归档

1.1.3 生产环境

  • 部署位置:阿里云服务器
  • 公网IP121.43.150.111
  • 系统配置:与测试环境一致
  • 目录结构:与测试环境完全一致
  • 用途
  • 部署测试通过的插件正式版本
  • 正式运行对外提供服务
  • 最终兼容性与性能验证

1.1.4 使用规范流程

  1. 在开发环境完成插件编码,保存在 DVersion 文件夹。
  2. 使用 CMD 同步代码至测试环境 Dversion 目录,测试部署并验证功能。
  3. 验证通过后保存至测试环境 Rversion 目录,并同步至开发环境发布目录。
  4. 最终通过 CMD 将发布版本同步上传至生产环境 Rversion 目录,并进行正式部署上线。

1.2 知识库的构建

在回答问题和提供建议时,遵循以下信息来源优先级顺序,以确保信息的权威性、准确性与实用性。


1.2.1 官方权威资料(最高优先级)

✅ 用途:
- 插件API文档
- 系统机制说明(Hook机制、模板系统)
- 安全补丁与平台变更


1.2.2 上传的学习笔记(次优先级)

以下为上传的内部技术资料(Markdown格式):

  • 《开发实践-业务办理.md》
  • 《开发-插件机制.md》
  • 《开发-模板机制.md》
  • 《开发—产品框架.md》
  • 《开发-数字字典.md》
  • 《运维-升级搬家.md》
  • 《运维-扩展服务.md》
  • 《运维-环境搭建.md》
  • 《运营-前台功能.md》
  • 《运营-后台管理.md》

✅ 用途:

  • 插件开发流程、实践经验
  • 环境配置、上线操作
  • 管理端与用户端功能梳理

1.2.3 用户上传的插件代码文件(重要实用参考)

常用上传文件包括:

  • 前端样式与脚本:custom.css, common.css, jquery.min.js, jquery-weui.min.js
  • 模板页面:front_order_form.htm, order_list.htm, success_dialog.htm
  • 插件接口与逻辑:xigua_partnercenter.inc.php, simtelecom_order.inc.php, plugin.php

✅ 用途:

  • 分析插件结构与部署路径
  • 判断接口调用、表单处理与权限逻辑
  • 样式与页面兼容性检查

1.2.4 Discuz! 社区论坛(经验补充)

✅ 用途:

  • 查找开发/部署中遇到的常见问题
  • 借鉴其他用户的实战解决方案

1.2.5 通用互联网搜索(最低优先级)

  • 当以上所有来源都无法获取有效信息时才使用
  • 搜索结果需经语境判断与内容核查后才会提供给用户

本优先级机制确保开发过程中的信息引用**权威性优先、实践性充分、解释性明确**,适用于插件开发、调试、部署、运营各阶段。

2. 插件上线和部署

2.1 上线插件xigua_simtelecom v1.0 (25年6月5日)

2.1.1 生产环境系统和数据库备份

1)常规操作

  • Discuz!系统备份
    • 关闭站点以确保数据一致性: 在进行备份前,建议暂时关闭站点,防止用户在备份过程中产生新的数据,确保备份的一致性。
      • 登录 Discuz! 后台管理中心;
      • 导航至「全局」>「站点关闭」;
      • 设置「站点状态」为关闭,并填写关闭原因提示;
      • 保存设置。
  • 数据库备份
    • 方法一:使用 Discuz! 后台备份
      • 登录 Discuz! 后台管理中心;
      • 导航至「站长」>「数据库」>「备份」;
      • 选择备份类型:
      • Discuz! 和 UCenter 数据:备份所有数据表;
      • 自定义备份:根据需要选择特定的数据表;
      • 点击「提交」开始备份;
      • 备份完成后,备份文件将保存在站点根目录的 data/backup_xxxxxx/ 文件夹中;
      • 使用 FTP 或 SFTP 下载备份文件到本地安全位置保存。
    • 方法二:使用 phpMyAdmin 备份
      • 登录 phpMyAdmin;
      • 选择对应的数据库;
      • 点击「导出」;
      • 选择导出方式为「快速」,格式为「SQL」
      • 点击「执行」,下载备份文件到本地。

2)实际操作

  • Discuz! 系统备份(Linux命令方式)

    • 考虑到系统实际用户不多,不关闭站点直接进行备份。
    • 使用 rsync 增量同步 + 手动打包:目标是同步一份可用于恢复的备份结构,可以用 rsync 同步至备份目录,再按天打包变更文件
    • 方案对比:tar 增量 vs rsync 增量
    维度 tar --listed-incremental rsync --link-dest 快照式备份
    🗃 文件结构清晰 ❌ .tar.gz 打包,恢复需解压 ✅ 文件夹结构直接可见
    🧠 增量机制 自动记录上次状态(.snar 文件) 手动指定对比目录 --link-dest
    🛠 可控性 增量控制较难,恢复需按顺序解压多包 任何时间点都能直接用完整目录恢复
    📦 空间利用率 高(只能按文件变动重新打包) 更高(未变文件用硬链接,不重复存储)
    🔄 恢复难度 高,需要逐个解压、按顺序回滚 低,进入对应日期目录即可
    🚀 执行速度 慢(每次压缩、处理全部文件) 快(只复制变更文件/链接)
    🧩 压缩率 高(适合归档长期存储) 低(原始结构,适合短期或多版本快速恢复)
    • 恢复 rsync --link-dest 快照式增量备份非常简单,你只需选择某个具体日期的完整目录,然后复制回原路径即可。
    • 问题一:为什么备份要“每天一个目录”而不是“不断叠加进一个目录”?如果每次备份都叠加在一个目录下,你将面临这些问题:
    问题 描述
    ❌ 数据状态不可回退 没有办法回到某个历史时刻的完整状态
    ❌ 文件被删除或替换时不可追踪 如果某个文件在 6 月 4 日还在,6 月 5 日被删,那么你无法找回
    ❌ 恢复操作不可验证 不知道哪些文件是旧的,哪些是新增的,也不能验证恢复完整性
    ✅ 多版本目录则可保留完整“快照” 每天的目录就是一个独立的“系统镜像”
    • 关键点:rsync 的硬链接机制不会真正复制文件,只占用极小空间。
      • 相同文件 → 用硬链接实现共享存储;
      • 所以多个目录看似复制,其实并不重复占空间;
      • 节省空间的同时提供了“多个版本”恢复能力。
      • 参数控制 rsync -avz -delete
        • -a: 保留权限
        • -v:显示过程
        • -z: 压缩传输
        • --delete: 保持目标与源一致(慎用);
    • 问题 2:为什么恢复要“清空旧代码”,不能直接覆盖?原因:防止旧文件残留导致系统异常
    • 备份策略:
      • 策略1: 用户图片 pics/ → 测试环境归档目录(每月15日哈法时间凌晨3点增量同步)
      • 策略 2:整站代码 58haiwaiweb/(不含文件夹pics/和config/)
        • 版本归档:每日备份(不加 --delete)→ /home/ecs-user/backup/58haiwaiweb/YYYY-MM-DD/ (不含
        • 在测试环境中这些归档只做“备份用途”,不做运行部署;
        • 2-2. 结构同步:使用 --delete 保持主站与测试站一致性
    场景 风险 示例
    ✅ 只复制变更 ❌ 旧版本文件仍存在,可能与新版本冲突 删除了一个模块但残留老文件仍加载
    ✅ 完整清空再恢复 ✅ 恢复环境干净、可预测 所有文件按备份目录还原,100%一致
    ✅ Discuz 插件机制强依赖文件路径 ✅ 确保 hook、模板、类文件版本匹配 否则可能报错、无法加载钩子类
    • 最佳实践总结
    操作 建议方式 原因
    备份 每次完整目录 + 日期区分 保留快照、可回溯、多版本
    恢复 先清空旧目录,再全量还原 防止残留、确保一致、避免异常
    相关命令集
    # 先查看磁盘总体使用情况,df:显示文件系统磁盘空间使用情况;-h:以人类可读的方式(MB/GB)显示
    df -h
    # 输出:/ 分区总空间 40G,已用 21G,剩余 18G,可用 55%。
    # Filesystem      Size  Used Avail Use% Mounted on
    # /dev/vda1        40G   21G   18G  55% /
    
    # 查看 Discuz 安装目录占用大小:du:查看目录大小;-s:只显示汇总;-h:以 MB/GB 单位显示。
    sudo du -sh /var/www/html/58haiwaiweb
    # 输出: 15G     /var/www/html/58haiwaiweb
    
    # 进一步分析“站点中最大文件夹”:
    sudo du -h --max-depth=1 /var/www/html/58haiwaiweb | sort -hr | head -10
    # 输出如下:
    # 15G     /var/www/html/58haiwaiweb/source
    # 15G     /var/www/html/58haiwaiweb
    # 79M     /var/www/html/58haiwaiweb/uc_server
    # 40M     /var/www/html/58haiwaiweb/data
    # 13M     /var/www/html/58haiwaiweb/static
    # 5.6M    /var/www/html/58haiwaiweb/template
    # 3.3M    /var/www/html/58haiwaiweb/pic
    # 2.1M    /var/www/html/58haiwaiweb/install
    # 316K    /var/www/html/58haiwaiweb/uc_client
    # 244K    /var/www/html/58haiwaiweb/api
    
    # 进一步分析/source 
    sudo du -h --max-depth=2 /var/www/html/58haiwaiweb/source | sort -hr | head -5
    # 输出如下:   
    # 15G     /var/www/html/58haiwaiweb/source/plugin
    # 15G     /var/www/html/58haiwaiweb/source
    # 13G     /var/www/html/58haiwaiweb/source/plugin/xigua_hb
    # 2.1G    /var/www/html/58haiwaiweb/source/plugin/xigua_hx
    # 29M     /var/www/html/58haiwaiweb/source/plugin/xigua_login
    
    # 进一步分析/xigua_hb
    sudo du -h --max-depth=2 /var/www/html/58haiwaiweb/source/plugin/xigua_hb | sort -hr | head -5
    # 输出如下:   
    # 13G     /var/www/html/58haiwaiweb/source/plugin/xigua_hb
    # 9.5G    /var/www/html/58haiwaiweb/source/plugin/xigua_hb/pics
    # 2.7G    /var/www/html/58haiwaiweb/source/plugin/xigua_hb/tmp
    # 549M    /var/www/html/58haiwaiweb/source/plugin/xigua_hb/pics/202304
    # 521M    /var/www/html/58haiwaiweb/source/plugin/xigua_hb/pics/202305
    
    #统计 pics/ 目录下每个子文件夹(按月份命名)的占用空间
    sudo du -h --max-depth=1 /var/www/html/58haiwaiweb/source/plugin/xigua_hb/pics | sort -hr
    
    # 策略 1:用户图片 pics/ → 测试环境归档目录 /home/ecs-user/backup/pics(不加 --delete),每月 15 日凌晨 3 点(Halifax 本地时间)
    # 第一次完整同步命令(手动执行)
    # 在生产环境执行以下命令,把所有月份数据都推送到测试环境的备份目录:
    rsync -avz /var/www/html/58haiwaiweb/source/plugin/xigua_hb/pics/ ecs-user@47.99.192.57:/home/ecs-user/backup/pics/
    # 自动化每月备份的办法(backup_pics_monthly.sh)+计划任务(Crontab)
    # 第一步:配置 SSH 免密登录(生产服务器 → 测试服务器 的 SSH、scp、rsync 连接免密)
    # 在生产环境执行(生成公钥):
    ssh-keygen -t rsa -b 2048
    # 一路回车(生成密钥对(私钥 ~/.ssh/id_rsa,公钥 ~/.ssh/id_rsa.pub))
    # 把公钥安装到 测试服务器 的 ~/.ssh/authorized_keys:
    ssh-copy-id ecs-user@47.99.192.57
    # 在生产服务器测试:
    ssh ecs-user@47.99.192.57 'echo success'
    # 不提示输入密码即为成功配置。
    #第二步:编写自动化脚本
    #!/bin/bash
    # 计算上个月的月份(格式:202405)
    last_month=$(date -d "$(date +%Y-%m-01) -1 month" +%Y%m)
    
    src_dir="/var/www/html/58haiwaiweb/source/plugin/xigua_hb/pics/${last_month}/"
    dest_host="ecs-user@47.99.192.57"
    dest_dir="/home/ecs-user/backup/pics/${last_month}/"
    
    # 检查源目录是否存在
    if [ -d "$src_dir" ]; then
        echo "$(date): 准备同步 $src_dir"
    
        # 在目标服务器创建目标目录(如不存在)
        ssh "$dest_host" "mkdir -p $dest_dir"
    
        # 执行同步(免密码)
        rsync -avz "$src_dir" "${dest_host}:${dest_dir}"
    
        echo "$(date): 同步完成 $last_month"
    else
        echo "$(date): 源目录不存在:$src_dir,跳过"
    fi
    # 第三步:给脚本加执行权限:
    chmod +x /home/ecs-user/scripts/backup_pics_monthly.sh
    # 第四步:设置Crontab计划任务
    crontab -e
    0 3 15 * * /bin/bash /home/ecs-user/scripts/backup_pics_monthly.sh >> /home/ecs-user/scripts/pics_backup.log 2>&1
    
    #策略2.1: 每周快照备份脚本(生产环境本机)
    
    # 第一步:首次完整备份(建议只执行一次)
    # 为了尽量节省空间,先把照片迁移
    # 建立迁移的文件夹
    mkdir -p /home/ecs-user/backup/58haiwaiweb/source/plugin/xigua_hb/pics
    # 迁移相关照片(保留一年内的照片)
    /var/www/html/58haiwaiweb/source/plugin/xigua_hb/pics/2023* \
    /var/www/html/58haiwaiweb/source/plugin/xigua_hb/pics/202401 \
    /var/www/html/58haiwaiweb/source/plugin/xigua_hb/pics/202402 \
    /var/www/html/58haiwaiweb/source/plugin/xigua_hb/pics/202403 \
    /var/www/html/58haiwaiweb/source/plugin/xigua_hb/pics/202404 \
    /var/www/html/58haiwaiweb/source/plugin/xigua_hb/pics/202405 \
    /var/www/html/58haiwaiweb/source/plugin/xigua_hb/pics/202406 \
    /home/ecs-user/backup/58haiwaiweb/source/plugin/xigua_hb/pics/
    # 删除生产站点下 /pics/ 中 2024年6月及以前的目录。
    sudo rm -rf \
    /var/www/html/58haiwaiweb/source/plugin/xigua_hb/pics/2023* \
    /var/www/html/58haiwaiweb/source/plugin/xigua_hb/pics/202401 \
    /var/www/html/58haiwaiweb/source/plugin/xigua_hb/pics/202402 \
    /var/www/html/58haiwaiweb/source/plugin/xigua_hb/pics/202403 \
    /var/www/html/58haiwaiweb/source/plugin/xigua_hb/pics/202404 \
    /var/www/html/58haiwaiweb/source/plugin/xigua_hb/pics/202405 \
    /var/www/html/58haiwaiweb/source/plugin/xigua_hb/pics/202406
    # 第二步: 编写全备脚本backup_full_58haiwaiweb.sh(手动 or 后续自动)
    backup_date=$(date +%F)
    backup_dir="/home/ecs-user/backup/58haiwaiweb/${backup_date}"
    mkdir -p "$backup_dir"
    rsync -avz /var/www/html/58haiwaiweb/ "$backup_dir"
    # 第三步: 设置定期计划任务(每周三 02:00 Halifax 时间)
    crontab -e
    0 2 * * 3 /bin/bash /home/ecs-user/scripts/backup_full_58haiwaiweb.sh >> /home/ecs-user/scripts/backup_full.log 2>&1
    
    # 后续恢复 Discuz! 
    # 第一步:恢复数据库
    mysql -u root -p 58haiwaiweb < /home/ecs-user/backup/sql/58haiwaiweb-2025-06-05.sql
    # 第二步:恢复网站代码
    # 清空原有部署代码(⚠️ 高风险操作,请确保路径正确!)
    sudo rm -rf /var/www/html/58haiwaiweb/*
    # 复制快照内容回站点目录
    # -a:归档模式,保留文件的所有属性(权限、时间戳、软链等);
    # /home/ecs-user/backup/58haiwaiweb/2025-06-05/.:
    # 表示复制目录 内部内容(而不是目录本身);
    # 点号 . 是关键,否则会导致路径错位;
    sudo cp -a /home/ecs-user/backup/58haiwaiweb/2025-06-05/. /var/www/html/58haiwaiweb/    
    # 第三步:检修正权限
    # 生产站点目录 /var/www/html/58haiwaiweb 及其文件属主均为 www-data:www-data;
    # 站点恢复后,为确保新复制的文件权限一致,仍建议执行修正命令:
    sudo chown -R www-data:www-data /var/www/html/58haiwaiweb
    # 第四步:重启服务使配置即时生效
    # 重启 PHP-FPM 服务
    sudo systemctl restart php7.4-fpm
    # 重启 Nginx 服务
    sudo systemctl restart nginx
    
    #策略2.2: 结构一致同步至测试环境(带 --delete)
    # 第一步: 编写脚本 /home/ecs-user/scripts/sync_58haiwaiweb_to_test.sh
    #!/bin/bash
    
    dest_host="ecs-user@47.99.192.57"
    dest_dir="/home/ecs-user/ProjectDev/58haiwaiweb_simulation/"
    
    echo "$(date): 开始同步 Discuz 主站代码至测试服务器"
    
    ssh "$dest_host" "mkdir -p $dest_dir"
    
    rsync -avz --delete \
      --exclude='data/template/' \
      --exclude='data/cache/' \
      --exclude='source/plugin/xigua_hb/pics/' \
      --exclude='config/config_global.php' \
      --exclude='config/config_ucenter.php' \
      /var/www/html/58haiwaiweb/ "$dest_host:$dest_dir"
    
    echo "$(date): 同步完成"
    # 第二步:设置定期计划任务(每周日凌晨 3:30 Halifax 时间)
    # 先给脚本添加权限
    chmod +x /home/ecs-user/scripts/*.sh
    # 再设定计划
    crontab -e
    30 3 * * 0 /bin/bash /home/ecs-user/scripts/sync_58haiwaiweb_to_test.sh >> /home/ecs-user/scripts/sync_web.log 2>&1
    
    实际执行的代码
    # 为了尽量节省空间,先把照片迁移
    # 建立迁移的文件夹
    mkdir -p /home/ecs-user/backup/58haiwaiweb/source/plugin/xigua_hb/pics
    # 迁移2024年6月以及之前的照片
    # 单文件夹,不执行:rsync -avz /var/www/html/58haiwaiweb/source/plugin/xigua_hb/pics/202301 /home/ecs-user/backup/58haiwaiweb/source/plugin/xigua_hb/pics/
    # 实际执行以下命令
    rsync -avz \
    /var/www/html/58haiwaiweb/source/plugin/xigua_hb/pics/2023* \
    /var/www/html/58haiwaiweb/source/plugin/xigua_hb/pics/202401 \
    /var/www/html/58haiwaiweb/source/plugin/xigua_hb/pics/202402 \
    /var/www/html/58haiwaiweb/source/plugin/xigua_hb/pics/202403 \
    /var/www/html/58haiwaiweb/source/plugin/xigua_hb/pics/202404 \
    /var/www/html/58haiwaiweb/source/plugin/xigua_hb/pics/202405 \
    /var/www/html/58haiwaiweb/source/plugin/xigua_hb/pics/202406 \
    /home/ecs-user/backup/58haiwaiweb/source/plugin/xigua_hb/pics/
    
    # 测试站点是否受影响,正常可用的话则删除源同样的照片
    # 删除生产站点下 /pics/ 中 2024年6月及以前的目录。
    sudo rm -rf \
    /var/www/html/58haiwaiweb/source/plugin/xigua_hb/pics/2023* \
    /var/www/html/58haiwaiweb/source/plugin/xigua_hb/pics/202401 \
    /var/www/html/58haiwaiweb/source/plugin/xigua_hb/pics/202402 \
    /var/www/html/58haiwaiweb/source/plugin/xigua_hb/pics/202403 \
    /var/www/html/58haiwaiweb/source/plugin/xigua_hb/pics/202404 \
    /var/www/html/58haiwaiweb/source/plugin/xigua_hb/pics/202405 \
    /var/www/html/58haiwaiweb/source/plugin/xigua_hb/pics/202406
    
    # 剩余站点数据全备份
    # 设置快照备份的日期变量(格式如 2025-06-05)
    export snapshot_date=$(date +%F)
    # 设置快照备份的目标路径,例如:/home/ecs-user/backup/58haiwaiweb/2025-06-05
    export backup_dir="/home/ecs-user/backup/58haiwaiweb/$snapshot_date"
    # 创建快照备份目录(如果不存在则创建)
    mkdir -p "$backup_dir"
    # 将当前网站目录 /var/www/html/58haiwaiweb 的全部内容备份到指定目录
    # 不加 --delete,避免删除历史快照中已有文件(防误操作)
    rsync -az /var/www/html/58haiwaiweb/ "$backup_dir"
    # 检查对比是否备份成功(通过对比备份和源数据大小)
    du -sh "$backup_dir"
    du -sh /var/www/html/58haiwaiweb/
    # 如大小一致,则开始处理原来照片问题
    # 先查看备份过来的pics/
    ls "$backup_dir/source/plugin/xigua_hb/pics/"
    # 移动旧照片目录到快照路径,避免重复占用空间
    mv /home/ecs-user/backup/58haiwaiweb/source/plugin/xigua_hb/pics/2023* "$backup_dir/source/plugin/xigua_hb/pics/"
    mv /home/ecs-user/backup/58haiwaiweb/source/plugin/xigua_hb/pics/20240[1-6] "$backup_dir/source/plugin/xigua_hb/pics/"
    # 检查是否已经全部移过来
    ls "$backup_dir/source/plugin/xigua_hb/pics/"
    # 删除原来照片存放文件夹
    rm -rf /home/ecs-user/backup/58haiwaiweb/source
    # 检查目前服务器硬盘使用情况,判断是否正常
    df -h
    
  • 数据库备份(Linux命令方式)

    实际执行命令
    # 请通过如下命令查看数据库连接信息(如 dbhost, dbuser, dbpw, dbname):
    grep -E "dbhost|dbuser|dbpw|dbname" /var/www/html/58haiwaiweb/config/config_global.php
    # 查看数据库 haiwaidata 的默认字符集
    mysql -u hwdbadmin -p -e "SELECT default_character_set_name FROM information_schema.SCHEMATA WHERE schema_name = 'haiwaidata';"
    # 查看 haiwaidata 数据库中所有表的字符集(和排序规则)
    mysql -u hwdbadmin -p -e "SELECT TABLE_NAME, TABLE_COLLATION FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'haiwaidata';"
    # 数据库编码情况确认结果:
    # 数据库 haiwaidata 的默认字符集是:utf8mb4
    # 所有表的字符集(Collation)是:utf8mb4_unicode_ci
    
    # 执行数据备份命令
    # -p:递归创建父目录,
    mkdir -p /home/ecs-user/backup/sql
    # --default-character-set=utf8mb4:确保备份文件以 UTF-8 编码格式保存,兼容 Discuz! 中文内容
    mysqldump -u hwdbadmin -p --default-character-set=utf8mb4 haiwaidata > /home/ecs-user/backup/sql/haiwaidata-$(date +%F).sql
    
    对应数据库的恢复办法
    # 登录 MariaDB
    mysql -u hwdbadmin -p
    # 进入数据库 haiwaidata 并清空旧数据(谨慎):
    DROP DATABASE haiwaidata;
    CREATE DATABASE haiwaidata DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
    EXIT;
    # 如果你不想删除原库,仅在原库中恢复数据(覆盖表结构+内容),可以跳过这一步,直接执行导入。
    # 使用 .sql 文件恢复备份数据:
    mysql -u hwdbadmin -p --default-character-set=utf8mb4 haiwaidata < /home/ecs-user/backup/sql/haiwaidata-2025-06-05.sql
    

2.1.2 上传插件文件

  • 第一步:使用 MobaXterm 的 SFTP 面板,将本地发布版插件目录 D:\3 Work\58halifax\ProjectDev\RVersion\xigua_simtelecom 拖曳上传至生产服务器 /home/ecs-user/ProjectDev/Rversion/xigua_simtelecom
  • 第二步:使用 rsync 同步部署目录
每次拖曳完成后,同步部署命令
# --delete:删除目标目录中源目录已删除的文件,保持一致性;
sudo rsync -avz --delete /home/ecs-user/ProjectDev/Rversion/xigua_simtelecom/ /var/www/html/58haiwaiweb/source/plugin/xigua_simtelecom/
  • 第三步:检查插件部署目录权限
检查是否是属主为 www-data:www-data
ls -ld /var/www/html/58haiwaiweb/source/plugin/xigua_simtelecom
ls -l /var/www/html/58haiwaiweb/source/plugin/xigua_simtelecom | head -n 10
  • 第四步: 修正权限(注意:每次更新文件都需要修改权限)
sudo chown -R www-data:www-data /var/www/html/58haiwaiweb/source/plugin/xigua_simtelecom

2.1.3 后台添加插件

  • 第一步:开启“设计新插件”功能

    调整配置文件
    sudo nano /var/www/html/58haiwaiweb/config/config_global.php
    
    # 向文件 /var/www/html/58haiwaiweb/config/config_global.php 末尾 ?> 之前添加一行:
    $_config['plugindeveloper'] = 1;
    
  • 第二步:刷新后台,设计新插件

    • 设计新插件

    • 配置语言包

    复制语言文件至指定目录
    sudo cp /var/www/html/58haiwaiweb/source/plugin/xigua_simtelecom/xigua_simtelecom.lang.php /var/www/html/58haiwaiweb/data/plugindata/
    

    • 配置变量



2.1.4 创建数据表

使用Linux命令创建插件数据表
# 登录 MySQL(使用 hwdbadmin)
mysql -u hwdbadmin -p
# 切换数据库
USE haiwaidata;
# 创建插件数据表
CREATE TABLE IF NOT EXISTS `pre_xigua_simtelecom_log` (
  `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `orderid` VARCHAR(50) NOT NULL DEFAULT '',
  `username` VARCHAR(50) NOT NULL DEFAULT '',
  `phone` VARCHAR(20) NOT NULL DEFAULT '',
  `package` VARCHAR(50) DEFAULT NULL,
  `address` TEXT,
  `email` VARCHAR(100) DEFAULT '',
  `dateline` INT(10) UNSIGNED NOT NULL DEFAULT 0,
  `uid` INT(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT '用户ID',
  `username_dz` VARCHAR(50) NOT NULL DEFAULT '' COMMENT 'Discuz用户名',
  `userip` VARCHAR(45) NOT NULL DEFAULT '' COMMENT '用户IP地址',
  `operator` VARCHAR(50) DEFAULT '' COMMENT '58agent 运营商',
  `status` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '订单状态(0=待处理,1=处理中,2=已完成,3=已取消)',
  `remark` VARCHAR(300) DEFAULT '' COMMENT '处理备注,最多100汉字',
  PRIMARY KEY (`id`),
  UNIQUE KEY `orderid` (`orderid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
# 验证表是否创建成功
SHOW TABLES LIKE 'pre_xigua_simtelecom_log';
DESCRIBE pre_xigua_simtelecom_log;

2.1.5 创建链接和测试

  • 在西瓜分类中增加一个链接入口作为测试

    测试链接
    同时通过小程序到58哈法同城通过跳转可以测试小程序下的表现

  • 调整模板,使得风格与主程序一致(主要是页头和页脚的配色),更新文件。

  • 报错1

报错1修复
# 表示 PHP 中调用了 mb_strlen() 函数,但当前系统 未启用 mbstring 扩展,这是一个常见的多字节字符串处理库。
# 安装 PHP 的 mbstring 扩展(生产环境为 Debian + PHP 7.4)
sudo apt update
sudo apt install php7.4-mbstring
# 安装后重启 PHP 和 Nginx 服务
sudo systemctl restart php7.4-fpm
sudo systemctl restart nginx
  • 报错2
报错2修复
# 未找到数据表。
# 生产环境站点配置文件中的数据库表前缀是:$_config['db']['1']['tablepre'] = 'hw';测试环境是'pre_'
# 更改数据表名称
mysql -u hwdbadmin -p
USE haiwaidata;
RENAME TABLE pre_xigua_simtelecom_log TO hwxigua_simtelecom_log;
# 验证是否更改成功
SHOW TABLES LIKE '%simtelecom%';
# 输出应为 hwxigua_simtelecom_log

2.1.6 配置后台邮箱发信功能(因为订单需要发送到商户客服邮箱)

  • 先到自己邮箱获取到SMTP服务器,端口和账号密码
  • 然后到后台进行配置,如下:
  • 测试是否成功:

2.1.6 关闭设计插件功能

  • 关闭“设计新插件”功能

    调整配置文件
    sudo nano /var/www/html/58haiwaiweb/config/config_global.php
    
    # 向文件 /var/www/html/58haiwaiweb/config/config_global.php 末尾 ?> 删除以下一行:
    $_config['plugindeveloper'] = 1;
    

2.2. xigua_partnercenter v1.0 (25年6月4日)

2.2.1 上传插件代码

  • 使用 MobaXterm 或命令行上传至生产环境临时目录: /home/ecs-user/ProjectDev/Rversion/xigua_partnercenter/

  • 部署到站点目录

# SSH 登录生产服务器后,执行:
sudo rsync -avz --delete /home/ecs-user/ProjectDev/Rversion/xigua_partnercenter/ /var/www/html/58haiwaiweb/source/plugin/xigua_partnercenter/
sudo chown -R www-data:www-data /var/www/html/58haiwaiweb/source/plugin/xigua_partnercenter

2.2.2 后台安装插件

  • 启用插件开发模式(如未启)
# 编辑配置文件:
sudo nano /var/www/html/58haiwaiweb/config/config_global.php
# 添加或确认存在:
$_config['plugindeveloper'] = 1;
  • 后台安装插件
复制语言文件至指定目录
sudo cp /var/www/html/58haiwaiweb/source/plugin/xigua_partnercenter/xigua_partnercenter.lang.php /var/www/html/58haiwaiweb/data/plugindata/



2.2.3 创建插件数据表

# 登录数据库:
mysql -u hwdbadmin -p
# 选择数据库:
USE haiwaidata;
# 创建表
CREATE TABLE IF NOT EXISTS `hwxigua_partnercenter_account` (
  `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `uid` INT(10) UNSIGNED NOT NULL COMMENT '商户UID',
  `biz_type` VARCHAR(30) NOT NULL COMMENT '业务类型标识',
  `permission_level` TINYINT DEFAULT 1 COMMENT '权限等级,默认1',
  `status` TINYINT DEFAULT 1 COMMENT '状态:1启用,0禁用',
  `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `merchant_type` TINYINT DEFAULT 1 COMMENT '商户类型:1=个人,2=企业',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uid_biz` (`uid`, `biz_type`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
# 验证表是否创建成功
SHOW TABLES LIKE 'hwxigua_partnercenter_account';
DESCRIBE hwxigua_partnercenter_account;

2.2.4 验证与测试

  • 添加业务和添加管理员(站长)授权

    # 登录数据库:
    mysql -u hwdbadmin -p
    # 选择数据库:
    USE haiwaidata;
    # 提交管理员UID=1的授权
    INSERT INTO hwxigua_partnercenter_account
    (uid, biz_type, permission_level, status, created_at, merchant_type)
    VALUES
    (1, 'simtelecom', 1, 1, NOW(), 1)
    ON DUPLICATE KEY UPDATE status=1;
    
  • 添加商家(用户)授权,先获取到用户的UID

授权商家(用户)通过以下链接测试:
https://58-halifax.com/plugin.php?id=xigua_partnercenter&biz=simtelecom

  • 创建站内链接(支持小程序测试)

  • 调整移动端模板

    • 套用xigua_simtelecom插件的header
    • 返回图标在iPhone手机小程序上不显示,改用‹ 字符
  • 调整提交更新成功之后的显示页面
  • 增加未更新内容提交显示的模板

2.2.5 关闭插件设计功能

# 编辑配置文件:
sudo nano /var/www/html/58haiwaiweb/config/config_global.php
# 注释使得下面配置时效:
$_config['plugindeveloper'] = 1;