開発者:システムの概要(重要)
現在、システム移行中につき内容が異なります
現在は、システムの移行作業中であり、以下の内容は移行後のシステムについての説明です。
また、移行に際して問題が生じた場合は、こちらの記載と異なる形で移行する可能性もあります。
本システム(開発環境・本番環境)の理解に務めてください!
本番環境と開発環境では、挙動に差異が生じます。(一例として開発環境ではファイル類のホットリロードが可能ですが、本番環境では不可能です。)
開発環境で動作したからといって、本番環境でも同様に動作するとは限りません。
本システムの改修前に、なるべく構成理解に務めてください。
動作環境
本システムでは、Docker(Docker Compose)を利用できる環境であれば、基本的に動作します。
ただし、開発環境ではVSCodeの補完を効かせるために、Node.jsとPythonの開発環境を整えることをオススメします。(別にこれらの開発環境がなくとも、Dockerさえ動作すれば問題ありません。)
動作するコンテナ類の概要
このシステムの持つ全コンテナを起動させると、以下のような構成になります。
traefik:リバースプロキシサーバ。LBも兼ねます。また、本番環境ではTLS終端です。FastAPI:バックエンドAPIサーバ。問題の提供や管理などを司ります。開発環境・本番環境ともに、スケーラブルな設計です。Vite(本番環境ではNginx):フロントエンドサーバ。ユーザインターフェースを提供します。開発環境ではViteに組み込みの開発用サーバを利用していますが、本番環境ではNginxを利用しています。PostgreSQL:データベースサーバ。問題やユーザの回答情報などを保存します。PgAdmin4:データベース管理ツール。PostgreSQLの管理を行います。Redis:キャッシュサーバ(本当はインメモリーデータベース)。一部データのキャッシュ用に利用します。MkDocs(本番環境はNginx):ドキュメントサイトを提供します。開発環境では開発用サーバを利用していますが、本番環境ではNginxを利用しています。
各コンテナ間のやりとについて
各コンテナは、以下のような内部ネットワークを構築しています。
青線はlb-network、緑線がrd-network、赤線がdb-networkです。所属ネットワーク間の通信は可能ですが、別ネットワークへの直接の通信はできません。例えば、FastAPIコンテナはlb-network db-network rd-networkそれぞれに参加しているので、これらのネットワーク所属端末へそれぞれ通信を行えます。
なお、通常のDockerの構成と異なり、TraefikとPgAdmin4コンテナ以外は外向きにポートを開放しておらず、Traefikコンテナを経由する必要があります。
開発環境
開発環境では、ViteやMkDocsのサーバはホットリロードが可能です。(ここだけ見れば、イマドキの環境っぽくていい感じですね!)

本番環境
上の開発環境とぱっと見では大差ありませんが、セキュリティ面からViteやMkDocsのサーバはビルド後の静的ファイルをNginxでホスティングするようになっています。
また、ユーザからTraefikコンテナまでの間の通信にはHTTPSを利用します。(TraefikがTLS終端です)
ここには記載していませんが、TraefikはLet's Encryptを利用して自動で証明書を発行します。(詳しくはこちら)
