コンテンツにスキップ

開発者:システムの概要(重要)

現在、システム移行中につき内容が異なります

現在は、システムの移行作業中であり、以下の内容は移行後のシステムについての説明です。
また、移行に際して問題が生じた場合は、こちらの記載と異なる形で移行する可能性もあります。

本システム(開発環境・本番環境)の理解に務めてください!

本番環境と開発環境では、挙動に差異が生じます。(一例として開発環境ではファイル類のホットリロードが可能ですが、本番環境では不可能です。)
開発環境で動作したからといって、本番環境でも同様に動作するとは限りません。

本システムの改修前に、なるべく構成理解に務めてください。

動作環境

本システムでは、Docker(Docker Compose)を利用できる環境であれば、基本的に動作します。

ただし、開発環境ではVSCodeの補完を効かせるために、Node.jsとPythonの開発環境を整えることをオススメします。(別にこれらの開発環境がなくとも、Dockerさえ動作すれば問題ありません。)

動作するコンテナ類の概要

このシステムの持つ全コンテナを起動させると、以下のような構成になります。

  1. traefik:リバースプロキシサーバ。LBも兼ねます。また、本番環境ではTLS終端です。
  2. FastAPI:バックエンドAPIサーバ。問題の提供や管理などを司ります。開発環境・本番環境ともに、スケーラブルな設計です。
  3. Vite(本番環境ではNginx):フロントエンドサーバ。ユーザインターフェースを提供します。開発環境ではViteに組み込みの開発用サーバを利用していますが、本番環境ではNginxを利用しています。
  4. PostgreSQL:データベースサーバ。問題やユーザの回答情報などを保存します。
  5. PgAdmin4:データベース管理ツール。PostgreSQLの管理を行います。
  6. Redis:キャッシュサーバ(本当はインメモリーデータベース)。一部データのキャッシュ用に利用します。
  7. 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を利用して自動で証明書を発行します。(詳しくはこちら

ざっとシステムの概要