採点されません。匿名です。 間違えることは学習の一部です。読むだけでもかまいません。

L?? ch02 — Render に FastAPI をデプロイする

テクノロジ系 / L15 deploy — デプロイ

L?? ch02 — Render に FastAPI をデプロイする

無料枠でいきなり「URL で叩ける」状態にする最短ルート

ゴール

  • Render が「何を引き受けてくれるサービスか」を 1 行で言える
  • GitHub repo を Render に繋げてデプロイできる
  • Build Command / Start Command の役割を区別できる
  • 公開 URL に /healthz を叩いて 200 が返るところまで確認できる

Render とは

  • GitHub の repo を push したら勝手にビルド & 公開してくれる PaaS
  • Heroku の代替として広く使われる
  • 無料プラン (Free Web Service) で FastAPI を公開できる
  • 無料枠は 15 分アクセスがないと スリープ する (= 次のアクセスでコールドスタート)

- 教材・ポートフォリオ用途には十分

何を Render に渡すか

渡すもの何のため
GitHub repo URLRender が pull してきてビルドする
Build Command依存関係のインストール (例: pip install -r requirements.txt)
Start Commandアプリの起動 (例: uvicorn main:app --host 0.0.0.0 --port $PORT)
環境変数DATABASE_URL / SECRET_KEY などの設定

最小構成の repo

my-fastapi-app/
├── main.py              # FastAPI アプリ本体
├── requirements.txt     # 依存パッケージ
└── README.md
# main.py
from fastapi import FastAPI

app = FastAPI()

@app.get("/healthz")
def healthz():
    return {"status": "ok"}
# requirements.txt
fastapi
uvicorn[standard]

Render での設定 (walkthrough)

  1. https://render.com にサインアップ (GitHub 連携)
  2. ダッシュボード → New +Web Service
  3. GitHub repo を選択
  4. 以下を入力:
項目
Namemy-fastapi-app (URL の一部になる)
RegionSingapore (日本から最も近い)
Branchmain
RuntimePython 3
Build Commandpip install -r requirements.txt
Start Commanduvicorn main:app --host 0.0.0.0 --port $PORT
Instance TypeFree

$PORT がポイント

# ❌ ローカルと同じノリ
uvicorn main:app --port 8000

# ✅ Render が割り当てた PORT を読む
uvicorn main:app --host 0.0.0.0 --port $PORT
  • Render は実行時に環境変数 $PORT を勝手にセットする
  • 0.0.0.0 で待たないと外から繋がらない (127.0.0.1 だと内部からしか繋がらない)

デプロイ後の確認

# Render が払い出す URL
# 例: https://my-fastapi-app.onrender.com

curl https://my-fastapi-app.onrender.com/healthz
# → {"status":"ok"}

# 自動生成された API ドキュメント
open https://my-fastapi-app.onrender.com/docs

環境変数の設定

UI から: Environment タブ → Add Environment Variable

KeyValue用途
DATABASE_URLpostgres://...DB 接続文字列
SECRET_KEY<ランダム長文字列>JWT 署名 など
PYTHON_VERSION3.12.0Python のバージョン固定

→ 環境変数は コードに書かないos.environ["SECRET_KEY"] で読む。

自動デプロイ (CD)

  • main ブランチに push すると Render が自動で再ビルド & 再デプロイ
  • ダッシュボード → Manual Deploy から手動デプロイも可能
  • 失敗時は Logs タブでビルドログ / ランタイムログを確認

よくある詰まり

症状原因対処
Build 通るが起動失敗--host 0.0.0.0 忘れStart Command 修正
$PORT が反映されないクォートで囲んでる"$PORT" ではなく $PORT
初回アクセスが遅いFree プランのコールドスタート想定動作。有料プランで解消
ModuleNotFoundErrorrequirements.txt 漏れローカルで pip freeze を確認

drill

drill/ — Render walkthrough を読みながら、自分の repo の main.pyrequirements.txt を埋める

まとめ

  • Render = GitHub 連携で勝手にビルド & 公開してくれる PaaS
  • 必要なのは Build Command + Start Command + 環境変数
  • --host 0.0.0.0 --port $PORT だけ忘れない
  • /docs がそのまま動くので「API として公開した」と即証明できる

次に学ぶ領域

領域続けて読む
Azure (本格的な PaaS)ch03-azure
CI/CD パイプラインGitHub Actions 編 (= 将来の chapter)
カスタムドメインRender の Custom Domains 設定
力試ししたい方は クイズ形式の演習(任意) もあります。読むだけでも十分です。