适用于已经对接 www.youhuip.com、并且已有存量客户与开通产品的 V10 老代理站。按顺序执行即可完成「卸旧插件 → 装新插件 → 补绑老产品」。

先确认适用范围。本流程只给老代理站用。第一次接 web2 的新代理,只装 yh_proxy_agent_v1.1.3.tar.gz,不要执行迁移包里的补绑脚本。

全程在服务器上以命令行执行。下文的 /www/wwwroot/你的站点 换成实际的站点根目录(该目录下要有 config.php 和 app/)。

0. 迁移前备份(必做)

下面两条备份必做,回滚时全靠它们。

cd /www/wwwroot/你的站点
# 数据库(库名、账号换成 config/database.php 里的值)
mysqldump -uroot -p 库名 > /root/agent_before_migrate_$(date +%F).sql
# 插件目录
tar czf /root/agent_plugins_bak_$(date +%F).tar.gz \
    public/plugins/reserver public/plugins/server public/plugins/addon
不要在 V10 后台点旧插件的「卸载」。部分版本会连带删除插件自己的业务表。本流程只删插件目录、停用模块登记,host_link、host_package 等业务表原样保留。

1. 下载并解压新插件

cd /tmp
wget -O yh_agent.tar.gz https://down.youhuip.com/yh_proxy_agent_v1.1.3.tar.gz
mkdir -p /tmp/yh_agent
tar xzf yh_agent.tar.gz -C /tmp/yh_agent
ls /tmp/yh_agent/yh_proxy_agent_v1.1.3/install.sh    # 能看到就对了

解压在 /tmp 即可,不要解压进网站目录,否则 install.php 和插件源码会暴露在公网路径下。安装脚本只把包里的 files/ 复制进站点。

若下载返回 404,改用 https://down.youhuip.com/youhuapi/yh_proxy_agent_v1.1.3.tar.gz;仍然 404 说明运营还没上传,联系客服获取。

装完别把包删掉。/tmp 重启会被清空,建议拷一份到 /root 长期保留,后面打补丁要用:

cp -r /tmp/yh_agent/yh_proxy_agent_v1.1.3 /root/

2. 下载迁移工具包

cd /tmp
wget -O yh_agent_migrate_v1.tar.gz \
  https://down.youhuip.com/youhuapi/yh_agent_migrate_v1.tar.gz
mkdir -p /tmp/yh_migrate
tar xzf yh_agent_migrate_v1.tar.gz -C /tmp/yh_migrate --strip-components=1
ls /tmp/yh_migrate/tools/relink.sh

解压时如果漏掉 --strip-components=1,文件会落在 /tmp/yh_migrate/yh_agent_migrate_v1/tools/,把后面命令里的 /tmp/yh_migrate/tools/ 换成这个路径即可。

3. 卸载旧插件

迁移包里已经带了 tools/uninstall_old.php,直接用包内的即可,不必单独下载。如果包内缺失,可单独取一份:

wget -O /tmp/yh_migrate/tools/uninstall_old.php https://web2.youhuip.com/uninstall_old.php

3.1 预演:只打印将要改动的内容

php /tmp/yh_migrate/tools/uninstall_old.php --root=/www/wwwroot/你的站点

预演输出示例:

== 插件目录 ==
  public/plugins/reserver/yh_proxy_ip
  public/plugins/reserver/yh_proxy_domestic
  public/plugins/reserver/yh_proxy_oversea
  public/plugins/server/yh_proxy_ip
  ...
== 服务模块(idcsmart_server)==
  #12  yh_proxy_ip  优狐IP短效  status=1
== 插件登记(idcsmart_plugin)==
  #3   yh_proxy_ip  module=yh_proxy_ip  status=1
DRY-RUN:以上会被处理。确认后加 --apply 执行。

核对三块内容:插件目录、服务模块、插件登记。目录显示「没找到」通常说明之前手工删过,可以继续。

3.2 确认无误后执行

php /tmp/yh_migrate/tools/uninstall_old.php --root=/www/wwwroot/你的站点 --apply

