django的部署可以有很多方式,采用nginx+uwsgi的方式是其中比较常见的一种方式。
在这种方式中,我们的通常做法是,将nginx作为服务器最前端,它将接收web的所有请求,统一管理请求。nginx把所有静态请求自己来处理(这是nginx的强项)。然后,nginx将所有非静态请求通过uwsgi传递给django,由django来进行处理,从而完成一次web请求。可见,uwsgi的作用就类似一个桥接器。起到桥梁的作用。
一、安装nginx
nginx是一款轻量级的web服务器/反向代理服务器及电子邮件(imap/pop3)代理服务器,并在一个bsd-like协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好。
nginx同样为当前非常流行的web服务器。利用其部署django,我们在此也做简单的介绍。
打开ubuntu控制台(ctrl+alt+t)利用ubuntu的仓库安装。
fnngj@ubuntu:~$sudoapt-getinstallnginx启动
fnngj@ubuntu:~$/etc/init.d/nginxstop#关闭
fnngj@ubuntu:~$/etc/init.d/nginxrestart#重启
修改nginx默认端口号,打开/etc/nginx/nginx.conf文件,修改端口号。
#access_loglogs/host.access.logmain;
indexindex.htmlindex.htm;
}
如果出现如上图,说明nginx启动成功。
二、安装uwsgi
root@ubuntu:/etc#python3-mpipinstalluwsgi
测试uwsgi,创建test.py文件:
defapplication(env,start_response):
start_response('200ok',[('content-type','text/html')])
return[b"helloworld"]
常用选项:
processes:开启的进程数量
workers:开启的进程数量,等同于processes(官网的说法是spawnthespecifiednumberofworkers/processes)
chdir:指定运行目录(chdirtospecifieddirectorybeforeappsloading)
wsgi-file:载入wsgi-file(load.wsgifile)
stats:在指定的地址上,开启状态服务(enablethestatsserveronthespecifiedaddress)
threads:运行线程。由于gil的存在,我觉得这个真心没啥用。(runeachworkerinprethreadedmodewiththespecifiednumberofthreads)
master:允许主进程存在(enablemasterprocess)
daemonize:使进程在后台运行,并将日志打到指定的日志文件或者udp服务器(daemonizeuwsgi)。实际上最常用的,还是把运行记录输出到一个本地文件上。
pidfile:指定pid文件的位置,记录主进程的pid号。
vacuum:当服务器退出的时候自动清理环境,删除unixsocket文件和pid文件(trytoremoveallofthegeneratedfile/sockets)
三、nginx+uwsgi+django
接下来,我们要将三者结合起来。首先罗列一下项目的所需要的文件:
└──myweb_uwsgi.ini
在我们通过django创建myweb项目时,在子目录myweb下已经帮我们生成的wsgi.py文件。所以,我们只需要再创建myweb_uwsgi.ini配置文件即可,当然,uwsgi支持多种类型的配置文件,如xml,ini等。此处,使用ini类型的配置。
#thebasedirectory(fullpath)
chdir=/home/fnngj/pydj/myweb
#maximumnumberofworkerprocesses
#...withappropriatepermissions-maybeneeded
vacuum=true
这个配置,其实就相当于在上一小节中通过wsgi命令,后面跟一堆参数的方式,给文件化了。

modulemyweb.wsgi,可以这么来理解,对于myweb_uwsgi.ini文件来说,与它的平级的有一个myweb目录,这个目录下有一个wsgi.py文件。
其它几个参数,可以参考上一小节中参数的介绍。
接下来,切换到myweb项目目录下,通过uwsgi命令读取myweb_uwsgi.ini文件启动项目。
fnngj@ubuntu:~$cd/home/fnngj/pydj/myweb/
fnngj@ubuntu:~/pydj/myweb$uwsgi--inimyweb_uwsgi.ini
[uwsgi]gettinginiconfigurationfrommyweb_uwsgi.ini
***startinguwsgi2.0.12(32bit)on[satmar1213:05:062016]***
compiledwithversion:4.8.4on26january201606:14:41
os:linux-3.19.0-25-generic#26~14.04.1-ubuntusmpfrijul2421:18:00utc2015
detectednumberofcpucores:2
currentworkingdirectory:/home/fnngj/pydj/myweb
detectedbinarypath:/usr/local/bin/uwsgi
!!!nointernalroutingsupport,rebuildwithpcresupport!!!
chdir()to/home/fnngj/pydj/myweb
yourprocessesnumberlimitis15962
yourmemorypagesizeis4096bytes
detectedmaxfiledescriptornumber:1024
lockengine:pthreadrobustmutexes
thunderlock:disabled(youcanenableitwith--thunder-lock)
uwsgisocket0boundtotcpaddress:8000fd3
pythonversion:3.4.3(default,oct142015,20:37:06)[gcc4.8.4]
***pythonthreadssupportisdisabled.youcanenableitwith--enable-threads***
pythonmaininterpreterinitializedat0x8b52dc0
yourserversocketlistenbacklogislimitedto100connections
yourmercyforgracefuloperationsonworkersis60seconds
mapped319920bytes(312kb)for4cores
***operationalmode:preforking***
wsgiapp0(mountpoint='')readyin1secondsoninterpreter0x8b52dc0pid:7158(defaultapp)
***uwsgiisrunninginmultipleinterpretermode***
spawneduwsgimasterprocess(pid:7158)
spawneduwsgiworker1(pid:7160,cores:1)
spawneduwsgiworker2(pid:7161,cores:1)
spawneduwsgiworker3(pid:7162,cores:1)
spawneduwsgiworker4(pid:7163,cores:1)
注意查看uwsgi的启动信息,如果有错,就要检查配置文件的参数是否设置有误。
再接下来要做的就是修改nginx.conf配置文件。打开/etc/nginx/nginx.conf文件,添加如下内容。
access_log/var/log/nginx/myweb_access.log;
error_log/var/log/nginx/myweb_error.log;
uwsgi_pass127.0.0.1:8000;
add_headercache-controlprivate;
alias/home/fnngj/pydj/myweb/static/;
……
通过这个ip和端口号的指向,请求应该是先到nginx的。如果你在页面上执行一些请求,就会看到,这些请求最终会转到uwsgi来处理。
以上就是基于ubuntu如何通过Nginx部署Django的详细内容,更多请关注主机测评网其它相关文章!
本文来源:国外服务器--基于ubuntu如何通过Nginx部署Django(ubuntunginxwebdav)
本文地址:https://www.idcbaba.com/guowai/2508.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 1919100645@qq.com 举报,一经查实,本站将立刻删除。



