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

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

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

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

我要解决的问题是uwsgi安装的时候报库文件not found错误。比如,第一种情况这样:
lib58
另外一种情况:
lib60
第二种情况属于缺失文件比较多的。

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

弄来弄去,就是版本不兼容的问题,这里涉及到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,最后让我找到了一些规律。
    uwsgi2.0.18
    把这些包全部解压到文件夹里,挨个去看它们缺失哪些库文件,会发现规律:
    uwsgi_x
    解压缩xxx_1.tar.bz2到uwsgi_1文件夹,xxx_2.tar.bz2到uwsgi_2文件夹,以此类推。你会发现其实就是库文件版本不一样,这里有三个版本:so.58, so.64, so.67。那么,本地 Linux系统提供的环境是什么版本,看/usr/lib64/下:
    lib64-linux
    Linux系统提供的库文件是so.60
    到这里基本上水落石出了:只要选择uwsgi版本和so.60兼容的版本就可以。,选so.58的那个版本,记住兼容永远都是向后兼容,so.60肯定兼容so.58,但它不一定能兼容so.64和so.67。思路通了,后面的操作就简单了,加软链就可以了。
    ruanlian
    ldd看一下:
    test
    搞定!
    上面的就是整个解决过程,正式安装部署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. 耐心,胆大心细。发现问题就解决问题,会比较,找差异,看规律。
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值