适用于已经对接 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)。