🪶
FastAPI でAPI鯖を環境構築した際の備忘録
FastAPI × PostgreSQL 環境を Docker で構築した際の備忘録。
- 初期参考記事:非同期 FastAPI + PostgreSQL 環境構築
- 非同期 DB 処理の参考リポジトリ:async-fastapi-sqlalchemy
🧩 使用技術・ライブラリ
- FastAPI
- Postgresql
- Docker
- alembic:マイグレーションツール
- sqlalchemy:PythonでDBを操作するORMライブラリ
📁 プロジェクト構成
─── project
├── Dockerfile
├── docker-compose.yml
├── requirements.txt
└── fastapi
└── main.py
基本的な構成は参考記事と同じ
⚙️ Docker 関連ファイル群
docker-compose.yml
① 環境変数の外部化
.env ファイルから
POSTGRES_USER, POSTGRES_PASSWORD, APP_HOST_PORT などを読み込むようにして、
機密情報をコードに直書きしない構成に変更。
② DBヘルスチェックの追加
pg_isready コマンドを使い、DBが接続可能になるまで自動で待機するように設定。
これにより、FastAPIがDB未起動状態でエラーになる問題を防げる。
③ depends_on の改善
depends_on に condition: service_healthy を指定して、
DBがヘルスチェックに成功してから FastAPI が起動するようにした。
確実にDBが使用可能になってからFASTAPIが起動する
DockerFile
- イメージサイズを小さくする試み
- 最後に
entrypoint.shを実行 - 最後にentrypoint.shを実行し、docker-compose起動時に
alembic upgrade headコマンドを自動実行
requirement.txt
- 非同期マイグレーション向けライブラリを調査して追加
- 他使いそうなライブラリ追加
- 参考元記事は同期マイグレーション前提だったため、非同期に移行する必要がありかなり労力を要した
config/entrypoinst.sh
- DB 起動後に
alembic upgrade headを実行 - DB起動待ち処理はDocker Compose 側でもヘルスチェックしているため冗長かもしれないが、一応
- これにより、FastAPI コンテナ内で手動マイグレーションが不要となる
⚙️ Alembic マイグレーション・DB操作関連ファイル
文字に起こすと長そうなので、参考元のみ記載。
この方のリポジトリを参考に非同期DB処理を実装。感謝
参考:async-fastapi-sqlalchemy
- 結果としてユーザー CRUD 処理を実装できた
API の基本 CRUD が完成した時点で環境構築は一旦終了。
JWT 認証などは後ほどアプリケーション側で実装予定。
次のステップのフロントエンドとの統合に進みたい。
成果物
Discussion