记一次崩溃的uwsgi部署体验

前段时间使用django开发了一个数据检索平台,一直使用Django自带的WSGI,其实作为一个使用频率并不高的小型服务,在我们这二三十人的小公司完全够用。前几天领导商量说,这东西有没有可能服务更多人(内心OS??)。没办法,路还是要往前走,听说Nginx+uwsgi作为部署项目的套餐很常见,那尝试一下,万一它香呢!

uwsgi部署

安装uwsgi。pip install uwsgi

测试uwsgi。写一个test.py文件,

def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return [b"Hello World"]  #注意这里的小插曲,很多写的是 return "hellow world",但是我的会报错,python版本的原因?

运行测试文件。

uwsgi --http :8000 --wsgi-file test.py

这样在浏览器中打开ip:8000便可看到效果。

测试使用uwsgi部署django。咱们先首先创建一个空白的django项目进行测试。

django-admin startproject test_uwsgi

上面是创建之后的文件结构,test.py和django_uwsgi.ini这两个文件先不用管,没用文件。 创建一个script文件,里面存放uwsgi的运行脚本pid和日志文件。

uwsgi的运行脚本uwsgi.ini这个文件需要首先创建,其他两个是生成的文件。 编辑uwsgi.ini

# uwsig使用配置文件启动
[uwsgi]
# 项目目录
chdir=/home/***/test_uwsgi/
# 指定项目的application
module=test_uwsgi.wsgi:application
# 指定sock的文件路径
socket=/home/***/test_uwsgi/script/uwsgi.sock
# 进程个数
workers=5
pidfile=/home/***/test_uwsgi/script/uwsgi.pid
# 指定IP端口
http=IP:8000
# 指定静态文件
# static-map=
# 启动uwsgi的用户名和用户组
uid=root
gid=root
# 启用主进程
master=true
# 自动移除unix Socket和pid文件当服务停止的时候
vacuum=true
# 序列化接受的内容,如果可能的话
thunder-lock=true
# 启用线程
enable-threads=true
# 设置自中断时间
harakiri=30
# 设置缓冲
post-buffering=4096
# 设置日志目录
daemonize=/home/***/test_uwsgi/script/uwsgi.log

上面的参数都解释的很详细,无非就是根据自己的项目路径修改一下对应文件的位置,修改一下IP什么的。有的小伙伴在配置的时候会添加一个home参数,作为python的路径。

然后运行

uwsgi --ini uwsgi.ini

出现,看不到任何输出,万一出错只能去看scrip文件加下的log日志。

打开浏览器输入IP:8000出现下图,恭喜你成功了。

到这里一切看起来都很简单,看不出来有任何难度呀,难道这就是所谓的“奔溃”?

别着急,这只是在本地的电脑上,当我打算把项目放到阿里云服务器上的时候,让人头秃的就来了。

首先,一切都是一模一样的操作,无非就是再走一遍,但是越按部就班越对一些问题不知所措,心里总时在想,我刚刚明明是成功的啊,这种想法会掩盖很多问题的本质。

首先阿里云服务器上部署首先要开放一个端口,要开这个端口,你就得去阿里云的控制台设置安全组件。

 在配置规则里面添加一个进入端口8001.

然后在服务器上看一下防火墙,检查一下端口状态。

sudo ufw status  #  如果没启动,先启动以下  sudo ufw enable  这里需要注意的是,如果你没有打开22端口,那么打开防火墙之后 ssh可能就断了

然后使用test.py文件测试uwsgi 没有问题,一切正常。

但当我使用uwsgi.ini启动django项目时,问题出来了。

没有任何提示,反正就是个错。去查log日志呗,

日志里面也没个啥呀,可就是不对,问题到底出在哪里呢。setting 里面的参数我也改了 debug=False ALLOW_HOST=['IP']。

网上说需要重新安装uwsgi,秃然一想,我在阿里云服务器上安装uwsgi 使用的是 pip install uwsgi --user 难道是权限不足的问题 ?  那就卸载重新装一下试试,反正也没关系。

centos安装的时候报没有pcre-static这是什么鬼,那怎么安装呀? 是不是yum源的问题,更新以下yum源试试。

cd  /etc/yum.repos.d

#1.备份旧的yum仓库源
cd  /etc/yum.repos.d
​
mkdir  repobak
mv *.repo   repobak  #备份repo文件
​
#2.下载新的阿里的yum源仓库,阿里的开源镜像站https://developer.aliyun.com/mirror/
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
​
#3.继续下载第二个仓库 epel仓库
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
​
#4.此时已经配置完毕,2个新的yum仓库,可以自由的嗨皮,下载软件了
[root@s25linux yum.repos.d]# ls
CentOS-Base.repo  epel.repo  repobak

但是安装pcre等的时候,根本没有网速呀,这又是怎么啦,仔细一看,我怎么更新的是centos7,我的版本不是8吗?  粗心要不得呀,赶紧换回来  wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-8.repo

这下安装起来速度起飞,但依然没有卵用,pcre-static还是没有,安装不上。算了就先这样吧,心累。直接pip install uwsgi

满心欢喜的以为会成功,战战兢兢输入IP:端口,果然不失所望,问题没有解决,错误依旧。是不是原先的进程没有杀死,还是在原来的进程上, netstat -tlpn  查看一下端口,kill掉8001端口的进程,重新运行,还是有问题。

继续上网查找解决方案,路径修改等等之类的方法,全都尝试了一遍,毫无效果。

有一个大神说了一个方法,uwsgi.ini里面http的参数不要用127.0.0.1:8001或者ip:8001, 需要用ifconfig查询出来的内网ip,然而我修改了过来,也是没有变化。

秃然,另一个大神说了 socket参数改为127.0.0.1:8001, 什么! 搞了这么久,我的socket一直写的不对?原来写的是/home/***/test_uwsgi/script/uwsgi.sock,那我改一下试试,竟然成功了,熟悉的画面就又回来了,综上,两位大神的方法加起来解决了我的问题,希望对大家也能起作用。

后面就是根据自己的真实项目,把对路径修改过来就行了,成功运行。

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值