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

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

二、創(chuàng)建Django應(yīng)用程序

在本節(jié)中,我們要安裝所需的軟件包,并構(gòu)建一個Hello World的Django應(yīng)用程序,并通過mod_wsgi模塊提供服務(wù)。這里假設(shè)你已經(jīng)登錄到新創(chuàng)建的虛擬機。

1、創(chuàng)建一個Ubuntu虛擬機

創(chuàng)建一個操作系統(tǒng)為Ubuntu 14.04 x64的Linux虛擬機,物理機也可以。步驟略。

2、安裝Python包管理器

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

#sudoapt-getupdate

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

#sudoapt-getinstallpython-pip

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

3、安裝Django

要從頭創(chuàng)建項目,需要先安裝Django軟件包。執(zhí)行命令:

#sudopipinstallDjango

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

#sudopipinstallDjango==1.5.5

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

4、安裝其他依賴

如果要部署一個已有的你大爺項目,可以遞歸運行pip來安裝項目的依賴。通常,在項目的源碼目錄存在一個名為requirements.txt的配置文件,它包含了運行項目所需的依賴包:

#pipinstall-rrequirements.txt

如果項目還包含了其他的Python項目,那么可能會有不同版本的Python包會造成彼此干擾。解決辦法是使用virtualenv,它可以讓每個Python項目在自己的虛擬Python環(huán)境中運行,彼此間是隔離的。
這里有一個virtualenv的教程:https://www.digitalocean.com/community/tutorials/common-python-tools-using-virtualenv-installing-with-pip-and-managing-packages
如果正在開發(fā)Django應(yīng)用程序,你可能想創(chuàng)建或更新配置文件,可以執(zhí)行命令:

#pipfreeze>requirements.txt

pip freeze命令會打印出當(dāng)前環(huán)境中已經(jīng)安裝了的Python包,大于符號“>”會把命令的執(zhí)行結(jié)果輸出到指定的requirements.txt配置文件中。

5、創(chuàng)建Hello World應(yīng)用程序

要創(chuàng)建名為helloworld的Django應(yīng)用,運行命令:

#django-admin.pystartprojecthelloworld

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

#cdhelloworld/
#django-admin.pystartapphelloapp

在瀏覽器中可以看到Hello World的輸出。下面,接著在項目中添加settings.py,找到INSTALLED_APPS處,添加以下內(nèi)容:

INSTALLED_APPS=(
\\\’django.contrib.auth\\\’,
\\\’django.contrib.contenttypes\\\’,
\\\’django.contrib.sessions\\\’,
\\\’django.contrib.sites\\\’,
\\\’django.contrib.messages\\\’,
\\\’django.contrib.staticfiles\\\’,
\\\’helloapp\\\’
)

接著,在urls.py中添加URL路由模式,內(nèi)容如下:

urlpatterns=patterns(\\\’\\\’,
#Examples:
#url(r\\\’^$\\\’,\\\’helloworld.views.home\\\’,name=\\\’home\\\’),
url(r\\\’^\\\’,\\\’helloapp.views.home_view\\\’),
)

它會指示Django在views.py中尋找home_view函數(shù)。因此,修改views.py的內(nèi)容如下:

fromdjango.httpimportHttpResponse

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

下面,我們可以運行開發(fā)服務(wù)器了:

#pythonmanage.pyrunserver

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

三、使用Apache和mod_wsgi模塊運行Django應(yīng)用

Django項目的目錄結(jié)構(gòu)后面有說明,下面需要安裝并配置Apache服務(wù)器。

1、安裝Apache2

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

#sudoapt-getinstallapache2

2、安裝mod_wsgi模塊

仍然可以使用apt-get命令安裝mod_wsgi模塊。

#sudoapt-getinstalllibapache2-mod-wsgi

要注意,如果使用的是Python3,那么命令應(yīng)該是這樣的:

#sudoapt-getinstalllibapache2-mod-wsgi-py3

詳細的安裝過程可以參考:
https://www.digitalocean.com/community/tutorials/installing-mod_wsgi-on-ubuntu-12-04

3、修改目錄結(jié)構(gòu)

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

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、創(chuàng)建WSGI腳本

空文件init.py會告訴Python,把此目錄當(dāng)成是包來對待。override.py會導(dǎo)入所有的設(shè)置,并覆蓋任何用于生產(chǎn)狀態(tài)的設(shè)置。
比如生產(chǎn)狀態(tài)的數(shù)據(jù)庫設(shè)置和Debug設(shè)置可能會與開發(fā)狀態(tài)有所不同,要在源碼中區(qū)別開來,需要這樣:

#override.py

frommysite.settingsimport*

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

最后,wsgi.py文件包含了WSGI的設(shè)置。假定根目錄是/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服務(wù)器的默認用戶www-data分配根目錄的所有權(quán),以便于Apache服務(wù)器有權(quán)限訪問此目錄:

#sudochownwww-data:www-dataapache/

5、配置Apache

要配置Apache使用剛才的WSGI腳本,需要編輯配置文件:

#sudovi/etc/apache2/sites-enabled/000-default.conf

添加以下內(nèi)容:

<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應(yīng)用。代碼塊表示訪問指定的目錄有所有權(quán)限。

如果想自定義robots.txt和圖標(biāo),可以添加下面的內(nèi)容:

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

要提供靜態(tài)文件和媒體文件服務(wù),還需要分別這樣配置:

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之前的版本,上面的配置略有不同。

更多關(guān)于云服務(wù)器域名注冊,虛擬主機的問題,請訪問三五互聯(lián)官網(wǎng):m.shinetop.cn

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

登錄

找回密碼

注冊

主站蜘蛛池模板: 日本一区二区不卡精品| 日本熟妇大乳| 久久精品夜色国产亚洲av| 国产在线精品一区二区夜色| 久久99精品久久久大学生| 亚洲国产美女精品久久久| 国产午夜精品久久精品电影| 恩平市| 麻豆久久久9性大片| 国产偷窥熟女高潮精品视频| 中国猛少妇色xxxxx| 四虎永久在线精品8848a| 免费无码一区无码东京热| 国产色无码精品视频免费| 亚洲国产片一区二区三区| 亚洲人成电影网站 久久影视| 盐城市| 在线免费观看毛片av| 精品卡通动漫亚洲AV第一页| 国产一区二区波多野结衣| 熟女蜜臀av麻豆一区二区| 国产成人高清亚洲综合| 国产精品久久久久aaaa| 吉川爱美一区二区三区视频 | 国产精品av免费观看| 深夜释放自己在线观看| 四虎国产精品成人免费久久| b站永久免费看片大全| 亚洲国产性夜夜综合| 亚洲一区二区精品另类| 国产麻豆一精品一av一免费| 国产丝袜肉丝视频在线| 国产WW久久久久久久久久| 宁陕县| 亚洲精品综合第一国产综合| 国产v综合v亚洲欧美大天堂| 国产伦一区二区三区久久| 欧美成人VA免费大片视频 | 无限看片在线版免费视频大全| 国产精品亚洲综合久久小说| 无码日韩av一区二区三区|