Zenn
🎿

Azureを使ってDjangoアプリのデプロイをしてみた①(webサーバー編)

2025/03/11に公開

はじめに

使用技術

  • Python3.12
  • Django
  • Azure

概要

  • 今回の流れを説明します。
  • アプリの作成(Githubにpush済み)と、microsoft Azureにログインできているところから始めます。
  1. AzureでWeb Serviceの作成。
  2. Github Actionsを使った自動デプロイ。
  3. デプロイ後に本番環境で表示するまで。

実装

Web Serviceの作成。

  • App Servicesを選択します。
    Image from Gyazo

  • 今回はwebアプリを作成します。
    Image from Gyazo

  • 赤枠の箇所を入力していきます。

  • リソースグループはインスタンスの詳細を入力すると自動で入力されます。
    Image from Gyazo
    Image from Gyazo

ダッシュボードに行って確認し、サーバーを作成できているか確認してください。

  • 既定のドメインを開くと以下の画像のようになります。
    Image from Gyazo

Github Actionsを使った自動デプロイ。

  • Githubアカウントとの接続を行います。

  • ダッシュボードの自分のwebアプリから、「デプロイセンター」を選択。
    Image from Gyazo

  • Githubアカウントの認証と、リポジトリと自動デプロイを行うブランチを選択します。
    Image from Gyazo

  • 連携できました。

デプロイしてみる

  • 私はmainブランチを本番環境にデプロイしたいと思います。
  • developブランチで作成したファイルをmainブランチにmergeする際に自動で本番環境にデプロイされます。
  • このとき、エラーが現れることがあります。その時の注意点について下に記載します。

注意点①

  • リポジトリ内にrequirements.txtというファイルがないと、Github Actions内のpip install -r requirements.txtコマンド実行時にエラーが起きてしまいます。

  • 下のコマンドでファイルを作成します。

  • 作成したらGithubへ反映させてください。

  • 初めに最上位のプロジェクトのディレクトリに移動します。

cd SampleProjrct
pip freeze > requirements.txt
  • 作成されたrequirements.txtファイルの階層に注意してください。
    • 例えば、もし/backendの下にファイルを配置してしまったときは、下のコードのように.github/workflows/~~.ymlファイルを書き換えてください。
    • .github/workflows/~~.ymlは自動生成されています。
- name: Install dependencies
  run: pip install -r backend/requirements.txt

注意点②

  • Github Actionsの実行中にエラーが出ることがあります。
  • Install independenciesの項目で下の内容のエラーが現れました。
  • このときProcessingの箇所に注目してください。
  • 今回のエラーではrequirements.txt内に不要なパッケージがあると指摘されています。
    • ちなみに私のケースでは @ file:///private/var/...が不要と言われており、このパスは、ローカル環境に一時的に保存されたパッケージを指しています。
    • /private/varの項目をrequirements.txtから削除することでこのエラーは解決できました。
Run pip install -r requirements.txt
  pip install -r requirements.txt
  shell: /usr/bin/bash -e {0}
  env:
    pythonLocation: /opt/hostedtoolcache/Python/3.12.9/x64
    PKG_CONFIG_PATH: /opt/hostedtoolcache/Python/3.12.9/x64/lib/pkgconfig
    Python_ROOT_DIR: /opt/hostedtoolcache/Python/3.12.9/x64
    Python2_ROOT_DIR: /opt/hostedtoolcache/Python/3.12.9/x64
    Python3_ROOT_DIR: /opt/hostedtoolcache/Python/3.12.9/x64
    LD_LIBRARY_PATH: /opt/hostedtoolcache/Python/3.12.9/x64/lib
Processing /private/var/folders/nz/~~~~~~/T/abs_60q98_n2ty/croot/anaconda-anon-usage_1732732446690/work (from -r requirements.txt (line 1))
ERROR: Could not install packages due to an OSError: [Errno 2] No such file or directory: '/private/var/folders/nz/~~~~/T/abs_60q98_n2ty/croot/anaconda-anon-usage_1732733240/work'
  • 階層構造については下記のコードを参照してください。
SampleProjrct 
├── SampleApp
│   ├── __init__.py
│   ├── __pycache__
│   ├── admin.py
│   ├── apps.py
│   ├── migrations
│   ├── models.py
│   ├── tests.py
│   ├── urls.py
│   └── views.py
├── SoraGuchiProjrct
│   ├── asgi.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
├── manage.py
└── requirements.txt

注意点③

  • ALLOWED_HOSTSを指定していない。
  • settings.pyファイルでALLOWED_HOSTSを指定していない場合、本番環境に反映されません。
  • 下のコードのように[]の中に*を記載するか、URLを記載することで解決ができます。
ALLOWED_HOSTS = ['*']

最後に

  • 無料枠があるということと、興味本位でやってみました。
  • 楽しかったです。
  • 記載内容に誤り等あれば教えてください。

参考文献

https://learn.microsoft.com/ja-jp/azure/app-service/tutorial-python-postgresql-app-django?tabs=copilot&pivots=azure-portal
https://technoteswithdiary.com/djangoローカルで作成したwebアプリをazureにデプロイ/

Discussion

ログインするとコメントできます