利用mod_wsgi部署Django应用

阅读:397 2019-03-19 14:42:04 来源:新网

wsgi,即webservergatewayinterface,web服务器网关接口,是一个web服务器的python标准,在pep333标准中定义,并被许多框架实现。python是一门传统的编程语言,所以wsgi提供了一种让web服务器服务于python应用程序的方式,使得python应用程序可以与web服务器进行交互。apache是最流行的web服务器之一,mod_wsgi是apache的模块之一,可用于把python应用程序托管到apache服务器上。这种方法是部署django应用相对简单的方法。

在ubuntu14.04版,默认安装中包含了python。下面开始利用mod_wsgi部署django应用。

在本节中,我们要安装所需的软件包,并构建一个helloworld的django应用程序,并通过mod_wsgi模块提供服务。这里假设你已经登录到新创建的虚拟机。

创建一个操作系统为ubuntu14.04x64的linux虚拟机,物理机也可以。步骤略。

使用ubuntu的包管理器apt-get,安装python包管理器。注意,使用前需先对ubuntu的包管理器进行更新。

#sudoapt-getupdatepip是python语言的包管理器,它可以帮助我们安装、修改、卸载python包。要安装pip非常简单,执行命令:

#sudoapt-getinstallpython-pipapt-get工具会自带安装pip的最新稳定版。但是,如果你想安装指定版本的pip,可以考虑从源码安装。参考:https://pip.pypa.io/en/latest/installing.html还可以使用easy_install来替代pip,它有相似的功能。

要从头创建项目,需要先安装django软件包。执行命令:

#sudopipinstalldjango要想指定django的安装版本,比如1.5.5版,可以这样:

#sudopipinstalldjango==1.5.5当然,你仍然可以使用ubuntu的包管理器apt-get来安装django,但这可能安装的不是最新稳定版的django。

如果要部署一个已有的你大爷项目,可以递归运行pip来安装项目的依赖。通常,在项目的源码目录存在一个名为requirements.txt的配置文件,它包含了运行项目所需的依赖包:

#pipinstall-rrequirements.txt如果项目还包含了其他的python项目,那么可能会有不同版本的python包会造成彼此干扰。解决办法是使用virtualenv,它可以让每个python项目在自己的虚拟python环境中运行,彼此间是隔离的。这里有一个virtualenv的教程:https://www.digitalocean.com/community/tutorials/common-python-tools-using-virtualenv-installing-with-pip-and-managing-packages如果正在开发django应用程序,你可能想创建或更新配置文件,可以执行命令:

#pipfreeze>requirements.txtpipfreeze命令会打印出当前环境中已经安装了的python包,大于符号“>”会把命令的执行结果输出到指定的requirements.txt配置文件中。

要创建名为helloworld的django应用,运行命令:

#django-admin.pystartprojecthelloworld要注意,会创建一个名为helloworld的新目录。要运行此项目,可以这样:

#cdhelloworld/#django-admin.pystartapphelloapp在浏览器中可以看到helloworld的输出。下面,接着在项目中添加settings.py,找到installed_apps处,添加以下内容:

installed_apps=('django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.sites','django.contrib.messages','django.contrib.staticfiles','helloapp')接着,在urls.py中添加url路由模式,内容如下:

urlpatterns=patterns('',#examples:#url(r'^$','helloworld.views.home',name='home'),url(r'^','helloapp.views.home_view'),)它会指示django在views.py中寻找home_view函数。因此,修改views.py的内容如下:

fromdjango.httpimporthttpresponsedefhome_view(request):returnhttpresponse('helloworld')下面,我们可以运行开发服务器了:

#pythonmanage.pyrunserver在github上有本项目的源码:https://github.com/sdaityari/django-hello-world

django项目的目录结构后面有说明,下面需要安装并配置apache服务器。

使用apt-get命令完成apache2的安装。

#sudoapt-getinstallapache22、安装mod_wsgi模块仍然可以使用apt-get命令安装mod_wsgi模块。

#sudoapt-getinstalllibapache2-mod-wsgi要注意,如果使用的是python3,那么命令应该是这样的:

#sudoapt-getinstalllibapache2-mod-wsgi-py3详细的安装过程可以参考:https://www.digitalocean.com/community/tutorials/installing-mod_wsgi-on-ubuntu-12-04

要使得django应用程序能通过mod_wsgi模块提供服务,我们还需要编写wsgi脚本,用此脚本来完成apache服务器和django应用之间的连接。django应用的目录结构如下所示:

mysite/manage.pymysite/__init__.pysettings.pyurls.pymyapp/models.pyviews.py我们需要做一点修改,让mysite目录包含三个文件:

mysite/manage.pymysite/__init__.pysettings.pyurls.pyapache/__init__.pyoverride.pywsgi.pymyapp/models.pyviews.py这样的话,逻辑非比较清晰。

注意,如果使用了如git之类的源码控制工具,那么可以把apache目录添加到忽略列表。

空文件init.py会告诉python,把此目录当成是包来对待。override.py会导入所有的设置,并覆盖任何用于生产状态的设置。比如生产状态的数据库设置和debug设置可能会与开发状态有所不同,要在源码中区别开来,需要这样:

#override.pyfrommysite.settingsimport*debug=trueallowed_hosts=['www.mydomain.com','mydomain.com']最后,wsgi.py文件包含了wsgi的设置。假定根目录是/home/myuser/:

#wsgi.pyimportos,sys#calculatethepathbasedonthelocationofthewsgiscript.apache_configuration=os.path.dirname(__file__)project=os.path.dirname(apache_configuration)workspace=os.path.dirname(project)sys.path.append(workspace)sys.path.append(project)#addthepathto3rdpartydjangoapplicationandtodjangoitself.sys.path.append('/home/myuser')os.environ['django_settings_module']='mysite.apache.override'importdjango.core.handlers.wsgiapplication=django.core.handlers.wsgi.wsgihandler()还需要为apache服务器的默认用户www-data分配根目录的所有权,以便于apache服务器有权限访问此目录:

#sudochownwww-data:www-dataapache/5、配置apache要配置apache使用刚才的wsgi脚本,需要编辑配置文件:

#sudovi/etc/apache2/sites-enabled/000-default.conf添加以下内容:

wsgiscriptalias/mypath//home/myuser/mysite/apache/wsgi.pyrequireallgranted第一行为djangoweb目录添加一个mypath别名,这样项目就可以通过url:http://www.mydomain.com/mypath/进行访问。如果想直接使用域名访问,比如:http://www.mydomain.com/,那么可以直接指向django应用。代码块表示访问指定的目录有所有权限。

如果想自定义robots.txt和图标,可以添加下面的内容:

alias/robots.txt/home/myuser/mysite/robots.txtalias/favicon.ico/home/myuser/mysite/favicon.ico要提供静态文件和媒体文件服务,还需要分别这样配置:

alias/media//home/myuser/mysite/media/alias/static//home/myuser/mysite/static/requireallgrantedrequireallgranted最后,保存配置文件并重启apache:

#sudoserviceapache2restart注意apache的版本:对于apache2.4之前的版本,上面的配置略有不同。

相关文章
{{ v.title }}
{{ v.description||(cleanHtml(v.content)).substr(0,100)+'···' }}
你可能感兴趣
推荐阅读 更多>
推荐商标

{{ v.name }}

{{ v.cls }}类

立即购买 联系客服