共用方式為


將 Python Web 應用程式發佈至 Linux 上的 Azure App Service

Visual Studio 提供將 Python Web 應用程式直接發佈至 Linux 上的 Azure App Service 的功能。 發佈至 Linux 上的 Azure App Service 包括將必要的檔案複製到伺服器,以及設定適當的 web.config 檔案,以指示網頁伺服器如何啟動您的應用程式。

備註

Linux 是在 App Service 中執行 Python 應用程式的唯一作業系統選項。 不再支援 Windows 上的 Python,如 App Service Linux 文件 - Python 支援中所述。 針對 Windows,您可以建置自己的自訂 Windows 容器映像,並在 App Service 中執行映像。 如需詳細資訊,請參閱 使用自訂 Docker 映像

先決條件

Visual Studio 版本

Visual Studio 2017 和之後的版本,其發行過程與 Visual Studio 2015 不同。 本文會說明這兩種方法。

  • Visual Studio 2015 會自動執行部分安裝步驟,包括建立 web.config 檔案,但此自動化會限制長期彈性和控制。

  • Visual Studio 2017 和更新版本需要更多手動安裝步驟,但它可讓您更精確地控制 Python 環境。

如需 Visual Studio 2015 與 Visual Studio 2017 和更新版本之間變更的詳細資訊,請參閱部落格文章 在 Visual Studio 2017 中發佈至 Azure

建立測試專案

如果您沒有要發佈的現有專案,您可以建立測試專案來嘗試此程式。

  1. 在 Visual Studio 中,從工具列功能表中選取 [ 檔案 > 新增 > 專案 ] 以開啟 [ 建立新專案 ] 對話方塊。

  2. 在對話方塊中,在 [搜尋] 方塊中輸入 bottle,選取 [Bottle Web 專案] 範本,然後選取 [下一步]。

    Bottle Web 專案範本包含在 Python 開發工作負載中。 如需詳細資訊,請參閱 Python Web 應用程式專案範本

  3. 輸入專案的名稱和路徑位置,然後選取 建立。

  4. 依照提示安裝外部套件,選取 [安裝到虛擬環境],然後為虛擬環境選擇您偏好的基本解譯器。

    虛擬環境通常會符合 App Service 上安裝的 Python 版本。

當您準備好時,您可以選取 [偵錯] > [開始偵錯 ],或使用鍵盤快速鍵 F5,在本機測試專案。

建立目標的 Azure 應用程式服務

發佈至 Azure 需要 Azure 訂用帳戶的目標 Azure App Service。

使用空白的 Web 應用程式建立 App Service,如下所示:

  1. 登入 Azure 入口網站

  2. 移至 App Services 頁面。

  3. 選取 [ 建立 ],然後從下拉式功能表中選擇 [Web 應用程式 ]。 建立 Web 應用程式 頁面隨即開啟。

  4. [基本] 索引標籤上,設定下列設定。

    Setting Description
    資源群組 忽略此欄位。 系統會在您選擇執行時期設定之後更新此值。
    名稱 輸入 Web 應用程式的名稱。
    發佈 選取 [程式碼]
    執行階段堆疊 從下拉式功能表中選擇適當的 Python 執行階段。 選擇項目後,系統會更新 資源群組 欄位。
    區域 選取您附近的任何 Azure 區域。
    定價方案 選擇 免費 F1 計劃。

    針對本文中的範例,您可以忽略其他索引標籤上的設定。

  5. 選取檢閱 + 建立。 檢閱您的選取項目,然後選取 [建立]。

  6. (選用)App Service 準備就緒之後,您可以移至資源,選取 [ 下載發佈設定檔],然後將檔案儲存在本機。

在 Azure App Service 上設定 Python

在訂用帳戶中執行空白 Web 應用程式的 App Service 之後,請安裝您想要的 Python 版本。 若要從 Visual Studio 2017 和更新版本發佈,請記錄隨網站延伸模組一起安裝之 Python 解譯器的確切路徑。 如需詳細資訊,請參閱 安裝 Python 解譯器

如果需要,您也可以安裝該 bottle 套件。 不過,此套件會安裝在本逐步解說的稍後步驟中。

發佈至 App Service - Visual Studio 2017 和更高版本

