宝塔面板不支持多服务器文件实时同步,需手动配置rsync+inotifywait实现触发式同步,注意排除.user.ini、设置免密登录、调整inotify限制及修复目标服务器权限。

宝塔面板本身不支持多服务器文件实时同步
宝塔面板是单机管理工具,没有内置集群或分布式文件同步能力。所谓“免费实现”,本质是绕过宝塔的图形界面,用 Linux 原生工具(如 rsync + inotifywait)在后台做触发式同步,宝塔只负责提供 Web 环境和基础服务管理。
必须手动配置 rsync + inotifywait 触发同步
宝塔不提供可视化同步配置入口,需 SSH 登录每台服务器,逐台部署脚本。核心逻辑是:源站文件变动 → inotifywait 捕获事件 → 调用 rsync 推送至目标服务器。
- 源服务器需开启
rsync服务(非 daemon 模式也可,但推荐用 ssh+rsync 组合,免密登录) -
inotifywait需安装:yum install -y inotify-tools(CentOS)或apt install -y inotify-tools(Ubuntu/Debian) - 同步命令建议用
rsync -avz --delete --exclude=".user.ini" /www/wwwroot/example.com/ user@192.168.1.100:/www/wwwroot/example.com/,注意末尾斜杠含义(影响目录嵌套) - 务必测试免密登录:
ssh user@192.168.1.100 ls /www,失败则同步必然中断
宝塔网站目录权限和 .user.ini 会破坏同步一致性
宝塔为防跨站攻击,默认给每个网站目录加 .user.ini 和严格属主(如 www:www)。若直接同步整个 /www/wwwroot/xxx,目标服务器的 .user.ini 可能被覆盖或权限错乱,导致 PHP 报 500 错误。
- 同步时必须排除
.user.ini:--exclude=".user.ini" - 目标服务器需单独配置对应网站的
.user.ini(内容可与源站一致,但必须由宝塔生成或手动 chown 成www:www) - 同步后建议在目标服务器执行:
chown -R www:www /www/wwwroot/example.com,否则宝塔可能拒绝读取
inotify 监控有深度和数量限制,大站点容易漏同步
inotifywait 默认监控层级浅、句柄数少,网站含大量子目录或临时文件(如 WordPress 的 wp-content/cache)时,极易触发 Event queue overflow 或静默丢事件。
- 临时提升限制:
echo 524288 > /proc/sys/fs/inotify/max_user_watches(重启失效,需写入/etc/sysctl.conf持久化) - 避免监控无关目录:不要监听整个
/www/wwwroot,应精确到具体网站目录,且排除cache、logs、tmp - 生产环境建议加日志和重试机制,例如用 while 循环包裹
inotifywait,失败时 sleep 3s 后重试
rsync 参数、Linux 权限模型和 inotify 边界条件的理解。很多人卡在免密登录没配好,或同步后忘了改 www 用户权限——这两处一错,页面就白屏,但错误日志里根本不会提“同步失败”,只会报“Permission denied”或者“No input file specified”。