脚本会完成:

  • 把三个插件的目录备份到 /root/yh_plugin_bak_<时间>.tar.gz(路径会打印出来);
  • 删除 public/plugins/{reserver,server}/yh_proxy_* 目录;
  • idcsmart_server 里对应模块 status=0(停用,保留记录);
  • 删除 idcsmart_plugin 里相关插件登记,后台插件列表不再显示;
  • 清理 runtime/temp、runtime/cache;
  • 不动客户、订单、host_link 等业务表,可随时回滚。

4. 安装新插件

服务器上有多个站点时,必须用 --root= 指定站点根目录。

bash /tmp/yh_agent/yh_proxy_agent_v1.1.3/install.sh \
  --root=/www/wwwroot/你的站点 \
  --base=https://web2.youhuip.com \
  --key=ak_你的Key

参数说明:

  • --root=:站点根目录,多站点必填;
  • --base=:新站地址,一般 https://web2.youhuip.com;
  • --key=:新站 API Key,ak_ 开头;
  • --php=:指定 PHP 路径,不填时自动取站点实际运行的版本(需 7.2+);
  • --skip-patch:只复制插件文件,不修改 V10 核心。

脚本会一次完成:复制三套 reserver 插件、三个 server 模块、后台 addon;生成三个 config/newsite.php;给 V10 核心打补丁(自动留 .bak.时间戳);补齐 idcsmart_server 记录;安装并启用后台插件「代理IP」;清缓存。

以 root 执行时会自动 chown。如果没生效,手工补一次:chown -R www:www /www/wwwroot/你的站点/runtime /www/wwwroot/你的站点/public/plugins

装完在 V10 后台确认:插件「代理IP」已启用;三类商品模块分别为 优狐IP短效 / 优狐IP国内长效 / 优狐IP海外;会员中心三个页面类型都选 「上游模块」。

5. 预演补绑(只读)

bash /tmp/yh_migrate/tools/relink.sh --root=/www/wwwroot/你的站点

输出示例:

RELINK #183  ser287463527613  (yh_proxy_ip)  0 -> 40000901
MISS   #244  ser19280747013   (yh_proxy_oversea)
== 重绑 42 台,已一致 5 台,未匹配 3 台(预演,未写库;加 --apply 执行)
  • RELINK:将要把本地产品绑到 web2 的实例;
  • MISS:本地有、web2 没匹配上;
  • 已一致:之前已经绑对,重复执行不会重复写。
MISS 为 0 或个位数 → 直接进入第 6 步。MISS 很多 → 通常是账号名在同步时被改过,先用下面的精确映射再跑一遍。

