1. 程式人生 > >部署Django專案到Apache伺服器(下)

部署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

這一行確保了該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上面的部署就已經完成了。