上一節我們已經成功搭建了apache服務器並且寫了一個wsgi的hello world程序進行測試。接下來我們就可以開始部署django項目了。
首先把django項目上傳到服務器上的某個目錄下。爲了讓python的web程序運行,我們需要一個wsgi程序。django給我們提供了相應的wsgi程序,在你的[project]下的[project]文件夾內,假設我們生成該項目的命令是startproject mysite
那麼django給我們提供的wsgi程序就是mysite/mysite/wsgi.py
。
接下來我們需要修改httpd.conf配置文件,在/etc/httpd/conf/httpd.conf
的末尾添上如下配置:
WSGIScriptAlias / /path/to/mysite/mysite/wsgi.py
WSGIPythonPath /path/to/mysite
<Directory /home/yourname/mysite/mysite>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
WSGIScriptAlias
後的第一個參數表示在哪個URL上提供該web應用,第二個參數則是wsgi文件的路徑。
WSGIPythonPath
這一行確保了該web應用被添加到python的path變量中。
<Directory>
塊允許了Apache去訪問你的wsgi文件和web應用程序所在的目錄。
然後我們重新加載Apache,service httpd reload
,訪問http://localhost,我們就能看到django應用程序了。然而此時的django應用程序並沒有成功加載靜態資源,那是因爲我們還沒有在httpd.conf裏配置django應用程序的靜態資源目錄。
首先我們應該在django項目的配置文件中配置靜態資源,打開mysite/mysite/settings.py
,在末尾添加:
STATIC_ROOT = '/path/to/mysite/static_root'
STATIC_URL = '/static/'
MEDIA_ROOT = '/path/to/mysite/media/'
MEDIA_URL = '/media/'
這裏的STATIC_ROOT
表示靜態資源存在服務器上的路徑,STATIC_URL
表示訪問靜態資源的URL(通過瀏覽器訪問的路徑),MEDIA_ROOT
表示媒體資源存放在服務器上的路徑,MEDIA_URL
表示訪問媒體資源的URL(通過瀏覽器訪問的路徑)。接下來切換到mysite目錄,執行python manage.py collectstatic
,這句命令會把web應用的靜態資源都收集到settings.py裏定義的STATIC_ROOT
目錄裏,媒體資源都收集到settings.py裏定義的MEDIA_ROOT
目錄裏。
接下來讓我們繼續配置django的靜態資源目錄,下面的代碼定義了URL訪問別名。在/etc/httpd/conf/httpd.conf
裏添加如下配置:
Alias /media /path/to/mysite/media
Alias /static /path/to/mysite/static_root
Alias /media /path/to/mysite/media
的意思是訪問localhost/media/xxx.jpg的時候是訪問服務器的/path/to/mysite/media/xxx.jpg
第二個Alias定義的/static同理。需要注意的是,如果需要上傳文件,那麼需要把相應的目錄的權限改成777,否則會出錯。
在設置了URL訪問別名之後,我們還需要允許Apache訪問靜態資源所在的目錄,繼續添加:
<Directory /path/to/mysite/static>
Require all granted
</Directory>
<Directory /path/to/mysite/media>
Require all granted
</Directory>
保存,重新加載Apache之後,訪問http://localhost/就能看到帶有樣式和圖片的頁面了。至此Django項目在Apache上面的部署就已經完成了。