部署Django專案到Apache伺服器(下)
上一節我們已經成功搭建了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
<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上面的部署就已經完成了。