Compose スクリプト統合
Compose マージ: merge-compose.sh スクリプトは、公式のミニプレム(MiniPrem)の compose ファイルとお客様のカスタムサービスを単一の docker-compose.override.yml に統合し、カスタマイズ内容をアップデートに対して安全に保ちます。
概要
merge-compose.sh スクリプトは、公式の MiniPrem Docker Compose ファイルとユーザー定義のカスタムサービスをインテリジェントにマージします。これにより、公式の compose ファイルを更新可能な状態に保ちつつ、追加サービスで MiniPrem を拡張できます。
クイックスタート
1. カスタム compose ファイルを作成する
cd /Users/tyler/Software_Development/miniprem-2025/docker
cp docker-compose.custom.yml.example docker-compose.custom.yml
# Edit docker-compose.custom.yml with your custom services2. マージスクリプトを実行する
./scripts/merge-compose.shこれにより、Docker Compose が自動的に利用する docker-compose.override.yml が生成されます。
3. サービスを起動する
# Docker Compose automatically merges docker-compose.yml + docker-compose.override.yml
docker-compose up -d
# Or explicitly specify both files
docker-compose -f docker-compose.yml -f docker-compose.override.yml up -dスクリプトの機能
インテリジェントなマージ
サービス: カスタムサービスを公式サービスに追記します
ボリューム: ボリューム定義をマージします(重複なし)
ネットワーク: ネットワーク定義をマージします
環境変数: カスタム環境変数で公式の値を上書きできます(サービス定義内)
競合検出
スクリプトは、カスタムサービスが公式サービスと同じ名前である場合を検出し、複数の解決戦略を提供します。
検証
マージ前後の YAML 構文検証
Docker Compose の設定検証(有効な compose ファイルであることを保証)
問題がある場合は明確なエラーメッセージを表示
メタデータ
生成された override ファイルには、有用なコメントが含まれます:
マージタイムスタンプ
ソースファイル
競合解決戦略
競合のリスト(存在する場合)
使用例
基本的なマージ(デフォルトの動作)
入力:
docker-compose.yml+docker-compose.custom.yml出力:
docker-compose.override.yml戦略: 同名のサービスがある場合、カスタムサービスが公式サービスを上書き
書き込みせずに競合をチェックする
競合が存在する場合は終了コード 2、競合がなければ 0 を返します。
競合解決戦略の選択
カスタムを優先(デフォルト)
サービス名が競合した場合、カスタム版を保持します。
公式を優先
サービス名が競合した場合、公式版を保持します(カスタムサービスは無視されます)。
カスタムサービスをリネーム
サービス名が競合した場合、指定したプレフィックスでカスタムサービスをリネームします。
例: 両方のファイルに redis サービスがある場合、カスタムは custom-redis になります。
カスタム入出力ファイル
詳細出力
マージ処理に関する詳細なデバッグ情報を表示します。
オプションの組み合わせ
終了コード
0: 成功(競合なし、または競合が解決済み)
1: エラー(検証失敗、依存関係不足、構文エラー)
2: 競合検出(情報、戦略によっては成功する場合もあり)
競合のシナリオ
シナリオ 1: 競合なし(最良のケース)
公式:
カスタム:
結果: マージ後のファイルに 4 つすべてのサービスが含まれます。競合なし。
シナリオ 2: サービス名の競合
公式:
カスタム:
解決オプション:
--prefer-custom(デフォルト): カスタムの Redis 設定を使用
--prefer-official: 公式の Redis 設定を使用
--rename-custom "my-": カスタム設定で
my-redisを作成し、公式のredisを保持
シナリオ 3: ボリュームの競合
両方のファイルが同じボリューム名を定義している場合、カスタム定義が優先されます。
公式:
カスタム:
結果: カスタムのボリューム定義が使用されます。
ベストプラクティス
1. 一意のサービス名を使用する
明示的に公式サービスを上書きしたい場合を除き、カスタムサービスに公式サービスと同じ名前を付けることは避けてください。
良い例:
リスクのある例:
2. 依存関係を正しく使用する
カスタムサービスは公式サービスに依存させることができます:
3. カスタムファイルを個別に管理する
docker-compose.custom.yml は公式ファイルとは別にバージョン管理してください。これにより以下が可能になります:
カスタマイズを失わずに公式 compose ファイルを更新
チーム間でカスタムサービスを共有
カスタムサービスの変更を追跡
4. 本番環境にデプロイする前にテストする
マージした設定は必ずテストしてください:
5. カスタムサービスをドキュメント化する
docker-compose.custom.yml に以下を説明するコメントを追加してください:
各サービスの役割
なぜそれが必要か
依存関係や設定要件
トラブルシューティング
エラー: 「Missing required tools: yq」
解決方法:
エラー: 「Invalid YAML syntax」
解決方法: カスタム compose ファイルの構文エラーを確認してください:
よくある問題:
不正なインデント(タブではなく 2 スペースを使用)
コロンの欠落
特殊文字のクォート漏れ
ポートマッピングのクォート漏れ
エラー: 「docker-compose config validation failed」
解決方法: マージ後のファイルに構造上の問題があります。以下を確認してください:
よくある問題:
不正なサービス依存関係
サービス間のポート競合
無効なボリュームまたはネットワーク参照
警告: 「Conflicts detected」
解決方法: 競合を確認し、適切な戦略を選択してください:
高度な使用法
複数のカスタムファイルをマージする
条件付きサービス
カスタムファイルで環境変数を使用します:
実行時に制御します:
CI/CD での自動マージ
MiniPrem との統合
デフォルト(Default Install)
MiniPrem のデフォルト docker-compose.yml には以下が含まれます:
miniprem-monitor: リアルタイムモニタリングダッシュボードrenny: デジタルヒューマンのレンダラー(開発コード:Renny)
フルインストール(Full Install)
docker-compose.full.yml には以下が含まれます:
すべてのデフォルトサービス
vllm: LLM 推論flowise: ワークフロー自動化redis: メッセージキューprometheus: メトリクス収集grafana: メトリクス可視化fastwhisper: STT(音声認識)
カスタムサービスの追加
MiniPrem と統合するサービスを追加できます:
ファイルの配置場所
スクリプト:
/Users/tyler/Software_Development/miniprem-2025/docker/scripts/merge-compose.sh公式 Compose:
/Users/tyler/Software_Development/miniprem-2025/docker/docker-compose.yml公式フル:
/Users/tyler/Software_Development/miniprem-2025/docker/docker-compose.full.ymlカスタムテンプレート:
/Users/tyler/Software_Development/miniprem-2025/docker/docker-compose.custom.yml.exampleお客様のカスタムファイル:
/Users/tyler/Software_Development/miniprem-2025/docker/docker-compose.custom.yml生成された Override:
/Users/tyler/Software_Development/miniprem-2025/docker/docker-compose.override.yml
セキュリティに関する考慮事項
デフォルトのセキュリティ設定
スクリプトは公式サービスのセキュリティ設定を保持します:
security_opt: no-new-privileges:trueread_only: true(適用可能な場合)ロギングの上限
ヘルスチェック
カスタムサービスのセキュリティ
カスタムサービスには必ずセキュリティ設定を含めてください:
シークレット管理
compose ファイルにシークレットをハードコードしないでください:
悪い例:
良い例:
そのうえで .env ファイルや環境変数を使用してください。
ヘルプの取得
コントリビュート
バグを見つけた、または機能リクエストがありますか?マージスクリプトは MiniPrem プロジェクトの一部です。Issue の報告や改善のコントリビュートをお願いします。
ライセンス
MiniPrem プロジェクトの一部です。詳細はプロジェクトのライセンスを参照してください。
最終更新
