阿里云ECS服务器离线部署uwsgi爬坑总结

阿里云ECS服务器离线部署uwsgi爬坑总结,第1张

因工作需要,自己要开发一个django项目上线,采用架构:
Nginx+uwsgi+Django

这里重点讲uwsgi的离线安装部署

阿里云ECS服务器自带的python是3.6,我本地开发环境是3.9,所以在线上环境使用anaconda管理环境。

我要解决的问题是uwsgi安装的时候报库文件not found错误。比如,第一种情况这样:

另外一种情况:

第二种情况属于缺失文件比较多的。

一开始我在部署的时候搞了很多办法,比如去这个网站找缺失的库文件;也去试过不同版本的uwsgi,uwsgi离线安装包下载地址,下面是我试过的版本:

弄来弄去,就是版本不兼容的问题,这里涉及到2种不兼容:python版本和uwsgi,uwsgi和Linux系统。

  • python版本和uwsgi版本问题:因为我ECS服务器anaconda的base环境基于python 3.9,所以我想当然的去找了uwsgi-2.0.20-py39和uwsgi-2.0.19.1-py39,安装后发现还是库文件not found,直到我试了很多py39的版本包,都不行,我意识到是系统层面的问题了,当前ECS服务器不够兼容py39版的uwsgi。
  • uwsgi版本和Linux系统的关系:前面讲了ECS的python版本是3.6,所以 Linux系统环境肯定是以python3.6为基础的,所以我就尝试了很多py36不同版本的uwsgi,最后让我找到了一些规律。

    把这些包全部解压到文件夹里,挨个去看它们缺失哪些库文件,会发现规律:

    解压缩xxx_1.tar.bz2到uwsgi_1文件夹,xxx_2.tar.bz2到uwsgi_2文件夹,以此类推。你会发现其实就是库文件版本不一样,这里有三个版本:so.58, so.64, so.67。那么,本地 Linux系统提供的环境是什么版本,看/usr/lib64/下:

    Linux系统提供的库文件是so.60
    到这里基本上水落石出了:只要选择uwsgi版本和so.60兼容的版本就可以。,选so.58的那个版本,记住兼容永远都是向后兼容,so.60肯定兼容so.58,但它不一定能兼容so.64和so.67。思路通了,后面的 *** 作就简单了,加软链就可以了。

    ldd看一下:

    搞定!
    上面的就是整个解决过程,正式安装部署uwsgi的时候建议重新安装一下。
    用conda离线安装方式:
1. 在 https://anaconda.org/conda-forge/uwsgi/files  下载uwsgi包,注意本地部署的python版本对应不同的安装包
2. 上传到conda install的缓存文件路径 /root/anaconda/pkgs;如果要安装到虚拟环境,对应路径为 /root/anaconda/envs/xxx/
3. 安装命令:conda install --use-local uwsgi包名

最终采用的环境是python3.6,uwsgi-2.0.18

总结一下
  1. 开发项目一定要注意环境。保持开发环境和部署环境一致
  2. 软件最新不一定是合适的。我这里用python3.9开发确实是草率了,没考虑到服务器部署的环境。一开始用uwsgi-2.0.20最新版也不靠谱,没考虑到系统环境支不支持。
  3. 耐心,胆大心细。发现问题就解决问题,会比较,找差异,看规律。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/799184.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-06
下一篇 2022-05-06

发表评论

登录后才能评论

评论列表(0条)

保存