在 Microsoft Azure 部署 Python/Django 網站應用程式(一)

Microsoft Azure 的網站服務(可見我之前的文章支援運作 Python 的應用程式已經有一段時間了,主要的方式是透過 FastCGI 的方式來執行 Azure 上的 Python 直譯器(2.7 or 3.4)來執行 Python-based 的 Web 應用程式(如:Django、Flask 等)。

而過去我一直都是按照官網上的 tutorial 一步一步來部署 Django 應用程式,沒發生過什麼問題,一直到最近想拿 Django 1.7 來弄個小玩具,才發現這份 tutorial 好像會有點問題,簡單地說就是按照這個作法部署上去不太 work,試著自己 trouble shooting 一陣子後不見改善,於是我就利用 Azure 官方網頁中的「Azure Web 應用程式庫」的頁面來直接部署一個 Django 的 Web 應用程式,看看怎樣才會 work,結果讓我發現它部署到 Azure 的網站服務後,目錄結構長得是這個樣子的 (透過 FTP 的方式連上去看的):

 wwwroot/
  django/
  mysite/
  handler.fcgi
  manage.py
  web.config

看到這裡我突然覺得很怪,怎麼會多了 handler.fcgi 以及 web.config 兩個檔案呢?所以我就把這兩個檔案下載下來仔細端詳一番,web.config 檔案應該就是在 IIS 上的設定檔案,它的內容果然是設定一些環境變數、以及把 requests 都交給 Python 來處理,所以它的內容是:

 <configuration>
  <appSettings>
    <add key="PYTHONPATH" value="D:\home\site\wwwroot" />
    <add key="WSGI_HANDLER" value="django.core.handlers.wsgi.WSGIHandler()" />
    <add key="DJANGO_SETTINGS_MODULE" value="mysite.settings" />
  </appSettings>
  <system.webServer>
    <handlers>
      <add name="Python_FastCGI"
           path="handler.fcgi"
           verb="*"
           modules="FastCgiModule"
           scriptProcessor="D:\Python27\python.exe|D:\Python27\Scripts\wfastcgi.py"
           resourceType="Either"
           requireAccess="Script" />
    </handlers>
    <rewrite>
      <rules>
        <rule name="Django Application" stopProcessing="true">
          <match url="(.*)" ignoreCase="false" />
          <conditions>
            <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
          </conditions>
          <action type="Rewrite" url="handler.fcgi/{R:1}" appendQueryString="false" />
        </rule>
      </rules>
      </rules>
    </rewrite>
  </system.webServer>
</configuration>

看了一下,大部份跟原本在 tutorial 上要設定的東西差不多,只是換成用 web.config 檔案來做了;而 handler.fcgi 這個檔案內容只有兩個雙引號(")而已。

就這樣,把這兩個檔案加到 Django 應用程式中一併部署上去就可以正常運作了,只是要注意的是:在 Azure 網站服務上只有一個單純的 Python 直譯器,所以需要額外的 library 也要一併部署上去,也就是說,Django 應用程式的話,整份 django 的函式庫也要一併部署上去(如上述的 django/ 目錄),當然也可以另外建一個像 lib/site-packages/ 的目錄來放這些函式庫,但記得在 web.config 檔案裡的 PYTHONPATH 常數要設定好搜尋函式庫的路徑。

不過很妙的是,如果直接使用 Python Tools for Visual Studio 裡建立的 Django 應用程式範本,在利用 Visual Studio 來部署到 Microsoft Azure 上時卻非常順利,幾乎不必再自己手動做什麼事了。

下面一篇文章再來談談更多部署 Django 的細節。