Apache是最流行的Web服務器之一,mod_wsgi是Apache的模塊之一,可用于把Python應用程序托管到Apache服務器上。這種方法是部署Django應用相對簡單的方法。

在Ubuntu 14.04版,默認安裝中包含了Python。下面開始利用mod_wsgi部署Django應用。

二、創建Django應用程序

在本節中,我們要安裝所需的軟件包,并構建一個Hello World的Django應用程序,并通過mod_wsgi模塊提供服務。這里假設你已經登錄到新創建的虛擬機。

1、創建一個Ubuntu虛擬機

創建一個操作系統為Ubuntu 14.04 x64的Linux虛擬機,物理機也可以。步驟略。

2、安裝Python包管理器

使用Ubuntu的包管理器apt-get,安裝Python包管理器。注意,使用前需先對Ubuntu的包管理器進行更新。

#sudoapt-getupdate

Pip是Python語言的包管理器,它可以幫助我們安裝、修改、卸載Python包。要安裝pip非常簡單,執行命令:

#sudoapt-getinstallpython-pip

apt-get工具會自帶安裝pip的最新穩定版。但是,如果你想安裝指定版本的pip,可以考慮從源碼安裝。
參考:https://pip.pypa.io/en/latest/installing.html
還可以使用easy_install來替代pip,它有相似的功能。

3、安裝Django

要從頭創建項目,需要先安裝Django軟件包。執行命令:

#sudopipinstallDjango

要想指定Django的安裝版本,比如1.5.5版,可以這樣:

#sudopipinstallDjango==1.5.5

當然,你仍然可以使用Ubuntu的包管理器apt-get來安裝Django,但這可能安裝的不是最新穩定版的Django。

4、安裝其他依賴

如果要部署一個已有的你大爺項目,可以遞歸運行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.txt

pip freeze命令會打印出當前環境中已經安裝了的Python包,大于符號“>”會把命令的執行結果輸出到指定的requirements.txt配置文件中。

5、創建Hello World應用程序

要創建名為helloworld的Django應用,運行命令:

#django-admin.pystartprojecthelloworld

要注意,會創建一個名為helloworld的新目錄。要運行此項目,可以這樣:

#cdhelloworld/
#django-admin.pystartapphelloapp

在瀏覽器中可以看到Hello World的輸出。下面,接著在項目中添加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.httpimportHttpResponse

defhome_view(request):
returnHttpResponse(\\\’HelloWorld\\\’)

下面,我們可以運行開發服務器了:

#pythonmanage.pyrunserver

在GitHub上有本項目的源碼:https://github.com/sdaityari/django-hello-world

三、使用Apache和mod_wsgi模塊運行Django應用

Django項目的目錄結構后面有說明,下面需要安裝并配置Apache服務器。

1、安裝Apache2

使用apt-get命令完成Apache2的安裝。

#sudoapt-getinstallapache2

2、安裝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

3、修改目錄結構

要使得Django應用程序能通過mod_wsgi模塊提供服務,我們還需要編寫WSGI腳本,用此腳本來完成Apache服務器和Django應用之間的連接。Django應用的目錄結構如下所示:

mysite/
manage.py
mysite/
__init__.py
settings.py
urls.py
myapp/
models.py
views.py

我們需要做一點修改,讓mysite目錄包含三個文件:

mysite/
manage.py
mysite/
__init__.py
settings.py
urls.py
apache/
__init__.py
override.py
wsgi.py
myapp/
models.py
views.py

這樣的話,邏輯非比較清晰。

注意,如果使用了如Git之類的源碼控制工具,那么可以把apache目錄添加到忽略列表。

4、創建WSGI腳本

空文件init.py會告訴Python,把此目錄當成是包來對待。override.py會導入所有的設置,并覆蓋任何用于生產狀態的設置。
比如生產狀態的數據庫設置和Debug設置可能會與開發狀態有所不同,要在源碼中區別開來,需要這樣:

#override.py

frommysite.settingsimport*

DEBUG=True
ALLOWED_HOSTS=[\\\’www.mydomain.com\\\’,\\\’mydomain.com\\\’]

最后,wsgi.py文件包含了WSGI的設置。假定根目錄是/home/myuser/:

#wsgi.py
importos,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.wsgi
application=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

添加以下內容:

<VirtualHost*:80>
WSGIScriptAlias/mypath//home/myuser/mysite/apache/wsgi.py
<Directory/home/myuser/mysite/apache/>
Requireallgranted
</Directory>
</VirtualHost>

第一行為Django Web目錄添加一個mypath別名, 這樣項目就可以通過URL:http://www.mydomain.com/mypath/進行訪問。
如果想直接使用域名訪問,比如:http://www.mydomain.com/,那么可以直接指向Django應用。代碼塊表示訪問指定的目錄有所有權限。

如果想自定義robots.txt和圖標,可以添加下面的內容:

Alias/robots.txt/home/myuser/mysite/robots.txt
Alias/favicon.ico/home/myuser/mysite/favicon.ico

要提供靜態文件和媒體文件服務,還需要分別這樣配置:

Alias/media//home/myuser/mysite/media/
Alias/static//home/myuser/mysite/static/

<Directory/path/to/mysite.com/static>
Requireallgranted
</Directory>

<Directory/path/to/mysite.com/media>
Requireallgranted
</Directory>

最后,保存配置文件并重啟Apache:

#sudoserviceapache2restart

注意Apache的版本:對于Apache 2.4之前的版本,上面的配置略有不同。

更多關于云服務器,域名注冊,虛擬主機的問題,請訪問三五互聯官網:www.shinetop.cn

贊(0)
聲明:本網站發布的內容(圖片、視頻和文字)以原創、轉載和分享網絡內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。郵箱:3140448839@qq.com。本站原創內容未經允許不得轉載,或轉載時需注明出處:三五互聯知識庫 » 利用mod_wsgi部署Django應用

登錄

找回密碼

注冊

主站蜘蛛池模板: 我要看亚洲黄色太黄一级黄| 国产盗摄视频一区二区三区| 欧美国产激情18| 国产永久免费高清在线| 亚洲综合中文字幕第一页| 亚洲精品一区二区三区中文字幕| brazzers欧美巨大| 国产极品美女高潮无套| 亚洲欧美日韩综合一区二区| 一本色道久久88精品综合| 国产一区二区精品久久凹凸| 国产成人亚洲欧美二区综合| 亚洲V天堂V手机在线| 亚洲一区在线成人av| 厦门市| av天堂久久天堂av| 国产精品毛片久久久久久久| 国产精品白丝久久AV网站| 成人福利一区二区视频在线| 亚洲综合久久精品哦夜夜嗨| 国产成人综合色视频精品| 久久久精品94久久精品| 午夜天堂av天堂久久久| 粉嫩av蜜臀一区二区三区| 石渠县| 久久精品国产99亚洲精品| h无码精品3d动漫在线观看| 日本无码欧美一区精品久久| 欧美性猛交xxxx富婆| 亚洲欧美在线观看品| 亚洲精品成人久久久| 在线精品视频一区二区| 国产精品流白浆无遮挡| 国内少妇偷人精品免费| 亚洲国产欧美在线人成大黄瓜| 免费人妻av无码专区| 久久天天躁夜夜躁狠狠| 玖玖在线精品免费视频| 人人爽亚洲aⅴ人人爽av人人片 | 在线中文字幕国产精品| 国产成人精品久久一区二|