快速入門:將 Python (Django 或 Flask) Web 應用程式部署至 Azure App 服務

在本快速入門中,您將部署 Python Web 應用程式 (Django 或 Flask) Azure App 服務。 Azure App 服務 是完全受控的 Web 裝載服務,可支援裝載於 Linux 伺服器環境中的 Python 應用程式。

若要完成本快速入門,您需要:

注意

本文包含使用 Azure App 服務 部署 Python Web 應用程式的目前指示。 不再支援 Windows 上的 Python。

1 - 範例應用程式

本快速入門可以使用 Flask 或 Django 來完成。 提供每個架構中的範例應用程式,以協助您遵循本快速入門。 下載或複製範例應用程式至本機工作站。

git clone https://github.com/Azure-Samples/msdocs-python-flask-webapp-quickstart

若要在本機執行應用程式:

  1. 移至應用程式資料夾:

    cd msdocs-python-flask-webapp-quickstart
    
  2. 建立應用程式的虛擬環境:

    py -m venv .venv
    .venv\scripts\activate
    
  3. 安裝相依性:

    pip install -r requirements.txt
    
  4. 執行應用程式:

    flask run
    
  5. 流覽至網頁瀏覽器中的範例應用程式 http://localhost:5000

    Screenshot of the Flask app running locally in a browser

有問題嗎? 讓我們知道

2 - 在 Azure 中建立 Web 應用程式

若要在 Azure 中裝載您的應用程式,您必須在 Azure 中建立 Azure App 服務 Web 應用程式。 您可以使用 Azure CLI、VS CodeAzure Tools 擴充套件Azure 入口網站 來建立 Web 應用程式。

Azure CLI 命令可以在已安裝 Azure CLI 的電腦上執行。

Azure CLI 具有命令 az webapp up ,將建立必要的資源,並在單一步驟中部署您的應用程式。

如有必要,請使用 az login 登入 Azure。

az login

建立 webapp 和其他資源,然後使用 az webapp up 將程式代碼部署至 Azure

az webapp up --runtime PYTHON:3.9 --sku B1 --logs
  • 參數 --runtime 會指定應用程式正在執行的 Python 版本。 此範例使用 Python 3.9。 若要列出所有可用的執行時間,請使用 命令 az webapp list-runtimes --os linux --output table
  • 參數 --sku 會定義App Service 方案的大小(CPU、記憶體)和成本。 此範例使用 B1 (基本) 服務方案,這會在您的 Azure 訂用帳戶中產生少量成本。 如需 App Service 方案的完整清單,請檢視 App Service 定價 頁面。
  • --logs 標會設定在啟動 webapp 之後立即啟用檢視記錄數據流所需的預設記錄。
  • 您可以選擇性地使用 自變數 --name <app-name>來指定名稱。 如果您沒有提供名稱,則會自動產生名稱。
  • 您可以選擇性地包含自變數 --location <location-name> ,其中 <location_name> 是可用的 Azure 區域。 您可以執行 az account list-locations 命令來擷取 Azure 帳戶允許的區域清單。

此命令可能需要幾分鐘的時間才能完成。 當命令執行時,它會提供建立資源群組、App Service 方案和應用程式資源、設定記錄,以及執行 ZIP 部署的相關訊息。 接著會提供訊息:「您可以在 azure 上的應用程式 URL http://< app-name.azurewebsites.net> 啟動應用程式。

The webapp '<app-name>' doesn't exist
Creating Resource group '<group-name>' ...
Resource group creation complete
Creating AppServicePlan '<app-service-plan-name>' ...
Creating webapp '<app-name>' ...
Configuring default logging for the app, if not already enabled
Creating zip with contents of dir /home/cephas/myExpressApp ...
Getting scm site credentials for zip deployment
Starting zip deployment. This operation can take a while to complete ...
Deployment endpoint responded with status code 202
You can launch the app at http://<app-name>.azurewebsites.net
{
  "URL": "http://<app-name>.azurewebsites.net",
  "appserviceplan": "<app-service-plan-name>",
  "location": "centralus",
  "name": "<app-name>",
  "os": "<os-type>",
  "resourcegroup": "<group-name>",
  "runtime_version": "python|3.9",
  "runtime_version_detected": "0.0",
  "sku": "FREE",
  "src_path": "<your-folder-location>"
}

注意

az webapp up 命令會執行下列動作:

有問題嗎? 讓我們知道

3 - 將應用程式程式代碼部署至 Azure

Azure App Service 支援多種方法,將應用程式程式代碼部署至 Azure,包括 GitHub Actions 和所有主要 CI/CD 工具的支援。 本文著重於如何將程式代碼從本機工作站部署至 Azure。

