uWSGI+nginx+supervisor部署django项目

2023-11-16

本文主要介绍如何编译nginx,uwsgi以及supervisor 配置文件实现django项目启动**”**

01

为什么用django+nginx+uwsgi

Django本身只是一个基于Python语言写的一个开源WEb框架,不具备服务器网关功能,不可以直接访问得到。如果我们想通过外网访问Django项目。那么我们z作为客户端,首先向服务端发出请求,这时服务端有一个对外服务的组件或接口(如Nginx、Apche等)接收客户端发来的HTTP请求,并对这个请求进行解包分析,如果是静态文件请求就根据nginx配置的静态文件目录,返回请求的资源,如果是动态的请求,nginx就通过配置文件,将请求传递给uWSGI;然后uWSGI 将接收到的包进行处理,并转发给wsgi,wsgi根据请求调用django工程的某个文件或函数,处理完后django将返回值交给wsgi,最后wsgi将返回值进行打包,转发给uWSGI,uWSGI接收后转发给nginx,nginx最终将返回值返回给客户端(如浏览器)。

02

怎么用django+nginx+uwsgi

首先,确保服务器安装好了Python环境,并完成了pip的安装。如果没有请安装。因为大部分Linux自带的Python版本与Django所需要的版本不一致,或者想要安装部署多个版本的Django或Python,所以一般推荐使用virtualenv,通过虚拟环境来部署。

其次,确保安装好nginx,并能正常运行。

然后,确保安装好了Django及所需的依赖框架包。测试方法:python manage.py runserver 0.0.0.0:8000。

最后,安装uWSGI。上面都没问题了,就配置nginx和uwsgi。假设我们的django项目名为mysite,位于/usr/local/mysite目录下。

uWsgi配置

在项目文件根目录下创建 uwsgi.conf文件,编辑文件 ,配置uwsgi:

#添加配置选择
[uwsgi]
#配置和nginx连接的socket连接
socket=127.0.0.1:8007
#配置项目路径,项目的所在目录
chdir=//usr/local/mysite/
#配置wsgi接口模块文件路径,也就是wsgi.py这个文件所在的目录名
wsgi-file=mysite/wsgi.py
#配置启动的进程数
processes=4
#配置每个进程的线程数
threads=2
#配置启动管理主进程
master=True
#配置存放主进程的进程号文件
pidfile=uwsgi.pid
#配置dump日志记录(守护进程)
#daemonize=uwsgi.log

需要注意的是如果使用supervisor进行监控时不能使用守护进程,否则supervisor启动uwsgi后无法监控uwsgi进程

通过下面的命令启动运行uwsgi

uwsgi --ini uwsgi.ini

# 查看
ps -aux | grep uwsgi
# 看到多个uwsgi进程即没有问题

nginx配置

假设nginx安装好的路径为/usr/local/nginx,打开nginx.conf,加入以下内容:

# 加入如下配置
upstream django {
    server unix:///usr/local/mysite/mysite.sock; # for a file socket
    # server 127.0.0.1:8007;
    # for a web port socket (we'll use this first)
}

server{
    listen 80;
    server_name localhost;
    charset utf-8;
    client_max_body_size 75M;  #上传文件大小限制

    # 网站静态文件所在目录
    location /static{
        alias /usr/local/mysite/static;
    }

    # 上传文件所在目录
    location /media{
        alias /usr/local/mysite/media;
    }

    # 动态文件交给uwsgi处理
    location / {
        uwsgi_pass 127.0.0.1:8007;
        include /etc/nginx/uwsgi_params;
    }
}
启动nginx
systemctl enable nginx && systemctl start nginx

以上就是nginx和uwsgi的配置,接下来配置supervisor来守护Uwsgi进程,有了它,我们再也不用担心由于uwsgi进程莫名被"死掉"而引起的Django网站打不开的情况了。

supervisor配置

查看默认模板语法

echo_supervisord_conf

生成配置文件

echo_supervisord_conf > /etc/supervisord.conf

编译supervisord.conf文件

# 将下面配置
;[include]
;files = relative/directory/*.ini
#改成 ---切记要将[include]前面注释也去掉
[include]
files = /etc/supervisor/*.conf
# 在浏览器控制进程
# 编辑supervisord.conf将下面两行注释掉
[inet_http_server]         ; inet (TCP) server disabled by default
port=0.0.0.0:9001

在 /etc/supervisor/文件夹下加入需要管理的uwsgi配置文件uwsgi.con

# 加入如下配置
[program:uwsgi]
# uwsgi的启动命令
command=/usr/local/pythonVirtualenvs/shop_admin/bin/uwsgi --ini /usr/local/shop_admin/uwsgi.ini
user=root
# uwsgi关闭后是否自动重启
autorestart=true
#是否随supervisor启动而启动
autostart=true
#启动失败自动重试次数,默认是 3
startretries=3
#把 stderr 重定向到 stdout,默认 false
redirect_stderr=true
#启动 5 秒后没有异常退出,就当作已经正常启动了
startsecs=5
#日志文件存放目录, 此目录需要新建
stdout_logfile=/var/log/django/supervisor.log
#是否干掉程序的所有进程(包括子进程)
stopasgroup=true
killasgroup=true
3程序启动优先级,若有多个进程管理时使用,默认-1
priority=100

最后启动supervisor

supervisord -c /etc/supervisord.conf

以上就是uWSGI+nginx+supervisor部署django项目的全部内容,如果对你有帮助希望你可以点赞关注。有问题可以留言或联系我1163445247@qq.com

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

uWSGI+nginx+supervisor部署django项目 的相关文章

随机推荐