From 4fd473903258df0b527ba256056f91ac4555a049 Mon Sep 17 00:00:00 2001 From: xiaomage Date: Thu, 6 Aug 2026 08:38:50 +0800 Subject: [PATCH] docs: add Restic backup integration --- .../backup/images/restic-console.png | Bin 0 -> 38743 bytes .../de/developer/integration/backup/index.md | 12 +++ .../de/developer/integration/backup/meta.json | 6 ++ .../de/developer/integration/backup/restic.md | 91 ++++++++++++++++++ content/de/developer/integration/index.md | 3 +- content/de/developer/integration/meta.json | 1 + .../backup/images/restic-console.png | Bin 0 -> 38743 bytes .../en/developer/integration/backup/index.md | 12 +++ .../en/developer/integration/backup/meta.json | 6 ++ .../en/developer/integration/backup/restic.md | 91 ++++++++++++++++++ content/en/developer/integration/index.md | 3 +- content/en/developer/integration/meta.json | 1 + .../backup/images/restic-console.png | Bin 0 -> 38743 bytes .../fr/developer/integration/backup/index.md | 12 +++ .../fr/developer/integration/backup/meta.json | 6 ++ .../fr/developer/integration/backup/restic.md | 91 ++++++++++++++++++ content/fr/developer/integration/index.md | 11 ++- content/fr/developer/integration/meta.json | 1 + .../backup/images/restic-console.png | Bin 0 -> 38743 bytes .../ja/developer/integration/backup/index.md | 12 +++ .../ja/developer/integration/backup/meta.json | 6 ++ .../ja/developer/integration/backup/restic.md | 91 ++++++++++++++++++ content/ja/developer/integration/index.md | 11 ++- content/ja/developer/integration/meta.json | 1 + .../backup/images/restic-console.png | Bin 0 -> 38743 bytes .../zh/developer/integration/backup/index.md | 12 +++ .../zh/developer/integration/backup/meta.json | 6 ++ .../zh/developer/integration/backup/restic.md | 91 ++++++++++++++++++ content/zh/developer/integration/index.md | 3 +- content/zh/developer/integration/meta.json | 1 + 30 files changed, 568 insertions(+), 13 deletions(-) create mode 100644 content/de/developer/integration/backup/images/restic-console.png create mode 100644 content/de/developer/integration/backup/index.md create mode 100644 content/de/developer/integration/backup/meta.json create mode 100644 content/de/developer/integration/backup/restic.md create mode 100644 content/en/developer/integration/backup/images/restic-console.png create mode 100644 content/en/developer/integration/backup/index.md create mode 100644 content/en/developer/integration/backup/meta.json create mode 100644 content/en/developer/integration/backup/restic.md create mode 100644 content/fr/developer/integration/backup/images/restic-console.png create mode 100644 content/fr/developer/integration/backup/index.md create mode 100644 content/fr/developer/integration/backup/meta.json create mode 100644 content/fr/developer/integration/backup/restic.md create mode 100644 content/ja/developer/integration/backup/images/restic-console.png create mode 100644 content/ja/developer/integration/backup/index.md create mode 100644 content/ja/developer/integration/backup/meta.json create mode 100644 content/ja/developer/integration/backup/restic.md create mode 100644 content/zh/developer/integration/backup/images/restic-console.png create mode 100644 content/zh/developer/integration/backup/index.md create mode 100644 content/zh/developer/integration/backup/meta.json create mode 100644 content/zh/developer/integration/backup/restic.md diff --git a/content/de/developer/integration/backup/images/restic-console.png b/content/de/developer/integration/backup/images/restic-console.png new file mode 100644 index 0000000000000000000000000000000000000000..67997cbc19007d5db8eb72a50ebca9d9a77f153b GIT binary patch literal 38743 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ⅅq>+BNHfTOvy!r0 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 Restic["Restic"] + Restic -->|S3 API| RustFS["RustFS"] + RustFS --> Bucket["my-bucket/restic"] +``` + +Restic schreibt Repository-Metadaten und Sicherungssnapshots über die S3 API in RustFS. Das Repository-Präfix in dieser Anleitung lautet `restic`, der Bucket `my-bucket`. + +## 1. Bucket vorbereiten + +Öffnen Sie die RustFS Console unter `http://localhost:9001` und erstellen Sie `my-bucket`, oder wählen Sie einen vorhandenen Bucket, der ausschließlich für Backups verwendet wird. + +![RustFS Console mit der Bucket-Liste und dem ausgewählten Backup-Bucket `my-bucket`](./images/restic-console.png) + +Verwenden Sie für jeden Backup-Job einen eigenen Bucket. Der Screenshot zeigt die Console in englischer Sprache und im hellen Design. + +## 2. Restic-Repository initialisieren + +Setzen Sie die Anmeldedaten, die Region, das Repository-Passwort und den Repository-Pfad: + +```bash +export AWS_ACCESS_KEY_ID= +export AWS_SECRET_ACCESS_KEY= +export AWS_DEFAULT_REGION=us-east-1 +export RESTIC_PASSWORD= +export RESTIC_REPOSITORY=s3:http://localhost:9000/my-bucket/restic +``` + +Führen Sie `restic init` mit pfadbasierter Bucket-Auswahl aus: + +```bash +restic -o s3.bucket-lookup=path init +``` + +Das Repository-Passwort schützt die Snapshot-Daten. Bewahren Sie es getrennt von den RustFS-Zugriffsschlüsseln auf. + +## 3. Daten sichern + +Erstellen Sie ein kleines Testverzeichnis und sichern Sie es: + +```bash +mkdir -p ~/Documents/restic-demo +printf 'hello from RustFS\n' > ~/Documents/restic-demo/hello.txt +restic -o s3.bucket-lookup=path backup ~/Documents/restic-demo +``` + +Restic gibt nach Abschluss des Backups eine Snapshot-ID aus. Führen Sie den Befehl nach einer Dateianpassung erneut aus, um einen zweiten Snapshot zu erzeugen. + +## 4. Snapshot wiederherstellen + +Stellen Sie den neuesten Snapshot in ein separates Verzeichnis wieder her: + +```bash +mkdir -p ~/Documents/restic-restore +restic -o s3.bucket-lookup=path restore latest --target ~/Documents/restic-restore +``` + +Sie können auch eine bestimmte Snapshot-ID wiederherstellen, wenn Sie eine ältere Version benötigen. + +## 5. Repository in RustFS prüfen + +Öffnen Sie `my-bucket` in der RustFS Console und prüfen Sie, ob Restic Repository-Objekte unter dem Präfix `restic/` erstellt hat. + +Sie können zusätzlich die Repository-Prüfung ausführen: + +```bash +restic -o s3.bucket-lookup=path check +``` + +## Nächste Schritte + +- [CLI Client (rc)](/operations/rc) zum Erstellen von Buckets und Prüfen von Objekten über die Kommandozeile. +- [TLS Configuration](/integration/tls-configured), wenn Sie RustFS außerhalb eines vertrauenswürdigen Netzwerks bereitstellen. \ No newline at end of file diff --git a/content/de/developer/integration/index.md b/content/de/developer/integration/index.md index 36086197..0c618e63 100644 --- a/content/de/developer/integration/index.md +++ b/content/de/developer/integration/index.md @@ -1,6 +1,6 @@ --- title: "Integration" -description: "Integrate RustFS with reverse proxies and big data systems." +description: "Integrate RustFS with reverse proxies, backup tools, and big data systems." --- Use this section to connect **RustFS** to infrastructure and application platforms through its S3-compatible API. @@ -8,6 +8,7 @@ Use this section to connect **RustFS** to infrastructure and application platfor ## Integration categories - [Reverse Proxy](./reverse-proxy/index.md) covers Nginx, Traefik, Caddy, and HAProxy. +- [Backup](./backup/index.md) covers Restic. - [Big Data](./big-data/index.md) covers Iceberg. Each guide identifies the RustFS endpoint and addressing requirements to use when configuring the integrating system. \ No newline at end of file diff --git a/content/de/developer/integration/meta.json b/content/de/developer/integration/meta.json index 96a0425f..45c75669 100644 --- a/content/de/developer/integration/meta.json +++ b/content/de/developer/integration/meta.json @@ -2,6 +2,7 @@ "title": "Integration", "pages": [ "reverse-proxy", + "backup", "big-data" ] } \ No newline at end of file diff --git a/content/en/developer/integration/backup/images/restic-console.png b/content/en/developer/integration/backup/images/restic-console.png new file mode 100644 index 0000000000000000000000000000000000000000..67997cbc19007d5db8eb72a50ebca9d9a77f153b GIT binary patch literal 38743 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ⅅq>+BNHfTOvy!r0 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 Restic["Restic"] + Restic -->|S3 API| RustFS["RustFS"] + RustFS --> Bucket["my-bucket/restic"] +``` + +Restic writes repository metadata and backup snapshots into RustFS through the S3 API. The repository prefix in this guide is `restic`, and the bucket is `my-bucket`. + +## 1. Prepare the bucket + +Open the RustFS Console at `http://localhost:9001` and create `my-bucket`, or choose an existing bucket that is dedicated to backups. + +![RustFS Console bucket list with the `my-bucket` backup bucket selected](./images/restic-console.png) + +Use a dedicated bucket for each backup job. The example screenshot shows the Console in English and light theme. + +## 2. Initialize the Restic repository + +Set the credentials, region, repository password, and repository location: + +```bash +export AWS_ACCESS_KEY_ID= +export AWS_SECRET_ACCESS_KEY= +export AWS_DEFAULT_REGION=us-east-1 +export RESTIC_PASSWORD= +export RESTIC_REPOSITORY=s3:http://localhost:9000/my-bucket/restic +``` + +Run `restic init` with path-style bucket lookup: + +```bash +restic -o s3.bucket-lookup=path init +``` + +The repository password protects the snapshot data. Keep it separate from the RustFS access keys. + +## 3. Back up data + +Create a small test directory and back it up: + +```bash +mkdir -p ~/Documents/restic-demo +printf 'hello from RustFS\n' > ~/Documents/restic-demo/hello.txt +restic -o s3.bucket-lookup=path backup ~/Documents/restic-demo +``` + +Restic prints a snapshot ID after the backup completes. Run the command again after changing a file to create a second snapshot. + +## 4. Restore a snapshot + +Restore the latest snapshot to a separate directory: + +```bash +mkdir -p ~/Documents/restic-restore +restic -o s3.bucket-lookup=path restore latest --target ~/Documents/restic-restore +``` + +You can also restore a specific snapshot ID if you want to recover an earlier version. + +## 5. Verify the repository in RustFS + +Open `my-bucket` in the RustFS Console and confirm that Restic created repository objects under the `restic/` prefix. + +You can also run a repository check: + +```bash +restic -o s3.bucket-lookup=path check +``` + +## Next steps + +- [CLI Client (rc)](/operations/rc) to create buckets and inspect objects from the command line. +- [TLS Configuration](/integration/tls-configured) if you expose RustFS outside a trusted network. \ No newline at end of file diff --git a/content/en/developer/integration/index.md b/content/en/developer/integration/index.md index 36086197..0c618e63 100644 --- a/content/en/developer/integration/index.md +++ b/content/en/developer/integration/index.md @@ -1,6 +1,6 @@ --- title: "Integration" -description: "Integrate RustFS with reverse proxies and big data systems." +description: "Integrate RustFS with reverse proxies, backup tools, and big data systems." --- Use this section to connect **RustFS** to infrastructure and application platforms through its S3-compatible API. @@ -8,6 +8,7 @@ Use this section to connect **RustFS** to infrastructure and application platfor ## Integration categories - [Reverse Proxy](./reverse-proxy/index.md) covers Nginx, Traefik, Caddy, and HAProxy. +- [Backup](./backup/index.md) covers Restic. - [Big Data](./big-data/index.md) covers Iceberg. Each guide identifies the RustFS endpoint and addressing requirements to use when configuring the integrating system. \ No newline at end of file diff --git a/content/en/developer/integration/meta.json b/content/en/developer/integration/meta.json index 96a0425f..45c75669 100644 --- a/content/en/developer/integration/meta.json +++ b/content/en/developer/integration/meta.json @@ -2,6 +2,7 @@ "title": "Integration", "pages": [ "reverse-proxy", + "backup", "big-data" ] } \ No newline at end of file diff --git a/content/fr/developer/integration/backup/images/restic-console.png b/content/fr/developer/integration/backup/images/restic-console.png new file mode 100644 index 0000000000000000000000000000000000000000..67997cbc19007d5db8eb72a50ebca9d9a77f153b GIT binary patch literal 38743 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ⅅq>+BNHfTOvy!r0 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 Restic["Restic"] + Restic -->|S3 API| RustFS["RustFS"] + RustFS --> Bucket["my-bucket/restic"] +``` + +Restic écrit les métadonnées du dépôt et les snapshots de sauvegarde dans RustFS via l'API S3. Le préfixe du dépôt dans cette page est `restic`, et le compartiment est `my-bucket`. + +## 1. Préparer le compartiment + +Ouvrez la Console RustFS à l'adresse `http://localhost:9001` et créez `my-bucket`, ou choisissez un compartiment existant dédié aux sauvegardes. + +![Console RustFS affichant la liste des compartiments avec le compartiment de sauvegarde `my-bucket` sélectionné](./images/restic-console.png) + +Utilisez un compartiment dédié pour chaque tâche de sauvegarde. La capture d'écran montre la Console en anglais et en thème clair. + +## 2. Initialiser le dépôt Restic + +Définissez les identifiants, la région, le mot de passe du dépôt et l'emplacement du dépôt : + +```bash +export AWS_ACCESS_KEY_ID= +export AWS_SECRET_ACCESS_KEY= +export AWS_DEFAULT_REGION=us-east-1 +export RESTIC_PASSWORD= +export RESTIC_REPOSITORY=s3:http://localhost:9000/my-bucket/restic +``` + +Exécutez `restic init` avec la sélection de compartiment en mode chemin : + +```bash +restic -o s3.bucket-lookup=path init +``` + +Le mot de passe du dépôt protège les données des snapshots. Conservez-le séparément des clés d'accès RustFS. + +## 3. Sauvegarder des données + +Créez un petit répertoire de test et sauvegardez-le : + +```bash +mkdir -p ~/Documents/restic-demo +printf 'hello from RustFS\n' > ~/Documents/restic-demo/hello.txt +restic -o s3.bucket-lookup=path backup ~/Documents/restic-demo +``` + +Restic affiche l'ID du snapshot une fois la sauvegarde terminée. Relancez la commande après avoir modifié un fichier pour créer un second snapshot. + +## 4. Restaurer un snapshot + +Restaurez le snapshot le plus récent dans un répertoire séparé : + +```bash +mkdir -p ~/Documents/restic-restore +restic -o s3.bucket-lookup=path restore latest --target ~/Documents/restic-restore +``` + +Vous pouvez aussi restaurer un ID de snapshot précis si vous devez récupérer une version antérieure. + +## 5. Vérifier le dépôt dans RustFS + +Ouvrez `my-bucket` dans la Console RustFS et vérifiez que Restic a créé des objets de dépôt sous le préfixe `restic/`. + +Vous pouvez aussi lancer une vérification du dépôt : + +```bash +restic -o s3.bucket-lookup=path check +``` + +## Étapes suivantes + +- [CLI Client (rc)](/operations/rc) pour créer des compartiments et inspecter les objets depuis la ligne de commande. +- [Configuration TLS](/integration/tls-configured) si vous exposez RustFS hors d'un réseau de confiance. \ No newline at end of file diff --git a/content/fr/developer/integration/index.md b/content/fr/developer/integration/index.md index 36086197..135664c8 100644 --- a/content/fr/developer/integration/index.md +++ b/content/fr/developer/integration/index.md @@ -1,13 +1,14 @@ --- title: "Integration" -description: "Integrate RustFS with reverse proxies and big data systems." +description: "Intégrez RustFS avec des reverse proxies, des outils de sauvegarde et des systèmes de big data." --- -Use this section to connect **RustFS** to infrastructure and application platforms through its S3-compatible API. +Utilisez cette section pour connecter **RustFS** à des plateformes d'infrastructure et d'applications via son API compatible S3. ## Integration categories -- [Reverse Proxy](./reverse-proxy/index.md) covers Nginx, Traefik, Caddy, and HAProxy. -- [Big Data](./big-data/index.md) covers Iceberg. +- [Reverse Proxy](./reverse-proxy/index.md) couvre Nginx, Traefik, Caddy et HAProxy. +- [Backup](./backup/index.md) couvre Restic. +- [Big Data](./big-data/index.md) couvre Iceberg. -Each guide identifies the RustFS endpoint and addressing requirements to use when configuring the integrating system. \ No newline at end of file +Chaque guide indique le point de terminaison RustFS et les exigences d'adressage à utiliser lors de la configuration du système intégré. \ No newline at end of file diff --git a/content/fr/developer/integration/meta.json b/content/fr/developer/integration/meta.json index 775b3260..07bb287c 100644 --- a/content/fr/developer/integration/meta.json +++ b/content/fr/developer/integration/meta.json @@ -2,6 +2,7 @@ "title": "Intégration", "pages": [ "reverse-proxy", + "backup", "big-data" ] } \ No newline at end of file diff --git a/content/ja/developer/integration/backup/images/restic-console.png b/content/ja/developer/integration/backup/images/restic-console.png new file mode 100644 index 0000000000000000000000000000000000000000..67997cbc19007d5db8eb72a50ebca9d9a77f153b GIT binary patch literal 38743 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ⅅq>+BNHfTOvy!r0 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 Restic["Restic"] + Restic -->|S3 API| RustFS["RustFS"] + RustFS --> Bucket["my-bucket/restic"] +``` + +Restic は S3 API を通じて、リポジトリのメタデータとバックアップスナップショットを RustFS に書き込みます。このページのリポジトリのプレフィックスは `restic`、バケットは `my-bucket` です。 + +## 1. バケットを準備する + +RustFS Console を `http://localhost:9001` で開き、`my-bucket` を作成するか、バックアップ専用の既存バケットを選択します。 + +![RustFS Console でバックアップ用バケット `my-bucket` が選択されたバケット一覧](./images/restic-console.png) + +バックアップジョブごとに専用バケットを使います。スクリーンショットは英語表示のライトテーマです。 + +## 2. Restic リポジトリを初期化する + +認証情報、リージョン、リポジトリのパスワード、リポジトリの場所を設定します。 + +```bash +export AWS_ACCESS_KEY_ID= +export AWS_SECRET_ACCESS_KEY= +export AWS_DEFAULT_REGION=us-east-1 +export RESTIC_PASSWORD= +export RESTIC_REPOSITORY=s3:http://localhost:9000/my-bucket/restic +``` + +`restic init` をパス形式のバケット参照で実行します。 + +```bash +restic -o s3.bucket-lookup=path init +``` + +リポジトリのパスワードはスナップショットデータを保護します。RustFS のアクセスキーとは分けて保管してください。 + +## 3. データをバックアップする + +小さなテストディレクトリを作成してバックアップします。 + +```bash +mkdir -p ~/Documents/restic-demo +printf 'hello from RustFS\n' > ~/Documents/restic-demo/hello.txt +restic -o s3.bucket-lookup=path backup ~/Documents/restic-demo +``` + +バックアップが完了すると、Restic がスナップショット ID を表示します。ファイルを変更してから同じコマンドを再実行すると、2 つ目のスナップショットが作成されます。 + +## 4. スナップショットを復元する + +最新のスナップショットを別のディレクトリに復元します。 + +```bash +mkdir -p ~/Documents/restic-restore +restic -o s3.bucket-lookup=path restore latest --target ~/Documents/restic-restore +``` + +必要に応じて、特定のスナップショット ID を復元して以前の版を戻せます。 + +## 5. RustFS でリポジトリを確認する + +RustFS Console で `my-bucket` を開き、Restic が `restic/` プレフィックス配下にリポジトリオブジェクトを作成したことを確認します。 + +リポジトリチェックも実行できます。 + +```bash +restic -o s3.bucket-lookup=path check +``` + +## 次の手順 + +- [CLI Client (rc)](/operations/rc) でバケットを作成し、コマンドラインからオブジェクトを確認します。 +- RustFS を信頼できないネットワークの外に公開する場合は [TLS Configuration](/integration/tls-configured) を確認します。 \ No newline at end of file diff --git a/content/ja/developer/integration/index.md b/content/ja/developer/integration/index.md index 36086197..111fe1ba 100644 --- a/content/ja/developer/integration/index.md +++ b/content/ja/developer/integration/index.md @@ -1,13 +1,14 @@ --- title: "Integration" -description: "Integrate RustFS with reverse proxies and big data systems." +description: "RustFS をリバースプロキシ、バックアップツール、ビッグデータシステムと連携させます。" --- -Use this section to connect **RustFS** to infrastructure and application platforms through its S3-compatible API. +このセクションでは、**RustFS** を S3 互換 API 経由でインフラストラクチャとアプリケーションプラットフォームに接続します。 ## Integration categories -- [Reverse Proxy](./reverse-proxy/index.md) covers Nginx, Traefik, Caddy, and HAProxy. -- [Big Data](./big-data/index.md) covers Iceberg. +- [Reverse Proxy](./reverse-proxy/index.md) は Nginx、Traefik、Caddy、HAProxy を扱います。 +- [Backup](./backup/index.md) は Restic を扱います。 +- [Big Data](./big-data/index.md) は Iceberg を扱います。 -Each guide identifies the RustFS endpoint and addressing requirements to use when configuring the integrating system. \ No newline at end of file +各ガイドでは、連携先システムを設定する際に使用する RustFS のエンドポイントとアドレス指定の要件を示します。 \ No newline at end of file diff --git a/content/ja/developer/integration/meta.json b/content/ja/developer/integration/meta.json index 57175799..fa774738 100644 --- a/content/ja/developer/integration/meta.json +++ b/content/ja/developer/integration/meta.json @@ -2,6 +2,7 @@ "title": "連携", "pages": [ "reverse-proxy", + "backup", "big-data" ] } \ No newline at end of file diff --git a/content/zh/developer/integration/backup/images/restic-console.png b/content/zh/developer/integration/backup/images/restic-console.png new file mode 100644 index 0000000000000000000000000000000000000000..67997cbc19007d5db8eb72a50ebca9d9a77f153b GIT binary patch literal 38743 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ⅅq>+BNHfTOvy!r0 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 Restic["Restic"] + Restic -->|S3 API| RustFS["RustFS"] + RustFS --> Bucket["my-bucket/restic"] +``` + +Restic 通过 S3 API 将仓库元数据和备份快照写入 RustFS。本页中的仓库前缀是 `restic`,存储桶是 `my-bucket`。 + +## 1. 准备存储桶 + +打开 RustFS Console,地址为 `http://localhost:9001`,创建 `my-bucket`,或者选择一个专门用于备份的现有存储桶。 + +![RustFS Console 中选中的备份存储桶 `my-bucket` 的存储桶列表](./images/restic-console.png) + +每个备份作业都应使用独立的存储桶。截图显示的是英文界面和浅色主题。 + +## 2. 初始化 Restic 仓库 + +设置凭据、区域、仓库密码和仓库位置: + +```bash +export AWS_ACCESS_KEY_ID= +export AWS_SECRET_ACCESS_KEY= +export AWS_DEFAULT_REGION=us-east-1 +export RESTIC_PASSWORD= +export RESTIC_REPOSITORY=s3:http://localhost:9000/my-bucket/restic +``` + +使用路径式存储桶查找运行 `restic init`: + +```bash +restic -o s3.bucket-lookup=path init +``` + +仓库密码用于保护快照数据。请将其与 RustFS 访问密钥分开保存。 + +## 3. 备份数据 + +创建一个小型测试目录并进行备份: + +```bash +mkdir -p ~/Documents/restic-demo +printf 'hello from RustFS\n' > ~/Documents/restic-demo/hello.txt +restic -o s3.bucket-lookup=path backup ~/Documents/restic-demo +``` + +备份完成后,Restic 会输出一个快照 ID。修改文件后再次运行命令,可以创建第二个快照。 + +## 4. 恢复快照 + +将最新快照恢复到单独目录: + +```bash +mkdir -p ~/Documents/restic-restore +restic -o s3.bucket-lookup=path restore latest --target ~/Documents/restic-restore +``` + +如果你需要恢复较早版本,也可以指定某个快照 ID。 + +## 5. 在 RustFS 中验证仓库 + +打开 RustFS Console 中的 `my-bucket`,确认 Restic 已在 `restic/` 前缀下创建仓库对象。 + +你也可以运行仓库检查: + +```bash +restic -o s3.bucket-lookup=path check +``` + +## 下一步 + +- [CLI Client (rc)](/operations/rc) 用于从命令行创建存储桶并检查对象。 +- 如果你要将 RustFS 暴露到不受信任的网络之外,请查看 [TLS Configuration](/integration/tls-configured)。 \ No newline at end of file diff --git a/content/zh/developer/integration/index.md b/content/zh/developer/integration/index.md index ccb6b1b5..b7602a1d 100644 --- a/content/zh/developer/integration/index.md +++ b/content/zh/developer/integration/index.md @@ -1,6 +1,6 @@ --- title: "集成" -description: "将 RustFS 与反向代理和大数据系统集成。" +description: "将 RustFS 与反向代理、备份工具和大数据系统集成。" --- 通过 S3 兼容 API 将 **RustFS** 连接到基础设施和应用平台。 @@ -8,6 +8,7 @@ description: "将 RustFS 与反向代理和大数据系统集成。" ## 集成类别 - [反向代理](./reverse-proxy/index.md)涵盖 Nginx、Traefik、Caddy 和 HAProxy。 +- [备份](./backup/index.md)涵盖 Restic。 - [大数据](./big-data/index.md)涵盖 Iceberg。 每篇指南都会说明配置集成系统时需要使用的 RustFS 端点和寻址要求。 \ No newline at end of file diff --git a/content/zh/developer/integration/meta.json b/content/zh/developer/integration/meta.json index 7fd42061..3f44d0cc 100644 --- a/content/zh/developer/integration/meta.json +++ b/content/zh/developer/integration/meta.json @@ -2,6 +2,7 @@ "title": "集成", "pages": [ "reverse-proxy", + "backup", "big-data" ] } \ No newline at end of file