自持镜像

bt.kajiejie.com  ·  面板安装 / 升级脚本、历史升级包与安全自检工具的本地分发源(与 as.kajiejie.com 内容互通)

当前版本
13.0.0
已归档升级包
1 个
已镜像插件
46 个
最后同步
2026-09-21 21:18

01安装(全新服务器)

在干净的 Linux 系统上执行:

curl -sSL https://bt.kajiejie.com/install/install.sh | bash

装完后脚本会自动:建安全基线 → 跑一次自检并打印结果 → 安装每日定时巡检。 留意最后几行:出现 首次安全自检通过。 即为正常; 若出现红色 发现问题,请立即人工检查,不要继续使用。

02升级(已装面板的机器)

前置条件:该机器已经装过面板(存在 /www/server/panel/BTPanel)。

curl -sSL https://bt.kajiejie.com/install/update6.sh | bash

不带参数时升级到镜像当前版本(13.0.0)。 也可以指定版本(版本号见下方清单):

curl -sSL https://bt.kajiejie.com/install/update6.sh | bash -s 13.0.0

升级前先做预检(推荐)

只读检查,不会改动任何东西,用来确认这台机器到底能不能升级:

curl -sSL https://bt.kajiejie.com/install/update6.sh | bash -s -- --check

它会检查:是否 root(非 root 直接指出,因为要写 /www/server/panel 和 /etc/init.d/bt)、关键目录可写性、 架构(ARM 机器会明确指出不支持,因为脚本在 ARM 上会请求 LinuxPanel-7.7.0.zip 而本镜像只托管 x86_64 版本)、系统类型与 64 位、 面板目录、pyenv、必需命令、磁盘空间、镜像连通性、目标版本与升级包是否可取、.pl 校验信息、 以及 bt.cn 辅助依赖。全部通过才建议真正升级。

