アップグレードとバックアップ
ThirtyFile を最新に保ち、安全な場所にデータのコピーを保存します。
アップグレード
先に バックアップ してください。ファイルと設定は保持し、新しいバージョンの起動時にデータベースを更新します。変更前に data/backups/drive-before-<version>.db にコピーを保存します(最新 3 件を保持)。
docker run
docker pull ghcr.io/thirtyfile/thirtyfile:latest
docker stop thirtyfile && docker rm thirtyfile
docker run -d --name thirtyfile --restart unless-stopped … # the same options as when you installed it
Docker Compose
docker compose pull && docker compose up -d
リリースページの compose.yaml は ghcr.io/thirtyfile/thirtyfile:0.4 のように、そのリリース系列の修正を受け取ります。新しい系列へは、リリースノートを読んでから image: のタグを :0.5 などに変え、同じコマンドを実行します。
0.4.0 以降は同じ data と storage で起動して、その場で更新できます。0.3 以前はその後にデータベースを作り直したため更新できません。空の data と storage フォルダーで新しい版をインストールし、ファイルをコピーしてください。古いデータで起動すると、data と storage に何も書く前に停止し、ログに理由を示すので、データは変わりません。新しい版が変更したデータベースでも、明確なメッセージで停止します(古い版に戻す)。
取得するバージョン
ghcr.io/thirtyfile/thirtyfile と Docker Hub の thirtyfile/thirtyfile は同じ検証済みイメージとタグを提供します。倉庫を変えるには、コマンドや Compose のイメージ名だけを変え、タグとデータボリュームは保持します。署名付き GitHub 来歴証明は GHCR に付くため、Docker Hub のコピーを確認するときは、一致する digest を GHCR で検証してください。
| タグ | 内容 |
|---|---|
1 | 同じメジャー版の最新リリース(1.0.0 以降)。機能と修正を受け取り、互換性に影響する 2.0.0 へは移らないため、自動更新向けです |
latest | 新しいメジャー版を含む最新リリース。更新前にノートを読んでください |
1.2、1.2.3 | リリース系列、または正確な版。次へ進む時期を自分で決める場合 |
1.2.3-rc.1 | 今後の変更を試すプレリリース。独自の番号のみで提供し、ほかのタグはプレリリースを指しません |
1.0.0 より前にメジャー版のタグはありません。0.x はどのリリースでも動作が変わり得るため、0.4 のような系列が最も近いものです。リリースページ に変更一覧、compose.yaml、Linux amd64、arm64 向けの単体サーバーと SHA256SUMS の SHA-256 チェックサムがあります。
各イメージに内容一覧(SBOM)とビルド方法の署名付き記録があります。ThirtyFile の正式ワークフローで作ったかは GitHub CLI で検証できます。
gh attestation verify oci://ghcr.io/thirtyfile/thirtyfile:1.2.3 --repo ThirtyFile/ThirtyFile
gh attestation verify thirtyfile-1.2.3-linux-amd64 --repo ThirtyFile/ThirtyFile
ライブラリのライセンスは、イメージ内の /usr/share/licenses/thirtyfile/THIRD-PARTY-NOTICES とリリースページの THIRD-PARTY-NOTICES にあります。
古い版に戻す
新しい版で変更したデータベースでは古い版は起動しません。停止し、data/drive.db を更新前の data/backups/drive-before-<new version>.db に置き換え、あれば drive.db-wal と drive.db-shm を削除してから古いイメージを起動します。更新後のアカウント、アップロード、名前変更などは失われます。更新後のファイルは保存フォルダーに残りますが、一覧には載りません。
バックアップ
data と storage を合わせて、ファイル、アカウント、設定、ログを含みます。storage/company、storage/teams、storage/users は通常のファイルなので、一般のバックアップツールでコピーし、個別に復元できます。共有リンク、権限、ごみ箱、以前のバージョンにはデータベースも必要です。data のデータベースは常時書き込むため、稼働中に drive.db をコピーせず、バックアップコマンドを使うか停止してコピーしてください。
停止せずに行う
- 整合性のあるデータベースのコピーを保存します(上書き不可なので毎回別名を使います)。
docker exec thirtyfile thirtyfile backup /data/backups/drive-$(date +%F).db storageと、drive.db*、thumbs、tmpを除いたdataをコピーします(サムネイルは再作成でき、tmpは進行中のアップロードだけです)。sudo tar czf thirtyfile-$(date +%F).tar.gz -C /srv/thirtyfile \ --exclude='data/drive.db*' --exclude=data/secret.key --exclude=data/thumbs --exclude=data/tmp data storage
アーカイブ作成中のアップロードは、アーカイブだけ、または保存データベースだけに含まれる場合がありますが、どちらも復元できます。毎晩実行するなら両コマンドをスクリプトにし、0 3 * * * /usr/local/bin/thirtyfile-backup.sh のように cron に追加して、数週間を過ぎたアーカイブもそこで削除します。
ThirtyFile を停止して行う
docker stop thirtyfile
sudo tar czf thirtyfile-backup.tar.gz -C /srv/thirtyfile data storage
docker start thirtyfile
Docker Compose なら compose.yaml のフォルダーで docker compose stop、docker compose start を使い、その場所からの data storage を指定します。
/storage 以外のマウント先(ローカルフォルダー の NAS、フォルダースペース)と、S3、SFTP、FTP のファイルは、その保存先のツールで保存してください。このバックアップはファイル一覧とアクセス権を持ちますが、内容は含みません。保存場所のファイルのコピー
ThirtyFile 自身でも、コントロールパネル › 保存場所 の すべてをコピー… で一度(別の場所へ全ファイルをコピー)、または ファイルのバックアップ で繰り返しコピーできます。ミラー は現在の状態を他の場所にも保持して障害時に読み取れるようにしますが、過去を残さないためバックアップの代わりにはなりません。サーバー全体ではなくファイルのコピーなので、アカウント、設定、共有リンク、ログには上記の data のバックアップを続けてください。
別の場所へのファイルバックアップ
1 つの保存場所のスペースのスナップショットを、NAS、別のディスク、S3、SFTP、FTP に保存します。各スナップショットは、ある時点のフォルダー、ファイル、ごみ箱、以前のバージョンを持つ復元ポイントです。指定期間だけ過去を保持し、誤って削除、変更したファイルを戻せます。管理者のみ表示、管理できます。
バックアップを作る
コントロールパネル › バックアップ の 新しいバックアップ…(または保存場所のメニューの バックアップ…)で設定します。
- バックアップ元 と 保存先:対象と保存先の場所。同じ場所や、一方が他方の内部にあるものは拒否します。同じディスクやサービス内は許可しますが、その障害からは守れないとダイアログで示します。1 つの場所から複数へ、それぞれ別のバックアップを作れます。
- スペース:後で追加するものを含む全スペース(既定)、または選択したスペース。オフにしなければ以前のバージョンとごみ箱を含みます。
- タイミング:
- 変更後すぐ:アップロード、編集、名前変更、移動、削除、アクセス変更を保存時に数えます。数秒変更がなければ作成し、1 件ずつ実行します。途中の変更は次の 1 件になります。同時ではなく少し遅れて保護するため、ページに遅れを表示します。
- スケジュール:指定分、時間間隔、毎日、指定曜日の時刻を、選んだタイムゾーンで設定します(次の 3 回を表示)。夏時間開始で存在しない時刻はその日をスキップし、終了で 2 回ある時刻は 1 回だけです。停止後は 1 件で追いつき、未実行回数分は作りません。
- 両方(既定):変更後とスケジュールの両方で実行します。
- 保存と確認:保存日数(既定 30)、必ず残す最新件数(最低 1)、作成されないと管理者へ通知する時間(48 時間)、読み直して検証する頻度(7 日)、コピーの速度制限(なし)を指定します。
初回はすぐに全件をコピーし、以後はまだ保存先にない内容だけをコピーします(どのスナップショットにも同じ内容は一度だけ保存)。コピーや復元と合わせて 1 ジョブずつバックグラウンドで動き、ページを閉じたり再起動しても続きます。
スナップショットに含まれるもの
- コンテンツストアのスペース(S3、SFTP、FTP):一覧を作った時点の正確な内容。その後に削除した内容も、コピーまで削除を保留します。
- フォルダースペース(ストレージ、ローカルフォルダー):先に SMB など他プログラムの変更を調べ、読み取り中の変更も確認し、変わったファイルは読み直します。書き込み続けるログやメールボックスは全体を止めず、数回後に最後に丸ごと読めた内容を保存し、ジョブにコピー中に変更されたと表示します。一度も全体を読めなければそのスナップショットから除外し同様に表示します。個人用スペースでは名前を伏せます。各ファイルは完全ですが、別々の時刻に変わるファイル全体を一瞬に揃えるものではありません。他プログラムの変更は即時ではなく次の確認で検出します。
- 完了したものだけが有効です。全内容のコピーと検証後、最後に manifest と完了マーカーを順に書きます。全部コピーできない場合は停止し、失敗したものを表示します(個人用の名前は伏せます)。何も削除しません。
- ファイルだけで、各ユーザーがファイルに付けたものは含みません。スナップショットにはスペースのフォルダー、ファイル、以前のバージョンが含まれます。タグ、スマートフォルダー、お気に入り、共有リンク、アクセス権、アクティビティは ThirtyFile のデータベースにあり、復元した項目には戻りません(アクセス権は復元先のものになります)。これらも残すには
dataフォルダーもバックアップしてください(バックアップを参照)。
状態を確認する
各バックアップに 保護済み(最新が全変更を含む)、変更待ち と待ち時間、バックアップ中、保存場所を待機中(接続不可。数分ごとと復旧検出時に再試行)、失敗(エラーで停止。1 時間ごと、または 今すぐバックアップ で再試行)、期限超過(設定時間を超えて新規作成なし)、一時停止、保護済みの時点を表示します。失敗、場所待ち、期限超過の開始と復旧時に管理者へ一度ずつ通知し、設定済みならメールも送ります。詳細 に復元ポイント、ジョブ、エラーを表示します。完了ジョブは 90 日、各バックアップ最大最新 1,000 件で、最新 20 件は古くても残します。失敗ジョブは再開、キャンセルまで残します。
バックアップを一時停止 は新規作成を止め、既存分を保持します。バックアップの削除 は確認後に停止し、全スナップショットとフォルダーを削除します。一時停止はできますがキャンセルはできません。バックアップを持つ保存場所は、先にバックアップを削除する必要があります。
必要な容量
複数に含まれる内容は一度だけ保存するので、スペース容量と、保存期間中の変更、削除分ほどが必要です。作成後に保存期間外の古いものを削除し(最新の保持分は除く)、残りにない内容を削除します。コントロールパネル › ストレージ使用量 に場所ごとのバックアップ容量を表示します。
バックアップから復元する
既存内容を再利用する前に検証します。欠落、破損したコンテンツストアの内容は、確認済みバックアップから回復し、同じ内容を共有するファイルも保持します。重複名の選択は各ファイルの書き込み時に適用し、読み取り中に新たに重複したものも対象です。
バックアップの 復元… で、復元ポイントとスペースを選びます。会社、チームはフォルダーや個別アイテムを選べます。個人用は管理者が内容を見られないため、全体を所有者の個人用スペースにのみ戻します。
- 新しいフォルダーへ(既定):同じか別のスペースの独自フォルダーへ入れます。名前は利用者の言語で <space> の復元 <date> のようになり、ダイアログで表示、変更できます。既存のものは置き換えません。
- 元の場所へ:スペース自体へ戻し、既存フォルダーを使い、不足分を作ります。開始前に重複件数を表示します。スキップ、両方保持(復元側に番号)、内容を置き換え(現内容を以前のバージョンに保存)を選べます。
- 各ファイルの SHA-256 を確認します。権限は移動先に従い、記録されていたアクセスは再付与しません。以前のバージョンはバックアップに残ります。戻せないファイルは理由とともに表示します。
サーバー自体を失った場合
ファイルのバックアップは元サーバーに依存しません。保存先の manifest はスペース、フォルダー、ファイル、内容を持ちます(.thirtyfile-backups/<id>/、構造 を参照)。サーバーとデータベースを失った後は次の手順です。
- ThirtyFile をインストールし、戻す個人用スペースのアカウントを同じユーザー名で作ります。
- バックアップの場所を同じ設定で追加します。
.thirtyfile-locationは旧サーバーの場所を示すため、新しい登録を拒否します。旧サーバーがなくなっているので、先にそのファイルをフォルダー、バケット最上位、サーバーフォルダーから削除します。 - コントロールパネル › バックアップ の 保存場所からバックアップを検索… でその場所を選びます。検出分を一覧にし、バックグラウンドで検証後、完全なスナップショットから復元できます。
戻るのはファイルです。アカウント、グループ、権限、共有リンク、設定、ログは data のバックアップから(バックアップ)、保存場所やシングルサインオンのパスワードは secret.key(以下)または再入力が必要です。場所のキーとパスワードを ThirtyFile の外に安全に保管してください。ときどき新しいフォルダーに復元し、数ファイルを確認して練習してください。
復元
- 停止して元の場所へ展開します。
sudo tar xzf thirtyfile-backup.tar.gz -C /srv/thirtyfile(Compose はcompose.yamlの場所)。 - 稼働中のバックアップなら、
data/backups/drive-<date>.dbをdata/drive.dbへコピーし、drive.db-walとdrive.db-shmを削除します。 - バックアップ時と同じか新しい版を起動し、サインインして、最近アップロードしたものを含む数ファイルを開きます。
データベースにはセッションと解除済み共有リンクの署名シークレットもあります。secret.key(以下)も戻せばサインイン状態を保持します。なければ全員が再サインインし、保存場所とシングルサインオンのパスワードも再入力します。共有リンク自体はどちらでも使えます。新サーバーへの移行も同じで、インストール、復元し、アドレスが変わったらサイトの URL を更新します。
別のコンピューターでときどき復元を試してください。バックアップの信頼性は、最後に復元できた確認に基づきます。
データベースの容量
data/drive.db と最近の書き込みログ drive.db-wal は、起動時と毎日、不要な容量を返します。ログを空にし、バックアップの一覧作成など長い読み取りの後は 64 MB を超えたままになりません。新しいデータベースは古いログなどの削除領域も返し、次の書き込み用に数 MB を残します。古い版のデータベースは領域を次の書き込みに再利用するため、縮小して以後も返すには、停止して docker compose run --rm thirtyfile compact(または docker run --rm -v …same volumes… ghcr.io/thirtyfile/thirtyfile compact)を実行します。全体を書き直すので同程度の空き容量が必要です。
保存パスワードの暗号化キー
保存場所のパスワード、キー、シングルサインオンのシークレット、2 段階認証のシークレット、セッションと共有リンクの署名シークレットは暗号化して保存します。キーは初回作成の data/secret.key、または THIRTYFILE_SECRET_KEY、THIRTYFILE_SECRET_KEY_FILE です。データベースだけを入手しても読めません。
- キーは別にバックアップ し、パスワード管理ツールなどへ入れ、通常のバックアップからは除外します(上記の例)。なくても復元できますが、パスワードの再入力と全員の再サインインが必要です。
- データフォルダーに置かない場合は、
openssl rand -hex 32で作り、Docker secret のTHIRTYFILE_SECRET_KEY_FILEかTHIRTYFILE_SECRET_KEYで渡します。既存キーファイルの内容も同じように使えます。 - 新しいキー にする場合(キー入りバックアップを失った場合など)は停止し、
docker compose run --rm thirtyfile rotate-secret-key(またはdocker run --rm -v …same volumes… ghcr.io/thirtyfile/thirtyfile rotate-secret-key)を実行します。すべてを再暗号化し、secret.keyを置き換えます。THIRTYFILE_SECRET_KEYなら、その実行時のTHIRTYFILE_NEW_SECRET_KEYに新キーを渡してから、通常設定も変更してください。
バックアップを安全に保つ
バックアップにはファイル、アカウント、IP アドレスを含むログがあり、secret.key があれば保存パスワードを読むための情報もあります。パスワードと同様に扱い、管理者だけがアクセスできる場所に保存してください。