Spring Cloud ローカルインフラ:バージョンを固定した Docker Compose 学習環境
この文書はローカル学習専用です。本番環境では、各コンポーネントの公式デプロイ手順を使い、バージョンを固定し、認証情報を個別に管理して、永続ストレージと高可用性设计方案を採用してください。
1. latest を使わない理由
latest を使うと、同じ Compose ファイルでも、取得するタイミングによってバージョンが変わり、設定、データベーススクリプト、クライアントプロトコル、起動時の動作を再現できません。Nacos、Seata、RabbitMQ、MySQL、Elasticsearch、Kibana はすべてバージョンを固定してください。Elasticsearch と Kibana のバージョンは一致させる必要があります。
2. サービス分割
ローカル環境には次のサービスを含められます:
MySQL 配置和业务数据
Nacos 注册中心与配置中心
Seata 分布式事务协调器
RabbitMQ 消息队列
Elasticsearch/Kibana 可选的日志或检索环境
すべてのコンポーネントにデフォルトのパスワードを設定したり、管理ポートをインターネットに公開したりしないでください。認証情報は .env、Docker secret、またはリポジトリにコミットしないローカルファイルから注入します。
3. Compose 設計原則
各サービスには、固定バージョンのイメージタグ、永続化ボリューム、独立したネットワーク、healthcheck、リソース制限、最小権限が必要です。depends_on は起動順序だけを示し、依存先のサービスがリクエストを受け付けられる状態になったことを意味しません。アプリケーション側では、接続の再試行と準備完了チェックが必要です。
データベース初期化スクリプトは、コンポーネントのバージョンに適合したものを使用してください。特に Seata の TC テーブルと業務データベースの undo_log は、古いチュートリアルからコピーして使うことはできません。
4. Nacos 2.x
Nacos 2.x では、クライアントポート、クラスタ通信ポート、データベース初期化テーブル、認証を併せて確認する必要があります。単一ノードの学習環境では、不要なクラスタ機能を無効にして構いません。本番環境では、公式ドキュメントに従って認証、永続化、高可用性を確保してください。
Spring Cloud Alibaba クライアントのバージョンは、Spring Boot、Spring Cloud、Nacos クライアントと互換性がなければなりません。Config Data Import を使う場合、bootstrap による設定読み込みを標準的な方式として使い続けることは避けてください。
5. Seata 2.x
Seata Server とクライアントは、互換性のあるバージョンを組み合わせてください。TC で file ストレージを使うのはローカル検証のみに限られます。本番環境では、復旧可能なデータベースまたは公式がサポートする高可用性ストレージを使用し、同じバージョンのデータベーススクリプトを実行する必要があります。
AT に参加するすべての業務データベースには、対応バージョンの undo_log が必要です。AT では、メッセージ送信、キャッシュ更新、サードパーティ API 呼び出しをロールバックできません。外部とのやり取りによる副作用には、冪等性、確実なメッセージ配送、補償処理が必要です。
6. RabbitMQ
サポートされている 3.13+ または 4.x のバージョンを使用してください。メッセージ処理の重要な設定として、publisher confirms、永続化、consumer ack、再試行回数の制限、デッドレター、冪等性を設定します。デフォルトユーザー、デフォルトパスワード、管理ポートのインターネット公開は、一時的なローカル環境でのみ許可してください。
7. 本地検証チェックリスト
- すべてのコンテナでバージョンを固定し、再起動後に復旧できること
- データボリュームは再利用でき、初期化スクリプトは繰り返し実行できること
- アプリケーションが未準備状態のサービスを検出し、再試行できること
- Nacos への登録、設定のインポート、リフレッシュを検証できること
- Seata で TM/RM を登録し、ロールバックテストを完了できること
- RabbitMQ で publish、consumer ack、デッドレターを確認できること
- Compose ファイルに実際のパスワード、トークン、本番環境のアドレスが含まれないこと
この環境の目標は、毎回同じ結果を再現できる学習環境を用意することです。本番アーキテクチャのテンプレートではありません。本番デプロイ前には、ネットワーク、ストレージ、バックアップ、監視、アップグレード、災害復旧を再設計する必要があります。