权限:升级脚本现在会先检查 root,非 root 直接给出提示并退出 (例如 curl -sSL https://bt.kajiejie.com/install/update6.sh | sudo bash), 不再等到中途才失败。注意 /www/server/panel/pyenv 是 drw-------, 非 root 读不到,预检会明确说「需要 root 才能确认」而不是误报「缺 pyenv」。

支持的系统

与官方的 install.sh 一致 —— 64 位,且命中下面的「拒绝名单」才会被拦:

状态系统
✅ 支持Debian 11 / 12 / 13、Ubuntu 22 / 24、CentOS / Rocky / AlmaLinux 9、CentOS 7、OpenCloudOS 9、TencentOS Server 4、AlibabaCloud Linux 3、Alinux 4、Anolis 8.8、HCE 2
❌ 拒绝32 位系统、CentOS / RedHat 6、Ubuntu < 16、Ubuntu 非 LTS(19 / 21 / 23 / 25)、Debian 7 / 8 / 9
⚠️ 未验证其他系统(脚本不拦,但未测试)

注:升级脚本 update6.sh 本身对系统几乎没有限制,只有两处前置条件 —— /www/server/panel/BTPanel 与 pyenv/bin/python3 必须存在。 上面的「支持/拒绝」来自安装脚本 install.sh 的判定逻辑,预检里保持一致。

注意:升级是把面板目录整体替换为镜像里的 13.0.0 版本 (unzip -o ... -d /www/server/)。所以若该机器当前跑的是官方宝塔, 升级后会变成镜像所带的版本。
(用户数据不受影响:包内不含 panel/data/default.db、 port.pl、admin_path.pl、userInfo.json,站点/数据库注册表不会被覆盖。)
另外:升级本身会改动面板文件,所以升级后自检可能提示「文件已变更」—— 这属预期。 确认本次升级正常后,请重建基线:
bash /root/security-check/check_btpanel.sh --init-baseline

「官方宝塔 → 本脚本升级」这条路已补齐

官方面板 UI 升级时会先跑 script/update_prep_script.sh, 它会补装新版需要的 Python 包(asn1crypto/cbor2/numpy/openai/pydantic) 并执行各版本的一次性迁移。官方命令行升级脚本不跑它,而官方面板的 pyenv 里正好没有这几个包 (官方 pip-3.7.16.txt 未收录),所以本镜像在 update6.sh 里补上了这一步:

调用方式与官方一致:bash script/update_prep_script.sh <版本> <是否LTS> <prepare|after>, 以输出中出现 BT-Panel Update Ready 判定成功。失败只提示、不中断升级。 不装这个脚本也能升级(面板核心不依赖这几个包,缺的只是面板的「AI 功能」)。

03插件安装(专业版 / 企业版 / 收费插件)

镜像里已备好 46 个插件包 (专业版应用 19 个全部 + 企业版应用 25 个),以及它们安装时引用的依赖文件。 在目标服务器上执行:

# 先看清单
curl -sSL https://bt.kajiejie.com/tools/install_plugin.sh | bash -s -- --list

# 安装指定插件(可多个)
curl -sSL https://bt.kajiejie.com/tools/install_plugin.sh | bash -s -- btwaf msg_push

# 安装全部「专业版应用」/「企业版应用」
curl -sSL https://bt.kajiejie.com/tools/install_plugin.sh | bash -s -- --pro
curl -sSL https://bt.kajiejie.com/tools/install_plugin.sh | bash -s -- --ent
两点说明:
① 脚本安装前会备份旧插件目录,install.sh 失败会自动回滚(备份在 /root/plugin-backup/)。
② 脚本会清除旧版遗留的 *.so。新版插件包只发 .py 源码,而 Python 优先加载 .so 而不是 .py —— 不清掉就会出现「页面是新版、后端还是旧版」, 表现为某些功能一点就报错。

厂商 CDN 上确实没有包、因此未能镜像的:enterprise_backup、tamper_drive(企业版 2 个)。

面板的「云端」也已指向本镜像

上面的安装 / 升级脚本会自动打补丁,把面板下面这些功能改从本镜像取,装完自动重启面板生效:

面板功能涉及文件
软件商店的插件列表class/PluginLoader.py
插件包的下载class/panelPlugin.py
UI 里的版本检测与升级class/system.py、script/upgrade_panel_optimized.py

手动单独执行 / 检查:

curl -sSL https://bt.kajiejie.com/tools/bt_selfhost_patch.sh | bash
curl -sSL https://bt.kajiejie.com/tools/bt_selfhost_patch.sh | bash -s -- --check
仍然指向厂商的(自持镜像没有这些接口):
public.GetConfigValue('home') 有 70+ 调用点,涉及付费插件授权校验、云查木马、 WAF 恶意 IP 库、微信登录与消息推送、遥测 —— 这些是会变的动态服务,镜像不了。 另外 panelPlugin.py 里 /api/Pluginother/get_file (一键部署类插件取子文件)也保持指向厂商,以免反而弄坏它。
实测:付费插件装上后功能直接可用,没有"未授权"拦截。

04安全自检工具

检查面板是否被植入已知后门(bt.sb / bash.moe 团伙手法): requests 库 URL 劫持、pyenv 恶意域名、后门型 URL 重写、 安装脚本指向非官方源、pip 源被换、关键文件漂移。

已被上面的安装/升级脚本自动装好

每日 04:17 自动巡检,日志 /var/log/btpanel-security-check.log(干净时无内容)。

手动安装 / 复查

mkdir -p /root/security-check && cd /root/security-check
curl -sSLO https://bt.kajiejie.com/tools/check_btpanel.sh
curl -sSLO https://bt.kajiejie.com/tools/install-notes.txt
chmod 700 check_btpanel.sh

bash check_btpanel.sh                  # 完整自检
bash check_btpanel.sh --init-baseline  # 建/重建基线
bash check_btpanel.sh --quiet          # 干净时零输出(cron 用)

05升级包清单 (1 个)

版本大小打包时间下载
13.0.0 37.25 MB 2026-09-21 21:07 .zip · .pl

升级包与同名 .pl(校验信息)必须成对存在;.pl 里的 hash 等于对应 .zip 的 sha256。

06其他文件

路径说明大小修改时间
/install/install.sh 全新安装脚本(含自动安全自检) 71.8 KB 2026-09-27 21:13
/install/update6.sh 面板升级脚本(含升级后自检) 35.5 KB 2026-09-27 21:13
/install/public.sh 节点选择脚本(官方 bt.cn 版,md5 与脚本内钉死值一致) 5.8 KB 2026-09-27 21:13
/install/src/panel6.zip 面板程序包(全新安装用) 37.33 MB 2026-09-21 21:18
/install/update/update_prep_script.sh 升级前预处理脚本 11.3 KB 2026-09-22 11:05
/panel/get_plugin_list 插件列表 JSON(软件商店用;class/PluginLoader.py 读取) 602.0 KB 2026-09-21 23:38
/install/plugin-pkg/index.json 插件包索引(专业版 / 企业版 / 收费插件清单与版本) 8.3 KB 2026-09-27 21:14
/tools/install_plugin.sh 插件安装脚本(从本镜像安装插件,见第三节) 7.7 KB 2026-09-27 21:13
/tools/bt_selfhost_patch.sh 自持补丁脚本(把面板云端指向本镜像,安装/升级时自动执行) 19.3 KB 2026-09-27 21:13
/tools/check_btpanel.sh 安全自检脚本 14.4 KB 2026-09-22 12:26
/tools/install-notes.txt 自检工具说明与已知坑(建议先读) 4.6 KB 2026-09-27 21:13
/tools/move-notes.txt 搬家 / 换域名操作清单(含动过站点后的必做自检) 3.6 KB 2026-09-27 21:14

接口桩(面板内部调用,一般无需关心)

路径返回
/api/SetupCountok
/api/isCNTrue
/api/panel/get_version13.0.0
/api/panel/get_panel_version_v3版本 JSON(面板更新检测用)
/api/panel/get_stable_panel_version_v3稳定版查询(本镜像未提供稳定版)
/panel/get_plugin_list软件商店插件列表(364 个插件,class/PluginLoader.py 读取)
/down/download_plugin插件包下发(POST name&version,带 File-size / Content-md5 头)

07必须知道的坑

1. 版本号必须三处一致 升级镜像时

/api/panel/get_version 的返回值、api/panel/get_panel_version_v3 里的版本、 以及 /install/update/ 下实际存在的 LinuxPanel-<版本>.zip 必须一致。不一致会导致面板更新失败(拼出 404 路径)。 当前:13.0.0。

2. WAF 会封掉「隧道源地址」,导致公网全断 致命

若前面挂了反向代理 / 内网穿透,本机 nginx 看到的所有公网请求源 IP 都是同一个。 面板的 CC 攻击防护会把它当攻击者加入封锁列表 —— 封掉它等于封掉全部公网入站。

症状:https:// 超时,但 ping 中继正常、内网 IP 访问正常。排查:

ipset list bt_ip_filter          # 看有没有那个源 IP
tail /www/server/panel/logs/ipfilter.log

修复必须加白名单(只删封锁列表会被 WAF 自动重新封回), 详见 install-notes.txt 末尾那一节。

3. 别用 wget -O <已存在的文件>

下载失败时 wget 会先把目标文件截断成 0 字节再报错。 脚本里已改成「先下到临时文件 → 校验 → 通过才替换」,自己写脚本时注意同样的坑。

4. 装完务必跑一次自检

这套面板来自第三方重打包(repack),不是官方 bt.cn 版本。 自检只能发现已知后门特征与关键文件改动,不能替代对面板源码的审计。 装完立刻自检、并保留每日巡检,是当前最实际的兜底。

5. 搬家 / 重建站点后必须查一次内部路由 2026-09-27 踩过

本页的 /down/download_plugin、/api/panel/get_panel_version_v3 等接口 在磁盘上没有实体文件,靠 nginx 的 extension/bt.kajiejie.com/mirror_api.conf 内部路由支撑。在宝塔里 删站重建、搬根目录、重签证书都会把 extension 目录重建,导致该文件丢失 —— 表现是客户端面板装插件报 JSONDecodeError(接口变成了 404 的 HTML 页)。

每次动完站点配置,在服务器上跑一遍:

curl -sS -o /dev/null -w '%{http_code}\n' -X POST https://bt.kajiejie.com/down/download_plugin -d 'name=monitor&version=4&os=Linux'   # 期望 200
curl -sS https://bt.kajiejie.com/api/panel/get_panel_version_v3    # 期望一段 JSON
ls /www/server/panel/vhost/nginx/extension/bt.kajiejie.com/        # 期望看到 mirror_api.conf

丢了就从备份还原:/root/as-mirror-config-backup/mirror_api.conf.bt.kajiejie.com 拷回 extension/bt.kajiejie.com/,nginx -t 通过后 reload。搬家/换域名的完整清单见 move-notes.txt。

08镜像维护

本镜像是与 install.btweb.co 同步的快照,不会自动更新。 站点根目录:/vol2/1000/ydp/bt.kajiejie.com(由 __DIR__ 动态获取,搬家后本页自动正确)。新增版本时:

# 1) 放好新的升级包与校验信息
cp LinuxPanel-<新版本>.zip /vol2/1000/ydp/bt.kajiejie.com/install/update/
#    并生成同名 .pl,内容: {"hash": "<zip 的 sha256>", "update_time": "<时间戳>"}

# 2) 更新对外公布的版本号(三处一致)
echo -n <新版本> > /vol2/1000/ydp/bt.kajiejie.com/api/panel/get_version
#    api/panel/get_panel_version_v3 / get_stable_panel_version_v3 的返回体在 nginx 配置里:
#    /www/server/panel/vhost/nginx/extension/bt.kajiejie.com/mirror_api.conf
#    (改完记得同步本地备份: /root/as-mirror-config-backup/mirror_api.conf.bt.kajiejie.com)

# 3) 本页无需改动 —— 版本、大小、时间都是实时读取的

搬家 / 换服务器 / 换域名:照 move-notes.txt 清单走(打包自包含目录 → 新机建站 → 还原 mirror_api.conf → 三接口自检; 换域名还要批量替换 install/*.sh 与 install/plugin/*/install.sh 里的旧域名,已分发出去的客户端建议新旧域名并列服务、不可 301)。