從 Visual Studio 2017 和更新版本發佈至 Azure App Service 只會將專案中的檔案複製到伺服器。 您需要建立必要的檔案來配置伺服器環境。

  1. 在 Visual Studio 方案總管中,以滑鼠右鍵按一下專案,然後選取 [新增>專案]。 在對話方塊中,選取 Azure web.config (快速 CGI) 範本,然後選取 [新增]。 此步驟會在專案根目錄中建立檔案 web.config

  2. 修改 PythonHandler 檔案中的 web.config 項目,以確保路徑符合伺服器上的 Python 安裝,如 IIS 組態參考 (iis.net)中所述。 例如,對於 Python 3.6.1 x64,項目應如下所示:

    <system.webServer>
      <handlers>
        <add name="PythonHandler" path="*" verb="*" modules="FastCgiModule"
            scriptProcessor="D:\home\Python361x64\python.exe|D:\home\Python361x64\wfastcgi.py"
            resourceType="Unspecified" requireAccess="Script"/>
      </handlers>
    </system.webServer>
    
  3. web.config檔案中設置WSGI_HANDLER項目以更符合您使用的框架。

    • 瓶子:如範例中所示,在app.wsgi_app 值後新增括號。 括號是必要的,因為物件是函數而不是變數。 您可以在檔案中 app.py 看到語法。

      <!-- Bottle apps only -->
      <add key="WSGI_HANDLER" value="app.wsgi_app()"/>
      
    • Flask:將 WSGI_HANDLER 的值變更為 <project_name>.app,其中 <project_name> 必須符合您的專案名稱。 您可以透過查看 from <project_name> import app 檔案中的 runserver.py 陳述式來找到確切的標識符。 例如,如果專案名稱是 “FlaskAzurePublishExample”,則輸入會顯示如下:

      <!-- Flask apps only: Change the project name to match your app -->
      <add key="WSGI_HANDLER" value="FlaskAzurePublishExample.app"/>
      
    • Django:Django 專案的檔案需要進行 web.config 兩項變更。

      • WSGI_HANDLER 值變更為 django.core.wsgi.get_wsgi_application()。 物件位於檔案中 wsgi.py

        <!-- Django apps only -->
        <add key="WSGI_HANDLER" value="django.core.wsgi.get_wsgi_application()"/>
        
      • WSGI_HANDLER 鍵的條目之後立即新增下列條目。 將 DjangoAzurePublishExample 的值替換為您的專案名稱:

        <add key="DJANGO_SETTINGS_MODULE" value="django_iis_example.settings" />
        
  4. 僅限 Django 應用程式:在 Django 專案的 settings.py 檔案中,將您的網站 URL 網域或 IP 位址 ALLOWED_HOSTS 新增至項目。 將「vspython-test-02.azurewebsites.net」替換為您的網址:

    # Change the URL to your specific site
    ALLOWED_HOSTS = ['vspython-test-02.azurewebsites.net']
    

    如果您未將 URL 新增至陣列結果,您會看到下列錯誤:

    DisallowedHost at / Invalid HTTP_HOST header: '\<site URL\>'. You might need to add '\<site URL\>' to ALLOWED_HOSTS.
    

    當陣列為空時,Django 會自動允許 'localhost' 作為主機。 如果您新增生產 URL,則 'localhost' 不會被自動允許成為主機。 基於這個理由,您可能想要維護檔案的 settings.py 個別開發及正式作業副本,或使用環境變數來控制執行時期值。

  5. 選取範本。

    1. [方案總管] 中,展開您的專案資料夾。
    2. 以滑鼠右鍵按一下靜態資料夾,然後選取 [新增>專案]。
    3. 選取 [Azure 靜態檔案 web.config 範本],然後選取 [新增]。

    此動作會在web.config資料夾中建立另一個檔案,以停用該資料夾的 Python 處理。 此配置將靜態檔案的請求傳送到預設 Web 伺服器,而不是使用 Python 應用程式。

  6. [方案總管] 中,儲存您的專案,然後以滑鼠右鍵按一下您的專案,然後選取 [發佈]。

    螢幕擷取畫面,顯示如何在 Visual Studio 中存取專案的 [發佈] 命令。

  7. 「發佈」 視窗中,指定發佈目標:

    1. 針對 [目標],選取 [Azure],然後選取 [下一步]。

    2. 針對 [特定目標],選取 [Azure App Service (Windows)],然後選取 [下一步]。

      • 如果對話方塊指出完成安裝需要其他必要元件,請選取完成。 Visual Studio 安裝程式會隨即開啟。 確認選項,然後選取 [安裝]。
    3. 針對 App Service,為您的訂用帳戶選取適當的 App Service,然後選取 [完成]。

      螢幕擷取畫面顯示如何使用現有的訂用帳戶,在 Visual Studio 2017 和更新版本中準備發佈至 Azure 的程式。

      發佈建立過程完成後,選取 關閉

  8. Visual Studio 會在 [Web 發佈活動] 視窗中顯示狀態,也會顯示 [發佈設定檔建立進度 ] 視窗中。 當您看到 Web 應用程式的「準備發佈」訊息時,請選取 [發佈]。

    螢幕擷取畫面,示範如何在 Visual Studio 中發佈 Web 應用程式。

  9. 發佈成功時,預設瀏覽器會在網站 URL 上開啟。 網站 URL 也會顯示在 「發佈」 視窗中。

    螢幕擷取畫面,顯示已開啟至已發佈 Web 應用程式網站 URL 的瀏覽器。

    如果網站 URL 未自動開啟,請選取 [ 開啟網站 ] 以在瀏覽器中檢視 Web 應用程式:

    螢幕擷取畫面,顯示如何在瀏覽器中開啟已發佈 Web 應用程式的網站 URL。

  10. 當瀏覽器開啟時,您可能會看到「無法顯示頁面,因為發生內部伺服器錯誤」訊息。此訊息表示伺服器上的 Python 環境未完全設定,在此情況下,請執行下列步驟:

    1. 請確定您已安裝適當的 Python 網站擴充功能。 如需詳細資訊,請參閱 快速入門:將 Python (Django 或 Flask) Web 應用程式部署至 Azure App Service

    2. 仔細檢查檔案中 web.config Python 解釋器的路徑。 路徑必須與所選網站擴充功能的安裝位置完全相符。

    3. 使用 Kudu 主控台來升級應用程式 requirements.txt 檔案中列出的任何套件。 導航至與 web.config 檔案相同的 Python 資料夾,例如 /home/python361x64。 執行下列命令,如 Kudu 主控台 一節所述:

      python -m pip install --upgrade -r /home/site/wwwroot/requirements.txt
      

      如果您在執行此命令時看到權限錯誤,請確認您正在網站延伸模組資料夾中執行命令。 請勿在具有其中一個 App Service 預設 Python 安裝的資料夾中執行命令。 因為您無法修改這些預設環境,所以嘗試安裝套件肯定會失敗。

    4. 如需詳細的錯誤輸出,請將下列行新增至節點內web.config<system.webServer>檔案,以提供更詳細的錯誤輸出:

      <httpErrors errorMode="Detailed"></httpErrors>
      
    5. 嘗試在安裝新套件之後重新啟動 App Service。 變更 web.config 檔案時不需要重新啟動,因為每當檔案變更時 web.config ,App Service 都會自動重新啟動。

      小提示

      如果您對應用程式的 requirements.txt 檔案進行任何變更,請務必再次使用 Kudu 主控台來安裝該檔案中現在列出的任何套件。

  11. 完全設定伺服器環境之後,請重新整理瀏覽器中的頁面以查看 Web 應用程式:

    螢幕擷取畫面顯示在 Visual Studio 中將 Bottle、Flask 和 Django 應用程式發佈至 Azure App Service 的結果。

