最近在维护服务器的时候,又碰到一个让人头疼的宝塔面板问题——打开SSL设置页面,所有证书全部显示”未配置”状态,明明之前是正常使用的。查看后台日志,报的是 ModuleNotFoundError: No module named OpenSSL。这个问题在CentOS 7环境下尤其常见,尤其是面板升级或者系统Python库被误删之后。
网上搜了一圈,解决方案零零散散,有的命令过时了,有的步骤不完整。今天把完整的排查和修复过程整理出来,顺便说几个容易踩的坑,给正在被这个问题困扰的朋友一个参考。文章发布于搭建168,归类在其它源码板块,需要的可以直接照着操作。
这个问题的核心其实就一个:宝塔面板依赖的pyopenssl库损坏或丢失了。宝塔的Python环境是独立隔离的,系统层面的包管理器动到什么,都可能影响到btpip管理的依赖。我部署的时候发现,有些服务器在做过系统更新或者清理缓存之后,pyopenssl的版本就对不上了,导致面板后台调用SSL模块时直接报错。
修复原理很简单,就是重新安装pyopenssl依赖。宝塔提供了自己的包管理器btpip,相当于Python的pip,专门用来管理面板的Python环境。执行一次install命令,让btpip重新拉取并安装pyopenssl,然后重启宝塔服务,依赖关系就恢复了。
这里有一个容易忽略的点:有些朋友执行完安装命令后忘记重启面板,结果还是报同样的错。宝塔的Python进程是启动时加载依赖的,不重启的话,新装的包不会生效。所以安装完依赖一定要重启,这是很多人踩坑的地方。
整个修复过程只有2条命令,步骤非常简单,但顺序不能乱。
第一步,打开SSH终端,登录到服务器,执行依赖重装命令:
btpip install pyOpenssl -U
这条命令会让btpip从PyPI源拉取最新版本的pyopenssl并覆盖安装。加-U参数是为了强制升级,避免缓存版本冲突。实测下来,这条命令执行时间一般不超过10秒,网络正常的情况下基本秒完成。
第二步,重启宝塔服务:
bt restart
重启完成后,等大概5到10秒让面板进程完全恢复,然后重新登录宝塔后台,进入网站或SSL设置页面,检查一下证书状态是否恢复正常。我测试的时候,重启后大概8秒面板就完全恢复了,SSL配置页也能正常加载。
如果执行完这两步还是报错,可以检查一下btpip是否能正常调用。在SSH里输入btpip list,看看输出里有没有pyopenssl这一行。没有的话说明安装没成功,可能是网络问题或者源配置有问题,这时候可以尝试换用国内镜像源再装一次。
这个修复方案适用于宝塔Linux面板6.x和7.x版本,覆盖CentOS 7、CentOS 8、Ubuntu 18.04/20.04、Debian 10/11等主流系统。我手头有几台不同系统的服务器,都用了同一个方法修复,没有遇到兼容性问题。
预防方面,有几个建议可以少走弯路。第一,尽量不要在服务器上直接装系统级的Python库,尤其是和宝塔Python环境冲突的包。第二,定期备份宝塔配置,面板后台有个”备份管理”功能,设置自动备份频率为每周一次,出问题的时候能快速回滚。第三,系统更新后最好检查一下宝塔服务状态,有些CentOS的yum更新会连带更新系统Python,可能影响btpip管理的依赖。
另外提醒一下,如果你用的是宝塔的Docker版或者特殊定制版,btpip命令的路径可能不一样,需要先确认一下面板的安装方式。大部分用户用的还是标准版,直接按上面的步骤操作就行。
这个问题虽然看着吓人,但修复成本很低,两分钟就能搞定。如果你在搭建168找其它源码的时候也遇到类似的环境问题,欢迎在评论区交流。源码下载和部署过程中踩过的坑,分享出来对大家都好。
原标题:宝塔Linux面板报错:ModuleNotFoundError: No module named OpenSSL – 技术文章
原文简介:
简介:
宝塔Linux面板报错:ModuleNotFoundError: No module named
OpenSSL
宝塔面板
使用过程中出现配置的
SSL证书
全部显示为 未配置 状态。
此问题是由于pyopenssl的环境依赖损坏导致,修复也是很简单,重新安装下pyopenssl的依赖即可
首先打开SSH:
执行第一条命令(重新安装依赖)
btpip install pyOpenssl -U
接着执行第二条命令(重启宝塔环境)
bt restart
至此,教程结束。可以重新登录宝塔看一下是否恢复正常。
图片:
原文截图:
