快速入門:將 Python (Django、Flask 或 FastAPI) Web 應用程式部署至 Azure App Service
注意
從 2024 年 6 月 1 日起,所有新建立的 App Service 應用程式都可以選擇使用命名慣例 <app-name>-<random-hash>.<region>.azurewebsites.net
來產生唯一的預設主機名稱。 現有的應用程式名稱將保持不變。
範例: myapp-ds27dh7271aah175.westus-01.azurewebsites.net
如需詳細資料,請參閱 App Service 資源的唯一預設主機名稱 (英文)。
在本快速入門中,您會將 Python Web 應用程式 (Django、Flask 或 FastAPI) 部署至 Azure App Service。 Azure App Service 是完全受控的 Web 裝載服務,支援裝載於 Linux 伺服器環境的 Python 應用程式。
若要完成本快速入門,您需要:
- 具有有效訂用帳戶的 Azure 帳戶。 免費建立帳戶。
- 已在本機安裝 Python 3.9 或更高版本 (英文)。
注意
本文包含使用 Azure App Service 部署 Python Web 應用程式的最新指示。 Windows 上的 Python 已不再受到支援。
範例應用程式
您可以使用 Flask、Django 或 FastAPI 完成本快速入門。 我們會針對各個架構提供應用程式範例,協助您按照本快速入門的說明操作。 將應用程式範例下載或複製到本機工作站。
git clone https://github.com/Azure-Samples/msdocs-python-flask-webapp-quickstart
在本機執行應用程式:
前往應用程式資料夾:
cd msdocs-python-flask-webapp-quickstart
建立應用程式的虛擬環境:
py -m venv .venv .venv\scripts\activate
安裝相依性:
pip install -r requirements.txt
執行應用程式:
flask run
在網路瀏覽器中前往位於
http://localhost:5000
的應用程式範例。
有問題嗎? 請告訴我們。
在 Azure 中建立 Web 應用程式
若要在 Azure 中裝載應用程式,您必須在 Azure 中建立 Azure App Service Web 應用程式。 您可利用 Azure CLI、VS Code、Azure 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 appservice list-locations
命令,擷取 Azure 帳戶的允許區域清單。
此命令可能需要數分鐘才能完成。 此命令執行時會提供相關訊息,包括建立資源群組、App Service 方案和應用程式資源、設定記錄,以及執行 ZIP 部署。 接著會提供「您可以在 http://<app-name>.azurewebsites.net 啟動應用程式」的訊息,這是 Azure 上應用程式的 URL。
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
命令會執行下列動作:
建立預設資源群組。
建立預設 App Service 方案。
使用所指定的名稱建立應用程式。
在 .azure/config 檔案中本機快取參數,這樣您就不需要在稍後使用
az webapp up
或其他來自專案資料夾的az webapp
命令進行部署時再次加以指定。 預設會自動使用快取的值。
有問題嗎? 請告訴我們。
將應用程式程式碼部署至 Azure
Azure App Service 支援多種將應用程式程式碼部署至 Azure 的方法,包括對 GitHub Actions 和所有主要的 CI/CD 工具。 本文著重於如何將程式碼從本機工作站部署到 Azure。
由於 az webapp up
命令已建立必要的資源,並在單一步驟中部署您的應用程式,因此您可以移至下一個步驟。
有問題嗎? 請先參閱疑難排解指南。 如果沒有幫助,請告訴我們。
設定啟動指令碼
App Service 會根據部署中存在的特定檔案,自動偵測應用程式是 Django 或 Flask 應用程式,然後執行預設步驟來執行您的應用程式。 針對以其他 Web 架構為基礎的應用程式,如 FastAPI,您必須設定 App Service 的啟動指令碼來執行您的應用程式;否則,App Service 會執行位於 opt/defaultsite 資料夾中的預設唯讀應用程式。
若要深入了解 App Service 如何執行 Python 應用程式,以及如何設定和自訂其搭配您應用程式的行為,請參閱設定適用於 Azure App Service 的 Linux Python 應用程式 (部分機器翻譯)。
App Service 會自動偵測 Flask 應用程式是否存在。 此快速入門不需要其他設定。
瀏覽至應用程式
在網頁瀏覽器中使用 URL http://<app-name>.azurewebsites.net
,瀏覽至已部署的應用程式。 如果您看到預設應用程式頁面,請等候一分鐘並重新整理瀏覽器。
Python 範例程式碼目前使用內建映像在 App Service 中執行 Linux 容器。
恭喜! 您已將 Python 應用程式部署至 App Service。
有問題嗎? 請先參閱疑難排解指南。 如果沒有幫助,請告訴我們。
資料流記錄
Azure App Service 會擷取所有輸出到主控台的訊息,以協助您診斷應用程式的問題。 以下應用程式範例中包含的 print()
陳述式可示範這項功能。
@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')
if name:
print('Request for hello page received with name=%s' % name)
return render_template('hello.html', name = name)
else:
print('Request for hello page received with no name or blank name -- redirecting')
return redirect(url_for('index'))
您可以使用 Azure CLI、VS Code 或 Azure 入口網站來檢閱 App Service 診斷記錄的內容。
首先,您必須使用 az webapp log config 命令設定 Azure App Service,以將記錄輸出至 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
引數可讓命令在作業完成之前傳回。
有問題嗎? 請告訴我們。