[Python] Django: 怎麼在 Windows 上面佈署 Django?

1. 簡單說一下要做哪些事

基本上,我們需要一個 Web Server,透過 Web Server 去提供使用者靜態檔案 (如 .css, .js 或一些圖片),而不是透過 Django 去提供這些檔案。
所以在 Web Server 的設定檔裡面,我們需要把訂太檔案的 URL 跟實際的 path 設定好,存取權限也要打開。

如果是要存取 Django 做出來的動態網頁,則 Web Server 會透過 WSGI 來跟 Django 溝通以取得網頁。

WSGI 提供了一些標準的介面讓 Django 可以用一些標準的方法輕易的接上不同的 Web Server。

在這裡我們選擇使用 Apache 當作 Web Server,透過 Apache 的 mod_wsgi 模組將送給 Apache 的 requests 轉給 Django 來做處理。

WSGI 怎麼運作,可以參考這裡

原則上,我們希望佈署 Django 的過程,盡量不要變更到原有的 Django 專案,而是直接設定好 Web Server 跟 WSGI,東西就可以上線了。

我使用的環境是:

  • OS: Windows 10
  • Bitnami WAMP (Apache)
  • Python 3.5.2 (Anaconda)
  • Django 1.10.3
  • mod_wsgi (從這裡下載!)

2. 安裝 Apache

Apache Web Server 的安裝方式,可以參考 Apache 的官方文件。

Windows 的 Installer 可以從這裡下載。

3. 安裝 mod_wsgi

安裝完 Apache 之後,可以到這裡下載 .whl 檔來安裝 mod_wsgi.so。

安裝方式參考這個連結

4. 修改 Django project

先修改 settings.py 中的 DEBUG 跟 ALLOWED_HOSTS 參數,

另外,settings.py 跟 wsgi.py 裡面可能有一些地方需要修改,看自己怎麼規劃自己的 project。

如在 settings.py 中,視狀況可能需要設定 STATIC_URL, STATIC_ROOT, STATICFILES_DIR, etc.

然後使用

來將 STATICFILES_DIR 裡面的檔案收集到 STATIC_ROOT 目錄中。(後面會看到我們在 httpd.conf 檔中,設定讓 Apache 來 Serve 靜態檔。)

靜態檔的設定,可以參考這裡

而在 wsgi.py 中,視狀況可能需要加入路徑,讓 Django 裡的模組可以被找到。

5. 修改 Apache 設定檔 httpd.conf

httpd.conf 的設定如下:

這裡有幾個細節需要注意一下:

Alias 後面的路徑如果最後以 “/” 結尾,則目錄名稱請也以 “/” 做結尾,不然權限可能不會被打開。可以參考這裡

如果使用 IfVersion 出錯,請檢查 version_module 有沒有被啟動。

設定完成,理論上就可以用了!

This entry was posted in Python, 程式設計 and tagged , . Bookmark the permalink.

3 Responses to [Python] Django: 怎麼在 Windows 上面佈署 Django?

  1. 葉昀嘉 says:

    你好,想請問我照著上面的步驟執行,最後重啟wamp後,輸入127.0.0.1,得到卻是Forbidden頁面,是哪部分權限沒有設定好,或是其他問題呢?

    • Victor says:

      Hi 您好,

      感覺像是目錄權限沒設好。您可以看一下路徑是不是有打錯字…
      也可以看一下 httpd 的 log 裡面有沒有更進一步的錯誤資訊。

      謝謝!

  2. 葉昀嘉 says:

    Forbidden

    You don’t have permission to access / on this server.
    Apache/2.4.23 (Win32) mod_wsgi/4.4.6 Python/3.4.0 PHP/5.6.25 Server at 127.0.0.1 Port 80

Leave a Reply