导读:今天首席CTO笔记来给各位分享关于uwsgi如何启动django的相关内容,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
在阿里云服务器使用nginx+uwsgi+venv部署Django项目
1.首先先把项目上传到阿里云服务器
2.需要安装python3.0以上版本(centeros7自带2.75版本)
3.在此不介绍如何安装python高版本和虚拟环境
4.在项目根目录创建虚拟环境,就像你在Pycharm里一样
然后启动虚拟环境
5.在虚拟环境下安装你项目所需要的依赖
pip3 install requirements.txt
6.编写nginx配置文件和uwsgi配置文件
配置如下
nginx.conf
注意编写完nginx配置文件需要检查语法
nginx -t 注意别忘记加;或者文章尾末多空格都会导致出错
nginx -s reload 重启nginx
uwsgi.ini配置如下
7.都配置好之后
启动虚拟环境
在venv里 uwsgi uwsgi.ini 即可启动你的项目
如何配置nginx+uwsgi+django
1.安装uwsgi库
pip install uwsgi
2.django目录下建配置文件。
我的项目目录结构如下:
进入到apiManager(找项目中对应含有settings,urls)目录下,即含有wsgi.py的文件夹下,建一个djangoxxx_socket.xml文件。
我取名为djangomgr_socket.xml,命名随意。
djangomgr_socket.xml内容如下:
uwsgi
socket:8999/socket
chdir/webroot/wjc/apimgr//chdir
modulewsgi/module
processes1/processes !-- 进程数 --
daemonizeuwsgi.log/daemonize
/uwsgi
注意:
1. chdir路径到项目根目录下(含有manage.py的那个目录)
2. socket端口号为nginx中需要访问的端口号
3. daemonize为运行日志,不填路径时,默认会在与djangomgr_socket.xml同路径下生成一个uwsgi.log,当然也可以自己指定路径
3. 配置nginx
nginx配置如下,配置完后测试一下并重启nginx。
测试nginx:
命令:nginx -t ——测试nginx配置文件是否有错
重启nginx:
命令:nginx -s reload(或 service nginx restart)
server {
listen 80;
server_name apimgr.myexist.cn;
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:8999;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css|woff|ttf|otf|eot|svg|less|scss|flv|json|map|swf|ogg|mp3|wav|html|zip|rar)$
{
root /webroot/wjc/apimgr/apimgr/templates/;
if (-f $request_filename) {
expires max;
break;
}
}
access_log /var/log/nginx/myexist/apimgr.myexist.cn.access.log;
error_log /var/log/nginx/myexist/apimgr.myexist.cn.error.log;
}
4. 启动服务:
在djangoxxx_socket.xml所在路径下:
执行命令:uwsgi -x djangoxxx_socket.xml
即可启动服务,并可以查看uwsgi.log中的启动日志
uwsgi 关闭/重启 夯死问题
近期使用uwsgi启动django服务,发现在stop/reload uwsgi时会出现hangs问题,具体日志表现为:
在测试中发现无论用什么防线先uwsgi发送stop/reload信号,uwsgi都会进入一种假死状态,即不接收请求,也不结束进程。
期初以为uwsgi进程是在处理未完成的web请求。后来发现在没有任何请求时,uwsgi也会进入这种夯死状态。
首先说明问题的原因是因何而起。
出现这种夯死的问题是由于在uwsgi中使用了线程导致。
这里创建了一个最简单的django服务,并用uwsgi来启动。
首先,配置uwsgi为进程模式启动,这里创建了5个进程。
uwsgi配置文件如下:
现在来reload uwsgi服务,并查看uwsgi的日志。
结论:在uwsgi使用进程模式时,reload uwsgi不会出现夯死的问题。
前面以进程方式启动uwsgi没有出现夯死问题,那么现在就试一下以线程模式启动wusgi。这里启动了5个进程,每个进程中又包含了两个线程。
uwsgi配置文件如下:
reload uwsgi服务,并观察日志输出。
结论:在uwsgi中使用线程模式也不会造成reload夯死的问题。
uwsgi的线程不会造成任何问题,那前文所指的线程究竟是什么?
现在uwsgi启动脚本中创建一个线程,在这种情况下尝试reload uwsgi并查看日志输出。
随后以线程方式启动uwsgi,并reload uwsgi。
结论:在uwsgi app中使用线程就导致reload夯死。
若场景中非要在uwsgi app中使用线程,可以通过配置 reload-mercy 和 worker-reload-mercy 两个参数避免夯死的问题。
uwsgi配置文件如下:
再次reload uwsgi服务,输出日志如下:
这里虽然也会出现NO MERCY问题,但是uwsgi在reload过程中并没有出现夯死的情况。
如何用 uWSGI和nginx部署django
Django的部署可以有很多方式,采用nginx+uwsgi的方式是其中比较常见的一种方式。
在这种方式中,我们的通常做法是,将nginx作为服务器最前端,它将接收WEB的所有请求,统一管理请求。nginx把所有静态请求自己来处理(这是NGINX的强项)。然后,NGINX将所有非静态请求通过uwsgi传递给Django,由Django来进行处理,从而完成一次WEB请求。
可见,uwsgi的作用就类似一个桥接器。起到桥梁的作用。
Linux的强项是用来做服务器,所以,下面的整个部署过程我们选择在Ubuntu下完成。
Django部署——uwsgi+Nginx(超详细)
环境:
python3.6
centos 7
Django1.11
用Django写了个小网站,只能在自己本地跑一跑!这怎么行?听说可以部署在云服务器上,这样别人就可以访问了!
从哪儿开始?就从Django开始吧!老规矩,按步骤:
这里不讲Django项目实施过程,假设你已经写了一个Django项目,并且在本地 127.0.0.1:8000 能够跑起来。喏,给你个参考,项目大概长这样:
也就是项目目录下的settings.py文件,主要强调几个地方:
①关闭DEBUG模式:
②修改ALLOWED_HOSTS:
③配置静态文件存放路径:
修改好配置之后执行:
这个没什么说的。。。在自己的云服务器上装好这两个工具
安装好uwsgi后最好验证一下,验证方法:
创建一个test.py文件:
启动uwsgi服务器:
如果可以正常启动而不报错那就应该没问题,不放心的话再在终端验证一下:
在uwsgi.ini里进行如下配置:
找到nginx的配置文件夹,centos7的nginx配置文件在/etc/nginx下,该路径下有一个nginx.conf总配置文件,还有两个文件夹./conf.d、./default.d,我们将nginx.conf复制一份到conf.d文件夹下,命名为nginx.conf(或者项目名.conf)进行如下修改(根据中文注释进行相应配置即可):
进入uwsgi.ini文件夹下执行:
在终端执行:
参考资料:
刘江的博客
博客园
知乎问答
无名Blog
自强学堂Django教程
Django文档
empty_xl Blog
uwsgi启动多个django项目
uwsgi配置文件HuayunTools.ini
nginx配置文件
uwsgi配置文件HuayunTools.ini
nginx配置文件
建好文件夹,所有ini文件放入/home/nginx/uwsgi文件夹,然后运行
结语:以上就是首席CTO笔记为大家整理的关于uwsgi如何启动django的相关内容解答汇总了,希望对您有所帮助!如果解决了您的问题欢迎分享给更多关注此问题的朋友喔~