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 URL | Render が 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)
- https://render.com にサインアップ (GitHub 連携)
- ダッシュボード → New + → Web Service
- GitHub repo を選択
- 以下を入力:
| 項目 | 値 |
|---|---|
| Name | my-fastapi-app (URL の一部になる) |
| Region | Singapore (日本から最も近い) |
| Branch | main |
| Runtime | Python 3 |
| Build Command | pip install -r requirements.txt |
| Start Command | uvicorn main:app --host 0.0.0.0 --port $PORT |
| Instance Type | Free |
$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
| Key | Value | 用途 |
|---|---|---|
DATABASE_URL | postgres://... | DB 接続文字列 |
SECRET_KEY | <ランダム長文字列> | JWT 署名 など |
PYTHON_VERSION | 3.12.0 | Python のバージョン固定 |
→ 環境変数は コードに書かない。os.environ["SECRET_KEY"] で読む。
自動デプロイ (CD)
mainブランチに push すると Render が自動で再ビルド & 再デプロイ- ダッシュボード → Manual Deploy から手動デプロイも可能
- 失敗時は Logs タブでビルドログ / ランタイムログを確認
よくある詰まり
| 症状 | 原因 | 対処 |
|---|---|---|
| Build 通るが起動失敗 | --host 0.0.0.0 忘れ | Start Command 修正 |
$PORT が反映されない | クォートで囲んでる | "$PORT" ではなく $PORT |
| 初回アクセスが遅い | Free プランのコールドスタート | 想定動作。有料プランで解消 |
ModuleNotFoundError | requirements.txt 漏れ | ローカルで pip freeze を確認 |
drill
drill/ — Render walkthrough を読みながら、自分の repo の main.py と requirements.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 設定 |
力試ししたい方は クイズ形式の演習(任意) もあります。読むだけでも十分です。