- Docker Composeでローカルスタックを起動します:
docker compose watch
- ブラウザを開いて以下のURLにアクセスできます:
Dockerでビルドされたフロントエンド(パスに基づいてルーティング): http://localhost:5173
OpenAPIベースのJSON形式のバックエンドAPI: http://localhost:8000
OpenAPIバックエンドによる自動対話型ドキュメント(Swagger UI): http://localhost:8000/docs
データベース管理用ウェブインターフェース(Adminer): http://localhost:8080
プロキシによるルート処理の確認用Traefik UI: http://localhost:8090
注意: スタックを初めて起動する際、準備が整うまで1分ほどかかる場合があります。バックエンドがデータベースの準備を待ち、すべての設定を行うためです。ログを確認して進捗を監視できます。
ログを確認するには(別のターミナルで)以下を実行します:
docker compose logs
特定のサービスのログを確認するには、サービス名を追加します。例:
docker compose logs backend
Docker Composeファイルは、各サービスがlocalhost
の異なるポートで利用できるように設定されています。
バックエンドとフロントエンドは、ローカル開発サーバーと同じポートを使用します。つまり、バックエンドはhttp://localhost:8000
、フロントエンドはhttp://localhost:5173
です。
これにより、Docker Composeサービスを停止してローカル開発サービスを起動しても、同じポートを使用するため、すべてが正常に動作し続けます。
例えば、Docker Composeのfrontend
サービスを停止し、別のターミナルで以下を実行できます:
docker compose stop frontend
そしてローカルフロントエンド開発サーバーを起動します:
cd frontend
npm run dev
またはbackend
Docker Composeサービスを停止できます:
docker compose stop backend
そしてバックエンドのローカル開発サーバーを実行できます:
cd backend
fastapi dev app/main.py
Docker Composeスタックを起動すると、デフォルトでlocalhost
を使用し、各サービス(バックエンド、フロントエンド、Adminerなど)に異なるポートが割り当てられます。
本番環境(またはステージング環境)にデプロイする際は、各サービスが異なるサブドメインにデプロイされます(例:バックエンドはapi.example.com
、フロントエンドはdashboard.example.com
)。
デプロイメントのガイドでは、設定されたプロキシであるTraefikについて説明しています。これはサブドメインに基づいて各サービスにトラフィックを転送する役割を果たします。
ローカルでこれらが正常に動作しているかテストしたい場合は、ローカルの.env
ファイルを編集し、以下のように変更できます:
DOMAIN=localhost.tiangolo.com
これはDocker Composeファイルでサービスのベースドメインを設定するために使用されます。
Traefikはこれを使用して、api.localhost.tiangolo.com
へのトラフィックをバックエンドに、dashboard.localhost.tiangolo.com
へのトラフィックをフロントエンドに転送します。
localhost.tiangolo.com
ドメイン(およびそのすべてのサブドメイン)は127.0.0.1
を指すように設定された特別なドメインです。これによりローカル開発に使用できます。
更新後、再度以下を実行します:
docker compose watch
本番環境などにデプロイする場合、メインのTraefikはDocker Composeファイルの外部で設定されます。ローカル開発では、docker-compose.override.yml
に含まれるTraefikを使用して、api.localhost.tiangolo.com
やdashboard.localhost.tiangolo.com
などのドメインが期待通りに動作することをテストできます。
スタック全体に適用される設定を含むメインのcompose.yml
ファイルがあり、docker compose
によって自動的に使用されます。
また、開発用のオーバーライドを含むcompose.override.yml
もあります。例えば、ソースコードをボリュームとしてマウントするなどの設定が含まれています。これはdocker compose
によって自動的に使用され、compose.yml
の上にオーバーライドを適用します。
これらのDocker Composeファイルは、コンテナに注入される環境変数として設定を含む.env
ファイルを使用します。
また、docker compose
コマンドを呼び出す前にスクリプトで設定された環境変数からいくつかの追加設定も使用します。
変数を変更した後は、必ずスタックを再起動してください:
docker compose watch
.env
ファイルには、すべての設定、生成されたキーやパスワードなどが含まれています。
プロジェクトがパブリックな場合など、ワークフローによってはGitから除外したい場合があります。その場合、プロジェクトのビルドやデプロイ時にCIツールがこれを取得する方法を確保する必要があります。
一つの方法として、各環境変数をCI/CDシステムに追加し、compose.yml
ファイルを更新して.env
ファイルを読み取る代わりに特定の環境変数を読み取るようにすることができます。
コードのリンティングとフォーマットにはpre-commitというツールを使用しています。
インストールすると、gitでコミットする直前に実行されます。これにより、コードが一貫性を保ち、フォーマットされていることがコミット前に確認されます。
プロジェクトのルートに.pre-commit-config.yaml
という設定ファイルがあります。
pre-commit
はすでにプロジェクトの依存関係の一部ですが、グローバルにインストールすることもできます。その場合は公式のpre-commitドキュメントに従ってください。
pre-commit
ツールがインストールされ利用可能になったら、各コミットの前に自動的に実行されるようにローカルリポジトリに「インストール」する必要があります。
uv
/uvx
を使用する場合、以下のようにできます:
❯ uv tool install pre-commit
❯ uvx pre-commit install
pre-commit installed at .git/hooks/pre-commit
これで、コミットしようとする際(例:git commit
)に、pre-commitが実行され、コミットしようとしているコードをチェックおよびフォーマットし、そのコードを再度gitでステージングするよう求めます。
その後、修正されたファイルを再度git add
でステージングし、コミットできます。
pre-commit
を全ファイルに対して手動で実行することもできます。uvx
を使用して以下のように実行できます:
❯ uvx pre-commit run --all-files
check for added large files..............................................Passed
check toml...............................................................Passed
check yaml...............................................................Passed
ruff.....................................................................Passed
ruff-format..............................................................Passed
eslint...................................................................Passed
prettier.................................................................Passed
本番環境やステージング環境のURLは、これらと同じパスを使用しますが、独自のドメインを使用します。
ローカル開発用のURL。
フロントエンド: http://localhost:5173
バックエンド: http://localhost:8000
自動対話型ドキュメント(Swagger UI): http://localhost:8000/docs
自動代替ドキュメント(ReDoc): http://localhost:8000/redoc
Adminer: http://localhost:8080
Traefik UI: http://localhost:8090
ローカル開発用のURL。
フロントエンド: http://dashboard.localhost.tiangolo.com
バックエンド: http://api.localhost.tiangolo.com
自動対話型ドキュメント(Swagger UI): http://api.localhost.tiangolo.com/docs
自動代替ドキュメント(ReDoc): http://api.localhost.tiangolo.com/redoc
Adminer: http://localhost.tiangolo.com:8080
Traefik UI: http://localhost.tiangolo.com:8090