Key 和站点地址脚本会自动从 public/plugins/reserver/*/config/newsite.php 读取,不用手填;也可以用 --key= / --base= 覆盖。

MISS 较多时:用精确映射

web2 已把「老站 host id → 新站 pack id」导出在固定地址 https://web2.youhuip.com/yh_pack_map.json。不传 --map 时脚本会尝试自动取;也可以手动指定:

wget -O /tmp/yh_pack_map.json https://web2.youhuip.com/yh_pack_map.json
bash /tmp/yh_migrate/tools/relink.sh \
  --root=/www/wwwroot/你的站点 \
  --map=/tmp/yh_pack_map.json

匹配优先级:① map 里是数字 → 当 pack id 精确绑定;② 本地 upstream_host_id 恰好等于 web2 pack id → 直接认;③ map 里是字符串 → 按账号名匹配;④ 都没有 → 用本地产品标识当账号名。

6. 确认无误后写入

bash /tmp/yh_migrate/tools/relink.sh --root=/www/wwwroot/你的站点 --apply
脚本是幂等的:已绑对的会计入「已一致」,重复执行不会重复写库。误操作后重跑一次即可。

若某个本地产品一直 MISS,先到老站(www)后台按主机名搜这个产品标识:搜不到说明它本来就不是通过老站开通的;老站和 web2 都搜不到,通常是早期接了别的上游,只能手工绑定。

手工绑定单个产品

在代理站库执行(表前缀换成实际的,pack_id 换成 web2 实际套餐 ID):

INSERT INTO idcsmart_upstream_host (host_id, upstream_host_id) VALUES (本地host_id, pack_id)
ON DUPLICATE KEY UPDATE upstream_host_id = VALUES(upstream_host_id);

7. 迁移后验证(必做)

  • 会员中心 → 已购IP:老客户能看到原账号、IP、剩余量、到期时间;
  • 打开一台短效的「API 获取」,能正常取到 IP;
  • 找一台包时 / 不限量点「续费」,能弹出周期和金额;
  • 后台「代理产品购买列表」四个 Tab 都有数据;
  • 用测试账号新下一单,能正常开通。

任何一项不通过,先看下面的常见问题;仍无法定位时保留 /root 下的两份备份和脚本输出,方便回滚与排查。

8. V10 升级后维护

V10 升级会覆盖 app/common.php 和 app/common/logic/ResModuleLogic.php,升级后需要重打补丁。不要删安装包,保留在 /root/yh_agent_v1.1.3 供随时调用:

php /root/yh_agent_v1.1.3/install.php --root=/www/wwwroot/你的站点 --patch-only

--patch-only 只重打核心补丁,不覆盖插件文件、不动数据库,参数自动从 config/newsite.php 读取。升级后如果出现「请选择节点」报错,基本就是 ResModuleLogic.php 补丁被覆盖了,跑一次上面的命令即可恢复。

9. 回滚

cd /www/wwwroot/你的站点
rm -rf public/plugins/reserver public/plugins/server
tar xzf /root/agent_plugins_bak_日期.tar.gz -C .
mysql -uroot -p 库名 < /root/agent_before_migrate_日期.sql
rm -rf runtime/temp/* runtime/cache/*

老插件指回 www 即恢复,前提是 www 站点还没关闭。若只是补绑写错,不必整站回滚,直接用 idcsmart_upstream_host 改回对应 pack id 即可。

工具说明

  • tools/uninstall_old.php(代理站):卸旧插件——备份目录、删目录、停用模块、删除插件登记;默认预演,--apply 执行。
  • tools/relink.sh(代理站):补绑一键入口,自动读 Key / 地址,默认预演,--apply 写入。
  • tools/relink.php(代理站):实际逻辑,按映射 / 账号名把 upstream_host_id 重绑到 web2 实例。
  • tools/export_packmap.php(web2):导出 mig_map(老站 host id → 新站 pack id),生成 yh_pack_map.json。
  • tools/export_map.php(老站 www):兜底,导出「代理站 host_id → 老站账号名」。

常见问题

MISS 很多怎么办?

账号名在同步时被改过。用第 5 步的 yh_pack_map.json 精确匹配再跑一次。

报「读不到 API Key」

新插件没装好,或 config/newsite.php 里 key 为空。重跑 install.sh,或用 --key= 显式指定。

报「找不到 php」

手工指定 PHP 路径,例如:

bash /tmp/yh_migrate/tools/relink.sh \
  --root=/www/wwwroot/你的站点 \
  --php=/www/server/php/74/bin/php

脚本默认会依次尝试 74 / 73 / 80~83。

输出里有 mongodb.so 警告

服务器 PHP 扩展缺依赖,与迁移无关,脚本照常执行完毕。要消掉警告,在对应 php.ini 注释掉该扩展,或 ldconfig / 重装扩展。

重复执行会不会写坏?

不会。补绑脚本幂等,已绑对的记为「已一致」;卸载脚本在目录已不存在时会提示「没找到」,可安全重跑。

下载工具包 404

说明运营还没把包传到 down.youhuip.com/youhuapi/,联系客服获取。

安装后会员中心白屏 / 500

先清 runtime/temp 编译缓存再强刷;仍白屏则检查 config/app.php 里 404 模板是否缺失,或换了主题后模板目录没同步(安装包已带 pc/default 与 mobile/default)。

HTML; $content = trim($content);