“ 本文主要介绍如何编译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