离线安装宝塔前必须确认三件事:系统版本匹配、Python环境合规、/www目录剩余空间≥3GB;下载官网指定离线包并校验SHA256;执行时须用sudo bash xxx.sh --force且确保panel.tar.gz同目录。

离线安装宝塔前必须确认的三件事
不能直接运行官方一键脚本,这是内网部署最常卡住的第一步。核心限制就三个:curl 或 wget 无法访问官网域名、yum/apt 源不可达、面板依赖的 Python 模块(如 gevent、psutil)无法在线 pip 安装。
- 先用
cat /etc/os-release确认系统是 CentOS 7/8、Ubuntu 20.04/22.04 还是 Debian 11/12 —— 宝塔离线包按系统版本严格区分,混用会报exec format error - 检查 Python 版本是否为
python2.7(CentOS 7)或python3.6+(新版),宝塔 v8.x 在 Ubuntu 22.04 上默认要求python3.10,但离线包自带精简版 Python 运行时,无需额外安装 - 确保
/www目录所在磁盘剩余空间 ≥3GB,离线包解压后要写入大量静态资源和数据库文件
下载并校验离线安装包的正确方式
别从第三方论坛随便下“免编译版”或“绿色版”,那些不是宝塔官方维护的离线包,启动后大概率报 panel not found 或 Web 页面空白。唯一可信来源是宝塔官网文档页明确列出的离线包地址,格式统一为:http://download.bt.cn/install/install-ubuntu_*.sh(Ubuntu)、http://download.bt.cn/install/install-centos_*.sh(CentOS)。
- 在能联网的机器上用
wget -O bt-offline.sh http://download.bt.cn/install/install-centos_7.0.sh下载对应脚本(注意后缀是_7.0.sh而非.sh) - 立即执行
sha256sum bt-offline.sh,比对官网文档页给出的SHA256值,不一致说明下载被劫持或镜像失效 - 把校验通过的脚本 + 对应的
panel.tar.gz(同页面提供)一并拷贝进内网,两者缺一不可 —— 脚本只负责解压和初始化,真正面板代码在 tar 包里
离线安装脚本执行时的关键参数与权限陷阱
直接 bash bt-offline.sh 会失败,因为脚本默认尝试联网检测环境,必须加参数跳过所有外网检查。另外,宝塔服务进程以 root 权限运行,但安装过程如果当前用户不是 root,会卡在 sudo: no tty present。
- 执行前先
chmod +x bt-offline.sh,再用sudo bash bt-offline.sh --force启动(--force是强制离线模式开关,没它就走默认在线逻辑) - 如果提示
Permission denied却已用 sudo,检查/www目录是否被 SELinux 或 AppArmor 锁定,临时关闭用setenforce 0(CentOS)或aa-disable(Ubuntu) - 安装中途若卡在
installing gevent...,说明panel.tar.gz未放在同一目录,或解压权限不足 —— 脚本会自动tar -zxf panel.tar.gz -C /www,确保该路径可写
安装后无法访问面板?重点查这三处配置
安装成功提示 success 不代表能打开网页,内网常见问题是端口、证书和防火墙策略没同步调整。
- 默认面板端口是
8888,但内网服务器可能被安全组或本地firewalld拦截,运行firewall-cmd --permanent --add-port=8888/tcp再firewall-cmd --reload - 首次访问会提示“此网站无法提供安全连接”,因为离线包生成的是自签名 SSL 证书,浏览器不信任 —— 不要点击“高级→继续访问”,而是用
bt default查看真实登录地址,它会显示http://内网IP:8888(非 https) - 如果页面加载一半白屏,大概率是前端资源路径写死为公网 CDN,此时需手动修改
/www/server/panel/data/default.pl,把里面所有https://cdn.bt.cn替换为http://localhost:8888,然后bt restart
离线环境下,bt update 和插件市场全部不可用,所有后续更新(包括 PHP、MySQL 插件)都得靠人工下载对应离线插件包,再用 bt plugin -i 插件名 安装 —— 这个命令不校验签名,但要求插件包版本严格匹配当前面板主版本号,差一个小数点都会提示 plugin version mismatch。










