> ## Documentation Index
> Fetch the complete documentation index at: https://docs.casebender.com/llms.txt
> Use this file to discover all available pages before exploring further.

# CaseBender のアップグレード

> データ、ライセンス、資格情報を失うことなく、CaseBender のデプロイを最新バージョンへ安全にアップグレードします。

## 概要

CaseBender はバージョン管理されたコンテナイメージのセットとして提供されます。
アップグレードとは、最新のイメージを取得してコンテナを再作成することです。データ、
ライセンス、設定は **名前付き Docker ボリューム** と **`.env` ファイル** に保存され、
どちらもアップグレード時に保持されます。そのため、これらを維持している限り、
アップグレードでケース、ユーザー、資格情報、ライセンスが失われることはありません。

<Note>
  データベースのマイグレーションと既定データのシードは、アップグレード後の起動時に
  自動的に実行されます。マイグレーションコマンドを手動で実行する必要はありません。
</Note>

## アップグレード時に保持されるもの

| 対象                 | 保存場所                       | 保持する仕組み                   |
| ------------------ | -------------------------- | ------------------------- |
| ケース、アラート、ユーザー、設定   | PostgreSQL                 | `pgdata` ボリューム            |
| ライセンス秘密鍵 + ブロブ     | `/app/apps/web/app/secret` | `casebender_secret` ボリューム |
| アップロードされたファイル / 添付 | MinIO                      | `miniodata` ボリューム         |
| キュー / キャッシュの状態     | Redis                      | `redis_data` ボリューム        |
| 環境設定               | `.env`                     | あなたの `.env` ファイル          |

<Warning>
  本番システムで `docker compose down -v` を実行しないでください。`-v` オプションは
  すべての名前付きボリューム（データベース、ライセンス、ファイル）を削除します。
  これらのボリュームがないと、次回の起動で新しいデータベースが作成され、管理者パスワードが
  既定値にリセットされ、ライセンスが再生成されます。
</Warning>

## アップグレード手順（Docker Compose）

<Steps>
  <Step title="データベースと .env をバックアップする">
    ```bash theme={null}
    # PostgreSQL をバックアップ
    docker compose exec -T db pg_dump -U superadmin casebender > casebender-backup-$(date +%F).sql

    # 設定のコピーを保持
    cp .env .env.backup
    ```
  </Step>

  <Step title="最新のイメージを取得する">
    ```bash theme={null}
    docker compose pull
    ```
  </Step>

  <Step title="コンテナを再作成する">
    ```bash theme={null}
    docker compose up -d
    ```

    Compose はイメージが変更されたサービスのみを再作成し、ボリュームは保持します。
  </Step>

  <Step title="ログを確認する">
    ```bash theme={null}
    docker compose logs -f app
    ```

    マイグレーションとシードは起動時に実行されます。アプリが正常（healthy）になるまで
    待ってください。
  </Step>
</Steps>

## アップグレード後の確認

* サインインして、既存のケース、アラート、ユーザーが存在することを確認します。
* ログインが引き続き機能することを確認します（管理者パスワードは変更されません）。
* worker がジョブを処理していることを確認します。

```bash theme={null}
docker compose logs worker | tail
```

## ロールバック

問題が発生した場合は、以前のイメージタグを固定してバックアップを復元します。

```bash theme={null}
# 既知の安定版を docker-compose.yml に固定します。例:
#   image: casebender/casebender:vX.Y.Z
docker compose pull
docker compose up -d

# 必要に応じてデータベースのバックアップを復元
cat casebender-backup-YYYY-MM-DD.sql | docker compose exec -T db psql -U superadmin casebender
```

<Note>
  必ず先にステージング環境でアップグレードし、本番のアップグレード直前に最新の
  データベースバックアップを取得してください。
</Note>

## よくあるアップグレードの誤り

最もよくある 2 つの問題は、いずれも状態の喪失に起因します。

* **Compose のプロジェクト名やディレクトリを変更する。** Docker はプロジェクトから
  ボリューム名を導出します。フォルダー名を変更したり、別の `-p` プロジェクト名を
  使用したりすると、Compose は *新しい空の* ボリュームを参照します。既存のボリュームを
  再利用するため、常に同じディレクトリ/プロジェクトからアップグレードしてください。
* **`LICENSE_SECRET_KEY` が未設定で、`casebender_secret` ボリュームもない。** 永続的な
  シークレットボリュームがない古いデプロイでは、ライセンスが維持されるよう `.env` に
  `LICENSE_SECRET_KEY` を設定してください（またはボリュームを追加）。現在のデプロイでは
  自動的に保持されます。

## デスクトップインストーラー

デスクトップインストーラーでデプロイした場合は、アプリ内蔵の更新フローを使用して
ください。最新のイメージを取得し、データディレクトリ、`.env`、ライセンスキーを保持
したままサービスを再作成します。

## Google Cloud Run

Cloud Run のアップグレードは新しいリビジョンをデプロイします。Cloud Run の
ファイルシステムは一時的（エフェメラル）であるため、リビジョン間で保持されるよう、
ライセンスシークレットは **Secret Manager** で `LICENSE_SECRET_KEY` として提供する
必要があります。既存の Cloud SQL インスタンスとシークレットに対して再デプロイします。

```bash theme={null}
gcloud run deploy casebender-web --image <新しいイメージ> --region <リージョン>
```

マイグレーションは新しいリビジョンで自動的に実行されます。
