SiteTag插件可为宝塔子站点添加自定义标签实现筛选,需手动安装并重启面板;标签用短横线/下划线、逗号分隔;批量操作易超时,应改用命令行脚本;标签仅前端过滤,关键流程须保留shell脚本备份。

宝塔面板里子站点太多,手动筛选根本找不到要操作的那个
标签化管理不是噱头,是解决“找不着站”的刚需。宝塔原生不支持标签,但 SiteTag 插件(非官方,需手动安装)能给每个站点加自定义标签,比如 type:shop、env:staging、client:abc-co。装完后站点列表多一列「标签」,点击就能过滤。
常见错误现象:SiteTag 安装后标签不显示——多半是没重启宝塔面板服务,执行 bt restart;或者用了旧版宝塔(7.9 以下),插件不兼容。
- 标签值别带空格或特殊符号,用短横线或下划线,如
project-v2,避免project v2 - 一个站点可打多个标签,用英文逗号分隔:
php8.1,ssl-enabled,backup-daily - 标签本身不改变任何配置,只是前端过滤依据,不影响 Nginx/Apache 实际运行
批量启停/备份/SSL 申请卡死或只生效前 10 个
宝塔自带的「批量操作」按钮本质是串行调用 API,几百个站点一起点,会触发面板后台请求队列超时(默认 30 秒),导致中途断掉,只剩前面几个完成。
真正能跑满的方案是绕过 Web UI,走命令行 + 脚本:
- 用
bt site list导出所有站点名到文件,再用while read s; do bt site stop $s; done 控制节奏 - 加
sleep 0.5防止并发压垮面板:每操作一个站点等半秒,几百个也就多花几分钟,但成功率接近 100% - SSL 批量申请别用「一键续签」,改用
acme.sh命令直连 Let's Encrypt,配合--force和--dnssleep更稳
按客户/项目分类后,权限和备份策略没法跟着走
标签只是视图层标记,宝塔的用户权限体系和备份计划仍基于单个站点绑定。想让「client:xyz」下的所有站自动启用某套备份规则,得靠脚本联动。
实操建议:把备份逻辑下沉到 shell 脚本里,用标签当条件分支:
if bt site info $site_name | grep -q 'client:xyz'; then /www/server/panel/plugin/snapshot/snapshot_main.py backup $site_name --keep 7 fi
性能影响小,但要注意 bt site info 返回的是 JSON 片段,解析时别依赖格式缩进;更可靠的方式是读取站点配置文件:/www/server/panel/vhost/nginx/$site_name.conf 里搜注释行 # TAG: client:xyz。
- 别在面板「计划任务」里直接写复杂判断,cron 不认宝塔命令,要用绝对路径调用
/www/server/panel/pyenv/bin/python - 客户交接时,标签+脚本比纯面板操作更容易交接,别人只要看懂几行
grep就能复现逻辑
插件装多了,升级宝塔后标签消失或批量操作报错
第三方插件(尤其是 SiteTag、BatchSite 这类)不进宝塔官方仓库,每次面板大版本更新(比如 8.x → 9.x)大概率失效。这不是 bug,是宝塔内部 API 结构变了。
应对不是重装插件,而是提前留退路:
- 升级前导出标签映射表:
sqlite3 /www/server/panel/data/default.db "select name,tag from sites;" > tags_backup.csv - 插件失效后,用这个 CSV +
bt site list输出,写个 Python 脚本生成带注释的 Nginx 配置,把标签写进server块注释里,至少保留语义 - 别把关键流程(如每日备份)完全交给插件,核心步骤始终保留在 shell 脚本中,插件只做辅助视图
最麻烦的从来不是怎么打标签,而是哪天发现标签字段被清空了,却没留原始映射记录——那几百个站就得人工翻配置对一遍。










