部署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上面的部署就已經完成了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章