Flask動的WebサイトをAzureにGithubからDeployする
Summary
- Azure web appsを使う。
- GithubからGithub Actionsを使ってDeployする。
[12/8/2019追記]
GithubからDeployする方法だと、Pythonの依存パッケージの自動インストール等が動かなかった。今はLocal gitから直接AzureにPushしている。
[7/11/2021更新]
ある環境変数を設定すると、GithubからのDeployでもパッケージのインストールがされるらしい。本文中に追記した。
Repository
リポジトリ内にFlask用のapp.pyと、依存パッケージのリストであるrequirements.txtを作成する。任意のディレクトリを使ってよい。Github Actions内でそのディレクトリを指定する。
Azure Web Apps
普通にAzure Web Appsリソースを作成する。Freeプランだと後々Custom domainやSSLの設定ができないので、一番安いPaidプランを使った。
次に、Publish profileをダウンロードする。このファイルにはDeployに必要なすべての情報が含まれている。秘密の情報も含まれているので取り扱いには注意。
デフォルトだと、依存パッケージのインストールは行われない。Web AppsのSettingsページから、SCM_DO_BUILD_DURING_DEPLOYMENT=1という環境変数を登録しなければならない。詳細は以下のページに書いてある。
https://docs.microsoft.com/en-us/azure/app-service/configure-language-python
Github Actions
WebのUIからActionの新規作成。テンプレートとしてDeploy Node.js to Azure Web Appを使うのが便利だった。先ほどダウンロードしたPublish profileファイルの中身をProjectのSettingsからSecretにAZURE_WEBAPP_PUBLISH_PROFILEとして登録する。そしてテンプレートの中身を用途に合わせて編集しCommit。
自分はPythonのFlaskフレームワークを使っているので、Node.js関連のコードを削除し、以下のような設定とした。
# This workflow will build and push an application to an Azure Web App on every push to the master branch. # # To configure this workflow: # # 1. Set up a secret in your repository named AZURE_WEBAPP_PUBLISH_PROFILE with the value of your Azure publish profile. # # 2. Change the values for the AZURE_WEBAPP_NAME and AZURE_WEBAPP_PACKAGE_PATH environment variables (below). # # For more information on GitHub Actions for Azure, refer to https://github.com/Azure/Actions # For more samples to get started with GitHub Action workflows to deploy to Azure, refer to https://github.com/Azure/actions-workflow-samples on: push: branches: - master env: AZURE_WEBAPP_NAME: test # set this to your application's name AZURE_WEBAPP_PACKAGE_PATH: '.' # set this to the path to your web app project, defaults to the repository root jobs: build-and-deploy: name: Build and Deploy runs-on: ubuntu-latest steps: - uses: actions/checkout@master - name: 'Deploy to Azure WebApp' uses: azure/webapps-deploy@v1 with: app-name: ${{ env.AZURE_WEBAPP_NAME }} publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }} package: ${{ env.AZURE_WEBAPP_PACKAGE_PATH }}
Comments
Post a Comment