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