基于ubuntu如何通过Nginx部署Django(ubuntunginxwebdav)

基于ubuntu如何通过Nginx部署Django(ubuntunginxwebdav)

浏览次数:
信息来源: 用户投稿
更新日期: 2025-10-17
文章简介

django的部署可以有很多方式,采用nginx+uwsgi的方式是其中比较常见的一种方式。在这种方式中,我们的通常做法是,将nginx作为服务器最前端,它将接收web的所有请求,统一管理请求。

2025阿里云双十一服务器活动

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命令,后面跟一堆参数的方式,给文件化了。

基于ubuntu如何通过Nginx部署Django,ubuntunginxwebdav

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的详细内容,更多请关注主机测评网其它相关文章!

标签:
您的WordPress网站速度慢吗(wordpress网站速度优化)
« 上一篇
返回列表
下一篇 »

如本文对您有帮助,就请抽根烟吧!