az webapp up由於命令已建立必要的資源,並在單一步驟中部署您的應用程式,因此您可以繼續移至 4 - 瀏覽至應用程式


有問題嗎? 請先參閱 疑難解答指南,否則讓我們 知道

4 - 瀏覽至應用程式

在網頁瀏覽器中瀏覽至已部署的應用程式,網址 http://<app-name>.azurewebsites.net為 。 如果您看到預設應用程式頁面,請等候一分鐘並重新整理瀏覽器。

Python 範例程式代碼會使用內建映像在 App Service 中執行 Linux 容器。

Screenshot of the app running in Azure

恭喜! 您已將 Python 應用程式部署至 App Service。

有問題嗎? 請先參閱 疑難解答指南,否則讓我們 知道

5 - 串流記錄

Azure App 服務 擷取主控台的所有訊息輸出,以協助您診斷應用程式的問題。 範例應用程式包含 print() 可示範這項功能的語句。

app = Flask(__name__)


@app.route('/')
def index():
   print('Request for index page received')
   return render_template('index.html')

@app.route('/favicon.ico')
def favicon():
    return send_from_directory(os.path.join(app.root_path, 'static'),
                               'favicon.ico', mimetype='image/vnd.microsoft.icon')

@app.route('/hello', methods=['POST'])
def hello():
   name = request.form.get('name')

您可以使用 Azure CLI、VS Code 或 Azure 入口網站 來檢閱 App Service 診斷記錄的內容。

首先,您必須使用 az webapp log config 命令,將 Azure App 服務 將記錄輸出至 App Service 文件系統

az webapp log config \
    --web-server-logging filesystem \
    --name $APP_SERVICE_NAME \
    --resource-group $RESOURCE_GROUP_NAME

若要串流記錄,請使用 az webapp log tail 命令。

az webapp log tail \
    --name $APP_SERVICE_NAME \
    --resource-group $RESOURCE_GROUP_NAME

重新整理應用程式中的首頁,或嘗試其他要求產生一些記錄訊息。 輸出應類似下列內容。

Starting Live Log Stream ---

2021-12-23T02:15:52.740703322Z Request for index page received
2021-12-23T02:15:52.740740222Z 169.254.130.1 - - [23/Dec/2021:02:15:52 +0000] "GET / HTTP/1.1" 200 1360 "https://msdocs-python-webapp-quickstart-123.azurewebsites.net/hello" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0"
2021-12-23T02:15:52.841043070Z 169.254.130.1 - - [23/Dec/2021:02:15:52 +0000] "GET /static/bootstrap/css/bootstrap.min.css HTTP/1.1" 200 0 "https://msdocs-python-webapp-quickstart-123.azurewebsites.net/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0"
2021-12-23T02:15:52.884541951Z 169.254.130.1 - - [23/Dec/2021:02:15:52 +0000] "GET /static/images/azure-icon.svg HTTP/1.1" 200 0 "https://msdocs-python-webapp-quickstart-123.azurewebsites.net/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0"
2021-12-23T02:15:53.043211176Z 169.254.130.1 - - [23/Dec/2021:02:15:53 +0000] "GET /favicon.ico HTTP/1.1" 404 232 "https://msdocs-python-webapp-quickstart-123.azurewebsites.net/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0"

2021-12-23T02:16:01.304306845Z Request for hello page received with name=David
2021-12-23T02:16:01.304335945Z 169.254.130.1 - - [23/Dec/2021:02:16:01 +0000] "POST /hello HTTP/1.1" 200 695 "https://msdocs-python-webapp-quickstart-123.azurewebsites.net/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0"
2021-12-23T02:16:01.398399251Z 169.254.130.1 - - [23/Dec/2021:02:16:01 +0000] "GET /static/bootstrap/css/bootstrap.min.css HTTP/1.1" 304 0 "https://msdocs-python-webapp-quickstart-123.azurewebsites.net/hello" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0"
2021-12-23T02:16:01.430740060Z 169.254.130.1 - - [23/Dec/2021:02:16:01 +0000] "GET /static/images/azure-icon.svg HTTP/1.1" 304 0 "https://msdocs-python-webapp-quickstart-123.azurewebsites.net/hello" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0"

有問題嗎? 請先參閱 疑難解答指南,否則讓我們 知道

清除資源

當您完成範例應用程式時,您可以從 Azure 移除應用程式的所有資源。 它不會產生額外費用,並讓您的 Azure 訂用帳戶保持未整理。 拿掉資源群組也會移除資源群組中的所有資源,而且是移除應用程式所有 Azure 資源最快的方式。

使用 az group delete 命令刪除 資源群組。

az group delete \
    --name msdocs-python-webapp-quickstart \
    --no-wait

--no-wait 變數可讓命令在作業完成之前傳回。

有問題嗎? 讓我們知道

下一步