Persistence & Storage
コンテナを作り直しても残す必要があるデータと、その保存先です。
2つの永続化境界
/app/data
├─ accounts.json
├─ accounts/<account>/chatdb.sqlite
├─ accounts/<mid>/settings.json
├─ backups/
├─ logs/
├─ plugins/
└─ token/session等のアプリ状態
/app/storage
├─ cache/cdn-cache/
├─ cache/icons/
├─ saved-media/
└─ media-index.sqlite
標準Composeではホストの ./data と ./storage をそれぞれ上記へbind mountします。コンテナ自体は削除・再作成できますが、この2ディレクトリを消すと状態を失います。
Bind mount ownership
image内で /app/data をbunユーザー所有にしていても、ホストbind mountを重ねればホスト側ownershipが優先されます。entrypointは起動初期だけrootでownershipを補正し、書き込み確認後にunprivileged userへ落とします。
「復元できたように見えて消える」問題
restore -> memoryには履歴あり
-> DB書き込み失敗
-> UIでは一時的に見える
-> reload/restart
-> 消える
この症状になった場合は、Protocolの復号処理だけでなくbind mountとwrite permissionを先に確認します。現在のchat履歴はaccountごとのSQLiteへ保存されるため、画面に見えたことだけでは永続化成功を意味しません。
docker inspect vyline
docker logs vyline
du -sh data storage
Storage表示
backendは data と storage を走査して使用量を集計し、利用可能容量は保存先filesystemに対する statfs から取得します。cache・保存media・backupは別項目として集計されます。ホスト側で保存先を変更した場合は、実際にmountされたfilesystemが容量表示の基準になります。