首页>>后端>>Python->uwsgi如何启动django?

uwsgi如何启动django?

时间:2023-12-11 本站 点击:0

导读:今天首席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的相关内容解答汇总了,希望对您有所帮助!如果解决了您的问题欢迎分享给更多关注此问题的朋友喔~


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:/Python/25327.html