Skip to content

Render にデプロイ(Free プラン)

デプロイ のページでは Rocky Linux のサーバーに Gunicorn と systemd で動かす方法を書いたけど、ここでは Render に無料(Free プラン)でデプロイする方法を。サーバーの OS やプロセス管理を自分で面倒みなくていいのがラク: cf. Deploy for Free

Info

GitHub のリポジトリと uv.lock がある前提で。 Render が連携したリポジトリを見て、 push のたびに自動でビルド&デプロイしてくれる。


Web Service を作成する

Render のダッシュボードで New → Web Service を選んで、デプロイしたい GitHub リポジトリを連携する。 Python プロジェクトだと Render が中身を見て、いくつかのフィールドを自動で埋めてくれる。

Render の New Web Service 設定画面

主な項目はこんな感じ。

  • LanguagePython 3 が自動で選ばれる。
  • Branch … ビルド対象のブランチ。ここに push するたびに自動デプロイされる。
  • Region … リージョン。近いところを選ぶ(Free プランでも選べる)。
  • Build Command … デプロイのたびに最初に走るコマンド。
  • Start Command … ビルドのあとにアプリを起動するコマンド。

Build Command

uv.lock があると Render は uv を検出して、下記を自動で入れてくれる。

uv sync --frozen && uv cache prune --ci
  • uv sync --frozenuv.lock の通りに依存をインストールする(ロックを更新しない)。
  • uv cache prune --ci … ビルドで使った uv のキャッシュを削ってデプロイを軽くする: cf. uv の Caching ドキュメント

Start Command

Build Command と違って自動では埋まらないので、自分で入力する。

uv run fastapi run

fastapi run は Uvicorn でアプリを起動する。 fastapi dev と違って 0.0.0.0 を listen するので外から繋がる: cf. uv で FastAPI を動かすガイド

Free プランは 0.1 CPU / 512 MB RAM で弱いので、 デプロイ でやったような Gunicorn の複数ワーカーは使わない方がいいかな。


Free プランを選ぶ

設定画面を下にスクロールすると Instance Type でプランを選べるので Free を選ぶ。 *.onrender.com の HTTPS 付き URL がもらえて、 TLS 証明書も Render が用意してくれる。


環境変数を設定する

SECRET_KEY みたいな秘密の値はリポジトリに置かず、 Render の Environment で環境変数として設定する。 設定管理(pydantic-settings) のように .env から読む作りにしておけば、ローカルは .env、本番は Render の環境変数、で同じコードのまま動かせる。

Note

.env ファイル自体は .gitignore で除外してリポジトリに含めない。 Render には Environment 画面から 1 つずつ、または .env の中身をまとめて貼り付けて登録できる。


Free プランの制限

無料なので当然いろいろ制限がある。

一定時間アクセスがないとスリープする

Free プランの Web Service は 15 分アクセスがないとスリープ(spin down)して、次のリクエストで起こされる。起き上がるまで 1 分くらいかかるので、しばらく放置したあとの 1 回目のレスポンスがすごく遅い。常時すぐ応答してほしいものには向かない。

データの保存はできない

Free プランは永続ディスク(Persistent Disk)が使えない。デプロイ・再起動・スリープのたびにファイルシステムがまっさらになるので、 データベース で使った SQLite の app.db のようなファイルは消える。残したいデータは外部のマネージド DB(Render の PostgreSQL など)を使う。

Warning

Render の無料 PostgreSQL は作成から一定期間で削除されるらしい。残したいデータは有料 DB か別サービスで。

無料の稼働時間に上限がある

Free プランは全体で月 750 時間まで。 Web Service を 1 個だけ常時動かすぶんには 1 か月(約 730 時間)まかなえる。


自動デプロイ

連携した GitHub ブランチに push すると、 Render が自動でビルドして再デプロイしてくれる。

Warning

とはいえバグった状態をデプロイしたくないので、 GitHub Actionspytest を PASS したらデプロイする、みたいなプロセスにしておくといいと思う。