發佈至 App Service - Visual Studio 2015

請遵循下列步驟,將 Python Web 應用程式發佈至 Visual Studio 2015 中的 Azure App Service。

  1. 在 [方案總管] 中,以滑鼠右鍵按一下專案並選取 [發行]

  2. [發佈] 對話方塊中,選取 [ Microsoft Azure App Service]:

    螢幕擷取畫面顯示如何在 Visual Studio 中發佈至 Azure,並選取 Azure App Service。

  3. 選取 [Microsoft Azure App Service ] 作為發佈目標。 在下一個對話方塊中,選取現有的 App Service,或選取 [ 新增 ] 以建立新的 App Service。

  4. App Service 詳細資料會出現在 [發佈] 對話方塊的 [連線] 索引標籤中:

    螢幕擷取畫面,示範如何在 Visual Studio 中發佈至 Azure,並檢視 App Service 連線。

  5. 視需要,選取 [下一步 ] 以檢閱其他設定。

  6. 選取 [] 發佈 []。 應用程式部署至 Azure 之後,預設瀏覽器會在網站 URL 上開啟。

在此程式中,Visual Studio 也會完成下列步驟:

  • 用來在伺服器上建立 web.config 檔案,其中包含指向應用程式 wsgi_app 函式和 App Service 預設 Python 3.4 解譯器的適當指標。
  • 關閉專案靜 資料夾中檔案的處理。 (此動作的規則在檔案中 web.config
  • 將虛擬環境發佈至伺服器。
  • 新增 web.debug.config 檔案和偵錯工具以啟用遠端偵錯。 針對 Visual Studio 2019 16.4 版和更早版本,偵錯工具是 ptvsd。 針對 Visual Studio 2019 16.5 版和更新版本,偵錯工具為 debugpy。

如前所述,這些自動步驟簡化了發布過程,但它們可能會使控制 Python 環境變得更加困難。 例如, web.config 檔案只會在伺服器上建立,但不會新增至您的專案。 發佈程式也需要較長的時間,因為它會從開發電腦複製整個虛擬環境,而不是依賴伺服器設定。

最後,您可能想要維護自己的 web.config 檔案,並使用該 requirements.txt 檔案直接維護伺服器上的套件。 特別是當您使用檔案 requirements.txt 時,您可以協助保證您的開發和伺服器環境一律相符。