Python Flask WebアプリをRenderにデプロイ

Server

Render というアプリケーションをホスティングするためのクラウドプラットフォームには、Python の Flask アプリケーションを比較的簡単にデプロイすることができます
クラウドプラットフォーム(PaaS)として、WebアプリやAPIのデプロイを簡単に行えるサービスを提供しています

無料で使えるプランもあるので、とりあえずアプリを公開してみたいという人にはちょうどいいと思います

今回はRender に Flask アプリをデプロイする基本的な手順を解説します


1. Flask アプリケーションの準備

まず、Flask アプリを作成します
前回までの記事で使用した、以下のようなディレクトリ構成のFlaskのWEBアプリケーションを使用します

さらにhtmlファイルを少しきれいにするため、cssファイルを追加しました
この辺りは好みで追加してください

project/
├── flaskr/
│   ├── __init__.py         # アプリケーションの初期化
│   ├── models.py           # データベースのモデル定義
│   ├── views.py            # ルートやビューのロジック
│   ├── templates/
│   │    ├── index.html     # トップページ
│   │    ├── add.html       # タスクの追加
│   │    └── update.html    # タスクの編集
│   └── static/
│        └──css/
│            └──styles.css  # htmlファイルの装飾用ファイル
└── run.py                  # アプリケーションの起動スクリプト

2. requirements.txtを作成

次にデプロイ先のRenderでの環境を整えるため、requirements.txtを作成します

requirements.txt は、Python プロジェクトで必要なパッケージ(ライブラリ)を一覧にしたファイルです
このファイルを使用すると、他の環境でも同じパッケージを簡単にインストールできます

また、本番環境ではWEBサーバーを立てる必要があるため、追加でライブラリをインストールします

pip install gunicorn

Gunicorn(Green Unicorn)は、PythonのWSGI(Web Server Gateway Interface)アプリケーション用の高性能なHTTPサーバーです
FlaskやDjangoなどのPythonフレームワークを本番環境で動作させるためによく使用されます

以下のコマンドで、projectディレクトリにrequirements.txtを追加します

pip freeze > requirements.txt

3. Git リポジトリのセットアップ

Flask アプリケーションを Git リポジトリにプッシュする必要があります

以前の記事でGithubのリモートリポジトリの作成、プッシュの解説をしましたので参考にしてください


4. RenderでPostgreSQLを作成

Renderの公式サイトにて、PostgreSQLのインスタンスを作成します

PostgreSQLについては以下の記事で紹介していますので参考にしてください

まずは公式サイトにアクセスします

Cloud Application Platform | Render
On Render, you can build, deploy, and scale your apps with unparalleled ease – from your first user to your billionth.

アカウントを作成またはログインします
git hubと連携するとリポジトリの連携ができるのでおすすめです

New +」ボタンをクリックし、「PostgreSQL」を選択します

  • Name:データベースの名前を付けます
  • Region:サーバーの場所を選択します
         デフォルトのままでよいと思います
  • Plan Options Instance Type:お試しの方はFreeの無料プランでよいと思います

他はデフォルトのままで、最後に一番下の Create Databaseをクリックするとデータベースのインスタンスが生成されます

Infoの中の下のほうのConnnectionsにパスワード等が自動的に生成されるので、その中の Internal Database URL をコピーしておきます

Internal Database URLについては以下の記事で解説していますので参考にしてください

5. Render のWEBアプリケーション作成

New +」ボタンをクリックし、「Web Service」を選択します

GitHubのリポジトリサービスと Render を連携します
デプロイしたいリポジトリを選択します

Web Serviceの設定をします

  • Name:サービス名をつけます
  • Language: python 3
  • Region:先ほどのデータベースと同じが良いと思います
  • Build Command: pip install -r requirements.txt
  • Start Command::gunicorn -w 4 -b 0.0.0.0:10000 run:app
    • このコマンドはプログラムによって変わると思います
      自分のrun:appのrunはエントリーポイントのファイル名のrun.pyで、appはその中のインスタンス名です
  • Instance Type:お試しの方はFreeでよいと思います
  • Environment Variables:環境変数を指定します
    • NAME_OF_VARIABLE:DATABASE_URL
    • Value:先ほど生成したPostgreSQLのInternal Database URL

Create Web Service」をクリックすると、自動的にビルドとデプロイが開始されます
Logsを見ながらエラーが起きていないか確認します


5. デプロイ後の確認

デプロイが完了すると、Render からアプリケーションの URL が提供されます

その URL にアクセスして、Flask アプリケーションが正しく動作していることを確認します


Render は無料プランで小規模なアプリケーションであればコストをかけずにデプロイできます
ただし、無料プランではスリープモードに入るなどの制限がある点に注意してください

コメント