スタックは、バージョン管理されたCompose定義、保護されたシークレット、独自のバックアップと復元手段を備えた永続データという、3つの独立した資産を中心に構築します。
家庭用または小規模チーム向けのサーバーでは、OSとコンテナは置き換え可能にしておくべきです。Composeプロジェクトは必要なサービスを定義し、シークレットシステムはデプロイ時に認証情報を提供し、名前付きデータパスは状態を保持します。復旧を成功させるには、故障したマシンの外部に保存された記録から、この3つの役割をクリーンなホスト上で再び結び付けられなければなりません。
Composeを書く前に再構築の境界を定義する
ホストOS、コンテナランタイム、ダウンロード済みイメージは置き換え可能なものとして扱います。Composeファイル、カスタム設定、認証情報、データベース、アップロードファイル、証明書、暗号化キーは、それぞれの実際の復旧上の役割に応じて扱います。
サービスごとに1行のインベントリを作成し、イメージとバージョン、ポート、依存関係、シークレット名、永続パス、バックアップ方法、復元時の検証項目を記載します。インベントリによって、通常はコンテナのファイルシステム内に隠れている状態が明らかになります。
アプリケーションが、書き込み可能なコンテナレイヤーに交換不能なデータを保存している場合は作業を止めてください。スタックを再現可能と見なす前に、そのパスを明示的なボリュームまたはバインドマウントへ移します。
シークレットをコミットせずに定義をバージョン管理する
Composeファイル、機密性のない設定、ヘルスチェック、デプロイメモをバージョン管理に保存します。更新ポリシーに従ってイメージのバージョンまたはダイジェストを固定し、再構築時に別のアプリケーションリリースが暗黙に選択されないようにします。
実際のパスワード、APIキー、プライベート証明書をComposeファイルやリポジトリに配置しないでください。Dockerシークレットをソースの外部で管理する方法についての実践的な解説では、認証情報に別の受け渡し経路が必要な理由を説明しています。
プレースホルダーを含むシークレット名のマニフェストをコミットし、値は暗号化されたパスワードマネージャー、暗号化ファイル、または独立して復元できるシークレットサービスに保管します。
永続データに明確な所有者とパスを割り当てる
各アプリケーションのデータベース、ユーザーアップロード、生成キャッシュ、交換可能なサムネイルを分離します。永続的な状態をバックアップし、再生成できるキャッシュを文書化して、不要な大容量データの復元を避けます。
安定して読みやすいホストパス、または慎重に文書化した名前付きボリュームを使用します。権限は数値IDまたは初期化手順で表現し、クリーンなホストが古いローカルユーザーデータベースに依存しないようにします。
データベースでは、稼働中のファイルを無作為にコピーするのではなく、論理ダンプまたはアプリケーションと整合性のあるスナップショットを調整して取得します。壊れたスタックが唯一のバックアップまで消去できないよう、ダンプ先はアプリケーションボリュームの外部に置きます。
更新を可逆的なデプロイとして設計する
更新前に、現在のComposeリビジョン、イメージ識別子、設定、変更された状態の復元可能な最新コピーを取得します。アプリケーションがデータベースも移行する場合、新しいイメージを取得するだけではロールバック計画になりません。
セルフホスティングの手順では、Composeが複数コンテナの定義と運用コマンドを一元化する方法を紹介しています。状態と認証情報を使い捨てレイヤーの外部に保持しながら、このComposeベースのデプロイパターンを利用します。
一度に1つの依存関係グループだけを更新し、ヘルスチェックとログイン確認を実行してから、正常動作が確認されたリビジョンを記録します。ロールバックに古いデータベース形式が必要になる場合は、別のパスに復元して検証してからクライアントを切り替えます。
クリーンな復旧ホストでスタックを検証する
使い捨てのVMまたは予備のマシンを使用します。文書化された前提条件だけをインストールし、定義をクローンし、承認済みの経路でシークレットを復元し、1つのアプリケーションのデータを復元してから、依存関係の順序に従って起動します。
コンテナの状態だけでなく、サインイン、既知のレコードの読み取り、テスト項目の作成と削除、ホストの再起動を検証し、バックアップ監視が新しい場所を報告することを確認します。文書化されていない手動修正はすべて、ビルドプロセスの不備として記録します。
認証情報の受け渡し方法を選ぶ際は、ZimaSpaceのガイドに進み、DockerシークレットをComposeファイルから分離する方法を確認してください。
最終的なセットアップのルール
クリーンなホスト上でサービス定義を再作成し、リポジトリに公開せずにシークレットを受け取り、永続的な状態を復元し、アプリケーションレベルの検証を完了できたとき、セットアップは合格です。複数のホストで同じ管理されたワークフローが必要になった場合にのみ、オーケストレーションへ拡張します。
NAS&サーバー設定
もっと読む

研究論文、ノート、プライベートドキュメント向けのローカルRAG環境
元のドキュメントを正本として扱い、インデックス作成を再現可能にし、引用を必須とし、交換可能なモデルを非公開のソースデータから分離する。

開発者はなぜプライベートDNS、VPN、テストアプリにゲートウェイノードを使うのか?
ゲートウェイノードにより、プライベートアプリには管理された1つの名前とアクセス経路を提供し、コンピュートノードは外部に公開せず、交換可能な状態に保てます。

開発者はデータベースをコンピュートノードとストレージノードのどちらに置くべきか?
開発用データベースの配置場所を、稼働中のデータベースファイルと、バックアップ、ダンプ、レプリカ、大容量のプロジェクトデータを分けて決定します。

