宝塔面板9.x静默安装需先禁用selinux和防火墙、使用-f参数执行官方脚本、等待面板服务就绪后再安装插件,并通过bt restart生效配置。

宝塔面板9.x静默安装必须关闭SELinux和防火墙
宝塔9.x在CentOS 7/8、Rocky 9等系统上静默安装失败,八成是因为SELinux处于enforcing状态或firewalld拦截了安装脚本的HTTP请求。安装过程会自动拉取http://download.bt.cn资源,而SELinux可能拒绝curl发起的网络连接,导致卡在“正在下载安装包…”或直接报错curl: (7) Failed to connect。
实操建议:
- 安装前务必执行:
setenforce 0(临时禁用)+sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config(永久禁用) - 停用并禁用防火墙:
systemctl stop firewalld && systemctl disable firewalld(如用ufw则对应替换) - 若为云服务器(阿里云/腾讯云),还需确认安全组放行
8888、80、443端口——这步常被忽略,装完打不开面板不是脚本问题,是网络策略没配
使用官方一键脚本时必须指定-f参数绕过交互确认
宝塔9.x官方安装脚本(curl -sSO https://download.bt.cn/install/install_6.0.sh)默认进入交互模式,即使重定向/dev/null也无法跳过“是否继续安装?”提示。不加-f会导致脚本卡住、超时退出,自动化流程中断。
正确调用方式:
- 静默安装命令必须带
-f:bash install_6.0.sh -f - 若需指定面板端口(如避免冲突),可追加
-p 8889,但注意:该参数仅对首次安装生效,重装无效 - 安装后默认账号密码输出在终端末尾,但脚本中无法直接捕获——建议安装完成后用
cat /www/server/panel/default.pl读取密码,再用cat /www/server/panel/bt_default.pl获取初始用户名
插件静默安装依赖bt命令且需等待面板就绪
bt命令行工具在面板服务完全启动前不可用,常见错误是脚本安装完面板立刻执行bt install 0(Nginx),结果返回command not found或Connection refused。这是因为bt软链接(指向/www/server/panel/pyenv/bin/python)虽已存在,但面板API服务(panelService.py)尚未监听127.0.0.1:8888。
安全做法:
- 安装完面板后,用
while ! curl -s http://127.0.0.1:8888/login | grep -q "BT-Panel"; do sleep 5; done轮询检测API就绪 - 插件ID不能硬编码:宝塔9.x中
nginx是0,mysql是1,php是5,但PHP版本需额外指定,例如bt install 5 80安装PHP 8.0(注意:数字80非端口,是版本代号) - MySQL 8.0插件ID为
11,不是1;MariaDB 10.6是12——查ID最稳方式是先手动运行bt,看列表输出,或解析curl -s http://127.0.0.1:8888/plugin/get_list | jq '.data[].id'(需提前装jq)
静默脚本里别信sleep 30,要用systemctl is-active判服务状态
很多网上脚本用sleep 30等面板启动,实际在低配VPS(1核1G)上,面板初始化可能耗时60秒以上;而在高IO云盘环境,sleep 10就足够。靠固定延时既不可靠又拖慢部署。
更健壮的等待逻辑:
- 检查核心进程:
while ! pgrep -f "panelService.py" >/dev/null; do sleep 3; done - 验证服务状态:
while [[ "$(systemctl is-active bt-panel)" != "active" ]]; do sleep 2; done - 若用
systemctl管理(宝塔9.x默认启用),还可加超时保护:timeout 120 bash -c 'until systemctl is-active --quiet bt-panel; do sleep 2; done'
插件安装完成后,别忘了用bt restart确保所有服务加载配置——尤其PHP扩展或MySQL配置变更后,静默脚本容易漏掉这步,导致后续站点无法解析。










