diff --git a/.agents/skills/localize-rustfs-docs/references/fr.md b/.agents/skills/localize-rustfs-docs/references/fr.md index 79fff5b56..c27b09d07 100644 --- a/.agents/skills/localize-rustfs-docs/references/fr.md +++ b/.agents/skills/localize-rustfs-docs/references/fr.md @@ -18,7 +18,7 @@ Treat RustFS source code, APIs, and exact Console labels as authoritative for pr - Address the reader with `vous`; use concise active instructions. - Prefer natural French clause order and avoid calques from English noun strings. - Use sentence-style capitalization for headings. -- Apply French punctuation and non-breaking spacing where practical without damaging Markdown, URLs, code, or identifiers. +- Apply French punctuation where practical: a narrow no-break space (U+202F) before `;` `:` `?` `!` in prose, and French guillemets « » for quotations. Do not insert that space into code fences, URLs, identifiers, or the `:::` admonition marker. - Keep grammatical gender and number consistent across headings, prose, tables, and navigation. - Retain established English ecosystem terms only when they are conventional in French technical writing. - Avoid casual slang, promotional wording, and unjustified claims of seamless replacement. @@ -32,7 +32,7 @@ Treat RustFS source code, APIs, and exact Console labels as authoritative for pr | Amazon S3 / S3 | Amazon S3 / S3 | Keep the service and protocol name. | | S3-compatible | compatible avec S3 | Never strengthen to complete or 100% compatibility. | | object storage | stockage objet | Use for the storage model. | -| Bucket | compartiment / compartiment S3 | Preserve `Bucket` in APIs, identifiers, and exact UI labels. | +| Bucket | compartiment (bucket) | Use compartiment in prose. Add `(bucket)` on the first mention in a page when it helps. Do not mix bucket and compartiment in prose. Preserve `Bucket`, `bucket`, and `my-bucket` in APIs, code, identifiers, and exact UI labels. | | Object | objet / objet S3 | Distinguish it from a local `fichier`. | | object key | clé d’objet | Use `nom de clé` when specifically describing the key name; preserve `Key` in APIs. | | Bucket policy | politique de compartiment | Preserve policy JSON and API names. | @@ -54,13 +54,26 @@ Treat RustFS source code, APIs, and exact Console labels as authoritative for pr | multipart upload | chargement partitionné | Preserve API actions such as `CreateMultipartUpload`. | | server-side encryption | chiffrement côté serveur | Keep SSE-S3, SSE-KMS, and SSE-C unchanged. | | presigned URL | URL présignée | Keep URL uppercase and preserve API names. | -| path-style addressing | adressage de type chemin | Preserve SDK option names. | +| path-style addressing | adressage de type chemin (path-style) | Add `(path-style)` on the first mention in a page. Preserve SDK option names. | | virtual-hosted-style addressing | adressage de type hôte virtuel | Relate it to `RUSTFS_SERVER_DOMAINS` when relevant. | | health check | contrôle d’intégrité | Preserve endpoint paths and probe names. | | readiness | état de préparation | Preserve `/health/ready` and Kubernetes field names. | | observability | observabilité | Keep OpenTelemetry and OTLP unchanged. | | rootless | sans privilèges root | Prefer this over a literal calque. | -| root credentials | informations d’identification racine | Distinguish RustFS deployment credentials from the operating-system root account. | +| credentials | identifiants | Use for access credentials in prose. In IAM detail, use clés d’accès and clé secrète. Preserve `AccessKeyId`, `SecretAccessKey`, and environment variables. | +| root credentials | identifiants racine | Distinguish RustFS deployment credentials from the operating-system root account. | +| upload | charger / chargement | Prefer this over téléverser. A first mention may add `(upload)`. | +| download | télécharger | Use for retrieving an object or file. | +| docker pull | tirer / récupérer | Never translate `docker pull` as retirer. retirer means remove. | +| registry (prose) | registre | Product names such as Docker Registry and Harbor may stay. Keep `registry` inside commands, paths, and config keys. | +| support matrix | matrice de prise en charge | Do not write matrice de support. | +| table bucket | compartiment de tables (table bucket) | Never write un table bucket. Preserve API fields such as `table-bucket`. | +| single-binary | binaire unique (single-binary) | Explain the English term on first use in a page. | +| location (prose) | emplacement | Preserve configuration keys and API fields named `location`. | +| file metastore | metastore fichier | Do not leave file as an English adjective. | +| Next steps | Étapes suivantes | Use this heading, not Prochaines étapes. | +| commit a .env file | N’ajoutez pas le fichier .env au dépôt | Do not calque commit as commettre. | +| preview | préversion (preview) | Use on first mention of a pre-release feature. | ## Common review failures diff --git a/.agents/skills/localize-rustfs-docs/scripts/audit-locales.mjs b/.agents/skills/localize-rustfs-docs/scripts/audit-locales.mjs index c1edc1616..5bb20df31 100644 --- a/.agents/skills/localize-rustfs-docs/scripts/audit-locales.mjs +++ b/.agents/skills/localize-rustfs-docs/scripts/audit-locales.mjs @@ -225,6 +225,27 @@ function extractExternalUrls(content) { return urls.sort(); } +// Vendor docs sometimes put a language code in an absolute URL. Ray's Sphinx +// site, for example, publishes only https://docs.ray.io/en/latest/... and +// returns 404 for the same path without /en/. Those are not internal locale +// links. Keep absolute docs.rustfs.com URLs so a fully qualified /en/ page +// is still reported. +function withoutExternalUrls(content) { + return content.replace(/https?:\/\/[^\s)<>{}"']+/g, (url) => { + try { + const hostname = new URL(url).hostname; + if (hostname === "docs.rustfs.com" || hostname.endsWith(".rustfs.com")) return url; + } catch { + return url; + } + return ""; + }); +} + +function containsInternalLocaleLink(content, sourceLocale) { + return withoutExternalUrls(content).includes(`/${sourceLocale}/`); +} + function normalizeLocaleLinks(content, locale, source) { return content.replaceAll(`/${locale}/`, `/${source}/`); } @@ -318,7 +339,7 @@ function auditMeta(sourceContent, targetContent, sourceLocale, locale, file, iss if (unchangedVisible.length > 0) { addIssue(issues, "warning", "UNLOCALIZED_META", locale, file, `${unchangedVisible.length} visible navigation string(s) remain unchanged from English`); } - if (targetContent.includes(`/${sourceLocale}/`)) { + if (containsInternalLocaleLink(targetContent, sourceLocale)) { addIssue(issues, "error", "SOURCE_LOCALE_LINK", locale, file, `contains an internal /${sourceLocale}/ link`); } } @@ -364,7 +385,7 @@ function auditDocument(sourceContent, targetContent, source, locale, file, issue } const visibleTarget = removeCodeFences(targetContent); - if (visibleTarget.includes(`/${source}/`)) { + if (containsInternalLocaleLink(visibleTarget, source)) { addIssue(issues, "error", "SOURCE_LOCALE_LINK", locale, file, `contains an internal /${source}/ link`); } diff --git a/content/de/developer/integration/ai/vllm.md b/content/de/developer/integration/ai/vllm.md index 962d2b554..1971c8d16 100644 --- a/content/de/developer/integration/ai/vllm.md +++ b/content/de/developer/integration/ai/vllm.md @@ -155,4 +155,4 @@ Die Standardreservierung für den KV-Cache beträgt 90 Prozent des Arbeitsspeich - Lesen Sie die [S3-Kompatibilitätshinweise](/de/administration/protocols/s3), bevor Sie weitere Inferenz-Bereitstellungen verwenden. - Erstellen Sie dedizierte Produktions-Zugangsdaten über die [Zugriffsschlüssel-Verwaltung](/de/security-compliance/iam/access-token). -- Folgen Sie der [vLLM-Dokumentation](https://docs.vllm.ai/en/latest/serving/openai_compatible_server.html) für Chat-Templates, Tensor-Parallelität und quantisierte Gewichte auf demselben Bucket als Modellspeicher. +- Folgen Sie der [vLLM-Dokumentation](https://docs.vllm.ai/serving/openai_compatible_server.html) für Chat-Templates, Tensor-Parallelität und quantisierte Gewichte auf demselben Bucket als Modellspeicher. diff --git a/content/de/developer/integration/devops/elasticsearch.md b/content/de/developer/integration/devops/elasticsearch.md index f2b1f8bab..9f019a114 100644 --- a/content/de/developer/integration/devops/elasticsearch.md +++ b/content/de/developer/integration/devops/elasticsearch.md @@ -262,4 +262,4 @@ docker compose logs create-bucket - Lesen Sie die [S3-Kompatibilitätshinweise](/de/administration/protocols/s3), bevor Sie weitere S3-Operationen verwenden. - Erstellen Sie dedizierte Produktions-Zugangsdaten über die [Zugriffsschlüssel-Verwaltung](/de/security-compliance/iam/access-token). -- Folgen Sie der [Elasticsearch-Snapshot-Dokumentation](https://www.elastic.co/guide/en/elasticsearch/reference/current/snapshot-restore.html) zur Snapshot-Lebenszyklusverwaltung (SLM). +- Folgen Sie der [Elasticsearch-Snapshot-Dokumentation](https://www.elastic.co/docs/deploy-manage/tools/snapshot-and-restore) zur Snapshot-Lebenszyklusverwaltung (SLM). diff --git a/content/en/developer/integration/ai/vllm.md b/content/en/developer/integration/ai/vllm.md index c471096cf..4942755b4 100644 --- a/content/en/developer/integration/ai/vllm.md +++ b/content/en/developer/integration/ai/vllm.md @@ -151,4 +151,4 @@ The default KV-cache reservation is 90% of system RAM. Lower it with `--gpu-memo - Review [S3 compatibility notes](/administration/protocols/s3) before adopting additional serving setups. - Create dedicated production credentials with [Access Key Management](/security-compliance/iam/access-token). -- Follow the [vLLM documentation](https://docs.vllm.ai/en/latest/serving/openai_compatible_server.html) for chat templates, tensor parallelism, and quantized weights on top of the same bucket-backed model store. +- Follow the [vLLM documentation](https://docs.vllm.ai/serving/openai_compatible_server.html) for chat templates, tensor parallelism, and quantized weights on top of the same bucket-backed model store. diff --git a/content/en/developer/integration/devops/elasticsearch.md b/content/en/developer/integration/devops/elasticsearch.md index 148211db6..002bd8d2a 100644 --- a/content/en/developer/integration/devops/elasticsearch.md +++ b/content/en/developer/integration/devops/elasticsearch.md @@ -259,4 +259,4 @@ docker compose logs create-bucket - Review [S3 compatibility notes](/administration/protocols/s3) before adopting additional S3 operations. - Create dedicated production credentials with [Access Key Management](/security-compliance/iam/access-token). -- Follow the [Elasticsearch snapshot documentation](https://www.elastic.co/guide/en/elasticsearch/reference/current/snapshot-restore.html) for snapshot lifecycle management (SLM). +- Follow the [Elasticsearch snapshot documentation](https://www.elastic.co/docs/deploy-manage/tools/snapshot-and-restore) for snapshot lifecycle management (SLM). diff --git a/content/fr/administration/console/index.md b/content/fr/administration/console/index.md index e8af749ff..2df0b9fbc 100644 --- a/content/fr/administration/console/index.md +++ b/content/fr/administration/console/index.md @@ -1,13 +1,13 @@ --- title: "Console" -description: "Enable the RustFS Console, connect it to a server, and sign in securely." +description: "Activez la Console RustFS, connectez-la à un serveur et connectez-vous de façon sûre." --- -The **RustFS Console** is the web administration interface for RustFS. Use this page to enable the Console, open the login page, and choose the appropriate sign-in method. Detailed procedures for buckets, objects, and identity management are covered in their respective documentation sections. +La **Console RustFS** est l’interface d’administration web de RustFS. Utilisez cette page pour activer la Console, ouvrir la page de connexion et choisir la méthode de connexion adaptée. Les procédures détaillées sur les compartiments (buckets), les objets et la gestion des identités sont décrites dans les sections de documentation correspondantes. -## Enable the Console +## Activer la Console -The Console is enabled by default and listens on port `9001`, separately from the S3 API on port `9000`. You can set the behavior explicitly with the following environment variables: +La Console est activée par défaut et écoute sur le port `9001`, séparément de l’API S3 sur le port `9000`. Vous pouvez fixer explicitement ce comportement avec les variables d’environnement suivantes : ```ini title="/etc/default/rustfs" RUSTFS_ADDRESS=":9000" @@ -17,56 +17,56 @@ RUSTFS_OBS_LOGGER_LEVEL=error RUSTFS_OBS_LOG_DIRECTORY="/var/log/rustfs/" ``` -Restart RustFS after changing these values. Set `RUSTFS_CONSOLE_ENABLE=false` when the Console must not run. +Redémarrez RustFS après avoir modifié ces valeurs. Définissez `RUSTFS_CONSOLE_ENABLE=false` lorsque la Console ne doit pas s’exécuter. -The equivalent command-line options are `--console-enable` and `--console-address`. See the [CLI reference](/reference/cli) and [environment variable reference](/reference/environment-variables) for the complete server configuration. +Les options de ligne de commande équivalentes sont `--console-enable` et `--console-address`. Consultez la [référence de la CLI](/fr/reference/cli) et la [référence des variables d’environnement](/fr/reference/environment-variables) pour la configuration complète du serveur. -## Open the Console +## Ouvrir la Console -Open the following address, replacing `` with the RustFS server address: +Ouvrez l’adresse suivante, en remplaçant `` par l’adresse du serveur RustFS : ```text http://:9001 ``` -![RustFS Console login page with key, STS, and OIDC sign-in options](./images/rustfs-console-login.png) +![page de connexion de la Console RustFS, avec les options de connexion par clé, STS et OIDC](./images/rustfs-console-login.png) -For a local deployment, use `http://localhost:9001`. Windows and macOS desktop launchers use port `7001` instead. +Pour un déploiement local, y compris les lanceurs de bureau Windows et macOS, ouvrez `http://localhost:9001`. L’API S3 écoute sur le port `9000`. -If the login page cannot reach the target RustFS service, select **Server Configuration** or open `/config`. Enter the externally reachable RustFS service address and save it after the health check succeeds. **Reset** clears the saved address; **Skip** returns to login without changing it. +Si la page de connexion ne peut pas joindre le service RustFS cible, sélectionnez **Server Configuration** ou ouvrez `/config`. Saisissez l’adresse du service RustFS accessible depuis l’extérieur et enregistrez-la une fois le contrôle d’intégrité réussi. **Reset** efface l’adresse enregistrée ; **Skip** revient à la connexion sans la modifier. -## Log in +## Connexion -The login methods shown depend on the deployment configuration: +Les méthodes de connexion affichées dépendent de la configuration du déploiement : -- **Key Login** uses the access key and secret key configured for the RustFS deployment. This is the standard login method for a local administrator. -- **STS Login** uses temporary Security Token Service (STS) credentials. Use it only when your identity workflow has issued a valid session token. -- **OIDC Login** appears when an OpenID Connect (OIDC) provider is configured. Select the provider and complete authentication with the identity provider. +- **Key Login** utilise la clé d’accès et la clé secrète configurées pour le déploiement RustFS. C’est la méthode de connexion habituelle d’un administrateur local. +- **STS Login** utilise des identifiants temporaires du Security Token Service (STS). Ne l’utilisez que si votre flux d’identité a émis un jeton de session valide. +- **OIDC Login** apparaît lorsqu’un fournisseur OpenID Connect (OIDC) est configuré. Sélectionnez le fournisseur et terminez l’authentification auprès du fournisseur d’identité. -After login, the Console opens the first page your account can access. Menus and actions vary by account policy and enabled platform capabilities; a missing menu does not necessarily indicate a Console error. +Après la connexion, la Console ouvre la première page à laquelle votre compte peut accéder. Les menus et les actions varient selon la politique du compte et les capacités de plateforme activées ; un menu absent n’indique pas nécessairement une erreur de la Console. -If login fails, verify the selected login method, credentials, target server address, and account status before retrying. +Si la connexion échoue, vérifiez la méthode de connexion choisie, les identifiants, l’adresse du serveur cible et l’état du compte avant de réessayer. -:::warning[Do not expose default credentials] +:::warning[N’exposez pas les identifiants par défaut] -RustFS falls back to `rustfsadmin` / `rustfsadmin` when custom credentials are not configured. Use these defaults only for a throwaway local test. Configure a unique access key and a strong secret key before making the Console reachable by other users. +RustFS revient à `rustfsadmin` / `rustfsadmin` lorsque aucun identifiant personnalisé n’est configuré. N’utilisez ces valeurs par défaut que pour un test local jetable. Configurez une clé d’accès unique et une clé secrète robuste avant de rendre la Console accessible à d’autres utilisateurs. ::: -## Operational notes +## Notes d’exploitation -- Use [TLS](/integration/tls-configured) before exposing the Console outside a trusted network. -- Restrict network access to the Console listener and configure [Console CORS](/administration/cors) only when cross-origin access is required. -- The Console session inherits the permissions of the signed-in identity. Use a least-privilege account for routine work. -- Signing out or an expired session returns you to the login page. Do not store administrator credentials in shared browsers. +- Utilisez [TLS](/fr/integration/tls-configured) avant d’exposer la Console en dehors d’un réseau de confiance. +- Restreignez l’accès réseau à l’écouteur de la Console et ne configurez [CORS pour la Console](/fr/administration/cors) que lorsque l’accès inter-origines est requis. +- La session de la Console hérite des autorisations de l’identité connectée. Utilisez un compte à moindre privilège pour le travail courant. +- La déconnexion, ou l’expiration de la session, vous ramène à la page de connexion. Ne stockez pas les identifiants d’administrateur dans des navigateurs partagés. -## Management workflows +## Flux de gestion -- [Create and manage buckets](/administration/data/bucket/creation) -- [Upload and manage objects](/administration/data/object/creation) -- [Manage access keys](/security-compliance/iam/access-token) -- [Configure identity and access management](/security-compliance/iam) +- [Créer et gérer des compartiments](/fr/administration/data/bucket/creation) +- [Charger et gérer des objets](/fr/administration/data/object/creation) +- [Gérer les clés d’accès](/fr/security-compliance/iam/access-token) +- [Configurer la gestion des identités et des accès](/fr/security-compliance/iam) -## Next steps +## Étapes suivantes -Review the [security checklist](/installation/requirement/checklists/security-checklists) before exposing the Console outside a trusted network. For OIDC-based login, continue with the [OIDC configuration guide](/security-compliance/oidc). +Consultez la [liste de contrôle de sécurité](/fr/installation/requirement/checklists/security-checklists) avant d’exposer la Console en dehors d’un réseau de confiance. Pour une connexion fondée sur OIDC, poursuivez avec le [guide de configuration OIDC](/fr/security-compliance/oidc). diff --git a/content/fr/administration/cors/index.md b/content/fr/administration/cors/index.md index d4e52db44..05b912f51 100644 --- a/content/fr/administration/cors/index.md +++ b/content/fr/administration/cors/index.md @@ -1,41 +1,41 @@ --- -title: "CORS Configuration" -description: "Configure allowed browser origins for the RustFS S3 API and Console." +title: "Configuration CORS" +description: "Configurez les origines de navigateur autorisées pour l’API S3 et la Console RustFS." --- -Cross-Origin Resource Sharing (CORS) controls which browser origins can access the RustFS S3 API and Console. Configure each listener separately, then restart RustFS to apply the environment changes. +Le partage de ressources entre origines (Cross-Origin Resource Sharing, CORS) détermine quelles origines de navigateur peuvent accéder à l’API S3 et à la Console de RustFS. Configurez chaque écouteur séparément, puis redémarrez RustFS pour appliquer les changements d’environnement. -## S3 API origins +## Origines de l’API S3 -Set `RUSTFS_CORS_ALLOWED_ORIGINS` to a comma-separated list of trusted origins: +Définissez `RUSTFS_CORS_ALLOWED_ORIGINS` avec une liste d’origines de confiance séparées par des virgules : ```ini title="/etc/default/rustfs" RUSTFS_CORS_ALLOWED_ORIGINS="https://app.example.com,https://admin.example.com" ``` -When this variable is unset or empty, the S3 endpoint does not add generic CORS response headers. A list of explicit origins allows credentialed browser requests from matching origins. +Lorsque cette variable n’est pas définie ou qu’elle est vide, le point de terminaison S3 n’ajoute pas d’en-têtes de réponse CORS génériques. Une liste d’origines explicites autorise les requêtes de navigateur avec identifiants en provenance des origines correspondantes. -You can set the value to `*` to allow requests from any origin. Wildcard mode does not allow browser credentials. +Vous pouvez définir la valeur sur `*` pour autoriser les requêtes depuis n’importe quelle origine. Le mode caractère générique n’autorise pas les identifiants de navigateur. -:::warning[Use explicit origins in production] +:::warning[Utilisez des origines explicites en production] -Use a comma-separated allowlist for applications that send credentials. Reserve `*` for public resources that do not require credentialed browser requests. +Utilisez une liste d’autorisation séparée par des virgules pour les applications qui envoient des identifiants. Réservez `*` aux ressources publiques qui n’exigent pas de requêtes de navigateur avec identifiants. ::: -## Console origins +## Origines de la Console -The Console uses a separate variable: +La Console utilise une variable distincte : ```ini title="/etc/default/rustfs" RUSTFS_CONSOLE_CORS_ALLOWED_ORIGINS="https://admin.example.com" ``` -Use a comma-separated list when more than one browser origin must access the Console. Set `*` only when any origin must be allowed. +Utilisez une liste séparée par des virgules lorsque plusieurs origines de navigateur doivent accéder à la Console. Ne définissez `*` que lorsque toute origine doit être autorisée. -## Verify the response +## Vérifier la réponse -Send a request with an `Origin` header and inspect the CORS response headers: +Envoyez une requête avec un en-tête `Origin` et inspectez les en-têtes de réponse CORS : ```bash curl -i \ @@ -43,8 +43,8 @@ curl -i \ http://localhost:9000/ ``` -Confirm that `Access-Control-Allow-Origin` contains the expected origin. Repeat the check with an unlisted origin and confirm that it is not allowed. +Confirmez que `Access-Control-Allow-Origin` contient l’origine attendue. Répétez la vérification avec une origine absente de la liste et confirmez qu’elle n’est pas autorisée. -## Next steps +## Étapes suivantes -See the [environment variable reference](/reference/environment-variables#cors) for the verified defaults and configuration formats. \ No newline at end of file +Consultez la [référence des variables d’environnement](/fr/reference/environment-variables#cors) pour les valeurs par défaut vérifiées et les formats de configuration. diff --git a/content/fr/administration/data/bucket/creation.md b/content/fr/administration/data/bucket/creation.md index 46804ffcf..e7c958615 100644 --- a/content/fr/administration/data/bucket/creation.md +++ b/content/fr/administration/data/bucket/creation.md @@ -1,28 +1,28 @@ --- -title: "RustFS Bucket Creation" -description: "Create buckets using the RustFS UI, rc, or the S3 API." +title: "Créer un compartiment" +description: "Créez des compartiments avec l’interface RustFS, rc ou l’API S3." --- -This guide explains how to create buckets using the RustFS UI, `rc`, or the S3 API. +Ce guide explique comment créer des compartiments (buckets) avec l’interface RustFS, `rc` ou l’API S3. -## Requirements +## Prérequis -- A running RustFS instance (see [Installation Guide](../../../installation/index.md)). -- [`rc`](/operations/rc) installed and configured with an alias for the command-line workflow. +- Une instance RustFS en cours d’exécution (voir le [guide d’installation](../../../installation/index.md)). +- [`rc`](/fr/operations/rc) installé et configuré avec un alias pour le flux en ligne de commande. -## Using the RustFS UI +## Utiliser la Console RustFS -1. Log in to the RustFS Console. -2. On the Buckets page, in the top right corner, select **Create Bucket**. -3. Enter the bucket name and click **Create** to complete bucket creation. +1. Connectez-vous à la Console RustFS. +2. Sur la page **Buckets** (compartiments), dans le coin supérieur droit, sélectionnez **Create Bucket** (créer un compartiment). +3. Saisissez un nom de compartiment et sélectionnez **Create** (créer). -![bucket creation](images/bucket-creation-by-ui.png) +![création d’un compartiment](images/bucket-creation-by-ui.png) -## Using `rc` +## Avec `rc` -See the [`rc` guide](/operations/rc) for installation and alias configuration. +Consultez le [guide `rc`](/fr/operations/rc) pour l’installation et la configuration de l’alias. -Create a bucket: +Créez un compartiment : ```bash rc bucket create rustfs/my-bucket @@ -33,15 +33,15 @@ rc bucket list rustfs/ ✓ Bucket 'rustfs/my-bucket' created successfully. ``` -## Using the API +## Avec l’API -Create a bucket via API: +Créez un compartiment via l’API : ```http PUT /{bucketName} HTTP/1.1 ``` -S3 requests must be signed with AWS Signature V4, so use an S3 client rather than hand-crafting headers. With the [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) configured for your access keys: +Les requêtes S3 doivent être signées avec AWS Signature V4 ; utilisez donc un client S3 plutôt que de composer les en-têtes à la main. Avec l’[AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) configurée pour vos clés d’accès : ```bash aws s3api create-bucket \ @@ -49,4 +49,4 @@ aws s3api create-bucket \ --endpoint-url http://localhost:9000 ``` -Verify the bucket creation in the RustFS Console. +Confirmez que le compartiment apparaît dans la Console RustFS. diff --git a/content/fr/administration/data/bucket/deletion.md b/content/fr/administration/data/bucket/deletion.md index b2234a810..b2db1893c 100644 --- a/content/fr/administration/data/bucket/deletion.md +++ b/content/fr/administration/data/bucket/deletion.md @@ -1,31 +1,35 @@ --- -title: "RustFS Bucket Deletion" -description: "Delete buckets using the RustFS UI, rc, or the S3 API." +title: "Suppression d’un compartiment RustFS" +description: "Supprimez des compartiments avec l’interface RustFS, rc ou l’API S3." --- -This guide explains how to delete buckets using the RustFS UI, `rc`, or the S3 API. +Ce guide explique comment supprimer des compartiments (buckets) avec l’interface RustFS, `rc` ou l’API S3. -## Requirements +## Prérequis -- Install and configure [`rc`](/operations/rc) before using the command-line workflow. -- Empty the target bucket before deleting it, or use `--force` only after reviewing the objects that will be removed. +- Installez et configurez [`rc`](/fr/operations/rc) avant d’utiliser le flux en ligne de commande. +- Videz le compartiment cible avant de le supprimer, ou n’utilisez `--force` qu’après avoir examiné les objets qui seront supprimés. -**Warning**: Deleting a bucket is irreversible and may break applications relying on it. Ensure you have backed up any necessary data before proceeding. +:::warning[La suppression est définitive] -## Using the RustFS UI +La suppression d’un compartiment est irréversible et peut empêcher les applications qui en dépendent de fonctionner. Sauvegardez les données dont vous avez besoin avant de continuer. -1. Log in to the RustFS Console. -2. On the homepage, select the bucket you want to delete. -3. On the far right, select the **Delete** button. -4. In the popup dialog, click **Confirm** to complete bucket deletion. +::: -![bucket deletion](images/bucket-deletion-on-ui.png) +## Avec l’interface RustFS -## Using `rc` +1. Connectez-vous à la Console RustFS. +2. Sur la page d’accueil, sélectionnez le compartiment à supprimer. +3. À l’extrême droite, sélectionnez le bouton **Delete** (supprimer). +4. Dans la boîte de dialogue de confirmation, sélectionnez **Confirm** (confirmer). -See the [`rc` guide](/operations/rc) for installation and alias configuration. +![suppression d’un compartiment](images/bucket-deletion-on-ui.png) -Delete a bucket: +## Avec `rc` + +Consultez le [guide `rc`](/fr/operations/rc) pour l’installation et la configuration de l’alias. + +Supprimez un compartiment : ```bash rc bucket remove rustfs/my-bucket @@ -35,15 +39,15 @@ rc bucket remove rustfs/my-bucket ✓ Bucket 'rustfs/my-bucket' removed successfully. ``` -## Using the API +## Avec l’API -Delete a bucket via API: +Supprimez un compartiment via l’API : ```http DELETE /{bucketName} HTTP/1.1 ``` -S3 requests must be signed with AWS Signature V4, so use an S3 client rather than hand-crafting headers. With the [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) configured for your access keys: +Les requêtes S3 doivent être signées avec AWS Signature V4 ; utilisez donc un client S3 plutôt que de composer les en-têtes à la main. Avec l’[AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) configurée pour vos clés d’accès : ```bash aws s3api delete-bucket \ @@ -51,4 +55,4 @@ aws s3api delete-bucket \ --endpoint-url http://localhost:9000 ``` -Verify the bucket deletion in the RustFS Console. +Vérifiez la suppression du compartiment dans la Console RustFS. diff --git a/content/fr/administration/data/bucket/policy.md b/content/fr/administration/data/bucket/policy.md index c13c11b50..5d7b320a5 100644 --- a/content/fr/administration/data/bucket/policy.md +++ b/content/fr/administration/data/bucket/policy.md @@ -1,58 +1,58 @@ --- -title: "Bucket Policy" -description: "Create, apply, inspect, and verify RustFS bucket policies with the S3 API." +title: "Politique de compartiment" +description: "Créez, appliquez, inspectez et vérifiez les politiques de compartiment RustFS avec l’API S3." --- -RustFS bucket policies are S3-compatible resource policies attached directly to a bucket. Use them to grant or deny access to the bucket and its objects, including controlled anonymous access for public downloads. +Les politiques de compartiment (bucket) RustFS sont des politiques de ressource compatibles avec S3, attachées directement à un compartiment. Utilisez-les pour accorder ou refuser l’accès au compartiment et à ses objets, y compris un accès anonyme contrôlé pour les téléchargements publics. -## Overview +## Vue d’ensemble -A bucket policy contains one or more statements that match a principal, action, resource, and optional conditions. RustFS evaluates the policy for requests to the bucket before allowing the storage operation. +Une politique de compartiment contient une ou plusieurs instructions qui correspondent à un principal, à une action, à une ressource et à des conditions facultatives. RustFS évalue la politique pour les requêtes adressées au compartiment avant d’autoriser l’opération de stockage. -Bucket policies and IAM policies serve different purposes: +Les politiques de compartiment et les politiques IAM ont des rôles distincts : -| Policy type | Attached to | Typical use | +| Type de politique | Attachée à | Usage typique | | --- | --- | --- | -| Bucket policy | A bucket | Grant public access, add resource-level restrictions, or authorize access to one bucket. | -| IAM policy | A user or group | Define what an authenticated identity can do across one or more resources. | +| Politique de compartiment | Un compartiment | Accorder un accès public, ajouter des restrictions au niveau de la ressource ou autoriser l’accès à un seul compartiment. | +| Politique IAM | Un utilisateur ou un groupe | Définir ce qu’une identité authentifiée peut faire sur une ou plusieurs ressources. | -An explicit `Deny` takes precedence over an `Allow`. Bucket owners remain able to get, replace, or delete the bucket policy so that a deny statement cannot permanently lock policy administration. +Un `Deny` explicite l’emporte sur un `Allow`. Les propriétaires du compartiment peuvent toujours lire, remplacer ou supprimer la politique de compartiment, afin qu’une instruction de refus ne puisse pas verrouiller définitivement l’administration des politiques. -RustFS implements the standard S3 operations `PutBucketPolicy`, `GetBucketPolicy`, `GetBucketPolicyStatus`, and `DeleteBucketPolicy`. +RustFS implémente les opérations S3 standard `PutBucketPolicy`, `GetBucketPolicy`, `GetBucketPolicyStatus` et `DeleteBucketPolicy`. -:::warning[Public policies] +:::warning[Politiques publiques] -A statement with `"Principal": "*"` can grant access without authentication. Keep the action and resource scope as narrow as possible, and verify the result anonymously before using the policy in production. +Une instruction avec `"Principal": "*"` peut accorder un accès sans authentification. Restreignez autant que possible la portée de l’action et de la ressource, et vérifiez le résultat de façon anonyme avant d’utiliser la politique en production. ::: ## Configuration -### Requirements +### Prérequis -- Create the target bucket before applying a policy. -- Configure the AWS CLI with a RustFS credential and region `us-east-1`. -- Use a credential allowed to perform the required policy-management action. +- Créez le compartiment cible avant d’appliquer une politique. +- Configurez l’AWS CLI avec un identifiant RustFS et la région `us-east-1`. +- Utilisez un identifiant autorisé à effectuer l’action de gestion de politique requise. -Set reusable variables: +Définissez des variables réutilisables : ```bash export RUSTFS_ENDPOINT=http://localhost:9000 export BUCKET_NAME=my-bucket ``` -Policy management requires these actions: +La gestion des politiques exige ces actions : -| Operation | Required action | +| Opération | Action requise | | --- | --- | -| Apply or replace a policy | `s3:PutBucketPolicy` | -| Read a policy | `s3:GetBucketPolicy` | -| Read public status | `s3:GetBucketPolicyStatus` | -| Remove a policy | `s3:DeleteBucketPolicy` | +| Appliquer ou remplacer une politique | `s3:PutBucketPolicy` | +| Lire une politique | `s3:GetBucketPolicy` | +| Lire l’état public | `s3:GetBucketPolicyStatus` | +| Supprimer une politique | `s3:DeleteBucketPolicy` | -### Policy document structure +### Structure du document de politique -A bucket policy uses version `2012-10-17` and a `Statement` array: +Une politique de compartiment utilise la version `2012-10-17` et un tableau `Statement` : ```json { @@ -69,26 +69,26 @@ A bucket policy uses version `2012-10-17` and a `Statement` array: } ``` -The bucket ARN and object ARN are different: +L’ARN du compartiment et l’ARN d’objet sont distincts : -| Resource | ARN format | Example actions | +| Ressource | Format d’ARN | Exemples d’actions | | --- | --- | --- | -| Bucket | `arn:aws:s3:::my-bucket` | `s3:ListBucket`, `s3:GetBucketLocation` | -| Objects | `arn:aws:s3:::my-bucket/*` | `s3:GetObject`, `s3:PutObject`, `s3:DeleteObject` | +| Compartiment | `arn:aws:s3:::my-bucket` | `s3:ListBucket`, `s3:GetBucketLocation` | +| Objets | `arn:aws:s3:::my-bucket/*` | `s3:GetObject`, `s3:PutObject`, `s3:DeleteObject` | -Use a prefix in the object ARN, such as `arn:aws:s3:::my-bucket/public/*`, to limit access to part of the bucket. For the complete statement format and supported condition operators, see [Users, Groups, and Policies](/security-compliance/iam/policies#policy-document-format). +Utilisez un préfixe dans l’ARN d’objet, par exemple `arn:aws:s3:::my-bucket/public/*`, afin de limiter l’accès à une partie du compartiment. Pour le format complet des instructions et les opérateurs de condition pris en charge, consultez [Utilisateurs, groupes et politiques](/fr/security-compliance/iam/policies#format-du-document-de-politique). -### Public Access Block +### Blocage de l’accès public -If the bucket's Public Access Block configuration has `BlockPublicPolicy` enabled, RustFS rejects a new policy containing an `Allow` statement with a wildcard principal. Keep this protection enabled unless anonymous access is intentional. +Si `BlockPublicPolicy` est activé dans la configuration de blocage de l’accès public (Public Access Block) du compartiment, RustFS rejette une nouvelle politique qui contient une instruction `Allow` dont le principal est un caractère générique. Laissez cette protection activée, sauf si l’accès anonyme est intentionnel. -Public Access Block does not replace careful policy review. An existing explicit `Deny` still overrides allows, and authenticated requests continue to be evaluated against IAM and bucket policies. +Le blocage de l’accès public ne remplace pas un examen attentif de la politique. Un `Deny` explicite existant continue de l’emporter sur les autorisations, et les requêtes authentifiées continuent d’être évaluées au regard des politiques IAM et des politiques de compartiment. -## Usage +## Utilisation -### Create a public-read policy +### Créer une politique de lecture publique -Create a policy that allows anonymous downloads only from the `public/` prefix: +Créez une politique qui n’autorise les téléchargements anonymes que depuis le préfixe `public/` : ```bash cat > /tmp/my-bucket-policy.json <<'EOF' @@ -107,9 +107,9 @@ cat > /tmp/my-bucket-policy.json <<'EOF' EOF ``` -This policy does not allow anonymous bucket listing, uploads, overwrites, or deletes. +Cette politique n’autorise pas le listage anonyme du compartiment, les chargements (uploads), les remplacements ni les suppressions. -### Apply the policy +### Appliquer la politique ```bash aws s3api put-bucket-policy \ @@ -118,9 +118,9 @@ aws s3api put-bucket-policy \ --endpoint-url "$RUSTFS_ENDPOINT" ``` -Applying another policy replaces the complete existing policy. Retrieve and review the current document before updating it; statements are not merged automatically. +L’application d’une autre politique remplace intégralement la politique existante. Récupérez et examinez le document actuel avant de le mettre à jour ; les instructions ne sont pas fusionnées automatiquement. -### Read the policy +### Lire la politique ```bash aws s3api get-bucket-policy \ @@ -130,9 +130,9 @@ aws s3api get-bucket-policy \ --output text ``` -RustFS preserves the submitted policy JSON. If no policy exists, the API returns `NoSuchBucketPolicy`. +RustFS conserve le JSON de politique soumis. Si aucune politique n’existe, l’API renvoie `NoSuchBucketPolicy`. -### Check public status +### Vérifier l’état public ```bash aws s3api get-bucket-policy-status \ @@ -140,7 +140,7 @@ aws s3api get-bucket-policy-status \ --endpoint-url "$RUSTFS_ENDPOINT" ``` -The response contains a high-level public-access status: +La réponse contient un état global d’accès public : ```json { @@ -150,9 +150,9 @@ The response contains a high-level public-access status: } ``` -The current status check detects anonymous bucket listing (`s3:ListBucket`) and uploads (`s3:PutObject`). A policy that exposes only object downloads, such as the `public/` example above, can still report `false`. Always test the exact anonymous action, object prefix, and conditions instead of treating this status as a complete access analysis. +Le contrôle d’état actuel détecte le listage anonyme du compartiment (`s3:ListBucket`) et les chargements (`s3:PutObject`). Une politique qui n’expose que les téléchargements d’objets, comme l’exemple `public/` ci-dessus, peut encore indiquer `false`. Testez toujours l’action anonyme exacte, le préfixe d’objet et les conditions, plutôt que de traiter cet état comme une analyse d’accès complète. -### Remove the policy +### Supprimer la politique ```bash aws s3api delete-bucket-policy \ @@ -160,11 +160,11 @@ aws s3api delete-bucket-policy \ --endpoint-url "$RUSTFS_ENDPOINT" ``` -Deleting a bucket policy removes only that resource policy. IAM policies attached to users and groups remain unchanged. +La suppression d’une politique de compartiment ne supprime que cette politique de ressource. Les politiques IAM attachées aux utilisateurs et aux groupes restent inchangées. -## Verification +## Vérification -Upload a test object with an authenticated credential: +Chargez un objet de test avec un identifiant authentifié : ```bash printf 'hello from RustFS\n' > /tmp/hello.txt @@ -176,14 +176,14 @@ aws s3api put-object \ --endpoint-url "$RUSTFS_ENDPOINT" ``` -Verify that the allowed object can be downloaded without credentials: +Vérifiez que l’objet autorisé peut être téléchargé sans identifiants : ```bash curl --fail-with-body \ "${RUSTFS_ENDPOINT}/${BUCKET_NAME}/public/hello.txt" ``` -Then verify that an object outside the allowed prefix is not public: +Vérifiez ensuite qu’un objet situé hors du préfixe autorisé n’est pas public : ```bash aws s3api put-object \ @@ -196,10 +196,10 @@ curl --fail-with-body \ "${RUSTFS_ENDPOINT}/${BUCKET_NAME}/private/hello.txt" ``` -The second `curl` request should fail with `AccessDenied`. Also test each authenticated user role that relies on the policy, especially when the document contains conditions or explicit deny statements. +La seconde requête `curl` devrait échouer avec `AccessDenied`. Testez aussi chaque rôle d’utilisateur authentifié qui dépend de la politique, en particulier lorsque le document contient des conditions ou des instructions de refus explicites. -## Next steps +## Étapes suivantes -- [Manage IAM policies](/security-compliance/iam/policies) -- [Manage credentials](/operations/credentials) -- [Configure audit logs](/security-compliance/audit-logs) \ No newline at end of file +- [Gérer les politiques IAM](/fr/security-compliance/iam/policies) +- [Gérer les identifiants](/fr/operations/credentials) +- [Configurer les journaux d’audit](/fr/security-compliance/audit-logs) diff --git a/content/fr/administration/data/bucket/quota.md b/content/fr/administration/data/bucket/quota.md index ef975aac0..6abbdd710 100644 --- a/content/fr/administration/data/bucket/quota.md +++ b/content/fr/administration/data/bucket/quota.md @@ -1,47 +1,47 @@ --- -title: "Bucket Quota" -description: "Configure, inspect, and verify hard storage quotas for individual RustFS buckets." +title: "Quota de compartiment" +description: "Configurez, inspectez et vérifiez les quotas de stockage stricts des compartiments RustFS individuels." --- -RustFS bucket quotas limit the total object data stored in an individual bucket. Use a quota to prevent one workload from consuming more than its assigned capacity while allowing other buckets to use the remaining storage. +Les quotas de compartiment (bucket) RustFS limitent le volume total de données d’objets stocké dans un compartiment individuel. Utilisez un quota pour empêcher une charge de travail de consommer davantage que la capacité qui lui est attribuée, tout en permettant aux autres compartiments d’utiliser le stockage restant. -## Overview +## Vue d’ensemble -RustFS currently supports hard, byte-based quotas. Before accepting a write, RustFS compares the bucket's current usage plus the requested object size with the configured limit. A write that would exceed the limit is rejected with `InvalidRequest` and a `Bucket quota exceeded` message. +RustFS prend actuellement en charge les quotas stricts (hard), exprimés en octets. Avant d’accepter une écriture, RustFS compare la somme de l’utilisation actuelle du compartiment et de la taille de l’objet demandé à la limite configurée. Une écriture qui dépasserait la limite est rejetée avec `InvalidRequest` et le message `Bucket quota exceeded`. -Quota checks cover these operations: +Les contrôles de quota couvrent ces opérations : -| Operation | Quota behavior | +| Opération | Comportement du quota | | --- | --- | -| Upload an object | Rejects the upload when current usage plus the object size exceeds the limit. | -| Complete a multipart upload | Checks the completed object size before committing the upload. | -| Copy an object into the bucket | Checks the source object size against the destination bucket quota. | -| Delete an object | Always allowed so that you can recover capacity. | +| Charger un objet (upload) | Rejette le chargement lorsque l’utilisation actuelle plus la taille de l’objet dépasse la limite. | +| Terminer un chargement partitionné | Contrôle la taille de l’objet assemblé avant de valider le chargement. | +| Copier un objet dans le compartiment | Compare la taille de l’objet source au quota du compartiment de destination. | +| Supprimer un objet | Toujours autorisé, afin que vous puissiez récupérer de la capacité. | -The quota applies to object data, not the number of objects or request rate. A bucket without a configured limit is unlimited. +Le quota s’applique aux données d’objets, et non au nombre d’objets ni au débit des requêtes. Un compartiment sans limite configurée est illimité. -:::note[Replacement uploads] +:::note[Chargements de remplacement] -The quota check reserves the full incoming object size against the bucket's current usage. Replacing an existing key can therefore require enough headroom for the complete replacement object. +Le contrôle de quota réserve la taille complète de l’objet entrant, qu’il ajoute à l’utilisation actuelle du compartiment. Le remplacement d’une clé d’objet existante peut donc exiger une marge suffisante pour l’objet de remplacement dans son intégralité. ::: -## Configure in the Console +## Configurer dans la Console -1. Sign in to the RustFS Console and open **Browser**. -2. Find the bucket and select **Settings**. -3. Under **Capacity & Metadata**, find **Bucket Quota** and select **Edit**. -4. Enable **Bucket Quota**. -5. Enter the quota size and select **MiB**, **GiB**, **TiB**, or **PiB**. -6. Select **Save Quota**. +1. Connectez-vous à la Console RustFS et ouvrez **Browser** (navigateur). +2. Recherchez le compartiment et sélectionnez **Settings** (paramètres). +3. Sous **Capacity & Metadata** (capacité et métadonnées), recherchez **Bucket Quota** (quota de compartiment) et sélectionnez **Edit** (modifier). +4. Activez **Bucket Quota**. +5. Saisissez la taille du quota et sélectionnez **MiB**, **GiB**, **TiB** ou **PiB**. +6. Sélectionnez **Save Quota** (enregistrer le quota). -![Set Bucket Quota dialog with quota size and unit controls](./images/bucket-quota-console.png) +![Boîte de dialogue de quota de compartiment, avec la taille et l’unité](./images/bucket-quota-console.png) -To remove the limit, open the dialog again, disable **Bucket Quota**, and save the change. +Pour supprimer la limite, rouvrez la boîte de dialogue, désactivez **Bucket Quota** et enregistrez la modification. -## Use rc +## Utiliser rc -Configure an alias for your RustFS deployment: +Configurez un alias pour votre déploiement RustFS : ```bash rc alias set rustfs http://localhost:9000 \ @@ -49,29 +49,29 @@ rc alias set rustfs http://localhost:9000 \ --region us-east-1 --bucket-lookup path ``` -Replace `localhost` with the RustFS server address when `rc` runs on another host. +Remplacez `localhost` par l’adresse du serveur RustFS lorsque `rc` s’exécute sur un autre hôte. -### Permissions +### Autorisations -Quota operations require these policy actions: +Les opérations de quota exigent ces actions de politique : -| Operation | Required action | +| Opération | Action requise | | --- | --- | -| Set or clear a quota | `admin:SetBucketQuota` | -| Read quota configuration or statistics | `s3:GetBucketQuota` | -| Check whether a proposed operation fits | `s3:GetBucketQuota` | +| Définir ou effacer un quota | `admin:SetBucketQuota` | +| Lire la configuration ou les statistiques de quota | `s3:GetBucketQuota` | +| Vérifier si une opération envisagée tient dans le quota | `s3:GetBucketQuota` | -The root credential has these permissions. For delegated administration, attach only the actions needed for the workflow. +L’identifiant racine dispose de ces autorisations. Pour une administration déléguée, n’attachez que les actions nécessaires au flux. -### Set a quota +### Définir un quota -Set a 1 GiB hard quota. `rc` accepts byte values or units such as `1G`, `500M`, and `10KB`: +Définissez un quota strict de 1 GiB. `rc` accepte des valeurs en octets ou des unités telles que `1G`, `500M` et `10KB` : ```bash rc bucket quota set rustfs/my-bucket 1G ``` -The response includes the configured limit and current usage: +La réponse indique la limite configurée et l’utilisation actuelle : ```text Bucket: my-bucket @@ -80,42 +80,42 @@ Usage: 0 B Type: HARD ``` -### Read the quota +### Lire le quota ```bash rc bucket quota info rustfs/my-bucket ``` -Use `--json` when another tool needs to process the result: +Utilisez `--json` lorsqu’un autre outil doit traiter le résultat : ```bash rc bucket quota info rustfs/my-bucket --json ``` -When no limit is configured, the human-readable output reports `Quota: unlimited`. +Lorsqu’aucune limite n’est configurée, la sortie lisible indique `Quota: unlimited`. -:::note[Configuration propagation] +:::note[Propagation de la configuration] -A query issued immediately after setting or clearing a quota can briefly return the previous state. Query the quota again and confirm the expected value before starting the verification workflow. +Une requête émise juste après la définition ou l’effacement d’un quota peut renvoyer brièvement l’état précédent. Interrogez de nouveau le quota et confirmez la valeur attendue avant de lancer le flux de vérification. ::: -### Clear a quota +### Effacer un quota -Remove the limit without deleting objects: +Supprimez la limite sans supprimer les objets : ```bash rc bucket quota clear rustfs/my-bucket rc bucket quota info rustfs/my-bucket ``` -The bucket becomes unlimited after the configuration change is applied. +Le compartiment devient illimité une fois la modification de configuration appliquée. -## Advanced quota checks +## Contrôles de quota avancés -`rc 0.1.29` does not expose commands for detailed usage statistics or advisory checks for proposed writes. Use the RustFS Admin API for these operations. Requests must use AWS Signature Version 4 with an active RustFS credential. +`rc 0.1.29` n’expose aucune commande pour les statistiques d’utilisation détaillées ni pour les contrôles indicatifs d’écritures envisagées. Utilisez l’API d’administration RustFS pour ces opérations. Les requêtes doivent utiliser AWS Signature Version 4 avec un identifiant RustFS actif. -The examples use these shell variables: +Les exemples utilisent ces variables de shell : ```bash export RUSTFS_ENDPOINT=http://localhost:9000 @@ -124,15 +124,15 @@ export RUSTFS_SECRET_KEY= export BUCKET_NAME=my-bucket ``` -:::warning[Protect credentials] +:::warning[Protégez les identifiants] -Environment variables are convenient for local testing but may be visible to processes running as the same operating-system user. Use your platform's secret manager or a restricted credentials file in production. +Les variables d’environnement sont pratiques pour les tests locaux, mais elles peuvent être visibles par les processus qui s’exécutent sous le même utilisateur du système d’exploitation. En production, utilisez le gestionnaire de secrets de votre plateforme ou un fichier d’identifiants à accès restreint. ::: -### Read detailed usage statistics +### Lire les statistiques d’utilisation détaillées -Use the statistics endpoint to retrieve the limit, current usage, remaining bytes, and percentage used: +Utilisez le point de terminaison de statistiques pour obtenir la limite, l’utilisation actuelle, les octets restants et le pourcentage utilisé : ```bash curl --fail-with-body \ @@ -151,11 +151,11 @@ curl --fail-with-body \ } ``` -Usage values come from RustFS data-usage accounting. Allow time for that view to reflect very recent changes before using the statistics response for external billing or orchestration. +Les valeurs d’utilisation proviennent de la comptabilité d’usage des données de RustFS. Laissez à cette vue le temps de refléter les changements très récents avant d’utiliser la réponse de statistiques pour une facturation ou une orchestration externe. -### Check a proposed upload +### Vérifier un chargement envisagé -Check whether a 64 MiB upload would fit without writing an object: +Vérifiez si un chargement de 64 MiB tiendrait, sans écrire d’objet : ```bash curl --fail-with-body \ @@ -167,11 +167,11 @@ curl --fail-with-body \ "${RUSTFS_ENDPOINT}/rustfs/admin/v3/quota-check/${BUCKET_NAME}" ``` -The `allowed` field reports the decision. This check is advisory: another write can consume capacity before the planned upload starts, so the actual upload remains authoritative. +Le champ `allowed` indique la décision. Ce contrôle est indicatif : une autre écriture peut consommer de la capacité avant le début du chargement prévu, et le chargement effectif reste donc la référence. -## Verification +## Vérification -Set a small test quota, upload an object that fits, and then attempt to upload an object that exceeds the remaining capacity: +Définissez un petit quota de test, chargez un objet qui tient dans le quota, puis tentez de charger un objet qui dépasse la capacité restante : ```bash rc bucket quota set rustfs/my-bucket 1M @@ -183,9 +183,9 @@ rc object copy /tmp/quota-small.bin rustfs/my-bucket/hello.bin rc object copy /tmp/quota-large.bin rustfs/my-bucket/too-large.bin ``` -The 256 KiB object succeeds. The 2 MiB object exceeds the 1 MiB bucket quota, so `rc` exits with an error and RustFS does not create `too-large.bin`. +L’objet de 256 KiB réussit. L’objet de 2 MiB dépasse le quota de 1 MiB du compartiment, donc `rc` se termine avec une erreur et RustFS ne crée pas `too-large.bin`. -Delete the first object and clear the test quota: +Supprimez le premier objet et effacez le quota de test : ```bash rc object remove rustfs/my-bucket/hello.bin --force @@ -193,12 +193,12 @@ rc bucket quota clear rustfs/my-bucket rc bucket quota info rustfs/my-bucket ``` -Confirm that the final query reports `Quota: unlimited`. +Confirmez que la dernière requête indique `Quota: unlimited`. -If quota enforcement cannot read or parse its internal configuration, RustFS logs `Bucket quota check degraded to allow` and permits the write. Monitor for this warning because it means quota enforcement is temporarily unavailable. +Si l’application du quota ne parvient pas à lire ou à analyser sa configuration interne, RustFS journalise `Bucket quota check degraded to allow` et autorise l’écriture. Surveillez cet avertissement, car il signifie que l’application du quota est temporairement indisponible. -## Next steps +## Étapes suivantes -- [Create a bucket](./creation.md) -- [Manage lifecycle rules](../lifecycle-management.md) -- [Configure observability](/operations/observability) \ No newline at end of file +- [Créer un compartiment](./creation.md) +- [Gérer les règles de cycle de vie](../lifecycle-management.md) +- [Configurer l’observabilité](/fr/operations/observability) diff --git a/content/fr/administration/data/bucket/replication.md b/content/fr/administration/data/bucket/replication.md index 37642ae90..f89b98cfd 100644 --- a/content/fr/administration/data/bucket/replication.md +++ b/content/fr/administration/data/bucket/replication.md @@ -1,46 +1,46 @@ --- -title: "Bucket Replication" -description: "Configure, validate, and monitor asynchronous replication between versioned RustFS buckets." +title: "Réplication de compartiment" +description: "Configurez, validez et surveillez la réplication asynchrone entre des compartiments RustFS dont la gestion des versions est activée." --- -RustFS bucket replication copies selected object versions from a source bucket to a target bucket. Use it to maintain a remote copy of bucket data, distribute objects between deployments, or prepare a secondary copy for recovery workflows. +La réplication de compartiment (bucket) RustFS copie les versions d’objets sélectionnées d’un compartiment source vers un compartiment cible. Utilisez-la pour conserver une copie distante des données du compartiment, répartir des objets entre des déploiements ou préparer une copie secondaire pour des flux de reprise. -## Overview +## Vue d’ensemble -Bucket replication has two configuration layers: +La réplication de compartiment comporte deux couches de configuration : -1. A **remote target** stores the target endpoint, bucket, credentials, and generated target ARN. -2. An S3 **replication configuration** attaches rules to the source bucket and references that target ARN. +1. Une **cible distante** enregistre le point de terminaison cible, le compartiment, les identifiants et l’ARN de cible généré. +2. Une **configuration de réplication** S3 attache des règles au compartiment source et référence cet ARN de cible. -Both the source and target buckets must have versioning enabled. RustFS verifies the target connection and target-bucket versioning when you register the remote target. It rejects a replication configuration whose enabled rules reference an unknown or stale target ARN. +Le compartiment source et le compartiment cible doivent tous deux avoir la gestion des versions activée. RustFS vérifie la connexion à la cible et la gestion des versions du compartiment cible lorsque vous enregistrez la cible distante. Il rejette une configuration de réplication dont les règles activées référencent un ARN de cible inconnu ou obsolète. -Replication is asynchronous by default. A successful source upload means RustFS accepted the source object; it does not mean the target copy is already complete. +La réplication est asynchrone par défaut. Un chargement (upload) source réussi signifie que RustFS a accepté l’objet source ; cela ne signifie pas que la copie cible est déjà terminée. -Rules can select objects by prefix or object tags and control these behaviors: +Les règles peuvent sélectionner des objets par préfixe ou par étiquettes d’objet, et contrôler ces comportements : -| Rule setting | Behavior | +| Réglage de règle | Comportement | | --- | --- | -| `Status` | Enables or disables the rule. | -| `Filter` | Restricts replication by key prefix, object tags, or both. | -| `ExistingObjectReplication` | Includes objects that existed before the rule when set to `Enabled`. | -| `DeleteMarkerReplication` | Replicates delete markers when set to `Enabled`. | -| `DeleteReplication` | Replicates deletion of a specific object version when set to `Enabled`. | -| `Destination` | Identifies the registered remote target by ARN. | +| `Status` | Active ou désactive la règle. | +| `Filter` | Restreint la réplication par préfixe de clé, par étiquettes d’objet, ou par les deux. | +| `ExistingObjectReplication` | Inclut les objets qui existaient avant la règle lorsqu’il vaut `Enabled`. | +| `DeleteMarkerReplication` | Réplique les marqueurs de suppression lorsqu’il vaut `Enabled`. | +| `DeleteReplication` | Réplique la suppression d’une version d’objet précise lorsqu’il vaut `Enabled`. | +| `Destination` | Identifie la cible distante enregistrée par son ARN. | -Bucket replication is directional. Configure a separate target and rule in the opposite direction if both buckets must accept writes and replicate them to each other. Do not confuse bucket replication with [site replication](/operations/high-availability/site-replication), which synchronizes broader site configuration and identity data. +La réplication de compartiment est directionnelle. Configurez une cible et une règle distinctes dans le sens inverse si les deux compartiments doivent accepter des écritures et les répliquer l’un vers l’autre. Ne confondez pas la réplication de compartiment avec la [réplication de site](/fr/operations/high-availability/site-replication), qui synchronise une configuration de site et des données d’identité plus larges. ## Configuration -### Requirements +### Prérequis -- A source RustFS deployment and a reachable target S3-compatible deployment. -- A source bucket and target bucket with versioning enabled. -- A dedicated target credential that can inspect the target bucket's versioning and write replicated object versions and delete markers. -- A source administrator allowed to manage remote targets and replication configuration. -- Network access from every source node that can run replication work to the target endpoint. -- The RustFS [`rc`](/operations/rc) client installed on an administration host. +- Un déploiement RustFS source et un déploiement cible joignable, compatible avec S3. +- Un compartiment source et un compartiment cible avec la gestion des versions activée. +- Un identifiant cible dédié qui peut inspecter la gestion des versions du compartiment cible et écrire les versions d’objets répliquées ainsi que les marqueurs de suppression. +- Un administrateur source autorisé à gérer les cibles distantes et la configuration de réplication. +- Un accès réseau vers le point de terminaison cible, depuis chaque nœud source qui peut exécuter le travail de réplication. +- Le client RustFS [`rc`](/fr/operations/rc) installé sur un hôte d’administration. -Configure one `rc` alias for each deployment. Use dedicated credentials and replace the example endpoints before running the commands: +Configurez un alias `rc` pour chaque déploiement. Utilisez des identifiants dédiés et remplacez les points de terminaison d’exemple avant d’exécuter les commandes : ```bash rc alias set source https://source.example.com:9000 \ @@ -54,43 +54,43 @@ rc alias set target https://target.example.com:9000 \ rc alias list ``` -The source deployment uses the target alias credentials when it registers the remote target. `rc alias list` displays endpoints but does not print secret keys. +Le déploiement source utilise les identifiants de l’alias cible lorsqu’il enregistre la cible distante. `rc alias list` affiche les points de terminaison, mais n’affiche pas les clés secrètes. -:::warning[Protect target credentials] +:::warning[Protégez les identifiants cibles] -RustFS stores the target credential as part of the source bucket's remote-target configuration. Use a dedicated credential with access limited to the target bucket and do not reuse a root credential. +RustFS stocke l’identifiant cible dans la configuration de cible distante du compartiment source. Utilisez un identifiant dédié dont l’accès est limité au compartiment cible, et ne réutilisez pas un identifiant racine. ::: -### Permissions +### Autorisations -Source-side administration uses these policy actions: +L’administration côté source utilise ces actions de politique : -| Operation | Required action | +| Opération | Action requise | | --- | --- | -| Register, update, or remove a remote target | `admin:SetBucketTarget` | -| List remote targets | `admin:GetBucketTarget` | -| Read replication metrics | `admin:GetReplicationMetrics` | -| Apply or delete replication configuration | `s3:PutReplicationConfiguration` | -| Read replication configuration | `s3:GetReplicationConfiguration` | +| Enregistrer, mettre à jour ou supprimer une cible distante | `admin:SetBucketTarget` | +| Lister les cibles distantes | `admin:GetBucketTarget` | +| Lire les métriques de réplication | `admin:GetReplicationMetrics` | +| Appliquer ou supprimer la configuration de réplication | `s3:PutReplicationConfiguration` | +| Lire la configuration de réplication | `s3:GetReplicationConfiguration` | -The target credential must pass RustFS target validation, which checks bucket access, versioning, replicated-object writes, replicated delete markers, and object-version deletion. When Object Lock is enabled on the source bucket, the target must have compatible Object Lock support. +L’identifiant cible doit réussir la validation de cible de RustFS, qui vérifie l’accès au compartiment, la gestion des versions, les écritures d’objets répliqués, les marqueurs de suppression répliqués et la suppression de versions d’objet. Lorsque le verrouillage d’objet (Object Lock) est activé sur le compartiment source, la cible doit offrir une prise en charge compatible du verrouillage d’objet. -### Create and version the buckets +### Créer les compartiments et activer la gestion des versions -Create the source bucket: +Créez le compartiment source : ```bash rc bucket create source/my-bucket ``` -Create the target bucket: +Créez le compartiment cible : ```bash rc bucket create target/my-bucket-replica ``` -Enable versioning on both buckets: +Activez la gestion des versions sur les deux compartiments : ```bash rc bucket version enable source/my-bucket @@ -100,53 +100,53 @@ rc bucket version info source/my-bucket rc bucket version info target/my-bucket-replica ``` -Do not suspend source-bucket versioning while replication is configured. +Ne suspendez pas la gestion des versions du compartiment source tant que la réplication est configurée. -## Usage +## Utilisation -### Configure replication in the Console +### Configurer la réplication dans la Console -The RustFS Console combines remote-target registration and replication-rule configuration in one form. +La Console RustFS regroupe l’enregistrement de la cible distante et la configuration des règles de réplication dans un seul formulaire. -1. Sign in to the source deployment's Console. -2. Open **Buckets**, locate the source bucket, and select **Settings**. -3. Under **Data Protection**, enable **Versioning** if it is disabled. -4. Under **Automation**, select **Open Bucket Replication**. -5. Select **Add Replication Rule**. -6. Configure the destination and rule: +1. Connectez-vous à la Console du déploiement source. +2. Ouvrez **Buckets** (compartiments), localisez le compartiment source et sélectionnez **Settings** (paramètres). +3. Sous **Data Protection** (protection des données), activez **Versioning** (gestion des versions) s’il est désactivé. +4. Sous **Automation** (automatisation), sélectionnez **Open Bucket Replication** (ouvrir la réplication de compartiment). +5. Sélectionnez **Add Replication Rule** (ajouter une règle de réplication). +6. Configurez la destination et la règle : -| Console field | Value | +| Champ de la Console | Valeur | | --- | --- | -| **Priority** | Rule evaluation priority. The initial value is `1`. | -| **Mode** | Select **Asynchronous** or **Synchronous**. Asynchronous is selected by default. | -| **Endpoint** | Target S3 API address as `host:port`, without a URL scheme. | -| **Bucket** | Versioned destination bucket name. | -| **Access Key** and **Secret Key** | Dedicated credentials authorized to replicate into the destination bucket. | -| **Region** | Target region. The initial value is `us-east-1`. | -| **Storage Class** | Storage class applied at the destination. The initial value is `STANDARD`. | -| **Prefix** | Optional key prefix used to limit matching objects. | -| **Tags** | Optional object-tag name and value filters. Select **Add Tag** for additional filters. | -| **Use TLS** | Enables HTTPS for the destination connection. | -| **Replicate Existing Objects** | Includes objects created before the rule. Enabled by default. | -| **Replicate Delete Markers** | Copies delete markers to the destination. Enabled by default. | -| **Replicate Delete** | Copies deletion of a specific object version. Enabled by default. | -| **Health Check Interval** | Target health-check interval in seconds. The initial value is `60`. | -| **Bandwidth Limit** | Per-target transfer limit, selectable in KiB/s, MiB/s, or GiB/s. | - -7. Select **Save**. RustFS validates the source bucket, target connection, target credentials, and target-bucket versioning before accepting the rule. -8. Return to **Bucket Replication** to review the rule or select **Refresh** to update its displayed state. - -:::warning[Enable versioning on both deployments] - -The source and destination buckets must both have versioning enabled before you save the rule. Sign in to the target deployment's Console and enable versioning under **Buckets** → **Settings** → **Data Protection** when needed. +| **Priority** (priorité) | Priorité d’évaluation de la règle. La valeur initiale est `1`. | +| **Mode** | Sélectionnez **Asynchronous** (asynchrone) ou **Synchronous** (synchrone). Le mode asynchrone est sélectionné par défaut. | +| **Endpoint** (point de terminaison) | Adresse de l’API S3 cible sous la forme `host:port`, sans schéma d’URL. | +| **Bucket** (compartiment) | Nom du compartiment de destination avec gestion des versions. | +| **Access Key** (clé d’accès) et **Secret Key** (clé secrète) | Identifiants dédiés autorisés à répliquer vers le compartiment de destination. | +| **Region** (région) | Région cible. La valeur initiale est `us-east-1`. | +| **Storage Class** (classe de stockage) | Classe de stockage appliquée à la destination. La valeur initiale est `STANDARD`. | +| **Prefix** (préfixe) | Préfixe de clé facultatif qui limite les objets correspondants. | +| **Tags** (étiquettes) | Filtres facultatifs sur le nom et la valeur d’une étiquette d’objet. Sélectionnez **Add Tag** (ajouter une étiquette) pour des filtres supplémentaires. | +| **Use TLS** (utiliser TLS) | Active HTTPS pour la connexion à la destination. | +| **Replicate Existing Objects** (répliquer les objets existants) | Inclut les objets créés avant la règle. Activé par défaut. | +| **Replicate Delete Markers** (répliquer les marqueurs de suppression) | Copie les marqueurs de suppression vers la destination. Activé par défaut. | +| **Replicate Delete** (répliquer la suppression) | Copie la suppression d’une version d’objet précise. Activé par défaut. | +| **Health Check Interval** (intervalle de contrôle d’intégrité) | Intervalle de contrôle d’intégrité de la cible, en secondes. La valeur initiale est `60`. | +| **Bandwidth Limit** (limite de bande passante) | Limite de transfert par cible, au choix en KiB/s, MiB/s ou GiB/s. | + +7. Sélectionnez **Save** (enregistrer). RustFS valide le compartiment source, la connexion à la cible, les identifiants cibles et la gestion des versions du compartiment cible avant d’accepter la règle. +8. Revenez à **Bucket Replication** (réplication de compartiment) pour examiner la règle, ou sélectionnez **Refresh** (actualiser) afin de mettre à jour l’état affiché. + +:::warning[Activez la gestion des versions sur les deux déploiements] + +Le compartiment source et le compartiment de destination doivent tous deux avoir la gestion des versions activée avant l’enregistrement de la règle. Connectez-vous à la Console du déploiement cible et activez la gestion des versions sous **Buckets** → **Settings** → **Data Protection** si nécessaire. ::: -For repeatable automation or configuration management, use the `rc` workflow below. +Pour une automatisation reproductible ou une gestion de la configuration, utilisez le flux `rc` ci-dessous. -### Add a replication rule with rc +### Ajouter une règle de réplication avec rc -Create an asynchronous rule that copies new and existing objects and propagates delete markers and explicit version deletions: +Créez une règle asynchrone qui copie les objets nouveaux et existants, et qui propage les marqueurs de suppression ainsi que les suppressions explicites de version : ```bash rc bucket replication add source/my-bucket \ @@ -156,9 +156,9 @@ rc bucket replication add source/my-bucket \ --replicate delete,delete-marker,existing-objects ``` -`rc` registers the target, obtains its generated ARN, and applies the replication rule in one operation. Omit `--replicate` flags for behaviors you do not want. Add `--sync` only when writes must wait for synchronous replication. +`rc` enregistre la cible, obtient l’ARN qu’elle a généré et applique la règle de réplication en une seule opération. Omettez les options `--replicate` correspondant aux comportements que vous ne souhaitez pas. N’ajoutez `--sync` que lorsque les écritures doivent attendre la réplication synchrone. -To limit replication to a prefix, add `--prefix`: +Pour limiter la réplication à un préfixe, ajoutez `--prefix` : ```bash rc bucket replication add source/my-bucket \ @@ -169,18 +169,18 @@ rc bucket replication add source/my-bucket \ --replicate delete-marker,existing-objects ``` -Objects that do not match an enabled rule remain only in the source bucket. Use `--bandwidth` to set a byte-per-second limit, `--healthcheck-seconds` to change the target health-check interval, and `--storage-class` to override the destination storage class. +Les objets qui ne correspondent à aucune règle activée restent uniquement dans le compartiment source. Utilisez `--bandwidth` pour fixer une limite en octets par seconde, `--healthcheck-seconds` pour modifier l’intervalle de contrôle d’intégrité de la cible, et `--storage-class` pour remplacer la classe de stockage de destination. -### List and update rules +### Lister et mettre à jour les règles -List the active rules: +Listez les règles actives : ```bash rc bucket replication list source/my-bucket rc bucket replication list source/my-bucket --json ``` -Update a rule by its ID. Only supplied settings are changed: +Mettez à jour une règle à l’aide de son ID. Seuls les réglages fournis sont modifiés : ```bash rc bucket replication update source/my-bucket \ @@ -190,25 +190,25 @@ rc bucket replication update source/my-bucket \ --healthcheck-seconds 60 ``` -Use `--status Enabled|Disabled` to enable or disable a rule and `--sync true|false` to change its replication mode. +Utilisez `--status Enabled|Disabled` pour activer ou désactiver une règle, et `--sync true|false` pour changer son mode de réplication. -### Export and import configuration +### Exporter et importer la configuration -Export the complete replication configuration for review or backup: +Exportez la configuration de réplication complète à des fins d’examen ou de sauvegarde : ```bash rc bucket replication export source/my-bucket --json > replication.json ``` -The export includes remote-target metadata and the target Access Key, although the Secret Key is omitted. Protect the file as sensitive configuration. +L’export inclut les métadonnées de la cible distante et la clé d’accès cible, bien que la clé secrète soit omise. Protégez ce fichier comme une configuration sensible. -Import a previously exported configuration: +Importez une configuration exportée auparavant : ```bash rc bucket replication import source/my-bucket replication.json ``` -### Delete replication configuration +### Supprimer la configuration de réplication ```bash rc bucket replication remove source/my-bucket --id replicate-all @@ -217,49 +217,49 @@ rc bucket replication remove source/my-bucket --id replicate-all rc bucket replication remove source/my-bucket --all ``` -RustFS also removes replication remote targets referenced by the deleted configuration. It does not delete objects or versions already copied to the target bucket. Remove or retain those objects according to the target bucket's lifecycle and retention requirements. +RustFS supprime également les cibles distantes de réplication référencées par la configuration supprimée. Il ne supprime pas les objets ni les versions déjà copiés dans le compartiment cible. Supprimez ou conservez ces objets selon les exigences de gestion du cycle de vie et de conservation du compartiment cible. -:::note[rc 0.1.29 removal response] +:::note[Réponse de suppression de rc 0.1.29] -After RustFS removes the replication configuration and its targets, `rc 0.1.29` can report `Remote target not found` while attempting a second target cleanup. Run `rc bucket replication list source/my-bucket --json`; an empty `rules` array confirms that the configuration was removed. +Après que RustFS a supprimé la configuration de réplication et ses cibles, `rc 0.1.29` peut signaler `Remote target not found` lors d’une seconde tentative de nettoyage de la cible. Exécutez `rc bucket replication list source/my-bucket --json` ; un tableau `rules` vide confirme que la configuration a été supprimée. ::: -## Verification +## Vérification -### Check target readiness +### Vérifier l’état de préparation de la cible -`rc bucket replication add` checks source access, target connectivity, target credentials, and bucket versioning before it creates the rule. Confirm the resulting destination and rule settings: +`rc bucket replication add` vérifie l’accès à la source, la connectivité de la cible, les identifiants cibles et la gestion des versions des compartiments avant de créer la règle. Confirmez la destination obtenue et les réglages de la règle : ```bash rc bucket replication list source/my-bucket --json ``` -### Replicate an object +### Répliquer un objet -Upload a test object to the source: +Chargez un objet de test sur la source : ```bash printf 'hello from RustFS replication\n' > /tmp/hello.txt rc object copy /tmp/hello.txt source/my-bucket/hello.txt ``` -Inspect the source object: +Inspectez l’objet source : ```bash rc object stat source/my-bucket/hello.txt --json ``` -Because replication is asynchronous by default, the target object might not appear immediately. Repeat this command until it succeeds: +La réplication étant asynchrone par défaut, l’objet cible peut ne pas apparaître immédiatement. Répétez cette commande jusqu’à ce qu’elle réussisse : ```bash rc object stat target/my-bucket-replica/hello.txt --json rc object show target/my-bucket-replica/hello.txt ``` -Compare the source and target `etag` and `size_bytes` values, then confirm that `object show` returns the expected content. +Comparez les valeurs `etag` et `size_bytes` de la source et de la cible, puis confirmez que `object show` renvoie le contenu attendu. -To verify delete-marker replication, delete the source object and list versions on both buckets: +Pour vérifier la réplication des marqueurs de suppression, supprimez l’objet source et listez les versions dans les deux compartiments : ```bash rc object remove source/my-bucket/hello.txt --force @@ -268,31 +268,31 @@ rc bucket version list source/my-bucket/hello.txt --json rc bucket version list target/my-bucket-replica/hello.txt --json ``` -When delete-marker replication succeeds, the latest entry on both buckets has `is_delete_marker: true`. +Lorsque la réplication du marqueur de suppression réussit, la dernière entrée de chaque compartiment contient `is_delete_marker: true`. -### Inspect replication metrics +### Inspecter les métriques de réplication ```bash rc bucket replication status source/my-bucket rc bucket replication status source/my-bucket --json ``` -The command returns the source node's current in-memory replication statistics. Metrics can remain zero even after an object reaches the destination, so use them together with target-object and version checks rather than as the only verification signal. +La commande renvoie les statistiques de réplication en mémoire actuelles du nœud source. Les métriques peuvent rester à zéro même après l’arrivée d’un objet à destination. Utilisez-les donc conjointement aux contrôles de l’objet cible et des versions, et non comme unique signal de vérification. -### Troubleshoot failures +### Diagnostiquer les échecs -| Symptom | Check | +| Symptôme | Vérification | | --- | --- | -| `bucket versioning must be enabled` | Enable versioning on the source bucket. | -| Target registration reports `not versioned` | Enable versioning on the target bucket. | -| `replication target configuration not found` | Recheck the target alias, credentials, and destination bucket, then rerun `replication add`. | -| Rule reports a stale target | Refresh the rule list and retry `replication add`; if it persists, remove the failed configuration and recreate the target. | -| Target object does not appear | Check target reachability, credentials, target quota, and `rc bucket replication status`. | -| Replication fails | Inspect source-node logs for the target ARN and object key. | -| Target removal is disallowed | Delete or replace the replication configuration before removing a referenced target. | - -## Next steps - -- [Manage bucket lifecycle](../lifecycle-management.md) -- [Configure bucket quotas](./quota.md) -- [Configure observability](/operations/observability) \ No newline at end of file +| `bucket versioning must be enabled` | Activez la gestion des versions sur le compartiment source. | +| L’enregistrement de la cible indique `not versioned` | Activez la gestion des versions sur le compartiment cible. | +| `replication target configuration not found` | Vérifiez de nouveau l’alias cible, les identifiants et le compartiment de destination, puis relancez `replication add`. | +| La règle signale une cible obsolète | Actualisez la liste des règles et réessayez `replication add` ; s’il persiste, supprimez la configuration en échec et recréez la cible. | +| L’objet cible n’apparaît pas | Vérifiez la joignabilité de la cible, les identifiants, le quota cible et `rc bucket replication status`. | +| La réplication échoue | Examinez les journaux du nœud source pour y trouver l’ARN de cible et la clé d’objet. | +| La suppression de la cible n’est pas autorisée | Supprimez ou remplacez la configuration de réplication avant de supprimer une cible référencée. | + +## Étapes suivantes + +- [Gérer le cycle de vie du compartiment](../lifecycle-management.md) +- [Configurer les quotas de compartiment](./quota.md) +- [Configurer l’observabilité](/fr/operations/observability) diff --git a/content/fr/administration/data/lifecycle-management.md b/content/fr/administration/data/lifecycle-management.md index 9cc05f875..c82a5aec1 100644 --- a/content/fr/administration/data/lifecycle-management.md +++ b/content/fr/administration/data/lifecycle-management.md @@ -1,21 +1,21 @@ --- -title: "Lifecycle Management" -description: "Configure, inspect, and maintain RustFS object lifecycle rules with the rc command-line client." +title: "Gestion du cycle de vie" +description: "Configurez, inspectez et maintenez les règles de cycle de vie des objets RustFS avec le client en ligne de commande rc." --- -RustFS lifecycle management applies expiration and transition rules to objects in a bucket. This page shows how to manage those rules with `rc`, verify a transition, and restore a temporary local copy of transitioned data. +La gestion du cycle de vie RustFS applique des règles d’expiration et de transition aux objets d’un compartiment (bucket). Cette page montre comment gérer ces règles avec `rc`, vérifier une transition et restaurer une copie locale temporaire des données transférées. -Before you begin, [install `rc`](/operations/rc), configure an alias named `local`, and create `my-bucket`. To transition objects, first register the target in [Tiered Storage](/administration/data/tiered-storage) and note its uppercase tier name. +Avant de commencer, [installez `rc`](/fr/operations/rc), configurez un alias nommé `local` et créez `my-bucket`. Pour faire transiter des objets, enregistrez d’abord la cible dans [Stockage hiérarchisé](/fr/administration/data/tiered-storage) et notez son nom de niveau en majuscules. -:::note[Asynchronous evaluation] +:::note[Évaluation asynchrone] -Lifecycle rules do not process every eligible object immediately. The [Object Scanner](/administration/data/object/scanner) evaluates lifecycle work in the background. +Les règles de cycle de vie ne traitent pas immédiatement chaque objet éligible. Le [scanner d’objets](/fr/administration/data/object/scanner) évalue le travail de cycle de vie en arrière-plan. ::: -## Add an expiration rule +## Ajouter une règle d’expiration -Expire objects under the `logs/` prefix 30 days after creation: +Faites expirer les objets du préfixe `logs/` 30 jours après leur création : ```bash rc bucket lifecycle rule add local/my-bucket \ @@ -23,11 +23,11 @@ rc bucket lifecycle rule add local/my-bucket \ --expiry-days 30 ``` -The command creates an enabled rule and returns its generated rule ID. Record that ID when you need to edit or remove this specific rule. +La commande crée une règle activée et renvoie l’ID de règle généré. Notez cet ID si vous devez modifier ou supprimer cette règle précise. -## Add a transition rule +## Ajouter une règle de transition -Move object data to the registered `COLDTIER` tier after 90 days: +Déplacez les données d’objet vers le niveau enregistré `COLDTIER` au bout de 90 jours : ```bash rc bucket lifecycle rule add local/my-bucket \ @@ -35,9 +35,9 @@ rc bucket lifecycle rule add local/my-bucket \ --storage-class COLDTIER ``` -`--storage-class` must match a registered tier name. Adding the rule does not create the tier or validate an AWS storage-class label as a RustFS tier. +`--storage-class` doit correspondre au nom d’un niveau enregistré. L’ajout de la règle ne crée pas le niveau et ne valide pas un libellé de classe de stockage AWS en tant que niveau RustFS. -You can combine expiration and transition options in one rule. Use the noncurrent-version options only for a versioned bucket: +Vous pouvez combiner des options d’expiration et de transition dans une même règle. N’utilisez les options de versions non actuelles que pour un compartiment dont la gestion des versions est activée : ```bash rc bucket lifecycle rule add local/my-bucket \ @@ -46,15 +46,15 @@ rc bucket lifecycle rule add local/my-bucket \ --noncurrent-expiry-days 365 ``` -## Inspect and update rules +## Inspecter et mettre à jour les règles -List the current rules and note the ID of the rule you want to change: +Listez les règles actuelles et notez l’ID de la règle à modifier : ```bash rc bucket lifecycle rule list local/my-bucket ``` -Change a rule's expiration period or disable it without deleting it: +Modifiez la durée d’expiration d’une règle, ou désactivez-la sans la supprimer : ```bash rc bucket lifecycle rule edit local/my-bucket \ @@ -65,30 +65,30 @@ rc bucket lifecycle rule edit local/my-bucket \ --disable true ``` -Remove one rule by ID. Use `--all` only when you intend to remove the bucket's complete lifecycle configuration: +Supprimez une règle par son ID. N’utilisez `--all` que si vous avez l’intention de supprimer toute la configuration de cycle de vie du compartiment : ```bash rc bucket lifecycle rule remove local/my-bucket --id rc bucket lifecycle rule remove local/my-bucket --all ``` -## Export and import rules +## Exporter et importer les règles -Export the bucket's lifecycle configuration before a bulk change: +Exportez la configuration de cycle de vie du compartiment avant une modification groupée : ```bash rc bucket lifecycle rule export local/my-bucket > lifecycle.json ``` -Importing a file replaces the lifecycle configuration sent to the bucket. Review the JSON before applying it: +L’importation d’un fichier remplace la configuration de cycle de vie envoyée au compartiment. Examinez le JSON avant de l’appliquer : ```bash rc bucket lifecycle rule import local/my-bucket lifecycle.json ``` -## Confirm a lifecycle transition +## Confirmer une transition de cycle de vie -After an object becomes eligible under its lifecycle rule, inspect it on the source cluster: +Lorsqu’un objet devient éligible au regard de sa règle de cycle de vie, inspectez-le sur le cluster source : ```bash aws s3api head-object \ @@ -97,7 +97,7 @@ aws s3api head-object \ --endpoint-url http://localhost:9000 ``` -After the transition completes, the response reports the registered tier name as the storage class: +Une fois la transition terminée, la réponse indique le nom du niveau enregistré comme classe de stockage : ```json { @@ -105,9 +105,9 @@ After the transition completes, the response reports the registered tier name as } ``` -The response can contain additional object metadata. Before the transition completes, `StorageClass` may be absent or may not yet report `COLDTIER`. +La réponse peut contenir d’autres métadonnées d’objet. Avant la fin de la transition, `StorageClass` peut être absent ou ne pas encore indiquer `COLDTIER`. -Read the object through the source RustFS endpoint as usual: +Lisez l’objet via le point de terminaison RustFS source, comme d’habitude : ```bash aws s3 cp \ @@ -116,23 +116,23 @@ aws s3 cp \ --endpoint-url http://localhost:9000 ``` -RustFS reads transitioned data through the source bucket and object key. Applications do not need to address the target bucket directly. +RustFS lit les données transférées via le compartiment source et la clé d’objet. Les applications n’ont pas besoin de s’adresser directement au compartiment cible. -## Restore a local copy +## Restaurer une copie locale -Request a temporary local copy of a transitioned object and retain it for seven days: +Demandez une copie locale temporaire d’un objet transféré et conservez-la pendant sept jours : ```bash rc bucket lifecycle restore local/my-bucket/hello.txt --days 7 ``` -While the copy-back is running, `HEAD` reports `x-amz-restore: ongoing-request="true"`. After completion, it reports `ongoing-request="false"` with an expiry date. A second restore submitted while one is running returns `RestoreAlreadyInProgress`. +Pendant le rapatriement, `HEAD` indique `x-amz-restore: ongoing-request="true"`. Une fois l’opération terminée, il indique `ongoing-request="false"` avec une date d’expiration. Une seconde restauration soumise alors qu’une restauration est en cours renvoie `RestoreAlreadyInProgress`. -When the restore period expires, RustFS removes the local restored copy and its restore metadata. The transitioned object remains available from the remote tier. +À l’expiration de la période de restauration, RustFS supprime la copie locale restaurée et ses métadonnées de restauration. L’objet transféré reste disponible depuis le niveau distant. -## Command compatibility +## Compatibilité des commandes -The latest `rc` also accepts `rc ilm` as a compatibility alias. We recommend the noun-first `rc bucket lifecycle` form for new commands and scripts: +La dernière version de `rc` accepte aussi `rc ilm` comme alias de compatibilité. Nous recommandons la forme `rc bucket lifecycle`, qui place le nom en premier, pour les nouvelles commandes et les scripts : ```bash rc bucket lifecycle --help @@ -140,6 +140,6 @@ rc bucket lifecycle rule --help rc bucket lifecycle tier --help ``` -## Next steps +## Étapes suivantes -Review [Tiered Storage](/administration/data/tiered-storage) to monitor or maintain remote tiers, and use [object creation](/administration/data/object/creation) to create test objects for a lifecycle rule. +Consultez [Stockage hiérarchisé](/fr/administration/data/tiered-storage) pour surveiller ou maintenir les niveaux distants, et utilisez la [création d’objets](/fr/administration/data/object/creation) pour créer des objets de test d’une règle de cycle de vie. diff --git a/content/fr/administration/data/object/creation.md b/content/fr/administration/data/object/creation.md index b0c5ca07b..7749d0387 100644 --- a/content/fr/administration/data/object/creation.md +++ b/content/fr/administration/data/object/creation.md @@ -1,53 +1,53 @@ --- -title: "Object Creation" -description: "Create objects using the RustFS UI, rc, or the S3 API." +title: "Création d’objets" +description: "Créez des objets avec la Console RustFS, rc ou l’API S3." --- -Objects are the fundamental storage units in RustFS, containing data, metadata, and a unique key. This guide covers object creation (upload). +Les objets sont les unités fondamentales de stockage dans RustFS : ils contiennent les données, les métadonnées et une clé unique. Ce guide décrit la création d’objets, c’est-à-dire le chargement (upload). -## Requirements +## Prérequis -- A running RustFS instance (see [Installation Guide](../../../installation/index.md)). -- [`rc`](/operations/rc) installed and configured with an alias for the command-line workflow. -- A target bucket. Create one by following [Bucket Creation](../bucket/creation.md). +- Une instance RustFS en cours d’exécution (voir le [guide d’installation](../../../installation/index.md)). +- [`rc`](/fr/operations/rc) installé et configuré avec un alias pour le travail en ligne de commande. +- Un compartiment (bucket) cible. Créez-en un en suivant [Création d’un compartiment](../bucket/creation.md). -## Creating Objects +## Créer des objets -### Using the RustFS UI +### Avec la Console RustFS -1. Log in to the RustFS Console. -2. Select the target bucket. -3. On the bucket page, in the top right corner, select **New Directory**, **New File**, or **Upload File/Folder**. -4. To upload from your local machine, click **Upload File/Folder**, select the files, and click **Start Upload**. +1. Connectez-vous à la Console RustFS. +2. Sélectionnez le compartiment cible. +3. Sur la page du compartiment, dans le coin supérieur droit, sélectionnez **New Directory**, **New File** ou **Upload File/Folder**. +4. Pour charger depuis votre machine locale, cliquez sur **Upload File/Folder**, sélectionnez les fichiers, puis cliquez sur **Start Upload**. -![object creation from ui](images/upload_file_from_ui.png) +![création d’un objet depuis la Console](images/upload_file_from_ui.png) -Click on an object to view its details. +Sélectionnez un objet pour afficher ses détails. -![object details info](images/object_details_info.png) +![informations de détail de l’objet](images/object_details_info.png) -### Using `rc` +### Avec `rc` -See the [`rc` guide](/operations/rc) for installation and alias configuration. +Consultez le [guide `rc`](/fr/operations/rc) pour l’installation et la configuration de l’alias. -Upload a file: +Chargez un fichier : ```bash rc object copy /path/to/hello.txt rustfs/my-bucket/hello.txt rc object list rustfs/my-bucket ``` -Verify the upload in the RustFS Console. +Vérifiez le chargement dans la Console RustFS. -### Using the API +### Avec l’API -Upload a file via API: +Chargez un fichier via l’API : ```http PUT /{bucketName}/{objectName} HTTP/1.1 ``` -S3 requests must be signed with AWS Signature V4, so use an S3 client rather than hand-crafting headers. With the [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) configured for your access keys: +Les requêtes S3 doivent être signées avec AWS Signature V4 ; utilisez donc un client S3 plutôt que de composer les en-têtes à la main. Avec l’[AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) configurée pour vos clés d’accès : ```bash aws s3api put-object \ @@ -57,19 +57,19 @@ aws s3api put-object \ --endpoint-url http://localhost:9000 ``` -Verify the upload in the RustFS Console. +Vérifiez le chargement dans la Console RustFS. -## Deleting Objects +## Supprimer des objets -See [Object Deletion](./deletion.md). +Consultez [Suppression d’objets](./deletion.md). -Use the following API for file deletion: +Pour supprimer un objet avec l’API S3, utilisez : ```http DELETE /{bucketName}/{objectName} HTTP/1.1 ``` -Request example: +Exemple de requête : ```bash aws s3api delete-object \ @@ -78,4 +78,4 @@ aws s3api delete-object \ --endpoint-url http://localhost:9000 ``` -You can confirm the file has been deleted on the RustFS UI. +Confirmez dans la Console RustFS que l’objet n’apparaît plus. diff --git a/content/fr/administration/data/object/deletion.md b/content/fr/administration/data/object/deletion.md index 5e3106239..12306dcbe 100644 --- a/content/fr/administration/data/object/deletion.md +++ b/content/fr/administration/data/object/deletion.md @@ -1,27 +1,27 @@ --- -title: "Object Deletion" -description: "Delete objects using the RustFS UI, rc, or the S3 API." +title: "Suppression d’objets" +description: "Supprimez des objets avec la Console RustFS, rc ou l’API S3." --- -This guide covers object deletion. +Ce guide décrit la suppression d’objets. -## Requirements +## Prérequis -- Install and configure [`rc`](/operations/rc) before using the command-line workflow. -- Confirm the alias, bucket, and object key before deleting an object. +- Installez et configurez [`rc`](/fr/operations/rc) avant d’utiliser le travail en ligne de commande. +- Confirmez l’alias, le compartiment (bucket) et la clé d’objet avant de supprimer un objet. -## Using the RustFS UI +## Avec la Console RustFS -1. Log in to the RustFS Console. -2. Select the bucket containing the file to be deleted. -3. On the bucket page, select the file to be deleted. -4. Click **Delete Selected Items** in the upper right corner, then click **Confirm** in the popup dialog. +1. Connectez-vous à la Console RustFS. +2. Sélectionnez le compartiment qui contient l’objet à supprimer. +3. Sur la page du compartiment, sélectionnez l’objet à supprimer. +4. Sélectionnez **Delete Selected Items** dans le coin supérieur droit, puis sélectionnez **Confirm**. -![object deletion from ui](images/delete_file_from_ui.png) +![suppression d’un objet depuis la Console](images/delete_file_from_ui.png) -## Using `rc` +## Avec `rc` -Delete a file: +Supprimez un objet : ```bash rc object remove rustfs/my-bucket/hello.txt @@ -33,17 +33,17 @@ Removed: rustfs/my-bucket/hello.txt ✓ Removed 1 object(s). ``` -Verify the deletion in the RustFS Console. +Vérifiez la suppression dans la Console RustFS. -## Using the API +## Avec l’API -Delete a file via API: +Supprimez un objet via l’API : ```http DELETE /{bucketName}/{objectName} HTTP/1.1 ``` -S3 requests must be signed with AWS Signature V4, so use an S3 client rather than hand-crafting headers. With the [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) configured for your access keys: +Les requêtes S3 doivent être signées avec AWS Signature V4 ; utilisez donc un client S3 plutôt que de composer les en-têtes à la main. Avec l’[AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) configurée pour vos clés d’accès : ```bash aws s3api delete-object \ @@ -52,4 +52,4 @@ aws s3api delete-object \ --endpoint-url http://localhost:9000 ``` -Verify the deletion in the RustFS Console. +Vérifiez la suppression dans la Console RustFS. diff --git a/content/fr/administration/data/object/multipart-upload.md b/content/fr/administration/data/object/multipart-upload.md index d4a6af66e..3ac8861c9 100644 --- a/content/fr/administration/data/object/multipart-upload.md +++ b/content/fr/administration/data/object/multipart-upload.md @@ -1,79 +1,79 @@ --- -title: "Multipart Upload" -description: "Upload large objects in parts, monitor Console upload tasks, and verify completed objects with rc." +title: "Chargement partitionné" +description: "Chargez les objets volumineux par parties, suivez les tâches de chargement dans la Console et vérifiez les objets terminés avec rc." --- -Multipart upload splits one object into independently uploaded parts and assembles them on the server. Use it for large objects, retryable transfers, and browser uploads that need progress and cancellation controls. +Le chargement partitionné (multipart upload) découpe un objet en parties, les charge (upload) indépendamment, puis les assemble sur le serveur. Utilisez-le pour les objets volumineux, les transferts qu’il est possible de réessayer, et les chargements depuis le navigateur qui nécessitent un suivi de progression et une annulation. -## Overview +## Vue d’ensemble -The S3 multipart workflow has three required phases: +Le flux S3 de chargement partitionné comporte trois phases obligatoires : -1. **CreateMultipartUpload** returns an upload ID. -2. **UploadPart** uploads numbered parts and returns an ETag for each part. -3. **CompleteMultipartUpload** submits the ordered part numbers and ETags to create the final object. +1. **CreateMultipartUpload** renvoie un ID de chargement. +2. **UploadPart** charge des parties numérotées et renvoie un ETag pour chaque partie. +3. **CompleteMultipartUpload** soumet les numéros de partie ordonnés et les ETag afin de créer l’objet final. -Abort an unfinished upload with **AbortMultipartUpload** so temporary parts do not continue consuming storage. +Interrompez un chargement inachevé avec **AbortMultipartUpload** afin que les parties temporaires ne continuent pas de consommer du stockage. -RustFS accepts part numbers from `1` through `10000`. `ListParts` and `ListMultipartUploads` return at most 1,000 entries per response and use markers for pagination. The completed object appears only after the completion request succeeds. +RustFS accepte les numéros de partie de `1` à `10000`. `ListParts` et `ListMultipartUploads` renvoient au plus 1 000 entrées par réponse et utilisent des marqueurs pour la pagination. L’objet terminé n’apparaît qu’une fois la requête de finalisation réussie. -## Upload in the Console +## Charger dans la Console -1. Sign in to the RustFS Console and open the destination bucket. -2. Select **Upload File/Folder**. -3. Optionally enter a **Current Prefix**. -4. Select **Select File** or **Select Folder**, then choose the content to upload. -5. Review the selected names and sizes, then select **Start Upload**. +1. Connectez-vous à la Console RustFS et ouvrez le compartiment (bucket) de destination. +2. Sélectionnez **Upload File/Folder**. +3. Saisissez éventuellement un **Current Prefix**. +4. Sélectionnez **Select File** ou **Select Folder**, puis choisissez le contenu à charger. +5. Vérifiez les noms et les tailles sélectionnés, puis sélectionnez **Start Upload**. -![Console upload dialog with a selected large file](./images/multipart-upload-console.png) +![boîte de dialogue de chargement de la Console avec un fichier volumineux sélectionné](./images/multipart-upload-console.png) -The observed Console upload dialog supports up to 10,000 selected files and reports a 512 GB maximum for a single file. These are Console upload limits; S3 clients can have different local limits. +La boîte de dialogue de chargement de la Console accepte jusqu’à 10 000 fichiers et indique un maximum de 512 GB pour un seul fichier. Il s’agit de limites de chargement de la Console ; les clients S3 peuvent avoir des limites locales différentes. -After upload starts, **Task Management** groups tasks into Pending, Processing, Completed, Failed, and Canceled states. Each processing task shows progress and a **Cancel** action. Canceling an active multipart task aborts the current part request and marks the task as canceled. +Une fois le chargement démarré, **Task Management** regroupe les tâches selon les états Pending, Processing, Completed, Failed et Canceled. Chaque tâche en cours de traitement affiche la progression et une action **Cancel**. L’annulation d’une tâche de chargement partitionné active interrompt la requête de partie en cours et marque la tâche comme annulée. -Refresh the bucket after completion and confirm the object size and modification time. +Actualisez le compartiment une fois le chargement terminé, et confirmez la taille de l’objet ainsi que sa date de modification. -## Use rc +## Utiliser rc -Upload and verify an object with `rc`: +Chargez un objet et vérifiez-le avec `rc` : ```bash rc object copy /path/to/hello.txt rustfs/my-bucket/hello.txt rc object stat rustfs/my-bucket/hello.txt --json ``` -:::note[rc 0.1.29 multipart boundary] +:::note[Limites du chargement partitionné dans rc 0.1.29] -`rc 0.1.29` does not expose create, upload-part, complete, list-parts, or abort multipart commands. A validated 20 MiB `rc object copy` used a single `PutObject` request rather than multipart upload. Use the Console or an S3 SDK when explicit multipart behavior is required; use `rc object stat` to verify the completed object. +`rc 0.1.29` n’expose pas de commandes pour créer un chargement, charger une partie, le finaliser, lister les parties ou l’interrompre. Un `rc object copy` de 20 MiB, validé, a utilisé une seule requête `PutObject` plutôt qu’un chargement partitionné. Utilisez la Console ou un SDK S3 lorsqu’un comportement explicite de chargement partitionné est requis ; utilisez `rc object stat` pour vérifier l’objet terminé. ::: -For a versioned bucket, list the version created by a completed multipart upload: +Pour un compartiment avec gestion des versions, répertoriez la version créée par un chargement partitionné terminé : ```bash rc bucket version list rustfs/my-bucket/hello.txt --json ``` -RustFS returns a version ID when multipart completion succeeds in a versioned bucket. +RustFS renvoie un ID de version lorsque la finalisation du chargement partitionné réussit dans un compartiment avec gestion des versions. -## S3 multipart operations +## Opérations S3 de chargement partitionné -Use an S3 SDK that supports these standard operations: +Utilisez un SDK S3 qui prend en charge ces opérations standard : -| Phase | S3 operation | Required values | +| Phase | Opération S3 | Valeurs requises | | --- | --- | --- | -| Initiate | `CreateMultipartUpload` | Bucket, key, metadata, encryption, and optional Object Lock settings. | -| Upload | `UploadPart` | Bucket, key, upload ID, part number, and body. Save the returned ETag. | -| Inspect | `ListParts` | Bucket, key, and upload ID. Paginate when needed. | -| Complete | `CompleteMultipartUpload` | Ordered part numbers and their exact ETags. | -| Cancel | `AbortMultipartUpload` | Bucket, key, and upload ID. | -| Discover | `ListMultipartUploads` | Bucket and optional prefix. Paginate when needed. | +| Lancement | `CreateMultipartUpload` | Compartiment, clé, métadonnées, chiffrement et paramètres facultatifs de verrouillage d’objet. | +| Chargement | `UploadPart` | Compartiment, clé, ID de chargement, numéro de partie et corps. Conservez l’ETag renvoyé. | +| Inspection | `ListParts` | Compartiment, clé et ID de chargement. Paginez si nécessaire. | +| Finalisation | `CompleteMultipartUpload` | Numéros de partie ordonnés et leurs ETag exacts. | +| Annulation | `AbortMultipartUpload` | Compartiment, clé et ID de chargement. | +| Découverte | `ListMultipartUploads` | Compartiment et préfixe facultatif. Paginez si nécessaire. | -Do not reuse an upload ID for a different key. Submit completed parts in ascending part-number order and preserve each ETag exactly as returned. +Ne réutilisez pas un ID de chargement pour une autre clé. Soumettez les parties terminées dans l’ordre croissant des numéros de partie et conservez chaque ETag exactement tel qu’il a été renvoyé. -## Verification +## Vérification -After completion: +Après la finalisation : ```bash rc object stat rustfs/my-bucket/hello.txt --json @@ -81,21 +81,21 @@ rc object show rustfs/my-bucket/hello.txt > /tmp/hello-downloaded.txt cmp /path/to/hello.txt /tmp/hello-downloaded.txt ``` -Confirm that `size_bytes` matches the local file and that `cmp` exits successfully. For a versioned bucket, also confirm that `rc bucket version list` returns a version ID. +Confirmez que `size_bytes` correspond au fichier local et que `cmp` se termine avec succès. Pour un compartiment avec gestion des versions, confirmez aussi que `rc bucket version list` renvoie un ID de version. -## Troubleshooting +## Dépannage -| Symptom | Check | +| Symptôme | Vérification | | --- | --- | -| Upload remains in Processing | Check browser connectivity and keep the Console tab open; cancel and retry when the connection is interrupted. | -| A part request fails | Retry that part with the same upload ID and part number, then use the latest returned ETag. | -| Completion reports an invalid part | Verify the submitted part numbers, ordering, and ETags against `ListParts`. | -| Object is absent after uploading parts | Send `CompleteMultipartUpload`; uploaded parts alone do not create the object. | -| Temporary storage continues growing | List incomplete uploads and abort those that are no longer needed. | -| Completion fails on a locked key | Check Object Lock retention or Legal Hold on the current destination version. | - -## Next steps - -- [Create and inspect objects](./creation.md) -- [Manage object versions](./versioning.md) -- [Protect objects with Object Lock](./object-lock.md) \ No newline at end of file +| Le chargement reste à l’état Processing | Vérifiez la connectivité du navigateur et laissez l’onglet de la Console ouvert ; annulez puis réessayez lorsque la connexion est interrompue. | +| Une requête de partie échoue | Réessayez cette partie avec le même ID de chargement et le même numéro de partie, puis utilisez le dernier ETag renvoyé. | +| La finalisation signale une partie non valide | Vérifiez les numéros de partie soumis, leur ordre et les ETag par rapport à `ListParts`. | +| L’objet est absent après le chargement des parties | Envoyez `CompleteMultipartUpload` ; les parties chargées, à elles seules, ne créent pas l’objet. | +| Le stockage temporaire continue d’augmenter | Répertoriez les chargements incomplets et interrompez ceux qui ne sont plus nécessaires. | +| La finalisation échoue sur une clé verrouillée | Vérifiez la rétention de verrouillage d’objet ou la conservation légale (Legal Hold) sur la version de destination actuelle. | + +## Étapes suivantes + +- [Créer et inspecter des objets](./creation.md) +- [Gérer les versions d’objet](./versioning.md) +- [Protéger les objets avec le verrouillage d’objet](./object-lock.md) diff --git a/content/fr/administration/data/object/object-lock.md b/content/fr/administration/data/object/object-lock.md index 5db3468a1..8662a7948 100644 --- a/content/fr/administration/data/object/object-lock.md +++ b/content/fr/administration/data/object/object-lock.md @@ -1,46 +1,46 @@ --- -title: "Object Lock" -description: "Protect versioned objects from deletion with retention periods and legal holds." +title: "Verrouillage d’objet" +description: "Protégez les objets versionnés contre la suppression à l’aide de périodes de rétention et de conservations légales." --- -RustFS Object Lock applies write-once, read-many protection to individual object versions. Use retention periods for time-bound protection and Legal Hold for protection without a predefined expiration date. +Le verrouillage d’objet de RustFS applique une protection en écriture unique et lecture multiple à chaque version d’objet. Utilisez les périodes de rétention pour une protection limitée dans le temps, et la conservation légale (Legal Hold) pour une protection sans date d’expiration prédéfinie. -## Overview +## Vue d’ensemble -Object Lock requires bucket versioning. You can enable it when creating a bucket or use the S3 `PutObjectLockConfiguration` API on an existing bucket whose versioning is enabled. Each overwrite creates a new version; retention and Legal Hold protect a specific version rather than the object key as a whole. +Le verrouillage d’objet exige la gestion des versions du compartiment (bucket). Vous pouvez l’activer à la création d’un compartiment, ou utiliser l’API S3 `PutObjectLockConfiguration` sur un compartiment existant dont la gestion des versions est activée. Chaque écrasement crée une nouvelle version ; la rétention et la conservation légale protègent une version précise, et non la clé d’objet dans son ensemble. -| Protection | Behavior | +| Protection | Comportement | | --- | --- | -| `GOVERNANCE` retention | Blocks deletion and retention shortening unless the caller has bypass permission and explicitly requests a bypass. Retention can be extended without bypass. | -| `COMPLIANCE` retention | Blocks deletion even with governance bypass. The date can be extended but not shortened. | -| Legal Hold | Blocks deletion until the hold is set to `OFF`. It has no expiration date and governance bypass does not override it. | +| Rétention `GOVERNANCE` | Bloque la suppression et le raccourcissement de la rétention, sauf si l’appelant possède l’autorisation de contournement et demande explicitement un contournement. La rétention peut être prolongée sans contournement. | +| Rétention `COMPLIANCE` | Bloque la suppression, même avec le contournement de gouvernance. La date peut être prolongée, mais pas raccourcie. | +| Conservation légale | Bloque la suppression jusqu’à ce que la conservation soit définie sur `OFF`. Elle n’a pas de date d’expiration, et le contournement de gouvernance ne la lève pas. | -Deleting a key without a version ID creates a delete marker. The protected version remains stored and can still be retrieved by version ID. +La suppression d’une clé sans ID de version crée un marqueur de suppression. La version protégée reste stockée et peut toujours être récupérée par son ID de version. -:::danger[Plan retention before enabling it] +:::danger[Planifiez la rétention avant de l’activer] -COMPLIANCE retention cannot be bypassed or shortened before its retain-until date. Test policies in a non-production bucket and verify time synchronization, permissions, lifecycle rules, replication, and backup procedures before protecting production data. +La rétention COMPLIANCE ne peut être ni contournée ni raccourcie avant sa date de fin de conservation (retain-until). Testez les politiques dans un compartiment hors production et vérifiez la synchronisation horaire, les autorisations, les règles de cycle de vie, la réplication et les procédures de sauvegarde avant de protéger des données de production. ::: -## Configure in the Console +## Configurer dans la Console -1. Sign in to the RustFS Console and open **Buckets**. -2. Select **Create Bucket** and enter the bucket name. -3. Enable **Object Lock**. The Console also enables **Version** because Object Lock requires versioning. -4. To apply retention automatically to new object versions, enable **Retention**. -5. Select **COMPLIANCE** or **GOVERNANCE**, enter the validity, and select **Day** or **Year**. -6. Select **Create**. +1. Connectez-vous à la Console RustFS et ouvrez **Buckets**. +2. Sélectionnez **Create Bucket** et saisissez le nom du compartiment. +3. Activez **Object Lock**. La Console active aussi **Version**, car le verrouillage d’objet exige la gestion des versions. +4. Pour appliquer automatiquement la rétention aux nouvelles versions d’objet, activez **Retention**. +5. Sélectionnez **COMPLIANCE** ou **GOVERNANCE**, saisissez la période de rétention, puis sélectionnez **Day** ou **Year**. +6. Sélectionnez **Create**. -![Create Bucket dialog with versioning, Object Lock, and default retention enabled](./images/object-lock-create-bucket.png) +![boîte de dialogue Create Bucket avec la gestion des versions, le verrouillage d’objet et la rétention par défaut activés](./images/object-lock-create-bucket.png) -The Console initially displays `180` days when default retention is enabled. Replace it with the period required by your retention policy; it is a UI initial value, not a general recommendation. +La Console affiche d’abord `180` jours lorsque la rétention par défaut est activée. Remplacez cette valeur par la période exigée par votre politique de rétention ; il s’agit d’une valeur initiale de l’interface, et non d’une recommandation générale. -To inspect a protected object, open the bucket, select the object name, and use the **Versions** and **Info** tabs. The Info tab exposes **Legal Hold** and **RetentionPolicy** fields. +Pour inspecter un objet protégé, ouvrez le compartiment, sélectionnez le nom de l’objet et utilisez les onglets **Versions** et **Info**. L’onglet Info expose les champs **Legal Hold** et **RetentionPolicy**. -## Use rc +## Utiliser rc -Configure an alias before running these examples: +Configurez un alias avant d’exécuter ces exemples : ```bash rc alias set rustfs http://localhost:9000 \ @@ -48,13 +48,13 @@ rc alias set rustfs http://localhost:9000 \ --region us-east-1 --bucket-lookup path ``` -:::note[rc 0.1.29 bucket creation boundary] +:::note[Limite de création de compartiment dans rc 0.1.29] -`rc bucket create --with-lock` and `--with-versioning` appear in the `rc 0.1.29` help output but return `not implemented` when executed. Create the Object Lock bucket in the Console. The upload headers shown below are supported and were validated against RustFS. +`rc bucket create --with-lock` et `--with-versioning` apparaissent dans l’aide de `rc 0.1.29`, mais renvoient `not implemented` à l’exécution. Créez le compartiment avec verrouillage d’objet dans la Console. Les en-têtes de chargement ci-dessous sont pris en charge et ont été validés avec RustFS. ::: -Upload an object version with GOVERNANCE retention. Supply both retention headers together and use an RFC 3339 UTC timestamp in the future: +Chargez une version d’objet avec une rétention GOVERNANCE. Fournissez les deux en-têtes de rétention ensemble et utilisez un horodatage UTC au format RFC 3339 situé dans le futur : ```bash rc object copy /path/to/hello.txt rustfs/my-bucket/hello.txt \ @@ -62,14 +62,14 @@ rc object copy /path/to/hello.txt rustfs/my-bucket/hello.txt \ -H "x-amz-object-lock-retain-until-date:2027-01-01T00:00:00Z" ``` -Upload an object version with Legal Hold enabled: +Chargez une version d’objet avec la conservation légale activée : ```bash rc object copy /path/to/hello.txt rustfs/my-bucket/legal-hold.txt \ -H "x-amz-object-lock-legal-hold:ON" ``` -List the protected versions and inspect a specific version: +Répertoriez les versions protégées et inspectez une version précise : ```bash rc bucket version list rustfs/my-bucket --json @@ -77,27 +77,27 @@ rc object stat rustfs/my-bucket/hello.txt \ --version-id --json ``` -`rc 0.1.29` does not provide commands to change retention or switch an existing Legal Hold between `ON` and `OFF`. Use the Console or an S3 SDK for those operations. +`rc 0.1.29` ne fournit pas de commandes pour modifier la rétention ni pour faire passer une conservation légale existante entre `ON` et `OFF`. Utilisez la Console ou un SDK S3 pour ces opérations. -## Verify protection +## Vérifier la protection -1. Upload a test object with GOVERNANCE retention or Legal Hold. -2. Record its version ID with `rc bucket version list`. -3. Attempt to delete that exact version through an S3 client without bypass. RustFS must return `AccessDenied` while protection is active. -4. Confirm the version remains visible in the Console and through `rc object stat --version-id`. +1. Chargez un objet de test avec une rétention GOVERNANCE ou une conservation légale. +2. Notez son ID de version avec `rc bucket version list`. +3. Tentez de supprimer cette version exacte via un client S3, sans contournement. RustFS doit renvoyer `AccessDenied` tant que la protection est active. +4. Confirmez que la version reste visible dans la Console et via `rc object stat --version-id`. -For GOVERNANCE retention, test bypass only with a dedicated administrative identity that has `s3:BypassGovernanceRetention`. COMPLIANCE retention and Legal Hold remain protected from governance bypass. +Pour la rétention GOVERNANCE, ne testez le contournement qu’avec une identité d’administration dédiée disposant de `s3:BypassGovernanceRetention`. La rétention COMPLIANCE et la conservation légale restent protégées contre le contournement de gouvernance. -## Operational considerations +## Considérations d’exploitation -- Default bucket retention is calculated when a new object version or multipart upload is initiated. -- Copying an object creates a new destination version; destination retention policy applies independently. -- Suspending versioning is not appropriate for an Object Lock bucket. -- Lifecycle expiration cannot remove a version while retention or Legal Hold blocks deletion. -- Replication targets for locked objects must support compatible Object Lock behavior. +- La rétention par défaut du compartiment est calculée lorsqu’une nouvelle version d’objet ou un chargement partitionné est initié. +- La copie d’un objet crée une nouvelle version de destination ; la politique de rétention de la destination s’applique de façon indépendante. +- Suspendre la gestion des versions n’est pas approprié pour un compartiment avec verrouillage d’objet. +- L’expiration du cycle de vie ne peut pas retirer une version tant que la rétention ou la conservation légale bloque la suppression. +- Les cibles de réplication des objets verrouillés doivent prendre en charge un comportement compatible de verrouillage d’objet. -## Next steps +## Étapes suivantes -- [Manage object versions](./versioning.md) -- [Configure bucket replication](../bucket/replication.md) -- [Review the security checklist](/installation/requirement/checklists/security-checklists) \ No newline at end of file +- [Gérer les versions d’objet](./versioning.md) +- [Configurer la réplication de compartiment](../bucket/replication.md) +- [Consulter la liste de contrôle de sécurité](/fr/installation/requirement/checklists/security-checklists) diff --git a/content/fr/administration/data/object/scanner.md b/content/fr/administration/data/object/scanner.md index 6330c38f6..fdd49e889 100644 --- a/content/fr/administration/data/object/scanner.md +++ b/content/fr/administration/data/object/scanner.md @@ -1,32 +1,32 @@ --- -title: "Object Scanning" -description: "Guide to the RustFS object scanner, including design, implementation, and monitoring." +title: "Scanner d’objets" +description: "Ce guide présente le scanner d’objets RustFS, sa conception, son implémentation et sa surveillance." --- -This guide covers the design and implementation of the RustFS object scanner, including its integration with Erasure Coding, Scrub & Repair mechanisms, scheduling strategies, monitoring metrics, and troubleshooting. +Ce guide décrit la conception et l’implémentation du scanner d’objets RustFS, notamment son fonctionnement avec le codage d’effacement, le nettoyage et la réparation, la planification, les métriques et le dépannage. -## Overview +## Vue d’ensemble -The RustFS object scanner is built into the storage engine and is responsible for periodically checking object integrity and executing scheduled operations. -Scanning tasks include disk usage statistics, lifecycle management rule evaluation, object replication execution, and triggering corrupted object self-healing. +Le scanner d’objets RustFS est intégré au moteur de stockage. Il vérifie périodiquement l’intégrité des objets et exécute les opérations planifiées. +Le scanner collecte les statistiques d’utilisation des disques, évalue les règles de gestion du cycle de vie, exécute la réplication des objets et déclenche la réparation des données pour les objets corrompus. -## Architecture and Design Principles +## Architecture et principes de conception -### Scanner Architecture +### Architecture du scanner -The RustFS scanner uses a hash sampling mechanism, selecting one out of every 1024 objects for inspection based on object name hashing to minimize performance impact. -The scanner is deeply integrated with the Erasure Coding module, utilizing redundant shards for online reconstruction when detecting lost or corrupted shards, ensuring high data availability and consistency. +Le scanner RustFS utilise un échantillonnage par hachage : il sélectionne un objet sur 1024 pour inspection, d’après le hachage du nom d’objet, afin de limiter l’impact sur les performances. +Le scanner travaille avec la couche de codage d’effacement : lorsqu’il détecte un fragment (shard) manquant ou corrompu, il reconstruit ce fragment en ligne à partir des fragments redondants restants. -## Data Verification and Recovery +## Vérification et récupération des données -The RustFS data verification mechanism checks metadata consistency and performs bit-by-bit reading and verification to discover hidden bad blocks. The object scanner detects issues like bit rot and triggers repair processes when necessary. +Le mécanisme de vérification des données de RustFS contrôle la cohérence des métadonnées, puis lit et vérifie les données afin de détecter les secteurs défectueux latents. Le scanner d’objets détecte des problèmes tels que la corruption silencieuse (bit rot) et déclenche les processus de réparation lorsque c’est nécessaire. -## Scanning Modes and Scheduling +## Modes d’analyse et planification -RustFS supports three scanning modes: online scanning during reads, background periodic scanning, and manual full scanning, balancing performance and reliability. -Similar to the `osd_scrub_begin_hour` configuration in Ceph, administrators can set scanning start times and frequency. For example, light verification is set to once daily by default. +RustFS prend en charge trois modes d’analyse qui équilibrent performances et fiabilité : contrôles pendant les lectures, analyses périodiques en arrière-plan et analyses complètes manuelles. +Comme pour le paramètre `osd_scrub_begin_hour` de Ceph, les administrateurs peuvent définir l’heure de début et la fréquence des analyses. Par exemple, un contrôle léger s’exécute une fois par jour par défaut. -## Monitoring and Metrics +## Surveillance et métriques -Scanner statistics include total task count, failure count, and time distribution, exposing metrics through the Prometheus data model such as `rustfs_scanner_jobs_total`, `rustfs_scanner_failures_total`, and `rustfs_scanner_duration_seconds`. -Combined with monitoring systems, alerts can be set based on scanning failure rates and duration to promptly discover and locate potential issues at the storage or network levels. \ No newline at end of file +Le scanner indique le nombre total de tâches, le nombre d’échecs et la répartition des durées sous forme de métriques Prometheus, notamment `rustfs_scanner_jobs_total`, `rustfs_scanner_failures_total` et `rustfs_scanner_duration_seconds`. +Configurez des alertes sur le taux d’échec et la durée des analyses, afin de détecter et de diagnostiquer tôt les problèmes de stockage ou de réseau. diff --git a/content/fr/administration/data/object/versioning.md b/content/fr/administration/data/object/versioning.md index b891c7567..44994e168 100644 --- a/content/fr/administration/data/object/versioning.md +++ b/content/fr/administration/data/object/versioning.md @@ -1,48 +1,48 @@ --- -title: "Versioning" -description: "Enable bucket versioning, recover earlier object versions, and manage delete markers with rc and the Console." +title: "Gestion des versions" +description: "Activez la gestion des versions d’un compartiment, récupérez d’anciennes versions d’objet et gérez les marqueurs de suppression avec rc et la Console." --- -RustFS bucket versioning preserves multiple versions of the same object key. Use it to recover from accidental overwrites and deletes and to satisfy prerequisites for Object Lock and bucket replication. +La gestion des versions d’un compartiment (bucket) dans RustFS conserve plusieurs versions de la même clé d’objet. Utilisez-la pour revenir d’un écrasement accidentel ou d’une suppression accidentelle, et pour satisfaire les prérequis du verrouillage d’objet et de la réplication de compartiment. -## Overview +## Vue d’ensemble -When versioning is enabled: +Lorsque la gestion des versions est activée : -- Each upload or copy to an existing key creates a new version ID. -- A normal delete creates a delete marker instead of removing older versions. -- Reading the key without a version ID returns the latest visible version, or `NotFound` when the latest entry is a delete marker. -- Reading or deleting a specific version requires its version ID. +- Chaque chargement (upload) ou copie vers une clé existante crée un nouvel ID de version. +- Une suppression normale crée un marqueur de suppression au lieu de retirer les versions antérieures. +- La lecture de la clé sans ID de version renvoie la dernière version visible, ou `NotFound` lorsque la dernière entrée est un marqueur de suppression. +- La lecture ou la suppression d’une version précise exige son ID de version. -Suspending versioning stops normal creation of new version IDs but preserves existing versions and delete markers. Suspension is not the same as disabling or removing version history. +La suspension de la gestion des versions interrompt la création normale de nouveaux ID de version, mais conserve les versions existantes et les marqueurs de suppression. Suspendre n’équivaut pas à désactiver ni à supprimer l’historique des versions. -## Configure in the Console +## Configurer dans la Console -### Enable at bucket creation +### Activer à la création du compartiment -1. Open **Buckets** and select **Create Bucket**. -2. Enter the bucket name. -3. Enable **Version**. -4. Select **Create**. +1. Ouvrez **Buckets** et sélectionnez **Create Bucket**. +2. Saisissez le nom du compartiment. +3. Activez **Version**. +4. Sélectionnez **Create**. -### Enable or suspend an existing bucket +### Activer ou suspendre la gestion des versions d’un compartiment existant -1. Open **Buckets**, locate the bucket, and select **Settings**. -2. Under **Data Protection**, locate **Versioning**. -3. Enable versioning or suspend it as required. +1. Ouvrez **Buckets**, localisez le compartiment et sélectionnez **Settings**. +2. Sous **Data Protection**, repérez **Versioning**. +3. Activez la gestion des versions, ou suspendez-la selon le besoin. -The settings page reports `Enabled`, `Suspended`, or `Disabled`. It also notes that suspension preserves existing versions. +La page de paramètres indique `Enabled`, `Suspended` ou `Disabled`. Elle précise aussi que la suspension conserve les versions existantes. -### Browse and recover versions +### Parcourir et récupérer les versions -1. Open the bucket and enable **Show Deleted Objects** when you need to see keys hidden by delete markers. -2. Select an object name to open **Object Details**. -3. Select **Versions** to inspect available versions and delete markers. -4. Download the required version and upload it again to make its content the latest version. +1. Ouvrez le compartiment et activez **Show Deleted Objects** lorsque vous devez voir les clés masquées par des marqueurs de suppression. +2. Sélectionnez le nom d’un objet pour ouvrir **Object Details**. +3. Sélectionnez **Versions** pour inspecter les versions disponibles et les marqueurs de suppression. +4. Téléchargez la version voulue et chargez-la de nouveau afin que son contenu devienne la dernière version. -## Use rc +## Utiliser rc -Create a bucket and enable versioning: +Créez un compartiment et activez la gestion des versions : ```bash rc bucket create rustfs/my-bucket @@ -50,7 +50,7 @@ rc bucket version enable rustfs/my-bucket rc bucket version info rustfs/my-bucket ``` -Upload two versions of the same key: +Chargez deux versions de la même clé : ```bash printf 'version one\n' > /tmp/hello.txt @@ -60,7 +60,7 @@ printf 'version two\n' > /tmp/hello.txt rc object copy /tmp/hello.txt rustfs/my-bucket/hello.txt --overwrite ``` -List versions and record the version ID you want to recover: +Répertoriez les versions et notez l’ID de version à récupérer : ```bash rc bucket version list rustfs/my-bucket/hello.txt --json @@ -68,7 +68,7 @@ rc object stat rustfs/my-bucket/hello.txt \ --version-id --json ``` -Restore an earlier version by downloading its body and uploading it as a new latest version: +Restaurez une version antérieure en téléchargeant son contenu et en le chargeant comme nouvelle dernière version : ```bash rc object show rustfs/my-bucket/hello.txt \ @@ -78,48 +78,48 @@ rc object copy /tmp/hello-restored.txt \ rustfs/my-bucket/hello.txt --overwrite ``` -Delete the current key to create a delete marker, then inspect it: +Supprimez la clé actuelle pour créer un marqueur de suppression, puis inspectez-le : ```bash rc object remove rustfs/my-bucket/hello.txt --force rc bucket version list rustfs/my-bucket/hello.txt --json ``` -The latest entry should show `is_delete_marker: true`. The earlier versions remain available by version ID. +La dernière entrée devrait afficher `is_delete_marker: true`. Les versions antérieures restent disponibles par ID de version. -Suspend versioning when you no longer want normal writes to create new numbered versions: +Suspendez la gestion des versions lorsque vous ne souhaitez plus que les écritures normales créent de nouvelles versions numérotées : ```bash rc bucket version suspend rustfs/my-bucket rc bucket version info rustfs/my-bucket ``` -:::warning[rc 0.1.29 version deletion boundary] +:::warning[Limite de suppression de version dans rc 0.1.29] -`rc object remove --versions` is listed in the `rc 0.1.29` help output but returns `not implemented`. Use the Console or an S3 SDK to permanently delete selected version IDs. Do not remove an entire version history unless you have verified retention, replication, and recovery requirements. +`rc object remove --versions` figure dans l’aide de `rc 0.1.29`, mais renvoie `not implemented`. Utilisez la Console ou un SDK S3 pour supprimer définitivement les ID de version choisis. Ne supprimez pas un historique de versions complet, sauf si vous avez vérifié les exigences de rétention, de réplication et de récupération. ::: -## Verification +## Vérification -After enabling versioning: +Après avoir activé la gestion des versions : -1. Upload the same key twice with different content. -2. Run `rc bucket version list` and confirm that both entries have distinct version IDs. -3. Retrieve each version with `rc object show --version-id` and compare its content. -4. Delete the key without a version ID and confirm that a delete marker appears. -5. Retrieve an older version by version ID to confirm it remains recoverable. +1. Chargez deux fois la même clé avec des contenus différents. +2. Exécutez `rc bucket version list` et confirmez que les deux entrées ont des ID de version distincts. +3. Récupérez chaque version avec `rc object show --version-id` et comparez son contenu. +4. Supprimez la clé sans ID de version et confirmez qu’un marqueur de suppression apparaît. +5. Récupérez une version antérieure par son ID de version pour confirmer qu’elle reste récupérable. -## Operational considerations +## Considérations d’exploitation -- Versioning increases storage use because overwrites and deletes retain older data. -- Configure lifecycle rules for noncurrent versions only after defining recovery and retention periods. -- Bucket replication requires versioning on both source and destination buckets. -- Object Lock depends on versioning and protects individual versions. -- Multipart completion creates one new object version in a versioned bucket. +- La gestion des versions augmente l’usage du stockage, car les écrasements et les suppressions conservent les données antérieures. +- Ne configurez les règles de cycle de vie des versions non actuelles qu’après avoir défini les périodes de récupération et de rétention. +- La réplication de compartiment exige la gestion des versions sur le compartiment source et sur le compartiment de destination. +- Le verrouillage d’objet dépend de la gestion des versions et protège chaque version. +- La finalisation d’un chargement partitionné crée une nouvelle version d’objet dans un compartiment avec gestion des versions. -## Next steps +## Étapes suivantes -- [Protect versions with Object Lock](./object-lock.md) -- [Upload large objects](./multipart-upload.md) -- [Manage bucket lifecycle](../lifecycle-management.md) \ No newline at end of file +- [Protéger les versions avec le verrouillage d’objet](./object-lock.md) +- [Charger des objets volumineux](./multipart-upload.md) +- [Gérer le cycle de vie du compartiment](../lifecycle-management.md) diff --git a/content/fr/administration/data/s3-tables.md b/content/fr/administration/data/s3-tables.md index 345ac3c25..d8a825e09 100644 --- a/content/fr/administration/data/s3-tables.md +++ b/content/fr/administration/data/s3-tables.md @@ -9,7 +9,7 @@ RustFS S3 Tables gère les tables **Apache Iceberg** au moyen d’un catalogue R S3 Tables est une fonctionnalité en préversion (preview) ; la compatibilité des clients se limite aux workflows indiqués ci-dessous. Cette page s’appuie sur le commit RustFS [`7e0c6711`](https://github.com/rustfs/rustfs/commit/7e0c67111b97703d47e23719b0264a739c8acea8), vérifié le 8 septembre 2026. Consultez la [matrice de prise en charge](https://github.com/rustfs/rustfs/blob/7e0c67111b97703d47e23719b0264a739c8acea8/docs/architecture/s3-tables-support-matrix.md) et votre version avant d’utiliser d’autres opérations de catalogue ou clients. -:: : +::: ## Fonctionnement @@ -34,18 +34,18 @@ Le backend de catalogue par défaut, `object`, conserve durablement l’état du ## Prérequis -- Démarrez un déploiement RustFS disposant des points de terminaison S3 Tables décrits ci-dessus. Consultez [Installation](/installation). -- Installez l’[AWS CLI](/developer/examples/aws-cli) et `curl` 7.76 ou une version ultérieure, avec prise en charge de `--aws-sigv4` et `--fail-with-body`. +- Démarrez un déploiement RustFS disposant des points de terminaison S3 Tables décrits ci-dessus. Consultez [Installation](/fr/installation). +- Installez l’[AWS CLI](/fr/developer/examples/aws-cli) et `curl` 7.76 ou une version ultérieure, avec prise en charge de `--aws-sigv4` et `--fail-with-body`. - Créez un compartiment dédié à ce tutoriel. L’exemple utilise `my-bucket`. - Utilisez un compte d’administration existant autorisé à effectuer les opérations de catalogue et à accéder aux objets S3. La politique intégrée `consoleAdmin` couvre ce tutoriel ; configurez des politiques plus restreintes pour les applications. -Les exemples utilisent `http://localhost:9000`. Remplacez cette adresse par le point de terminaison de votre serveur et utilisez [TLS](/integration/tls-configured) avec vérification des certificats en dehors d’un environnement de test local. +Les exemples utilisent `http://localhost:9000`. Remplacez cette adresse par le point de terminaison de votre serveur et utilisez [TLS](/fr/integration/tls-configured) avec vérification des certificats en dehors d’un environnement de test local. :::warning[Cycle de vie des compartiments de tables] Les compartiments de tables sont exclus du traitement d’expiration habituel du cycle de vie des compartiments. Activer ce mode sur un compartiment existant modifie l’application de ses règles d’expiration. Utilisez une maintenance de catalogue qui tient compte des références Iceberg pour faire expirer les instantanés et nettoyer les fichiers des tables. -:: : +::: ## 1. Créer un compartiment @@ -116,13 +116,13 @@ Utilisez les paramètres suivants pour le point de terminaison RustFS de l’exe Le client ajoute `/v1` à l’URI du catalogue. L’entrepôt est un nom de compartiment, et non un URI S3 ou un ARN AWS S3 Tables. Configurez la signature des requêtes REST et l’accès aux fichiers S3, même si les deux utilisent le même compte. -Si vous exploitez déjà un catalogue REST Iceberg séparé, consultez l’[intégration Apache Iceberg](/developer/integration/big-data/iceberg) pour le modèle de déploiement avec catalogue externe. +Si vous exploitez déjà un catalogue REST Iceberg séparé, consultez l’[intégration Apache Iceberg](/fr/developer/integration/big-data/iceberg) pour le modèle de déploiement avec catalogue externe. ## Autorisations et identifiants L’activation d’un compartiment de tables nécessite `admin:SetTableBucket` ; la consultation de son état nécessite `admin:GetTableBucket`. La découverte du catalogue utilise `admin:GetTableCatalog`. Les opérations sur les espaces de noms et les tables possèdent leurs propres actions d’administration RustFS, notamment `admin:SetTableNamespace`, `admin:CreateTable`, `admin:GetTableMetadata` et `admin:CommitTable`. -La lecture et l’écriture des fichiers de tables nécessitent aussi les autorisations S3 ordinaires. RustFS vérifie les autorisations de table sur les chemins des objets de l’entrepôt : les lectures nécessitent l’autorisation `admin:GetTableMetadata` correspondante, et les écritures `admin:SetTableMetadata`. Une autorisation de commit de catalogue ne suffit pas à autoriser les écritures de fichiers S3 qui le précèdent. Configurez les [politiques IAM](/security-compliance/iam/policies) pour les deux interfaces. +La lecture et l’écriture des fichiers de tables nécessitent aussi les autorisations S3 ordinaires. RustFS vérifie les autorisations de table sur les chemins des objets de l’entrepôt : les lectures nécessitent l’autorisation `admin:GetTableMetadata` correspondante, et les écritures `admin:SetTableMetadata`. Une autorisation de commit de catalogue ne suffit pas à autoriser les écritures de fichiers S3 qui le précèdent. Configurez les [politiques IAM](/fr/security-compliance/iam/policies) pour les deux interfaces. La délégation d’identifiants (vended credentials) par le catalogue est désactivée par défaut. Lorsqu’elle est activée, un client compatible doit négocier `X-Iceberg-Access-Delegation: vended-credentials`, et l’appelant doit être autorisé à demander des identifiants de table. L’accès initial au catalogue nécessite toujours une identité autorisée. Le tutoriel PyIceberg associé utilise des identifiants configurés explicitement. @@ -151,6 +151,6 @@ RustFS S3 Tables ne fournit ni moteur d’exécution SQL, ni transactions atomiq ## Étapes suivantes -- Exécutez le [tutoriel PyIceberg](/developer/integration/big-data/pyiceberg). -- Consultez les [politiques IAM](/security-compliance/iam/policies) avant d’autoriser les applications. +- Exécutez le [tutoriel PyIceberg](/fr/developer/integration/big-data/pyiceberg). +- Consultez les [politiques IAM](/fr/security-compliance/iam/policies) avant d’autoriser les applications. - Validez d’autres versions de clients avec les [vérifications de conformité des clients](https://github.com/rustfs/rustfs/blob/7e0c67111b97703d47e23719b0264a739c8acea8/scripts/table-catalog/README.md) du dépôt. diff --git a/content/fr/administration/data/tiered-storage.md b/content/fr/administration/data/tiered-storage.md index d36257683..d9405fd05 100644 --- a/content/fr/administration/data/tiered-storage.md +++ b/content/fr/administration/data/tiered-storage.md @@ -1,11 +1,11 @@ --- -title: "Tiered Storage" -description: "Configure lifecycle-driven object transitions from RustFS to a remote storage tier." +title: "Stockage hiérarchisé" +description: "Configurez les transitions d’objets pilotées par le cycle de vie, de RustFS vers un niveau de stockage distant." --- -RustFS tiered storage moves objects from local storage to a configured remote backend. This page explains the supported targets and shows how to add and maintain a RustFS tier in the Console. +Le stockage hiérarchisé de RustFS déplace les objets du stockage local vers un backend distant configuré. Cette page explique les cibles prises en charge et montre comment ajouter et maintenir un niveau RustFS dans la Console. -Tiering is asynchronous. RustFS keeps the object metadata locally, transfers the object data to the remote tier, and continues to serve S3 reads through the original bucket and object key. +La hiérarchisation est asynchrone. RustFS conserve localement les métadonnées de l’objet, transfère les données de l’objet vers le niveau distant et continue de servir les lectures S3 via le compartiment (bucket) d’origine et la clé d’objet. ```mermaid flowchart LR @@ -14,22 +14,22 @@ flowchart LR H -->|Read transitioned object| T ``` -:::note[Tier names are not AWS storage classes] +:::note[Les noms de niveau ne sont pas des classes de stockage AWS] -Lifecycle rules refer to a registered tier by its uppercase name, such as `COLDTIER`. Do not substitute AWS class labels such as `INTELLIGENT_TIERING`, `GLACIER`, or `DEEP_ARCHIVE` unless you have registered a RustFS tier with that exact valid name and verified the target behavior. +Les règles de cycle de vie désignent un niveau enregistré par son nom en majuscules, par exemple `COLDTIER`. Ne substituez pas les libellés de classe AWS tels que `INTELLIGENT_TIERING`, `GLACIER` ou `DEEP_ARCHIVE`, sauf si vous avez enregistré un niveau RustFS portant exactement ce nom valide et vérifié le comportement de la cible. ::: -## Supported backends +## Backends pris en charge -The RustFS source defines warm-backend implementations for these target types: +Le code source de RustFS définit des implémentations de backend warm pour ces types de cibles : -| Type | Configuration key | Typical target | +| Type | Clé de configuration | Cible typique | | --- | --- | --- | -| RustFS | `rustfs` | Another RustFS deployment | -| S3 | `s3` | Amazon S3 or an S3 endpoint supported by this backend | -| Wasabi | `wasabi` | Wasabi object storage | -| MinIO | `minio` | A MinIO deployment | +| RustFS | `rustfs` | Un autre déploiement RustFS | +| S3 | `s3` | Amazon S3 ou un point de terminaison S3 pris en charge par ce backend | +| Wasabi | `wasabi` | Stockage objet Wasabi | +| MinIO | `minio` | Un déploiement MinIO | | Aliyun | `aliyun` | Alibaba Cloud Object Storage Service (OSS) | | Tencent | `tencent` | Tencent Cloud Object Storage (COS) | | Huaweicloud | `huaweicloud` | Huawei Cloud Object Storage Service (OBS) | @@ -37,64 +37,64 @@ The RustFS source defines warm-backend implementations for these target types: | GCS | `gcs` | Google Cloud Storage | | R2 | `r2` | Cloudflare R2 | -Provider payloads and credential requirements differ. The complete workflow below uses the RustFS backend because the RustFS source includes an end-to-end hot-cluster-to-cold-cluster test for this path. +Les charges utiles et les exigences d’identifiants varient selon le fournisseur. Le flux complet ci-dessous utilise le backend RustFS, car le code source de RustFS contient un test de bout en bout, du cluster chaud vers le cluster froid, pour ce chemin. -## Before you begin +## Avant de commencer -Prepare the following: +Préparez les éléments suivants : -- A source RustFS deployment that stores the hot data. -- A separate target RustFS deployment and an existing target bucket. This example uses `my-bucket` on the target. -- Target credentials with permission to put, get, list, and delete objects in that bucket. -- Access to the source deployment's RustFS Console. +- Un déploiement RustFS source qui conserve les données chaudes. +- Un déploiement RustFS cible distinct et un compartiment cible existant. Cet exemple utilise `my-bucket` sur la cible. +- Des identifiants cibles autorisés à charger, lire, lister et supprimer des objets dans ce compartiment. +- L’accès à la Console RustFS du déploiement source. -Use TLS for both deployments in production. Restrict the target credentials to the dedicated tier bucket and prefix. +Utilisez TLS pour les deux déploiements en production. Limitez les identifiants cibles au compartiment de niveau dédié et à son préfixe. -## 1. Open Tiered Storage +## 1. Ouvrir le stockage hiérarchisé -Sign in to the source deployment's RustFS Console. In the left navigation, select **Tiered Storage**, then select **Add Tier** in the upper-right corner. +Connectez-vous à la Console RustFS du déploiement source. Dans la navigation de gauche, sélectionnez **Tiered Storage** (stockage hiérarchisé), puis sélectionnez **Add Tier** (ajouter un niveau) dans le coin supérieur droit. -## 2. Select the target +## 2. Sélectionner la cible -Select the target provider. This example uses **RustFS** to connect the source deployment to another RustFS deployment. +Sélectionnez le fournisseur cible. Cet exemple utilise **RustFS** pour relier le déploiement source à un autre déploiement RustFS. -## 3. Enter the target details +## 3. Saisir les détails de la cible -Complete the form: +Remplissez le formulaire : -| Field | Value | +| Champ | Valeur | | --- | --- | -| **Name (A-Z,0-9,_)** | Enter a unique uppercase tier name, such as `COLDTIER`. | -| **Endpoint** | Enter the target RustFS S3 endpoint. | -| **Access Key** | Enter the access key for the target deployment. | -| **Secret Key** | Enter the secret key for the target deployment. | -| **Bucket** | Enter the existing target bucket name, such as `my-bucket`. | -| **Prefix (Optional)** | Optionally enter a prefix dedicated to tiered objects. | -| **Region** | Optionally enter the target region, such as `us-east-1`. | +| **Name (A-Z,0-9,_)** (nom) | Saisissez un nom de niveau unique en majuscules, par exemple `COLDTIER`. | +| **Endpoint** (point de terminaison) | Saisissez le point de terminaison S3 RustFS de la cible. | +| **Access Key** (clé d’accès) | Saisissez la clé d’accès du déploiement cible. | +| **Secret Key** (clé secrète) | Saisissez la clé secrète du déploiement cible. | +| **Bucket** (compartiment) | Saisissez le nom du compartiment cible existant, par exemple `my-bucket`. | +| **Prefix (Optional)** (préfixe, facultatif) | Saisissez éventuellement un préfixe dédié aux objets hiérarchisés. | +| **Region** (région) | Saisissez éventuellement la région cible, par exemple `us-east-1`. | -Leave **Storage Class** at its default unless the target backend requires a different supported storage class. +Laissez **Storage Class** (classe de stockage) à sa valeur par défaut, sauf si le backend cible exige une autre classe de stockage prise en charge. -:::warning[Protect tier credentials] +:::warning[Protégez les identifiants du niveau] -The form contains a secret key. Use credentials restricted to the target bucket and prefix. Do not expose the key in screenshots, tickets, or logs. +Le formulaire contient une clé secrète. Utilisez des identifiants limités au compartiment cible et au préfixe. N’exposez pas la clé dans des captures d’écran, des tickets ou des journaux. ::: -## 4. Save the tier +## 4. Enregistrer le niveau -Select **Save**. RustFS validates the backend and probes it by writing, reading, and removing a small object. Saving fails when the endpoint, credentials, bucket permissions, or backend configuration cannot complete that probe. +Sélectionnez **Save** (enregistrer). RustFS valide le backend et le sonde en écrivant, en lisant puis en supprimant un petit objet. L’enregistrement échoue lorsque le point de terminaison, les identifiants, les autorisations du compartiment ou la configuration du backend ne peuvent pas achever cette sonde. -After the tier appears in the **Tiers** list, configure a transition rule in [Lifecycle Management](/administration/data/lifecycle-management). A registered tier does not move objects until a lifecycle rule references its name. +Lorsque le niveau apparaît dans la liste **Tiers** (niveaux), configurez une règle de transition dans [Gestion du cycle de vie](/fr/administration/data/lifecycle-management). Un niveau enregistré ne déplace aucun objet tant qu’une règle de cycle de vie ne référence pas son nom. -## Manage tiers with `rc` +## Gérer les niveaux avec `rc` -Install and configure [`rc`](/operations/rc), then list the tiers registered on the source deployment: +Installez et configurez [`rc`](/fr/operations/rc), puis listez les niveaux enregistrés sur le déploiement source : ```bash rc bucket lifecycle tier list local ``` -Add a RustFS tier with the same settings described in the Console workflow: +Ajoutez un niveau RustFS avec les mêmes réglages que dans le flux de la Console : ```bash rc bucket lifecycle tier add rustfs COLDTIER local \ @@ -105,13 +105,13 @@ rc bucket lifecycle tier add rustfs COLDTIER local \ --region us-east-1 ``` -Inspect the tier configuration and available statistics: +Inspectez la configuration du niveau et les statistiques disponibles : ```bash rc bucket lifecycle tier info COLDTIER local ``` -The remaining tier commands update credentials or remove a tier: +Les commandes de niveau restantes mettent à jour les identifiants ou suppriment un niveau : ```bash rc bucket lifecycle tier edit COLDTIER local \ @@ -120,60 +120,60 @@ rc bucket lifecycle tier edit COLDTIER local \ rc bucket lifecycle tier remove COLDTIER local ``` -See [Lifecycle Management](/administration/data/lifecycle-management) to create transition rules, confirm transitions, and restore local copies. Run `rc bucket lifecycle tier --help` to inspect provider-specific options before changing a tier. +Consultez [Gestion du cycle de vie](/fr/administration/data/lifecycle-management) pour créer des règles de transition, confirmer les transitions et restaurer des copies locales. Exécutez `rc bucket lifecycle tier --help` pour examiner les options propres au fournisseur avant de modifier un niveau. -## Monitor tier activity +## Surveiller l’activité des niveaux -Use the tier statistics endpoint with a SigV4-signed request and `admin:ListTier` permission: +Utilisez le point de terminaison de statistiques de niveau avec une requête signée en SigV4 et l’autorisation `admin:ListTier` : ```http GET /rustfs/admin/v3/tier-stats?tier=COLDTIER HTTP/1.1 Host: ``` -Monitor transition failures together with source-cluster capacity and target-side availability. A configured tier adds the target service and network path to the read path for objects that do not have a restored local copy. +Surveillez les échecs de transition en même temps que la capacité du cluster source et la disponibilité côté cible. Un niveau configuré ajoute le service cible et le chemin réseau au chemin de lecture des objets qui ne disposent pas d’une copie locale restaurée. -## Change or remove a tier +## Modifier ou supprimer un niveau -The Admin API exposes these mutation routes, all requiring `admin:SetTier`: +L’API d’administration expose ces routes de mutation, qui exigent toutes `admin:SetTier` : -| Operation | Route | +| Opération | Route | | --- | --- | -| Edit a tier | `POST /rustfs/admin/v3/tier/{tiername}` | -| Remove a tier | `DELETE /rustfs/admin/v3/tier/{tiername}` | -| Clear all tiers | `POST /rustfs/admin/v3/tier/clear` | +| Modifier un niveau | `POST /rustfs/admin/v3/tier/{tiername}` | +| Supprimer un niveau | `DELETE /rustfs/admin/v3/tier/{tiername}` | +| Effacer tous les niveaux | `POST /rustfs/admin/v3/tier/clear` | -Before editing or removing a tier: +Avant de modifier ou de supprimer un niveau : -1. Disable lifecycle rules that reference the tier. -2. Confirm that no transition jobs are still using it. -3. Confirm that no source objects depend on data stored in its target bucket or prefix. -4. Back up the tier configuration and record the target location. +1. Désactivez les règles de cycle de vie qui référencent le niveau. +2. Confirmez qu’aucune tâche de transition ne l’utilise encore. +3. Confirmez qu’aucun objet source ne dépend des données stockées dans son compartiment ou son préfixe cible. +4. Sauvegardez la configuration du niveau et notez l’emplacement cible. -Normal tier mutations check backend usage and protect non-empty targets. Do not use a `force` option to bypass those checks unless you have independently proved that every transitioned object remains recoverable. Removing configuration for an active tier can make transitioned objects unreadable from the source cluster. +Les mutations de niveau ordinaires vérifient l’utilisation du backend et protègent les cibles non vides. N’utilisez pas d’option `force` pour contourner ces contrôles, sauf si vous avez démontré de façon indépendante que chaque objet transféré reste récupérable. La suppression de la configuration d’un niveau actif peut rendre les objets transférés illisibles depuis le cluster source. -:::warning[Do not modify tier objects directly] +:::warning[Ne modifiez pas directement les objets du niveau] -Do not rename, overwrite, or delete generated objects in the target bucket. Manage source objects through the hot RustFS cluster so RustFS can keep local transition metadata and remote data consistent. +Ne renommez pas, n’écrasez pas et ne supprimez pas les objets générés dans le compartiment cible. Gérez les objets source par l’intermédiaire du cluster RustFS chaud, afin que RustFS puisse maintenir la cohérence entre les métadonnées de transition locales et les données distantes. ::: -## Admin API reference +## Référence de l’API d’administration -The current RustFS source registers these tier routes: +Le code source actuel de RustFS enregistre ces routes de niveau : -| Method | Route | Permission | +| Méthode | Route | Autorisation | | --- | --- | --- | | `PUT` | `/rustfs/admin/v3/tier` | `admin:SetTier` | | `POST` | `/rustfs/admin/v3/tier/{tiername}` | `admin:SetTier` | | `DELETE` | `/rustfs/admin/v3/tier/{tiername}` | `admin:SetTier` | | `POST` | `/rustfs/admin/v3/tier/clear` | `admin:SetTier` | -| `GET` | `/rustfs/admin/v3/tier` (list configurations) | `admin:ListTier` | -| `GET` | `/rustfs/admin/v3/tier/{tier}` (verify connectivity) | `admin:ListTier` | -| `GET` | `/rustfs/admin/v3/tier-stats` (read statistics) | `admin:ListTier` | +| `GET` | `/rustfs/admin/v3/tier` (lister les configurations) | `admin:ListTier` | +| `GET` | `/rustfs/admin/v3/tier/{tier}` (vérifier la connectivité) | `admin:ListTier` | +| `GET` | `/rustfs/admin/v3/tier-stats` (lire les statistiques) | `admin:ListTier` | -All Admin API requests require SigV4 authentication. These routes are an administrative interface, not ordinary S3 bucket operations. +Toutes les requêtes de l’API d’administration exigent une authentification SigV4. Ces routes forment une interface d’administration, et non des opérations S3 ordinaires sur les compartiments. -## Next steps +## Étapes suivantes -Review [lifecycle management](/administration/data/lifecycle-management) and configure [access policies](/security-compliance/iam/policies) for the administrators and service credentials used by tiered storage. \ No newline at end of file +Consultez la [gestion du cycle de vie](/fr/administration/data/lifecycle-management) et configurez les [politiques d’accès](/fr/security-compliance/iam/policies) pour les administrateurs et les identifiants de service utilisés par le stockage hiérarchisé. diff --git a/content/fr/administration/index.md b/content/fr/administration/index.md index 6aa81a6c9..7485290ab 100644 --- a/content/fr/administration/index.md +++ b/content/fr/administration/index.md @@ -9,9 +9,9 @@ Utilisez cette section pour gérer RustFS via la Console, administrer les compar - [Console](./console/index.md) couvre l’administration via le navigateur et les modes de connexion. - [Gestion des données](./data/object/object-lock.md) couvre les compartiments, les objets, le cycle de vie et les fonctions de protection des données. -- [S3 Tables](/administration/data/s3-tables) présente les compartiments de tables et le catalogue REST Iceberg intégré. +- [S3 Tables](/fr/administration/data/s3-tables) présente les compartiments de tables et le catalogue REST Iceberg intégré. - [Protocoles](./protocols/s3.md) couvre l’accès S3, WebDAV, FTPS et SFTP. - [Configuration CORS](./cors/index.md) couvre l’accès entre origines (cross-origin) aux services RustFS. -- [Accès par hôte virtuel](/integration/virtual) couvre l’adressage S3 fondé sur le nom de domaine. +- [Accès par hôte virtuel](/fr/integration/virtual) couvre l’adressage S3 fondé sur le nom de domaine. -Pour l’identité, le chiffrement, la sécurité du transport et l’audit, poursuivez avec [Sécurité et conformité](/security-compliance). +Pour l’identité, le chiffrement, la sécurité du transport et l’audit, poursuivez avec [Sécurité et conformité](/fr/security-compliance). diff --git a/content/fr/administration/protocols/ftps.md b/content/fr/administration/protocols/ftps.md index e7031a026..568db979c 100644 --- a/content/fr/administration/protocols/ftps.md +++ b/content/fr/administration/protocols/ftps.md @@ -1,83 +1,83 @@ --- title: "FTP(S)" -description: "Configure the RustFS FTP or FTPS gateway and manage buckets and objects with FTP clients." +description: "Configurez la passerelle FTP ou FTPS de RustFS et gérez les compartiments et les objets avec des clients FTP." --- -RustFS includes an FTP gateway that exposes buckets and objects to standard FTP clients. You can run it as unencrypted FTP for isolated local testing or as explicit FTP over TLS (FTPS) for encrypted connections. RustFS authenticates each session against Identity and Access Management (IAM) and applies the user's S3 policies to storage operations. +RustFS inclut une passerelle FTP qui expose les compartiments (buckets) et les objets aux clients FTP standard. Vous pouvez l’exécuter en FTP non chiffré pour des tests locaux isolés, ou en FTP explicite sur TLS (FTPS) pour des connexions chiffrées. RustFS authentifie chaque session auprès de la gestion des identités et des accès (IAM) et applique les politiques S3 de l’utilisateur aux opérations de stockage. -FTP and FTPS support is compiled into the standard RustFS binary, but both listeners are disabled at runtime by default. Enable only the listener you intend to use. +La prise en charge de FTP et de FTPS est compilée dans le binaire RustFS standard, mais les deux écouteurs sont désactivés par défaut à l’exécution. N’activez que l’écouteur que vous comptez utiliser. -## Overview +## Vue d’ensemble -The gateway maps FTP paths to RustFS resources: +La passerelle associe les chemins FTP aux ressources RustFS : -| FTP path | RustFS resource | +| Chemin FTP | Ressource RustFS | | --- | --- | -| `/` | All buckets visible to the authenticated user | -| `/my-bucket/` | The `my-bucket` bucket | -| `/my-bucket/hello.txt` | The `hello.txt` object in `my-bucket` | +| `/` | Tous les compartiments visibles par l’utilisateur authentifié | +| `/my-bucket/` | Le compartiment `my-bucket` | +| `/my-bucket/hello.txt` | L’objet `hello.txt` dans `my-bucket` | -The following FTP operations are supported: +Les opérations FTP suivantes sont prises en charge : -| FTP command | Operation | +| Commande FTP | Opération | | --- | --- | -| `LIST` | List buckets at the root or objects and prefixes in a bucket | -| `MKD` | Create a bucket | -| `CWD` | Enter a bucket | -| `STOR` | Upload an object | -| `RETR` | Download an object | -| `DELE` | Delete an object | -| `RMD` | Recursively delete a bucket and its objects | +| `LIST` | Répertorier les compartiments à la racine, ou les objets et les préfixes dans un compartiment | +| `MKD` | Créer un compartiment | +| `CWD` | Entrer dans un compartiment | +| `STOR` | Charger un objet | +| `RETR` | Télécharger un objet | +| `DELE` | Supprimer un objet | +| `RMD` | Supprimer récursivement un compartiment et ses objets | -RustFS does not currently support FTP rename operations or uploads that append to an existing object. Because S3 storage has no native working-directory or POSIX directory model, some client-specific filesystem operations may not behave like a traditional FTP server. +RustFS ne prend actuellement en charge ni le renommage FTP ni les chargements qui ajoutent du contenu à un objet existant. Comme le stockage S3 n’a pas de répertoire de travail natif ni de modèle de répertoires POSIX, certaines opérations de système de fichiers propres à un client peuvent ne pas se comporter comme sur un serveur FTP classique. -Enter a RustFS access key as the FTP username and its secret key as the password. Invalid usernames and passwords both return `530 Not logged in`. After login, RustFS checks the IAM user's S3 permissions for each operation. +Saisissez une clé d’accès RustFS comme nom d’utilisateur FTP et la clé secrète correspondante comme mot de passe. Un nom d’utilisateur non valide et un mot de passe non valide renvoient tous deux `530 Not logged in`. Après la connexion, RustFS vérifie les autorisations S3 de l’utilisateur IAM pour chaque opération. -:::danger[Plain FTP exposes credentials] +:::danger[Le FTP en clair expose les identifiants] -FTP sends credentials and data without encryption. Bind plain FTP to a loopback or isolated test network only. Use FTPS for every remote or production connection. +Le FTP envoie les identifiants et les données sans chiffrement. Liez le FTP en clair uniquement à une interface de bouclage ou à un réseau de test isolé. Utilisez FTPS pour toute connexion distante ou de production. ::: -:::warning[Bucket deletion is recursive] +:::warning[La suppression d’un compartiment est récursive] -The current `RMD` implementation deletes the objects in the target bucket before deleting the bucket. Confirm the path before running `rmdir` in an FTP client. +L’implémentation actuelle de `RMD` supprime les objets du compartiment cible avant de supprimer le compartiment. Confirmez le chemin avant d’exécuter `rmdir` dans un client FTP. ::: ## Configuration -FTP and FTPS use separate listeners and environment variables. +FTP et FTPS utilisent des écouteurs et des variables d’environnement distincts. -### FTP variables +### Variables FTP -| Variable | Description | Default | +| Variable | Description | Valeur par défaut | | --- | --- | --- | -| `RUSTFS_FTP_ENABLE` | Enables the unencrypted FTP listener. | `false` | -| `RUSTFS_FTP_ADDRESS` | Bind address for FTP control connections. | `0.0.0.0:8021` | -| `RUSTFS_FTP_PASSIVE_PORTS` | Inclusive passive data port range in `start-end` format. | `40000-50000` | -| `RUSTFS_FTP_EXTERNAL_IP` | Public IP or hostname advertised to passive clients when RustFS is behind NAT. | Not set | +| `RUSTFS_FTP_ENABLE` | Active l’écouteur FTP non chiffré. | `false` | +| `RUSTFS_FTP_ADDRESS` | Adresse d’écoute des connexions de contrôle FTP. | `0.0.0.0:8021` | +| `RUSTFS_FTP_PASSIVE_PORTS` | Plage inclusive de ports de données en mode passif, au format `start-end`. | `40000-50000` | +| `RUSTFS_FTP_EXTERNAL_IP` | Adresse IP publique ou nom d’hôte annoncé aux clients passifs lorsque RustFS se trouve derrière un NAT. | Non définie | -### FTPS variables +### Variables FTPS -| Variable | Description | Default | +| Variable | Description | Valeur par défaut | | --- | --- | --- | -| `RUSTFS_FTPS_ENABLE` | Enables the explicit FTPS listener. | `false` | -| `RUSTFS_FTPS_ADDRESS` | Bind address for FTPS control connections. | `0.0.0.0:8022` | -| `RUSTFS_FTPS_TLS_ENABLED` | Enables TLS on the FTPS listener. Keep this enabled for FTPS. | `true` | -| `RUSTFS_FTPS_CERTS_DIR` | Directory containing the FTPS certificate and private key. Required for FTPS. | Not set | -| `RUSTFS_FTPS_PASSIVE_PORTS` | Inclusive passive data port range in `start-end` format. | `40000-50000` | -| `RUSTFS_FTPS_EXTERNAL_IP` | Public IP or hostname advertised to passive clients when RustFS is behind NAT. | Not set | +| `RUSTFS_FTPS_ENABLE` | Active l’écouteur FTPS explicite. | `false` | +| `RUSTFS_FTPS_ADDRESS` | Adresse d’écoute des connexions de contrôle FTPS. | `0.0.0.0:8022` | +| `RUSTFS_FTPS_TLS_ENABLED` | Active TLS sur l’écouteur FTPS. Laissez cette option activée pour FTPS. | `true` | +| `RUSTFS_FTPS_CERTS_DIR` | Répertoire contenant le certificat FTPS et la clé privée. Obligatoire pour FTPS. | Non définie | +| `RUSTFS_FTPS_PASSIVE_PORTS` | Plage inclusive de ports de données en mode passif, au format `start-end`. | `40000-50000` | +| `RUSTFS_FTPS_EXTERNAL_IP` | Adresse IP publique ou nom d’hôte annoncé aux clients passifs lorsque RustFS se trouve derrière un NAT. | Non définie | -The standard RustFS build enables the `ftps` compile-time feature, which provides both FTP and FTPS. If you build RustFS with `--no-default-features`, include the feature explicitly: +La compilation RustFS standard active la fonctionnalité de compilation `ftps`, qui fournit à la fois FTP et FTPS. Si vous compilez RustFS avec `--no-default-features`, incluez la fonctionnalité explicitement : ```bash cargo build --release --features ftps ``` -### Local testing with FTP +### Tests locaux avec FTP -Start an unencrypted FTP listener on the loopback interface: +Démarrez un écouteur FTP non chiffré sur l’interface de bouclage : ```bash export RUSTFS_FTP_ENABLE=true @@ -89,11 +89,11 @@ export RUSTFS_SECRET_KEY= rustfs /path/to/data ``` -Binding to `127.0.0.1` prevents remote hosts from connecting to the unencrypted listener. +La liaison à `127.0.0.1` empêche les hôtes distants de se connecter à l’écouteur non chiffré. -### Prepare a test certificate +### Préparer un certificat de test -FTPS expects `rustfs_cert.pem` and `rustfs_key.pem` in the certificate directory. For local testing, create a short-lived self-signed certificate: +FTPS attend `rustfs_cert.pem` et `rustfs_key.pem` dans le répertoire de certificats. Pour un test local, créez un certificat autosigné de courte durée : ```bash mkdir -p /path/to/ftps-certs @@ -106,11 +106,11 @@ openssl req -x509 -newkey rsa:2048 -nodes \ -addext "subjectAltName=DNS:localhost,IP:127.0.0.1" ``` -Use a certificate issued by a trusted certificate authority in production. Protect `rustfs_key.pem` from unauthorized access and ensure the certificate subject alternative names match the host clients use. +En production, utilisez un certificat émis par une autorité de certification de confiance. Protégez `rustfs_key.pem` contre tout accès non autorisé et assurez-vous que les noms alternatifs du sujet du certificat correspondent à l’hôte utilisé par les clients. -### Start FTPS +### Démarrer FTPS -Configure an explicit FTPS listener: +Configurez un écouteur FTPS explicite : ```bash export RUSTFS_FTPS_ENABLE=true @@ -122,44 +122,44 @@ export RUSTFS_FTPS_PASSIVE_PORTS=40000-50000 rustfs /path/to/data ``` -RustFS requires TLS on both the FTPS control and data channels. Configure clients for **explicit FTP over TLS**, sometimes labeled **FTPES** or **Require explicit FTP over TLS**. Implicit FTPS is not the mode implemented by this listener. +RustFS exige TLS à la fois sur le canal de contrôle et sur le canal de données FTPS. Configurez les clients pour **explicit FTP over TLS**, parfois libellé **FTPES** ou **Require explicit FTP over TLS**. Le FTPS implicite n’est pas le mode implémenté par cet écouteur. -If the certificate directory is missing, does not exist, or does not contain a usable certificate and key, FTPS initialization fails. See [Configure TLS](/integration/tls-configured) for general certificate guidance. +Si le répertoire de certificats est absent, n’existe pas ou ne contient pas un certificat et une clé utilisables, l’initialisation de FTPS échoue. Consultez [Configurer TLS](/fr/integration/tls-configured) pour des indications générales sur les certificats. -### Configure passive connections +### Configurer les connexions passives -FTP uses the control port for commands and a separate data connection for listings and file transfers. For passive mode: +FTP utilise le port de contrôle pour les commandes et une connexion de données distincte pour les listes et les transferts de fichiers. Pour le mode passif : -1. Allow inbound TCP traffic to the configured control port. -2. Allow inbound TCP traffic to every port in the configured passive range. -3. Set `RUSTFS_FTP_EXTERNAL_IP` or `RUSTFS_FTPS_EXTERNAL_IP` when clients connect through NAT or a load balancer. +1. Autorisez le trafic TCP entrant vers le port de contrôle configuré. +2. Autorisez le trafic TCP entrant vers chaque port de la plage passive configurée. +3. Définissez `RUSTFS_FTP_EXTERNAL_IP` ou `RUSTFS_FTPS_EXTERNAL_IP` lorsque les clients se connectent à travers un NAT ou un répartiteur de charge. -For example, an FTPS server behind NAT can advertise its public hostname: +Par exemple, un serveur FTPS derrière un NAT peut annoncer son nom d’hôte public : ```bash export RUSTFS_FTPS_EXTERNAL_IP=storage.example.com export RUSTFS_FTPS_PASSIVE_PORTS=40000-40100 ``` -Use the corresponding FTP-prefixed variables for the plain FTP listener. RustFS supports both active and passive transfer modes, but passive mode is generally easier to operate through client firewalls. +Utilisez les variables préfixées par FTP correspondantes pour l’écouteur FTP en clair. RustFS prend en charge les modes de transfert actif et passif, mais le mode passif est en général plus simple à exploiter à travers les pare-feu des clients. -## Usage +## Utilisation -The examples use [`lftp`](https://lftp.yar.ru/) and the canonical `my-bucket` and `hello.txt` names. The IAM user must have the S3 permissions required for each operation. +Les exemples utilisent [`lftp`](https://lftp.yar.ru/) ainsi que les noms canoniques `my-bucket` et `hello.txt`. L’utilisateur IAM doit disposer des autorisations S3 requises pour chaque opération. -### Connect with FTP +### Se connecter en FTP -Use plain FTP only with the loopback test listener: +Utilisez le FTP en clair uniquement avec l’écouteur de test en bouclage : ```bash lftp -u ftp://127.0.0.1:8021 ``` -Enter the secret key when `lftp` prompts for a password. +Saisissez la clé secrète lorsque `lftp` demande un mot de passe. -### Connect with FTPS +### Se connecter en FTPS -Connect to the explicit FTPS listener and require encryption for control and data connections: +Connectez-vous à l’écouteur FTPS explicite et exigez le chiffrement des connexions de contrôle et de données : ```bash lftp -u -e ' @@ -169,9 +169,9 @@ lftp -u -e ' ' ``` -Enter the secret key when prompted. Keep certificate verification enabled in production. +Saisissez la clé secrète lorsque vous y êtes invité. Laissez la vérification des certificats activée en production. -For the self-signed local test certificate only, connect to `localhost` and disable certificate verification for that session: +Pour le seul certificat de test local autosigné, connectez-vous à `localhost` et désactivez la vérification des certificats pour cette session : ```bash lftp -u -e ' @@ -184,13 +184,13 @@ lftp -u -e ' :::warning -Do not disable certificate verification in production. Install the issuing CA in the client trust store instead. +Ne désactivez pas la vérification des certificats en production. Installez plutôt l’autorité de certification émettrice dans le magasin de confiance du client. ::: -### List buckets and create a bucket +### Répertorier les compartiments et créer un compartiment -At the `lftp` prompt, list the visible buckets and create `my-bucket`: +À l’invite `lftp`, répertoriez les compartiments visibles et créez `my-bucket` : ```text lftp> cls -1 / @@ -198,11 +198,11 @@ lftp> mkdir my-bucket lftp> cd my-bucket ``` -Bucket names must follow the same naming rules as buckets created through the S3 API. +Les noms de compartiment doivent suivre les mêmes règles de nommage que les compartiments créés via l’API S3. -### Upload and download an object +### Charger et télécharger un objet -Upload `/path/to/hello.txt`, list the bucket, and download the object: +Chargez `/path/to/hello.txt`, répertoriez le compartiment, puis téléchargez l’objet : ```text lftp> put /path/to/hello.txt -o hello.txt @@ -210,11 +210,11 @@ lftp> ls lftp> get hello.txt -o hello.txt ``` -The upload replaces an object with the same key. Appending to an existing object is not supported. +Le chargement remplace un objet de même clé. L’ajout de contenu à un objet existant n’est pas pris en charge. -### Delete an object and bucket +### Supprimer un objet et un compartiment -Delete the object, return to the root, and delete the bucket: +Supprimez l’objet, revenez à la racine, puis supprimez le compartiment : ```text lftp> rm hello.txt @@ -222,25 +222,25 @@ lftp> cd / lftp> rmdir my-bucket ``` -Remember that `rmdir` recursively removes remaining objects from the bucket before deleting it. +N’oubliez pas que `rmdir` retire récursivement les objets restants du compartiment avant de le supprimer. -### Connect other clients +### Connecter d’autres clients -Use these settings in graphical FTP clients such as FileZilla or Cyberduck: +Utilisez ces paramètres dans les clients FTP graphiques tels que FileZilla ou Cyberduck : -| Setting | FTP test listener | FTPS listener | +| Paramètre | Écouteur de test FTP | Écouteur FTPS | | --- | --- | --- | -| Protocol | FTP | FTP over TLS (explicit) | -| Host | `127.0.0.1` | Your FTPS hostname | +| Protocole | FTP | FTP sur TLS (explicite) | +| Hôte | `127.0.0.1` | Votre nom d’hôte FTPS | | Port | `8021` | `8022` | -| Username | RustFS access key | RustFS access key | -| Password | RustFS secret key | RustFS secret key | -| Transfer mode | Passive | Passive | +| Nom d’utilisateur | Clé d’accès RustFS | Clé d’accès RustFS | +| Mot de passe | Clé secrète RustFS | Clé secrète RustFS | +| Mode de transfert | Passif | Passif | -If login succeeds but directory listings or transfers time out, check the passive port firewall rules and external IP setting first. +Si la connexion réussit, mais que le listage des répertoires ou les transferts expirent, vérifiez d’abord les règles de pare-feu des ports passifs et le paramètre d’adresse IP externe. -## Next steps +## Étapes suivantes -- [Manage credentials](/operations/credentials) -- [Configure TLS](/integration/tls-configured) -- [Check service status](/operations/status-check) \ No newline at end of file +- [Gérer les identifiants](/fr/operations/credentials) +- [Configurer TLS](/fr/integration/tls-configured) +- [Vérifier l’état du service](/fr/operations/status-check) diff --git a/content/fr/administration/protocols/s3.md b/content/fr/administration/protocols/s3.md index 0148cd28b..0efda538c 100644 --- a/content/fr/administration/protocols/s3.md +++ b/content/fr/administration/protocols/s3.md @@ -1,111 +1,111 @@ --- title: "S3" -description: "Configure and use the RustFS S3-compatible API with AWS CLI, AWS SDKs, and other S3 clients." +description: "Configurez et utilisez l’API compatible avec S3 de RustFS avec AWS CLI, les SDK AWS et d’autres clients S3." --- -RustFS exposes an S3-compatible REST API for common object-storage workloads. It supports AWS Signature Version 4 (SigV4) and works with AWS CLI, AWS SDKs, and other S3 clients when you configure the RustFS endpoint, region, credentials, and addressing style. +RustFS expose une API REST compatible avec S3 pour les charges de travail courantes de stockage objet. Elle prend en charge AWS Signature Version 4 (SigV4) et fonctionne avec AWS CLI, les SDK AWS et d’autres clients S3 lorsque vous configurez le point de terminaison RustFS, la région, les identifiants et le mode d’adressage. -## Overview +## Vue d’ensemble -S3 organizes data into buckets and objects. With the default path-style addressing, a RustFS URL maps to storage as follows: +S3 organise les données en compartiments (buckets) et en objets. Avec l’adressage de type chemin (path-style) par défaut, une URL RustFS correspond au stockage comme suit : ```text http://localhost:9000/my-bucket/path/to/hello.txt | bucket | |---- object key ----| ``` -RustFS covers the common S3 data plane used by applications, backup tools, and SDKs: +RustFS couvre le plan de données S3 courant utilisé par les applications, les outils de sauvegarde et les SDK : -| Area | Supported workflows | +| Domaine | Flux pris en charge | | --- | --- | -| Buckets | Create, delete, list, inspect, and retrieve location | -| Objects | Put, get, head, copy, delete, multi-delete, range reads, conditional requests, and user metadata | -| Listing | `ListObjects`, `ListObjectsV2`, prefixes, delimiters, markers, and pagination | -| Large objects | Create, upload, copy, list, complete, and abort multipart uploads | -| Data management | Versioning, lifecycle rules, bucket and object tags, checksums, and object lock | -| Access control | IAM credentials and policies, bucket policies, public access block, and presigned GET/PUT URLs | -| Integration | CORS, bucket notifications, replication configuration, and server-side encryption workflows | +| Compartiments | Créer, supprimer, répertorier, inspecter et récupérer l’emplacement | +| Objets | Put, get, head, copie, suppression, suppression multiple, lectures par plage, requêtes conditionnelles et métadonnées utilisateur | +| Listage | `ListObjects`, `ListObjectsV2`, préfixes, délimiteurs, marqueurs et pagination | +| Objets volumineux | Créer, charger, copier, répertorier, finaliser et interrompre les chargements partitionnés | +| Gestion des données | Gestion des versions, règles de cycle de vie, étiquettes de compartiment et d’objet, sommes de contrôle et verrouillage d’objet | +| Contrôle d’accès | Identifiants et politiques IAM, politiques de compartiment, blocage de l’accès public et URL présignées GET/PUT | +| Intégration | CORS, notifications de compartiment, configuration de la réplication et flux de chiffrement côté serveur | -Authenticated clients sign requests with an access key and secret key. Anonymous requests are evaluated against the applicable bucket policy. +Les clients authentifiés signent les requêtes avec une clé d’accès et une clé secrète. Les requêtes anonymes sont évaluées au regard de la politique de compartiment applicable. -:::note[Compatibility scope] +:::note[Périmètre de compatibilité] -RustFS provides broad S3 API compatibility for supported features, but it is not identical to every AWS S3 or MinIO API. Review [Known compatibility differences](#known-compatibility-differences) before depending on advanced or vendor-specific behavior, and validate it against your target RustFS release. +RustFS offre une large compatibilité avec l’API S3 pour les fonctionnalités prises en charge, mais cette API n’est pas identique à chaque API d’AWS S3 ou de MinIO. Consultez les [différences de compatibilité connues](#différences-de-compatibilité-connues) avant de vous appuyer sur un comportement avancé ou propre à un fournisseur, et validez ce comportement sur la version cible de RustFS. ::: ## Configuration -The S3 API is enabled on the main RustFS listener. It does not require a separate protocol switch. +L’API S3 est activée sur l’écouteur principal de RustFS. Aucun réglage de protocole distinct n’est nécessaire. -| Variable | Purpose | Default | +| Variable | Rôle | Valeur par défaut | | --- | --- | --- | -| `RUSTFS_ADDRESS` | S3 API bind address | `:9000` | -| `RUSTFS_REGION` | Region used for request signing and region-aware clients | `us-east-1` | -| `RUSTFS_ACCESS_KEY` | Root access key | Installation-specific | -| `RUSTFS_SECRET_KEY` | Root secret key | Installation-specific | -| `RUSTFS_SERVER_DOMAINS` | Comma-separated domains for virtual-hosted-style requests | Not set | -| `RUSTFS_TLS_PATH` | Directory containing `rustfs_cert.pem` and `rustfs_key.pem` | Not set | +| `RUSTFS_ADDRESS` | Adresse d’écoute de l’API S3 | `:9000` | +| `RUSTFS_REGION` | Région utilisée pour la signature des requêtes et pour les clients qui tiennent compte de la région | `us-east-1` | +| `RUSTFS_ACCESS_KEY` | Clé d’accès racine | Propre à l’installation | +| `RUSTFS_SECRET_KEY` | Clé secrète racine | Propre à l’installation | +| `RUSTFS_SERVER_DOMAINS` | Domaines séparés par des virgules pour les requêtes en adressage de type hôte virtuel | Non définie | +| `RUSTFS_TLS_PATH` | Répertoire contenant `rustfs_cert.pem` et `rustfs_key.pem` | Non définie | -Use IAM users or service accounts instead of root credentials for applications, and grant only the required S3 actions. +Pour les applications, utilisez des utilisateurs IAM ou des comptes de service plutôt que les identifiants racine, et n’accordez que les actions S3 requises. -### Path-style addressing +### Adressage de type chemin -Path-style addressing is the default and requires no DNS configuration. The bucket name is the first component of the request path: +L’adressage de type chemin est le mode par défaut et n’exige aucune configuration DNS. Le nom du compartiment est le premier composant du chemin de la requête : ```text http://localhost:9000/my-bucket/hello.txt ``` -Configure clients with: +Configurez les clients avec : -- Endpoint: `http://localhost:9000` -- Region: `us-east-1` -- Access key: `` -- Secret key: `` -- Addressing style: path-style +- Point de terminaison : `http://localhost:9000` +- Région : `us-east-1` +- Clé d’accès : `` +- Clé secrète : `` +- Mode d’adressage : path-style -Some clients default to virtual-hosted-style requests. Enable their path-style option, such as `force_path_style=true` in AWS SDK configuration or `s3_use_path_style = true` in Terraform. +Certains clients utilisent par défaut des requêtes en adressage de type hôte virtuel. Activez leur option d’adressage de type chemin, par exemple `force_path_style=true` dans la configuration du SDK AWS ou `s3_use_path_style = true` dans Terraform. -### Virtual-hosted-style addressing +### Adressage de type hôte virtuel -Virtual-hosted-style addressing places the bucket name in the hostname. Set `RUSTFS_SERVER_DOMAINS` to each base domain that RustFS should recognize: +L’adressage de type hôte virtuel place le nom du compartiment dans le nom d’hôte. Définissez `RUSTFS_SERVER_DOMAINS` avec chaque domaine de base que RustFS doit reconnaître : ```bash export RUSTFS_SERVER_DOMAINS="s3.example.com" ``` -The same object is then addressed as: +Le même objet est alors adressé ainsi : ```text https://my-bucket.s3.example.com/hello.txt ``` -Configure wildcard DNS, such as `*.s3.example.com`, to resolve to the RustFS endpoint. For HTTPS, the certificate must also cover the bucket hostnames. Bucket names containing dots may require explicit certificate names because a single-label wildcard does not span multiple labels. +Configurez un DNS générique, par exemple `*.s3.example.com`, pour qu’il pointe vers le point de terminaison RustFS. Pour HTTPS, le certificat doit aussi couvrir les noms d’hôte des compartiments. Les noms de compartiment qui contiennent des points peuvent exiger des noms de certificat explicites, car un caractère générique à un seul niveau ne couvre pas plusieurs niveaux. -:::warning[Configure the server domain] +:::warning[Configurez le domaine du serveur] -Do not send virtual-hosted-style requests unless `RUSTFS_SERVER_DOMAINS` is configured. RustFS otherwise treats requests as path-style and cannot derive the bucket from the hostname. +N’envoyez pas de requêtes en adressage de type hôte virtuel tant que `RUSTFS_SERVER_DOMAINS` n’est pas configuré. Sans cette configuration, RustFS traite les requêtes comme de l’adressage de type chemin et ne peut pas déduire le compartiment du nom d’hôte. ::: -### TLS and network access +### TLS et accès réseau -For production, set `RUSTFS_TLS_PATH` to a directory containing `rustfs_cert.pem` and `rustfs_key.pem`, then use an `https://` endpoint. Ensure clients trust the issuing certificate authority. +En production, définissez `RUSTFS_TLS_PATH` sur un répertoire qui contient `rustfs_cert.pem` et `rustfs_key.pem`, puis utilisez un point de terminaison `https://`. Assurez-vous que les clients font confiance à l’autorité de certification émettrice. -Allow the configured S3 API port through host firewalls and load balancers. The default is TCP port `9000`; this listener also carries RustFS administrative and internode traffic, so do not expose it anonymously without appropriate network and IAM controls. +Autorisez le port configuré de l’API S3 dans les pare-feu de l’hôte et les répartiteurs de charge. La valeur par défaut est le port TCP `9000` ; cet écouteur transporte aussi le trafic d’administration et le trafic inter-nœuds de RustFS. Ne l’exposez donc pas de façon anonyme sans les contrôles réseau et IAM appropriés. -## Usage +## Utilisation -The following examples use AWS CLI with the canonical local endpoint. Install and configure [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) before continuing. +Les exemples suivants utilisent AWS CLI avec le point de terminaison local canonique. Installez et configurez l’[AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) avant de continuer. -### Configure AWS CLI +### Configurer AWS CLI ```bash aws configure ``` -Enter these values when prompted: +Saisissez ces valeurs lorsque vous y êtes invité : ```text AWS Access Key ID [None]: @@ -114,13 +114,13 @@ Default region name [None]: us-east-1 Default output format [None]: json ``` -Pass the RustFS endpoint to every command. The custom endpoint keeps these examples on RustFS instead of AWS S3. +Passez le point de terminaison RustFS à chaque commande. Le point de terminaison personnalisé maintient ces exemples sur RustFS plutôt que sur AWS S3. ```bash export RUSTFS_ENDPOINT="http://localhost:9000" ``` -### Create and list buckets +### Créer et répertorier des compartiments ```bash aws --endpoint-url "$RUSTFS_ENDPOINT" s3api create-bucket \ @@ -129,7 +129,7 @@ aws --endpoint-url "$RUSTFS_ENDPOINT" s3api create-bucket \ aws --endpoint-url "$RUSTFS_ENDPOINT" s3api list-buckets ``` -### Upload and list objects +### Charger et répertorier des objets ```bash printf 'Hello from RustFS\n' > hello.txt @@ -141,9 +141,9 @@ aws --endpoint-url "$RUSTFS_ENDPOINT" s3 ls \ s3://my-bucket/path/to/ ``` -AWS CLI automatically uses multipart upload when its transfer configuration selects it for a large object. RustFS supports the standard multipart create, upload-part, complete, list, and abort workflows. +AWS CLI utilise automatiquement le chargement partitionné lorsque sa configuration de transfert le sélectionne pour un objet volumineux. RustFS prend en charge les flux standard de création, de chargement de partie, de finalisation, de listage et d’interruption d’un chargement partitionné. -### Download and inspect an object +### Télécharger et inspecter un objet ```bash aws --endpoint-url "$RUSTFS_ENDPOINT" s3 cp \ @@ -154,9 +154,9 @@ aws --endpoint-url "$RUSTFS_ENDPOINT" s3api head-object \ --key path/to/hello.txt ``` -### Create a presigned URL +### Créer une URL présignée -Generate a time-limited URL that can download an object without exposing credentials: +Générez une URL limitée dans le temps qui permet de télécharger un objet sans exposer les identifiants : ```bash aws --endpoint-url "$RUSTFS_ENDPOINT" s3 presign \ @@ -164,9 +164,9 @@ aws --endpoint-url "$RUSTFS_ENDPOINT" s3 presign \ --expires-in 3600 ``` -The hostname, scheme, port, region, and object path used by the recipient must match the values used to sign the URL. Use the externally reachable endpoint when generating URLs for another machine. +Le nom d’hôte, le schéma, le port, la région et le chemin d’objet utilisés par le destinataire doivent correspondre aux valeurs utilisées pour signer l’URL. Utilisez le point de terminaison accessible depuis l’extérieur lorsque vous générez des URL pour une autre machine. -### Delete objects and buckets +### Supprimer des objets et des compartiments ```bash aws --endpoint-url "$RUSTFS_ENDPOINT" s3 rm \ @@ -176,25 +176,25 @@ aws --endpoint-url "$RUSTFS_ENDPOINT" s3api delete-bucket \ --bucket my-bucket ``` -An S3 bucket must be empty before it can be deleted. +Un compartiment S3 doit être vide pour pouvoir être supprimé. -## Known compatibility differences +## Différences de compatibilité connues -Current RustFS compatibility tests cover the common workflows described above. The following areas are not equivalent to AWS S3 or MinIO: +Les tests de compatibilité actuels de RustFS couvrent les flux courants décrits ci-dessus. Les domaines suivants ne sont pas équivalents à AWS S3 ni à MinIO : -- Bucket access logging and bucket ownership controls are planned rather than complete. -- ACL authorization is intentionally unsupported. Canned ACL headers have partial compatibility, while XML grant policies return `NotImplemented`. Prefer IAM and bucket policies. -- POST Object form uploads are implemented, but checksum handling for that workflow is not complete. -- Some multipart upload listing and part-lookup edge cases are outside the default compatibility gate. -- S3 Select currently accepts only uncompressed input. -- Access Point and Outposts copy-source forms are not implemented. -- MinIO administrative APIs are a separate compatibility surface and should not be inferred from S3 data-plane support. +- La journalisation des accès aux compartiments et les contrôles de propriété des compartiments sont prévus, et non aboutis. +- L’autorisation par ACL est volontairement non prise en charge. Les en-têtes d’ACL prédéfinies ont une compatibilité partielle, tandis que les politiques d’octroi XML renvoient `NotImplemented`. Préférez IAM et les politiques de compartiment. +- Les chargements par formulaire POST Object sont implémentés, mais le traitement des sommes de contrôle de ce flux n’est pas abouti. +- Certains cas limites de listage des chargements partitionnés et de recherche de parties se trouvent en dehors du contrôle de compatibilité par défaut. +- S3 Select n’accepte actuellement que les données d’entrée non compressées. +- Les formes de source de copie Access Point et Outposts ne sont pas implémentées. +- Les API d’administration MinIO constituent une surface de compatibilité distincte et ne doivent pas être déduites de la prise en charge du plan de données S3. -Client behavior can also differ when a tool assumes AWS-specific services, storage classes, account ownership controls, or endpoint discovery. Always set the RustFS endpoint explicitly and test the exact operations your application uses. +Le comportement du client peut aussi différer lorsqu’un outil suppose des services propres à AWS, des classes de stockage, des contrôles de propriété de compte ou une découverte de point de terminaison. Définissez toujours explicitement le point de terminaison RustFS et testez les opérations exactes qu’utilise votre application. -## Next steps +## Étapes suivantes -- Follow the complete [AWS CLI example](/developer/examples/aws-cli). -- Choose an [S3 SDK](/developer/sdk) for application integration. -- Configure [credentials and access policies](/operations/credentials). -- Enable [TLS](/integration/tls-configured) before exposing the endpoint outside a trusted network. +- Suivez l’[exemple AWS CLI](/fr/developer/examples/aws-cli) complet. +- Choisissez un [SDK S3](/fr/developer/sdk) pour l’intégration dans une application. +- Configurez les [identifiants et les politiques d’accès](/fr/operations/credentials). +- Activez [TLS](/fr/integration/tls-configured) avant d’exposer le point de terminaison en dehors d’un réseau de confiance. diff --git a/content/fr/administration/protocols/sftp.md b/content/fr/administration/protocols/sftp.md index 3579364fd..9da2b2167 100644 --- a/content/fr/administration/protocols/sftp.md +++ b/content/fr/administration/protocols/sftp.md @@ -1,74 +1,74 @@ --- title: "SFTP" -description: "Build, configure, and use the RustFS SFTP gateway to access buckets and objects with SFTP clients." +description: "Compilez, configurez et utilisez la passerelle SFTP de RustFS pour accéder aux compartiments et aux objets avec des clients SFTP." --- -RustFS includes an SSH File Transfer Protocol (SFTP) gateway that exposes buckets and objects to SFTP clients over an encrypted SSH connection. You can list and create buckets and upload, download, rename, or delete objects while RustFS enforces the permissions of the authenticated Identity and Access Management (IAM) user. +RustFS inclut une passerelle SSH File Transfer Protocol (SFTP) qui expose les compartiments (buckets) et les objets aux clients SFTP sur une connexion SSH chiffrée. Vous pouvez répertorier et créer des compartiments, puis charger, télécharger, renommer ou supprimer des objets, tandis que RustFS applique les autorisations de l’utilisateur authentifié de la gestion des identités et des accès (IAM). -SFTP is an optional compile-time feature and is not included in the default RustFS build. Build RustFS with the `sftp` or `full` feature before enabling the listener. The listener is disabled at runtime by default. +SFTP est une fonctionnalité de compilation facultative et n’est pas incluse dans la compilation RustFS par défaut. Compilez RustFS avec la fonctionnalité `sftp` ou `full` avant d’activer l’écouteur. L’écouteur est désactivé par défaut à l’exécution. -## Overview +## Vue d’ensemble -The gateway maps SFTP paths to RustFS resources: +La passerelle associe les chemins SFTP aux ressources RustFS : -| SFTP path | RustFS resource | +| Chemin SFTP | Ressource RustFS | | --- | --- | -| `/` | All buckets visible to the authenticated user | -| `/my-bucket/` | The `my-bucket` bucket | -| `/my-bucket/hello.txt` | The `hello.txt` object in `my-bucket` | -| `/my-bucket/docs/hello.txt` | The `docs/hello.txt` object in `my-bucket` | +| `/` | Tous les compartiments visibles par l’utilisateur authentifié | +| `/my-bucket/` | Le compartiment `my-bucket` | +| `/my-bucket/hello.txt` | L’objet `hello.txt` dans `my-bucket` | +| `/my-bucket/docs/hello.txt` | L’objet `docs/hello.txt` dans `my-bucket` | -Creating or removing a directory directly below `/` creates or removes a bucket. Directories below a bucket map to object key prefixes and do not exist as independent filesystem directories. +La création ou la suppression d’un répertoire directement sous `/` crée ou supprime un compartiment. Les répertoires situés sous un compartiment correspondent à des préfixes de clé d’objet et n’existent pas comme répertoires de système de fichiers indépendants. -RustFS supports the following operations through the SFTP gateway: +RustFS prend en charge les opérations suivantes via la passerelle SFTP : -| SFTP operation | RustFS operation | +| Opération SFTP | Opération RustFS | | --- | --- | -| List `/` | List visible buckets | -| List a bucket or prefix | List objects and prefixes | -| `mkdir` at `/` | Create a bucket | -| `put` | Upload an object | -| `get` | Download an object | -| `rename` | Copy an object and then delete the source | -| `rm` | Delete an object | -| `rmdir` at `/` | Delete an empty bucket | +| Lister `/` | Répertorier les compartiments visibles | +| Lister un compartiment ou un préfixe | Répertorier les objets et les préfixes | +| `mkdir` à `/` | Créer un compartiment | +| `put` | Charger un objet | +| `get` | Télécharger un objet | +| `rename` | Copier un objet, puis supprimer la source | +| `rm` | Supprimer un objet | +| `rmdir` à `/` | Supprimer un compartiment vide | -Enter a RustFS access key as the SFTP username and its secret key as the password. RustFS checks the IAM user's S3 policies for every operation. +Saisissez une clé d’accès RustFS comme nom d’utilisateur SFTP et la clé secrète correspondante comme mot de passe. RustFS vérifie les politiques S3 de l’utilisateur IAM pour chaque opération. -:::warning[Password authentication only] +:::warning[Authentification par mot de passe uniquement] -The SFTP gateway does not support client public-key authentication or anonymous access. SSH host keys identify the server; they do not authenticate clients. Do not configure an `authorized_keys` file for RustFS SFTP. +La passerelle SFTP ne prend en charge ni l’authentification du client par clé publique ni l’accès anonyme. Les clés d’hôte SSH identifient le serveur ; elles n’authentifient pas les clients. Ne configurez pas de fichier `authorized_keys` pour le SFTP de RustFS. ::: ## Configuration -### Build with SFTP support +### Compiler avec la prise en charge de SFTP -Build RustFS with the SFTP feature: +Compilez RustFS avec la fonctionnalité SFTP : ```bash cargo build --release --features sftp ``` -To enable all optional RustFS features, including SFTP, use `--features full` instead. Setting `RUSTFS_SFTP_ENABLE=true` has no effect in a binary built without the `sftp` feature. +Pour activer toutes les fonctionnalités facultatives de RustFS, y compris SFTP, utilisez plutôt `--features full`. Définir `RUSTFS_SFTP_ENABLE=true` n’a aucun effet dans un binaire compilé sans la fonctionnalité `sftp`. -### SFTP variables +### Variables SFTP -| Variable | Description | Default | +| Variable | Description | Valeur par défaut | | --- | --- | --- | -| `RUSTFS_SFTP_ENABLE` | Enables the SFTP listener. | `false` | -| `RUSTFS_SFTP_ADDRESS` | Bind address for SFTP connections. | `0.0.0.0:2222` | -| `RUSTFS_SFTP_HOST_KEY_DIR` | Directory containing at least one unencrypted SSH private host key. Required when SFTP is enabled. | Not set | -| `RUSTFS_SFTP_READ_ONLY` | Rejects operations that modify buckets or objects. | `false` | -| `RUSTFS_SFTP_IDLE_TIMEOUT` | SSH inactivity timeout in seconds. Must be greater than zero. | `600` | -| `RUSTFS_SFTP_PART_SIZE` | Multipart upload part size in bytes. | `16777216` (16 MiB) | +| `RUSTFS_SFTP_ENABLE` | Active l’écouteur SFTP. | `false` | +| `RUSTFS_SFTP_ADDRESS` | Adresse d’écoute des connexions SFTP. | `0.0.0.0:2222` | +| `RUSTFS_SFTP_HOST_KEY_DIR` | Répertoire contenant au moins une clé d’hôte privée SSH non chiffrée. Obligatoire lorsque SFTP est activé. | Non définie | +| `RUSTFS_SFTP_READ_ONLY` | Rejette les opérations qui modifient les compartiments ou les objets. | `false` | +| `RUSTFS_SFTP_IDLE_TIMEOUT` | Délai d’inactivité SSH, en secondes. Doit être supérieur à zéro. | `600` | +| `RUSTFS_SFTP_PART_SIZE` | Taille des parties du chargement partitionné, en octets. | `16777216` (16 MiB) | -The default port `2222` avoids the privileged SSH port `22`. The address can use IPv4 or IPv6 syntax, for example `127.0.0.1:2222` or `[::]:2222`. +Le port par défaut `2222` évite le port SSH privilégié `22`. L’adresse peut utiliser la syntaxe IPv4 ou IPv6, par exemple `127.0.0.1:2222` ou `[::]:2222`. -### Prepare a host key +### Préparer une clé d’hôte -Create a persistent host-key directory and generate an Ed25519 host key: +Créez un répertoire persistant pour les clés d’hôte et générez une clé d’hôte Ed25519 : ```bash mkdir -p /path/to/sftp-keys @@ -78,19 +78,19 @@ ssh-keygen -t ed25519 \ chmod 600 /path/to/sftp-keys/ssh_host_ed25519_key* ``` -The host key must not use a passphrase. RustFS also accepts decodable ECDSA and RSA private host keys. +La clé d’hôte ne doit pas avoir de phrase secrète. RustFS accepte aussi les clés d’hôte privées ECDSA et RSA décodables. -On Unix, every regular file in the host-key directory must be accessible only by its owner. The `ssh-keygen` command also creates a `.pub` file; either keep it with owner-only permissions as shown or remove it because RustFS does not read it. RustFS refuses to start if the directory is missing, contains no usable private key, or contains a regular file with group or other permission bits set. +Sous Unix, chaque fichier ordinaire du répertoire de clés d’hôte ne doit être accessible que par son propriétaire. La commande `ssh-keygen` crée aussi un fichier `.pub` ; conservez-le avec des droits limités au propriétaire, comme indiqué, ou retirez-le, car RustFS ne le lit pas. RustFS refuse de démarrer si le répertoire est absent, s’il ne contient aucune clé privée utilisable, ou s’il contient un fichier ordinaire dont des bits de permission de groupe ou des autres sont positionnés. -:::warning[Protect the host key] +:::warning[Protégez la clé d’hôte] -Keep the same host key across restarts so clients can verify the server identity. Restrict access to the account that runs RustFS and back up the key securely. A changed host key causes clients to display a possible man-in-the-middle warning. +Conservez la même clé d’hôte d’un redémarrage à l’autre, afin que les clients puissent vérifier l’identité du serveur. Limitez l’accès au compte qui exécute RustFS et sauvegardez la clé de façon sûre. Une clé d’hôte modifiée amène les clients à afficher un avertissement de possible attaque de l’homme du milieu (man-in-the-middle). ::: -### Start the SFTP listener +### Démarrer l’écouteur SFTP -The following example starts SFTP on the loopback interface for local testing: +L’exemple suivant démarre SFTP sur l’interface de bouclage pour un test local : ```bash export RUSTFS_SFTP_ENABLE=true @@ -102,23 +102,23 @@ export RUSTFS_SECRET_KEY= rustfs /path/to/data ``` -For remote connections, bind to an appropriate network interface and allow inbound TCP traffic to the configured SFTP port. This listener is separate from the S3 API and Console listeners. +Pour les connexions distantes, liez l’écouteur à une interface réseau appropriée et autorisez le trafic TCP entrant vers le port SFTP configuré. Cet écouteur est distinct de ceux de l’API S3 et de la Console. -## Usage +## Utilisation -The following examples use the OpenSSH `sftp` client, the canonical `my-bucket` and `hello.txt` names, and a local listener on port `2222`. +Les exemples suivants utilisent le client `sftp` d’OpenSSH, les noms canoniques `my-bucket` et `hello.txt`, ainsi qu’un écouteur local sur le port `2222`. -### Connect +### Connexion ```bash sftp -P 2222 @127.0.0.1 ``` -Enter the RustFS secret key when prompted for the password. On the first connection, verify the displayed host-key fingerprint before accepting it. +Saisissez la clé secrète RustFS lorsque le mot de passe est demandé. Lors de la première connexion, vérifiez l’empreinte de clé d’hôte affichée avant de l’accepter. -### List and create buckets +### Répertorier et créer des compartiments -At the `sftp` prompt, list the buckets visible to the IAM user and create `my-bucket`: +À l’invite `sftp`, répertoriez les compartiments visibles par l’utilisateur IAM et créez `my-bucket` : ```text sftp> ls / @@ -126,11 +126,11 @@ sftp> mkdir /my-bucket sftp> cd /my-bucket ``` -Bucket names must follow the same naming rules as buckets created through the S3 API. Files cannot be created directly under `/`. +Les noms de compartiment doivent suivre les mêmes règles de nommage que les compartiments créés via l’API S3. Aucun fichier ne peut être créé directement sous `/`. -### Upload and download an object +### Charger et télécharger un objet -Upload `/path/to/hello.txt`, list the bucket, and download the object: +Chargez `/path/to/hello.txt`, répertoriez le compartiment, puis téléchargez l’objet : ```text sftp> put /path/to/hello.txt /my-bucket/hello.txt @@ -138,44 +138,44 @@ sftp> ls /my-bucket sftp> get /my-bucket/hello.txt hello.txt ``` -Uploads must be sequential from the beginning of the file. Resume, append, in-place edits, and segmented multi-connection uploads of one object are not supported. +Les chargements doivent être séquentiels, depuis le début du fichier. La reprise, l’ajout, la modification sur place et les chargements segmentés sur plusieurs connexions d’un même objet ne sont pas pris en charge. -### Rename an object +### Renommer un objet ```text sftp> rename /my-bucket/hello.txt /my-bucket/greeting.txt ``` -RustFS implements rename as a server-side copy followed by deletion of the source. The operation is not atomic, and renaming a bucket is not supported. The IAM user needs permission to read and delete the source and to write the destination. +RustFS implémente le renommage comme une copie côté serveur suivie de la suppression de la source. L’opération n’est pas atomique, et le renommage d’un compartiment n’est pas pris en charge. L’utilisateur IAM doit être autorisé à lire et à supprimer la source, ainsi qu’à écrire la destination. -### Delete an object and bucket +### Supprimer un objet et un compartiment -Delete the object and then remove the empty bucket: +Supprimez l’objet, puis retirez le compartiment vide : ```text sftp> rm /my-bucket/greeting.txt sftp> rmdir /my-bucket ``` -RustFS does not recursively delete a non-empty bucket through SFTP. +RustFS ne supprime pas récursivement un compartiment non vide via SFTP. -### Connect a desktop client +### Connecter un client de bureau -Use these settings in graphical clients such as FileZilla, Cyberduck, or WinSCP: +Utilisez ces paramètres dans les clients graphiques tels que FileZilla, Cyberduck ou WinSCP : -| Setting | Value | +| Paramètre | Valeur | | --- | --- | -| Protocol | SFTP (SSH File Transfer Protocol) | -| Host | Your RustFS SFTP hostname | -| Port | `2222`, or the port in `RUSTFS_SFTP_ADDRESS` | -| Username | RustFS access key | -| Password | RustFS secret key | -| Authentication | Password | +| Protocole | SFTP (SSH File Transfer Protocol) | +| Hôte | Votre nom d’hôte SFTP RustFS | +| Port | `2222`, ou le port indiqué dans `RUSTFS_SFTP_ADDRESS` | +| Nom d’utilisateur | Clé d’accès RustFS | +| Mot de passe | Clé secrète RustFS | +| Authentification | Mot de passe | -Configure the client for whole-file, single-connection uploads. Symbolic links and POSIX ownership, permission, or timestamp changes are not supported because the gateway maps SFTP operations to object storage. +Configurez le client pour des chargements de fichiers complets sur une seule connexion. Les liens symboliques ainsi que les modifications de propriétaire, de permissions ou d’horodatage POSIX ne sont pas pris en charge, car la passerelle traduit les opérations SFTP en stockage objet. -## Next steps +## Étapes suivantes -- [Manage credentials](/operations/credentials) -- [Check service status](/operations/status-check) -- [Configure lifecycle management](/administration/data/lifecycle-management) \ No newline at end of file +- [Gérer les identifiants](/fr/operations/credentials) +- [Vérifier l’état du service](/fr/operations/status-check) +- [Configurer la gestion du cycle de vie](/fr/administration/data/lifecycle-management) diff --git a/content/fr/administration/protocols/swift.md b/content/fr/administration/protocols/swift.md index d038c42fc..353018361 100644 --- a/content/fr/administration/protocols/swift.md +++ b/content/fr/administration/protocols/swift.md @@ -9,7 +9,7 @@ RustFS peut exposer une API compatible avec OpenStack Swift sur le même point d La prise en charge de Swift est facultative et ne couvre pas tous les comportements d’OpenStack Swift. Les requêtes `HEAD` au niveau du compte et les formats de liste autres que JSON ne sont pas implémentés. Validez le fonctionnement de votre client avant d’utiliser cette API en production. -:: : +::: ## Correspondance entre Swift et RustFS diff --git a/content/fr/administration/protocols/webdav.md b/content/fr/administration/protocols/webdav.md index ab6a80ff7..bc42973f7 100644 --- a/content/fr/administration/protocols/webdav.md +++ b/content/fr/administration/protocols/webdav.md @@ -1,66 +1,66 @@ --- title: "WebDAV" -description: "Configure the RustFS WebDAV gateway and access buckets and objects with WebDAV clients." +description: "Configurez la passerelle WebDAV de RustFS et accédez aux compartiments et aux objets avec des clients WebDAV." --- -RustFS includes a Web Distributed Authoring and Versioning (WebDAV) gateway that exposes buckets and objects to WebDAV clients over HTTP or HTTPS. You can browse buckets, create collections, and upload, download, rename, or delete objects while RustFS enforces the permissions of the authenticated Identity and Access Management (IAM) user. +RustFS inclut une passerelle Web Distributed Authoring and Versioning (WebDAV) qui expose les compartiments (buckets) et les objets aux clients WebDAV sur HTTP ou HTTPS. Vous pouvez parcourir les compartiments, créer des collections, puis charger, télécharger, renommer ou supprimer des objets, tandis que RustFS applique les autorisations de l’utilisateur authentifié de la gestion des identités et des accès (IAM). -WebDAV support is compiled into the standard RustFS binary, but the gateway is disabled at runtime by default. You must enable and configure it before connecting a client. +La prise en charge de WebDAV est compilée dans le binaire RustFS standard, mais la passerelle est désactivée par défaut à l’exécution. Vous devez l’activer et la configurer avant de connecter un client. -## Overview +## Vue d’ensemble -The gateway maps WebDAV paths to RustFS resources: +La passerelle associe les chemins WebDAV aux ressources RustFS : -| WebDAV path | RustFS resource | +| Chemin WebDAV | Ressource RustFS | | --- | --- | -| `/` | All buckets visible to the authenticated user | -| `/my-bucket/` | The `my-bucket` bucket | -| `/my-bucket/hello.txt` | The `hello.txt` object in `my-bucket` | -| `/my-bucket/docs/hello.txt` | The `docs/hello.txt` object in `my-bucket` | +| `/` | Tous les compartiments visibles par l’utilisateur authentifié | +| `/my-bucket/` | Le compartiment `my-bucket` | +| `/my-bucket/hello.txt` | L’objet `hello.txt` dans `my-bucket` | +| `/my-bucket/docs/hello.txt` | L’objet `docs/hello.txt` dans `my-bucket` | -RustFS supports the following operations through the gateway: +RustFS prend en charge les opérations suivantes via la passerelle : -| Method | Operation | +| Méthode | Opération | | --- | --- | -| `PROPFIND` | List buckets or objects and read metadata | -| `MKCOL` | Create a bucket or a directory prefix | -| `PUT` | Upload an object | -| `GET` | Download an object | -| `HEAD` | Read object metadata | -| `MOVE` | Rename or move an object or directory | -| `DELETE` | Delete an object, directory, or bucket | +| `PROPFIND` | Répertorier les compartiments ou les objets, et lire les métadonnées | +| `MKCOL` | Créer un compartiment ou un préfixe de répertoire | +| `PUT` | Charger un objet | +| `GET` | Télécharger un objet | +| `HEAD` | Lire les métadonnées d’un objet | +| `MOVE` | Renommer ou déplacer un objet ou un répertoire | +| `DELETE` | Supprimer un objet, un répertoire ou un compartiment | -Use `PROPFIND`, not `GET`, to list a collection. The current gateway returns `405 Method Not Allowed` for `GET` requests to directories. +Utilisez `PROPFIND`, et non `GET`, pour répertorier une collection. La passerelle actuelle renvoie `405 Method Not Allowed` pour les requêtes `GET` vers des répertoires. -WebDAV uses HTTP Basic authentication. Enter a RustFS access key as the username and its secret key as the password. The gateway authenticates the credentials against RustFS IAM and applies the user's S3 policies to each operation. +WebDAV utilise l’authentification HTTP Basic. Saisissez une clé d’accès RustFS comme nom d’utilisateur et la clé secrète correspondante comme mot de passe. La passerelle authentifie les identifiants auprès de l’IAM RustFS et applique les politiques S3 de l’utilisateur à chaque opération. -:::warning[Protect credentials] +:::warning[Protégez les identifiants] -Basic authentication does not encrypt credentials. Disable TLS only for isolated local testing. Use HTTPS for every remote or production connection. +L’authentification Basic ne chiffre pas les identifiants. Ne désactivez TLS que pour des tests locaux isolés. Utilisez HTTPS pour toute connexion distante ou de production. ::: ## Configuration -Configure the gateway with environment variables before starting RustFS: +Configurez la passerelle avec des variables d’environnement avant de démarrer RustFS : -| Variable | Description | Default | +| Variable | Description | Valeur par défaut | | --- | --- | --- | -| `RUSTFS_WEBDAV_ENABLE` | Enables the WebDAV gateway. | `false` | -| `RUSTFS_WEBDAV_ADDRESS` | Bind address for WebDAV connections. | `0.0.0.0:8080` | -| `RUSTFS_WEBDAV_TLS_ENABLED` | Enables TLS for the WebDAV listener. | `true` | -| `RUSTFS_WEBDAV_CERTS_DIR` | Certificate directory used by the RustFS TLS runtime. Required when TLS is enabled. | Not set | -| `RUSTFS_WEBDAV_MAX_BODY_SIZE` | Maximum request body size in bytes. Must be greater than zero. | `5368709120` (5 GiB) | +| `RUSTFS_WEBDAV_ENABLE` | Active la passerelle WebDAV. | `false` | +| `RUSTFS_WEBDAV_ADDRESS` | Adresse d’écoute des connexions WebDAV. | `0.0.0.0:8080` | +| `RUSTFS_WEBDAV_TLS_ENABLED` | Active TLS pour l’écouteur WebDAV. | `true` | +| `RUSTFS_WEBDAV_CERTS_DIR` | Répertoire de certificats utilisé par le moteur TLS de RustFS. Obligatoire lorsque TLS est activé. | Non définie | +| `RUSTFS_WEBDAV_MAX_BODY_SIZE` | Taille maximale du corps de requête, en octets. Doit être supérieure à zéro. | `5368709120` (5 GiB) | -The standard RustFS build enables the WebDAV compile-time feature. If you build RustFS with `--no-default-features`, include the feature explicitly: +La compilation RustFS standard active la fonctionnalité de compilation WebDAV. Si vous compilez RustFS avec `--no-default-features`, incluez la fonctionnalité explicitement : ```bash cargo build --release --features webdav ``` -### Local testing without TLS +### Tests locaux sans TLS -The following example starts RustFS with an HTTP WebDAV listener on port `8080`: +L’exemple suivant démarre RustFS avec un écouteur WebDAV en HTTP sur le port `8080` : ```bash export RUSTFS_WEBDAV_ENABLE=true @@ -72,11 +72,11 @@ export RUSTFS_SECRET_KEY= rustfs /path/to/data ``` -Binding to `127.0.0.1` prevents other hosts from connecting to the unencrypted test endpoint. +La liaison à `127.0.0.1` empêche les autres hôtes de se connecter au point de terminaison de test non chiffré. ### HTTPS -For a remote or production connection, enable TLS and provide a certificate directory: +Pour une connexion distante ou de production, activez TLS et indiquez un répertoire de certificats : ```bash export RUSTFS_WEBDAV_ENABLE=true @@ -87,15 +87,15 @@ export RUSTFS_WEBDAV_CERTS_DIR=/path/to/certs rustfs /path/to/data ``` -If TLS is enabled without `RUSTFS_WEBDAV_CERTS_DIR`, or the directory does not exist, WebDAV initialization fails. See [Configure TLS](/integration/tls-configured) for certificate preparation guidance. +Si TLS est activé sans `RUSTFS_WEBDAV_CERTS_DIR`, ou si le répertoire n’existe pas, l’initialisation de WebDAV échoue. Consultez [Configurer TLS](/fr/integration/tls-configured) pour préparer les certificats. -Allow inbound TCP traffic to the configured WebDAV port. This listener is separate from the S3 API and Console listeners. +Autorisez le trafic TCP entrant vers le port WebDAV configuré. Cet écouteur est distinct de ceux de l’API S3 et de la Console. -## Usage +## Utilisation -The following commands use an HTTP endpoint for local testing. Replace the endpoint and credentials with your HTTPS WebDAV endpoint and an IAM user that has the required bucket and object permissions. +Les commandes suivantes utilisent un point de terminaison HTTP pour les tests locaux. Remplacez le point de terminaison et les identifiants par votre point de terminaison WebDAV HTTPS et par un utilisateur IAM disposant des autorisations requises sur les compartiments et les objets. -Set reusable shell variables without placing the secret directly in each command: +Définissez des variables shell réutilisables sans placer le secret directement dans chaque commande : ```bash export WEBDAV_URL=http://127.0.0.1:8080 @@ -104,9 +104,9 @@ read -s WEBDAV_PASSWORD export WEBDAV_PASSWORD ``` -### List buckets +### Répertorier les compartiments -Send `PROPFIND` with `Depth: 1` to list the buckets visible to the user: +Envoyez `PROPFIND` avec `Depth: 1` pour répertorier les compartiments visibles par l’utilisateur : ```bash curl --user "$WEBDAV_USER:$WEBDAV_PASSWORD" \ @@ -115,7 +115,7 @@ curl --user "$WEBDAV_USER:$WEBDAV_PASSWORD" \ "$WEBDAV_URL/" ``` -### Create a bucket +### Créer un compartiment ```bash curl --user "$WEBDAV_USER:$WEBDAV_PASSWORD" \ @@ -123,11 +123,11 @@ curl --user "$WEBDAV_USER:$WEBDAV_PASSWORD" \ "$WEBDAV_URL/my-bucket/" ``` -Bucket names must follow the same naming rules as buckets created through the S3 API. +Les noms de compartiment doivent suivre les mêmes règles de nommage que les compartiments créés via l’API S3. -### Upload and download an object +### Charger et télécharger un objet -Upload `/path/to/hello.txt`: +Chargez `/path/to/hello.txt` : ```bash curl --user "$WEBDAV_USER:$WEBDAV_PASSWORD" \ @@ -135,7 +135,7 @@ curl --user "$WEBDAV_USER:$WEBDAV_PASSWORD" \ "$WEBDAV_URL/my-bucket/hello.txt" ``` -Download the object: +Téléchargez l’objet : ```bash curl --user "$WEBDAV_USER:$WEBDAV_PASSWORD" \ @@ -143,9 +143,9 @@ curl --user "$WEBDAV_USER:$WEBDAV_PASSWORD" \ "$WEBDAV_URL/my-bucket/hello.txt" ``` -### Create and list a directory +### Créer et répertorier un répertoire -WebDAV directories below a bucket map to object key prefixes: +Les répertoires WebDAV situés sous un compartiment correspondent à des préfixes de clé d’objet : ```bash curl --user "$WEBDAV_USER:$WEBDAV_PASSWORD" \ @@ -158,9 +158,9 @@ curl --user "$WEBDAV_USER:$WEBDAV_PASSWORD" \ "$WEBDAV_URL/my-bucket/docs/" ``` -### Rename an object +### Renommer un objet -Use `MOVE` with a destination path on the same WebDAV endpoint: +Utilisez `MOVE` avec un chemin de destination sur le même point de terminaison WebDAV : ```bash curl --user "$WEBDAV_USER:$WEBDAV_PASSWORD" \ @@ -169,11 +169,11 @@ curl --user "$WEBDAV_USER:$WEBDAV_PASSWORD" \ "$WEBDAV_URL/my-bucket/hello.txt" ``` -The IAM user needs permission to read and delete the source and to write the destination. If authorization fails, RustFS leaves the source unchanged. +L’utilisateur IAM doit être autorisé à lire et à supprimer la source, ainsi qu’à écrire la destination. Si l’autorisation échoue, RustFS laisse la source inchangée. -### Delete an object or bucket +### Supprimer un objet ou un compartiment -Delete an object: +Supprimez un objet : ```bash curl --user "$WEBDAV_USER:$WEBDAV_PASSWORD" \ @@ -181,7 +181,7 @@ curl --user "$WEBDAV_USER:$WEBDAV_PASSWORD" \ "$WEBDAV_URL/my-bucket/greeting.txt" ``` -Delete the bucket after removing its contents: +Supprimez le compartiment après en avoir retiré le contenu : ```bash curl --user "$WEBDAV_USER:$WEBDAV_PASSWORD" \ @@ -189,20 +189,20 @@ curl --user "$WEBDAV_USER:$WEBDAV_PASSWORD" \ "$WEBDAV_URL/my-bucket/" ``` -### Connect a desktop client +### Connecter un client de bureau -Use the WebDAV endpoint in a client that supports Basic authentication: +Utilisez le point de terminaison WebDAV dans un client qui prend en charge l’authentification Basic : -| Client | Connection address | +| Client | Adresse de connexion | | --- | --- | -| GNOME Files | `dav://:8080/` for HTTP or `davs://:8080/` for HTTPS | -| macOS Finder | `http://:8080/` or `https://:8080/` | +| GNOME Files | `dav://:8080/` pour HTTP ou `davs://:8080/` pour HTTPS | +| macOS Finder | `http://:8080/` ou `https://:8080/` | | Windows File Explorer | `https://:8080/` | -Enter the RustFS access key and secret key when the client prompts for credentials. Client behavior and supported WebDAV methods vary; use `curl` to isolate server-side errors when troubleshooting. +Saisissez la clé d’accès et la clé secrète RustFS lorsque le client demande les identifiants. Le comportement du client et les méthodes WebDAV prises en charge varient ; utilisez `curl` pour isoler les erreurs côté serveur lors du dépannage. -## Next steps +## Étapes suivantes -- [Manage credentials](/operations/credentials) -- [Configure TLS](/integration/tls-configured) -- [Check service status](/operations/status-check) \ No newline at end of file +- [Gérer les identifiants](/fr/operations/credentials) +- [Configurer TLS](/fr/integration/tls-configured) +- [Vérifier l’état du service](/fr/operations/status-check) diff --git a/content/fr/developer/examples/aws-cli.md b/content/fr/developer/examples/aws-cli.md index 2e7dad35b..a69c54da3 100644 --- a/content/fr/developer/examples/aws-cli.md +++ b/content/fr/developer/examples/aws-cli.md @@ -1,21 +1,21 @@ --- title: "AWS CLI" -description: "Connect the AWS CLI to RustFS and perform basic object operations." +description: "Connectez l’AWS CLI à RustFS et effectuez des opérations objet de base." --- -The [AWS CLI](https://docs.aws.amazon.com/cli/) is Amazon's official command-line tool for S3, and it works with RustFS via the `--endpoint-url` flag. +L’[AWS CLI](https://docs.aws.amazon.com/cli/) est l’outil en ligne de commande officiel d’Amazon pour S3. Il fonctionne avec RustFS grâce à l’option `--endpoint-url`. -## Install +## Installation -Follow the [official install guide](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html), or on macOS: +Suivez le [guide d’installation officiel](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) ou, sous macOS : ```bash brew install awscli ``` -## Configure +## Configuration -Set your [access keys](../../security-compliance/iam/access-token.md) and region: +Définissez vos [clés d’accès](../../security-compliance/iam/access-token.md) et la région : ```bash aws configure @@ -28,17 +28,17 @@ Default region name [None]: us-east-1 Default output format [None]: json ``` -Pass your RustFS address with `--endpoint-url` on every command. Replace `http://localhost:9000` with your server address. When `--endpoint-url` is set, the AWS CLI uses path-style addressing, which is what RustFS requires. +Indiquez l’adresse de RustFS avec `--endpoint-url` dans chaque commande. Remplacez `http://localhost:9000` par l’adresse de votre serveur. Lorsque `--endpoint-url` est défini, l’AWS CLI utilise l’adressage de type chemin (path-style), ce que RustFS exige. :::note -If you did not set credentials at install, the local-test default is `rustfsadmin` / `rustfsadmin` — never use it beyond a throwaway local trial. +Si vous n’avez pas défini d’identifiants à l’installation, la valeur par défaut pour un essai local est `rustfsadmin` / `rustfsadmin`. Ne l’utilisez jamais au-delà d’un essai local jetable. ::: -## Verify +## Vérification -Create a bucket: +Créez un compartiment (bucket) : ```bash aws s3 mb s3://my-bucket --endpoint-url http://localhost:9000 @@ -48,7 +48,7 @@ aws s3 mb s3://my-bucket --endpoint-url http://localhost:9000 make_bucket: my-bucket ``` -Upload a file: +Chargez (upload) un fichier : ```bash aws s3 cp /path/to/hello.txt s3://my-bucket/ --endpoint-url http://localhost:9000 @@ -58,7 +58,7 @@ aws s3 cp /path/to/hello.txt s3://my-bucket/ --endpoint-url http://localhost:900 upload: ../path/to/hello.txt to s3://my-bucket/hello.txt ``` -List the bucket: +Listez le compartiment : ```bash aws s3 ls s3://my-bucket --endpoint-url http://localhost:9000 @@ -68,6 +68,6 @@ aws s3 ls s3://my-bucket --endpoint-url http://localhost:9000 2026-07-15 10:30:00 12 hello.txt ``` -## Next steps +## Étapes suivantes -Build applications against RustFS with an [S3 SDK](../sdk/index.md), or manage objects with [`rc`](/operations/rc). +Développez des applications qui s’appuient sur RustFS avec un [SDK S3](../sdk/index.md), ou gérez les objets avec [`rc`](/fr/operations/rc). diff --git a/content/fr/developer/examples/aws-sdk-go.md b/content/fr/developer/examples/aws-sdk-go.md index 70958b90c..488465ab7 100644 --- a/content/fr/developer/examples/aws-sdk-go.md +++ b/content/fr/developer/examples/aws-sdk-go.md @@ -1,11 +1,11 @@ --- -title: "AWS SDK for Go" -description: "Connect the AWS SDK for Go v2 to RustFS and perform basic object operations." +title: "AWS SDK pour Go" +description: "Connectez l’AWS SDK pour Go v2 à RustFS et effectuez des opérations objet de base." --- -The [AWS SDK for Go v2](https://aws.github.io/aws-sdk-go-v2/docs/) connects to RustFS through a custom base endpoint. This is the minimal connection recipe; see the [Go SDK guide](../sdk/go.md) for a full program. +L’[AWS SDK pour Go v2](https://aws.github.io/aws-sdk-go-v2/docs/) se connecte à RustFS par un point de terminaison de base personnalisé. Voici la recette de connexion minimale ; le [guide du SDK Go](../sdk/go.md) présente un programme complet. -## Install +## Installation ```bash go get github.com/aws/aws-sdk-go-v2/aws @@ -13,9 +13,9 @@ go get github.com/aws/aws-sdk-go-v2/credentials go get github.com/aws/aws-sdk-go-v2/service/s3 ``` -## Configure +## Configuration -Replace `http://localhost:9000` with your server address and use your own [access keys](../../security-compliance/iam/access-token.md). RustFS requires path-style addressing (`UsePathStyle: true`): +Remplacez `http://localhost:9000` par l’adresse de votre serveur et utilisez vos propres [clés d’accès](../../security-compliance/iam/access-token.md). RustFS exige l’adressage de type chemin (path-style) (`UsePathStyle: true`) : ```go {9,11} import ( @@ -34,7 +34,7 @@ client := s3.NewFromConfig(cfg, func(o *s3.Options) { }) ``` -## Verify +## Vérification ```go ctx := context.Background() @@ -50,6 +50,6 @@ for _, b := range out.Buckets { my-bucket ``` -## Next steps +## Étapes suivantes -See the full [Go SDK guide](../sdk/go.md), or manage objects with [`rc`](/operations/rc). +Consultez le [guide complet du SDK Go](../sdk/go.md), ou gérez les objets avec [`rc`](/fr/operations/rc). diff --git a/content/fr/developer/examples/aws-sdk-js.md b/content/fr/developer/examples/aws-sdk-js.md index 408757a10..248fbf9cb 100644 --- a/content/fr/developer/examples/aws-sdk-js.md +++ b/content/fr/developer/examples/aws-sdk-js.md @@ -1,19 +1,19 @@ --- -title: "AWS SDK for JavaScript" -description: "Connect the AWS SDK for JavaScript v3 to RustFS and perform basic object operations from Node.js." +title: "AWS SDK pour JavaScript" +description: "Connectez l’AWS SDK pour JavaScript v3 à RustFS et effectuez des opérations objet de base depuis Node.js." --- -The [AWS SDK for JavaScript v3](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/) connects to RustFS through a custom endpoint. This is the minimal connection recipe; see the [JavaScript SDK guide](../sdk/javascript.md) for a full program. +L’[AWS SDK pour JavaScript v3](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/) se connecte à RustFS par un point de terminaison personnalisé. Voici la recette de connexion minimale ; le [guide du SDK JavaScript](../sdk/javascript.md) présente un programme complet. -## Install +## Installation ```bash npm install @aws-sdk/client-s3 ``` -## Configure +## Configuration -Replace `http://localhost:9000` with your server address and use your own [access keys](../../security-compliance/iam/access-token.md). RustFS requires path-style addressing (`forcePathStyle: true`): +Remplacez `http://localhost:9000` par l’adresse de votre serveur et utilisez vos propres [clés d’accès](../../security-compliance/iam/access-token.md). RustFS exige l’adressage de type chemin (path-style) (`forcePathStyle: true`) : ```javascript title="index.mjs" {8} import { S3Client, CreateBucketCommand, PutObjectCommand, ListObjectsV2Command } from "@aws-sdk/client-s3"; @@ -27,7 +27,7 @@ const s3 = new S3Client({ }); ``` -## Verify +## Vérification ```javascript await s3.send(new CreateBucketCommand({ Bucket: "my-bucket" })); @@ -41,6 +41,6 @@ for (const obj of out.Contents ?? []) console.log(obj.Key, obj.Size); hello.txt 12 ``` -## Next steps +## Étapes suivantes -See the full [JavaScript SDK guide](../sdk/javascript.md), or manage objects with [`rc`](/operations/rc). +Consultez le [guide complet du SDK JavaScript](../sdk/javascript.md), ou gérez les objets avec [`rc`](/fr/operations/rc). diff --git a/content/fr/developer/examples/boto3.md b/content/fr/developer/examples/boto3.md index 99b812712..93f48812a 100644 --- a/content/fr/developer/examples/boto3.md +++ b/content/fr/developer/examples/boto3.md @@ -1,19 +1,19 @@ --- title: "boto3 (Python)" -description: "Connect boto3 to RustFS and perform basic object operations from Python." +description: "Connectez boto3 à RustFS et effectuez des opérations objet de base depuis Python." --- -[boto3](https://boto3.amazonaws.com/v1/documentation/api/latest/index.html) is the AWS SDK for Python and connects to RustFS through a custom endpoint. +[boto3](https://boto3.amazonaws.com/v1/documentation/api/latest/index.html) est le SDK AWS pour Python. Il se connecte à RustFS par un point de terminaison personnalisé. -## Install +## Installation ```bash pip install boto3 ``` -## Configure +## Configuration -Point the client at your RustFS endpoint. Replace `http://localhost:9000` with your server address, and use your own [access keys](../../security-compliance/iam/access-token.md). RustFS requires path-style addressing, set via botocore `Config`: +Pointez le client vers votre point de terminaison RustFS. Remplacez `http://localhost:9000` par l’adresse de votre serveur et utilisez vos propres [clés d’accès](../../security-compliance/iam/access-token.md). RustFS exige l’adressage de type chemin (path-style), défini via le `Config` de botocore : ```python import boto3 @@ -29,9 +29,9 @@ s3 = boto3.client( ) ``` -## Verify +## Vérification -Create a bucket, upload a file, and list the bucket: +Créez un compartiment (bucket), chargez (upload) un fichier et listez le compartiment : ```python s3.create_bucket(Bucket="my-bucket") @@ -42,12 +42,12 @@ for obj in s3.list_objects_v2(Bucket="my-bucket").get("Contents", []): print(obj["Key"], obj["Size"]) ``` -Expected output: +Sortie attendue : ```text hello.txt 12 ``` -## Next steps +## Étapes suivantes -See the [S3 SDK overview](../sdk/index.md) for more languages, or manage objects with [`rc`](/operations/rc). If you prefer a community-driven SDK with native async support and full typing, see [capo (Python)](../integration/others/capo.md). +Consultez la [présentation des SDK S3](../sdk/index.md) pour d’autres langages, ou gérez les objets avec [`rc`](/fr/operations/rc). Si vous préférez un SDK communautaire avec une prise en charge asynchrone native et un typage complet, consultez [capo (Python)](../integration/others/capo.md). diff --git a/content/fr/developer/examples/rclone.md b/content/fr/developer/examples/rclone.md index b93bedbf9..4b03208bc 100644 --- a/content/fr/developer/examples/rclone.md +++ b/content/fr/developer/examples/rclone.md @@ -1,21 +1,21 @@ --- title: "rclone" -description: "Connect rclone to RustFS and perform basic object operations." +description: "Connectez rclone à RustFS et effectuez des opérations objet de base." --- -[rclone](https://rclone.org/) is a command-line program for syncing files with cloud storage and speaks the S3 protocol that RustFS implements. +[rclone](https://rclone.org/) est un programme en ligne de commande qui synchronise des fichiers avec un stockage cloud et utilise le protocole S3 implémenté par RustFS. -## Install +## Installation ```bash curl https://rclone.org/install.sh | sudo bash ``` -Or see the [official install guide](https://rclone.org/install/). +Vous pouvez aussi consulter le [guide d’installation officiel](https://rclone.org/install/). -## Configure +## Configuration -Add a remote to `~/.config/rclone/rclone.conf`. Replace `http://localhost:9000` with your server address, and use your own [access keys](../../security-compliance/iam/access-token.md). `force_path_style = true` is required because RustFS uses path-style addressing: +Ajoutez une cible distante dans `~/.config/rclone/rclone.conf`. Remplacez `http://localhost:9000` par l’adresse de votre serveur et utilisez vos propres [clés d’accès](../../security-compliance/iam/access-token.md). `force_path_style = true` est obligatoire, car RustFS utilise l’adressage de type chemin (path-style) : ```ini title="~/.config/rclone/rclone.conf" [rustfs] @@ -28,21 +28,21 @@ region = us-east-1 force_path_style = true ``` -## Verify +## Vérification -Create a bucket: +Créez un compartiment (bucket) : ```bash rclone mkdir rustfs:my-bucket ``` -Upload a file: +Chargez (upload) un fichier : ```bash rclone copy /path/to/hello.txt rustfs:my-bucket ``` -List buckets and contents: +Listez les compartiments et leur contenu : ```bash rclone lsd rustfs: @@ -54,6 +54,6 @@ rclone ls rustfs:my-bucket 12 hello.txt ``` -## Next steps +## Étapes suivantes -Build applications against RustFS with an [S3 SDK](../sdk/index.md), or manage objects with [`rc`](/operations/rc). +Développez des applications qui s’appuient sur RustFS avec un [SDK S3](../sdk/index.md), ou gérez les objets avec [`rc`](/fr/operations/rc). diff --git a/content/fr/developer/examples/s3cmd.md b/content/fr/developer/examples/s3cmd.md index 16fbf31c0..bcb8b9bdb 100644 --- a/content/fr/developer/examples/s3cmd.md +++ b/content/fr/developer/examples/s3cmd.md @@ -1,11 +1,11 @@ --- title: "s3cmd" -description: "Connect s3cmd to RustFS and perform basic object operations from the command line." +description: "Connectez s3cmd à RustFS et effectuez des opérations objet de base depuis la ligne de commande." --- -[s3cmd](https://s3tools.org/s3cmd) is a command-line client for S3-compatible storage. Point it at your RustFS endpoint with a small config file. +[s3cmd](https://s3tools.org/s3cmd) est un client en ligne de commande pour le stockage compatible avec S3. Pointez-le vers votre point de terminaison RustFS avec un petit fichier de configuration. -## Install +## Installation ```bash # macOS @@ -16,9 +16,9 @@ sudo apt install s3cmd pip install s3cmd ``` -## Configure +## Configuration -Create `~/.s3cfg`. Replace `localhost:9000` with your server address and use your own [access keys](../../security-compliance/iam/access-token.md). RustFS uses path-style addressing, so set the bucket host to the same endpoint: +Créez `~/.s3cfg`. Remplacez `localhost:9000` par l’adresse de votre serveur et utilisez vos propres [clés d’accès](../../security-compliance/iam/access-token.md). RustFS utilise l’adressage de type chemin (path-style) : définissez donc l’hôte du compartiment (bucket) sur le même point de terminaison : ```ini title="~/.s3cfg" [default] @@ -32,13 +32,13 @@ signature_v2 = False :::note -Set `use_https = True` and point at port `9000` if you have [configured TLS](../../integration/tls-configured.md). +Définissez `use_https = True` et pointez vers le port `9000` si vous avez [configuré TLS](../../integration/tls-configured.md). ::: -## Verify +## Vérification -Create a bucket, upload a file, and list it: +Créez un compartiment, chargez (upload) un fichier et listez-le : ```bash s3cmd mb s3://my-bucket @@ -51,6 +51,6 @@ upload: '/path/to/hello.txt' -> 's3://my-bucket/hello.txt' [1 of 1] 2026-07-16 10:00 12 s3://my-bucket/hello.txt ``` -## Next steps +## Étapes suivantes -See the [SDK overview](../sdk/index.md) to connect an application, or manage objects with [`rc`](/operations/rc). +Consultez la [présentation des SDK](../sdk/index.md) pour connecter une application, ou gérez les objets avec [`rc`](/fr/operations/rc). diff --git a/content/fr/developer/examples/terraform.md b/content/fr/developer/examples/terraform.md index 08b7ea2d1..bd545206e 100644 --- a/content/fr/developer/examples/terraform.md +++ b/content/fr/developer/examples/terraform.md @@ -1,13 +1,13 @@ --- title: "Terraform" -description: "Manage RustFS buckets and objects with Terraform using the AWS provider pointed at a custom endpoint." +description: "Gérez les compartiments et les objets RustFS avec Terraform, en pointant le fournisseur AWS vers un point de terminaison personnalisé." --- -The [Terraform AWS provider](https://registry.terraform.io/providers/hashicorp/aws/latest) works against RustFS when you point its S3 endpoint at your server and enable path-style addressing. +Le [fournisseur AWS de Terraform](https://registry.terraform.io/providers/hashicorp/aws/latest) fonctionne avec RustFS lorsque vous pointez son point de terminaison S3 vers votre serveur et que vous activez l’adressage de type chemin (path-style). -## Configure +## Configuration -Replace `http://localhost:9000` with your server address and use your own [access keys](../../security-compliance/iam/access-token.md). The skip flags stop the provider from calling AWS-only metadata and STS endpoints: +Remplacez `http://localhost:9000` par l’adresse de votre serveur et utilisez vos propres [clés d’accès](../../security-compliance/iam/access-token.md). Les options d’omission empêchent le fournisseur d’appeler les points de terminaison de métadonnées et STS propres à AWS : ```hcl title="main.tf" provider "aws" { @@ -35,7 +35,7 @@ resource "aws_s3_object" "hello" { } ``` -## Apply +## Application ```bash terraform init @@ -51,6 +51,6 @@ aws_s3_object.hello: Creation complete after 0s [id=hello.txt] Apply complete! Resources: 2 added, 0 changed, 0 destroyed. ``` -## Next steps +## Étapes suivantes -See the [SDK overview](../sdk/index.md) to connect an application, or the [AWS CLI example](aws-cli.md) for ad-hoc commands. +Consultez la [présentation des SDK](../sdk/index.md) pour connecter une application, ou l’[exemple AWS CLI](aws-cli.md) pour des commandes ponctuelles. diff --git a/content/fr/developer/index.md b/content/fr/developer/index.md index 5141f84f2..595f03e60 100644 --- a/content/fr/developer/index.md +++ b/content/fr/developer/index.md @@ -1,12 +1,12 @@ --- -title: Developer -description: "Integrate applications with RustFS by using STS, MCP, SDKs, and the S3-compatible API." +title: Développeur +description: "Intégrez des applications à RustFS au moyen de STS, de MCP, des SDK et de l’API compatible avec S3." --- -Use this section to integrate applications with RustFS through temporary credentials, the Model Context Protocol (MCP), SDKs, and the S3-compatible API. +Utilisez cette section pour intégrer des applications à RustFS au moyen d’identifiants temporaires, du Model Context Protocol (MCP), des SDK et de l’API compatible avec S3. -- [Security Token Service (STS)](/security-compliance/iam/sts) explains how to request temporary credentials. -- [MCP](/developer/mcp) connects AI tools and agents to RustFS. -- [SDKs](/developer/sdk) provide language-specific integration examples. -- [Integration guides](/developer/integration) cover proxies and data platforms. -- [S3 API](/administration/protocols/s3) documents client configuration and compatibility considerations. +- [Security Token Service (STS)](/fr/security-compliance/iam/sts) explique comment demander des identifiants temporaires. +- [MCP](/fr/developer/mcp) connecte les outils et les agents d’IA à RustFS. +- [SDK](/fr/developer/sdk) fournit des exemples d’intégration selon le langage. +- [Guides d’intégration](/fr/developer/integration) couvrent les proxys et les plateformes de données. +- [API S3](/fr/administration/protocols/s3) documente la configuration des clients et les considérations de compatibilité. diff --git a/content/fr/developer/integration/ai/mlflow.md b/content/fr/developer/integration/ai/mlflow.md index 46d3205ef..cb147b1e9 100644 --- a/content/fr/developer/integration/ai/mlflow.md +++ b/content/fr/developer/integration/ai/mlflow.md @@ -1,13 +1,13 @@ --- title: "MLflow" -description: "Run MLflow with RustFS as the S3 artifact store for experiment tracking, deployed with Docker Compose." +description: "Exécutez MLflow avec RustFS comme magasin d’artefacts S3 pour le suivi d’expériences, déployé avec Docker Compose." --- -This guide connects [MLflow](https://github.com/mlflow/mlflow) — the experiment tracking and model registry platform — to **RustFS** as its S3 artifact store. You will start the MLflow tracking server with Docker Compose, log parameters, metrics, and artifacts from a training run, and verify that the artifacts are stored in RustFS. The workflow was verified with `ghcr.io/mlflow/mlflow:v2.22.1` and `rustfs/rustfs-x86-musl:v2.3.1`. +Ce guide connecte [MLflow](https://github.com/mlflow/mlflow) — la plateforme de suivi d’expériences et de registre de modèles — à **RustFS** comme magasin d’artefacts S3. Vous allez démarrer le serveur de suivi MLflow avec Docker Compose, journaliser des paramètres, des métriques et des artefacts depuis une exécution d’entraînement, et vérifier que les artefacts sont stockés dans RustFS. Le flux a été validé avec `ghcr.io/mlflow/mlflow:v2.22.1` et `rustfs/rustfs-x86-musl:v2.3.1`. -You need Docker with the Compose plugin. This deployment is intended for local integration testing, not production. +Vous avez besoin de Docker avec le plugin Compose. Ce déploiement est destiné aux tests d’intégration locaux, pas à la production. -## Architecture +## Schéma d’architecture ```mermaid flowchart LR @@ -16,18 +16,18 @@ flowchart LR Server -->|"metadata"| DB["SQLite"] ``` -The tracking server keeps experiment and run metadata in SQLite and stores artifacts — model files, plots, reports — directly in RustFS through the `s3://` artifact root. The client needs the same RustFS credentials because it uploads artifacts itself, using boto3 and the `MLFLOW_S3_ENDPOINT_URL` setting. +Le serveur de suivi conserve les métadonnées des expériences et des exécutions dans SQLite et stocke les artefacts — fichiers de modèle, graphiques, rapports — directement dans RustFS via la racine d’artefacts `s3://`. Le client a besoin des mêmes identifiants RustFS, car c’est lui qui charge (upload) les artefacts, via boto3 et le réglage `MLFLOW_S3_ENDPOINT_URL`. -## 1. Create the project files +## 1. Créer les fichiers du projet -Create a working directory: +Créez un répertoire de travail : ```bash mkdir rustfs-mlflow cd rustfs-mlflow ``` -Create an environment file and replace both credential placeholders: +Créez un fichier d’environnement et remplacez les deux espaces réservés d’identifiants : ```ini title=".env" RUSTFS_ACCESS_KEY= @@ -35,9 +35,9 @@ RUSTFS_SECRET_KEY= MLFLOW_BUCKET=my-bucket ``` -Use dedicated credentials for the artifact bucket. Do not commit `.env` to source control. +Utilisez des identifiants dédiés pour le compartiment (bucket) d’artefacts. N’ajoutez pas le fichier `.env` au dépôt. -Create the Compose file: +Créez le fichier Compose : ```yaml title="compose.yaml" services: @@ -117,34 +117,34 @@ volumes: mlflow-db: ``` -The `create-bucket` service must run before the server starts because MLflow does not create the bucket. `MLFLOW_S3_ENDPOINT_URL` points the server's boto3 client at RustFS with path-style addressing. The SQLite database lives on a volume so experiment metadata survives restarts; production deployments should use a managed database backend instead. +Le service `create-bucket` doit s’exécuter avant le démarrage du serveur, car MLflow ne crée pas le compartiment. `MLFLOW_S3_ENDPOINT_URL` oriente le client boto3 du serveur vers RustFS avec un adressage de type chemin (path-style). La base SQLite réside sur un volume afin que les métadonnées des expériences survivent aux redémarrages ; les déploiements de production devraient utiliser un backend de base de données géré. -## 2. Validate and start the deployment +## 2. Valider et démarrer le déploiement -Resolve the Compose file before starting containers: +Résolvez le fichier Compose avant de démarrer les conteneurs : ```bash docker compose config ``` -Start the services and wait for the tracking server: +Démarrez les services et attendez le serveur de suivi : ```bash docker compose up -d docker compose ps ``` -The `create-bucket` service should exit with code `0`, and the MLflow UI should answer on `http://localhost:5000`: +Le service `create-bucket` devrait se terminer avec le code `0`, et l’interface MLflow devrait répondre sur `http://localhost:5000` : ```bash curl -sf http://localhost:5000/ >/dev/null && echo ready ``` -Open the RustFS Console at `http://localhost:9001` to watch artifacts land in `my-bucket` during the next step. +Ouvrez la Console RustFS à l’adresse `http://localhost:9001` pour voir les artefacts arriver dans `my-bucket` à l’étape suivante. -## 3. Log a training run +## 3. Journaliser une exécution d’entraînement -Create the client script — it runs inside the MLflow image, which ships every dependency: +Créez le script client — il s’exécute dans l’image MLflow, qui livre toutes les dépendances : ```bash title="train_demo.py" {12} import mlflow @@ -163,18 +163,18 @@ with mlflow.start_run(run_name="rustfs-verify") as run: print("artifact_uri:", run.info.artifact_uri) ``` -Copy the script into the running container and execute it with the service environment: +Copiez le script dans le conteneur en cours d’exécution et exécutez-le avec l’environnement du service : ```bash docker compose cp train_demo.py mlflow:/tmp/train_demo.py docker compose exec -w /tmp mlflow python train_demo.py ``` -The `artifact_uri` prints as `s3://my-bucket/mlflow-artifacts///artifacts` — the artifact is uploaded straight to RustFS by the client. +`artifact_uri` s’affiche sous la forme `s3://my-bucket/mlflow-artifacts///artifacts` — le client charge l’artefact directement vers RustFS. -## 4. Verify artifacts in RustFS +## 4. Vérifier les artefacts dans RustFS -Read the artifact back through the tracking server, then list the same object in RustFS. Save the following as `verify.py`, replace `` with the identifier printed in step 3, and run it the same way: +Relisez l’artefact via le serveur de suivi, puis listez le même objet dans RustFS. Enregistrez ce qui suit sous le nom `verify.py`, remplacez `` par l’identifiant affiché à l’étape 3, et exécutez-le de la même façon : ```bash title="verify.py" {5} import mlflow @@ -186,59 +186,59 @@ path = client.download_artifacts("", "reports/model-summary.txt") print(open(path).read()) ``` -The download reads the object from RustFS through the tracking server. Then confirm the objects in the bucket: +Le téléchargement lit l’objet depuis RustFS via le serveur de suivi. Confirmez ensuite les objets dans le compartiment : ```bash docker compose exec rustfs /usr/bin/rc ls local/my-bucket/mlflow-artifacts/ -r ``` -The output should include the artifact object: +La sortie devrait inclure l’objet d’artefact : ```text mlflow-artifacts/1/a1aece9243504f2680a52fba0c32765f/artifacts/reports/model-summary.txt ``` -![MLflow artifacts stored in the RustFS Console](./images/rustfs-mlflow-artifacts.png) +![Artefacts MLflow stockés dans la Console RustFS](./images/rustfs-mlflow-artifacts.png) -Runs, parameters, and metrics survive a server restart because they are stored in SQLite, while the artifacts stay in RustFS: +Les exécutions, les paramètres et les métriques survivent à un redémarrage du serveur parce qu’ils sont stockés dans SQLite, tandis que les artefacts restent dans RustFS : ```bash docker compose restart mlflow docker compose exec -w /tmp mlflow python verify.py ``` -The `list_artifacts` call succeeds again against the restarted server, reading from the same objects in RustFS. +L’appel `list_artifacts` réussit de nouveau face au serveur redémarré, en lisant les mêmes objets dans RustFS. -## 5. Stop or reset the deployment +## 5. Arrêter ou réinitialiser le déploiement -Stop the containers while keeping all data: +Arrêtez les conteneurs tout en conservant toutes les données : ```bash docker compose down ``` -The RustFS volume keeps the artifact objects and the MLflow volume keeps the metadata database. To delete everything, including the artifacts in RustFS, add `--volumes`. +Le volume RustFS conserve les objets d’artefacts et le volume MLflow conserve la base de métadonnées. Pour tout supprimer, y compris les artefacts dans RustFS, ajoutez `--volumes`. -## Troubleshooting +## Dépannage -### `ModuleNotFoundError: No module named 'boto3'` when logging artifacts +### `ModuleNotFoundError: No module named 'boto3'` lors de la journalisation des artefacts -The client performing `log_artifact` needs boto3 because it uploads directly to S3. Install it in the environment that runs the training script, or run the script inside the MLflow image as shown in step 3. +Le client qui exécute `log_artifact` a besoin de boto3, car il charge directement vers S3. Installez-le dans l’environnement qui exécute le script d’entraînement, ou exécutez le script dans l’image MLflow comme indiqué à l’étape 3. -### `AccessDenied` or connection errors during artifact upload +### `AccessDenied` ou erreurs de connexion pendant le chargement d’un artefact -Confirm that `MLFLOW_S3_ENDPOINT_URL` is set in the client environment — without it, boto3 sends requests to real AWS S3. The endpoint must be reachable from the machine running the training script; use `http://localhost:9000` outside the Compose network and `http://rustfs:9000` inside it. +Vérifiez que `MLFLOW_S3_ENDPOINT_URL` est défini dans l’environnement du client — sans cela, boto3 envoie les requêtes au véritable Amazon S3. Le point de terminaison doit être joignable depuis la machine qui exécute le script d’entraînement ; utilisez `http://localhost:9000` hors du réseau Compose et `http://rustfs:9000` à l’intérieur. -### The server fails to start with a bucket error +### Le serveur ne démarre pas et signale une erreur de compartiment -The artifact bucket must exist before the server starts. Check the `create-bucket` service logs: +Le compartiment d’artefacts doit exister avant le démarrage du serveur. Consultez les journaux du service `create-bucket` : ```bash docker compose logs create-bucket ``` -## Next steps +## Étapes suivantes -- Review [S3 compatibility notes](/administration/protocols/s3) before adopting additional MLflow operations. -- Create dedicated production credentials with [Access Key Management](/security-compliance/iam/access-token). -- Follow the [MLflow documentation](https://mlflow.org/docs/latest/) to add a model registry or move the metadata store to a managed database. +- Consultez les [notes de compatibilité S3](/fr/administration/protocols/s3) avant d’adopter d’autres opérations MLflow. +- Créez des identifiants de production dédiés avec la [gestion des clés d’accès](/fr/security-compliance/iam/access-token). +- Suivez la [documentation MLflow](https://mlflow.org/docs/latest/) pour ajouter un registre de modèles ou déplacer le magasin de métadonnées vers une base de données gérée. diff --git a/content/fr/developer/integration/ai/ray.md b/content/fr/developer/integration/ai/ray.md index e9f71b94c..b90432b71 100644 --- a/content/fr/developer/integration/ai/ray.md +++ b/content/fr/developer/integration/ai/ray.md @@ -1,13 +1,13 @@ --- title: "Ray" -description: "Use Ray Data with RustFS as S3-compatible storage for dataset writes and reads." +description: "Utilisez Ray Data avec RustFS comme stockage compatible avec S3 pour l’écriture et la lecture de jeux de données." --- -This guide connects [Ray](https://github.com/ray-project/ray) — the distributed AI and Python compute framework — to **RustFS** through Ray Data's S3 filesystem support. You will run a Ray job inside the official image, write a dataset as Parquet to a RustFS bucket, read it back, and verify the objects. The workflow was verified with `rayproject/ray:2.44.0-py311` (Ray 2.44, pyarrow filesystem) and `rustfs/rustfs-x86-musl:v2.3.1`. +Ce guide connecte [Ray](https://github.com/ray-project/ray) — le framework distribué de calcul Python et d’IA — à **RustFS** via la prise en charge du système de fichiers S3 de Ray Data. Vous allez exécuter une tâche Ray dans l’image officielle, écrire un jeu de données au format Parquet dans un compartiment (bucket) RustFS, le relire et vérifier les objets. Le flux a été validé avec `rayproject/ray:2.44.0-py311` (Ray 2.44, système de fichiers pyarrow) et `rustfs/rustfs-x86-musl:v2.3.1`. -You need Docker. This deployment is intended for local integration testing, not production. +Vous avez besoin de Docker. Ce déploiement est destiné aux tests d’intégration locaux, pas à la production. -## Architecture +## Schéma d’architecture ```mermaid flowchart LR @@ -15,11 +15,11 @@ flowchart LR DS -->|"Parquet files"| RustFS["RustFS :9000"] ``` -Ray Data reads and writes datasets through pyarrow's `S3FileSystem`. Passing an `S3FileSystem` configured for RustFS redirects every dataset operation — Parquet, CSV, JSON — to the bucket. +Ray Data lit et écrit les jeux de données via le `S3FileSystem` de pyarrow. Passer un `S3FileSystem` configuré pour RustFS redirige chaque opération de jeu de données — Parquet, CSV, JSON — vers le compartiment. -## 1. Create the job file +## 1. Créer le fichier de tâche -Create the script, replacing all connection placeholders: +Créez le script, en remplaçant tous les espaces réservés de connexion : ```python title="ray_s3.py" import ray @@ -45,11 +45,11 @@ print("sample:", back[0]) ray.shutdown() ``` -`endpoint_override` takes the full endpoint URL including the scheme. pyarrow's `S3FileSystem` uses path-style requests for custom endpoints, so no extra flag is needed. The same filesystem object works for `write_csv`, `read_json`, and the other Ray Data methods. +`endpoint_override` prend l’URL complète du point de terminaison, schéma compris. Le `S3FileSystem` de pyarrow utilise des requêtes en adressage de type chemin (path-style) pour les points de terminaison personnalisés, si bien qu’aucun indicateur supplémentaire n’est nécessaire. Le même objet de système de fichiers fonctionne pour `write_csv`, `read_json` et les autres méthodes de Ray Data. -## 2. Run the job +## 2. Exécuter la tâche -Run the script in the Ray image on the same Docker network as RustFS: +Exécutez le script dans l’image Ray, sur le même réseau Docker que RustFS : ```bash docker run --rm --network oo-rustfs_default \ @@ -62,42 +62,42 @@ rows: 5 sample: {'id': 0, 'value': 0.0} ``` -## 3. Verify objects in RustFS +## 3. Vérifier les objets dans RustFS -List the dataset prefix: +Listez le préfixe du jeu de données : ```bash rc ls rustfs/my-bucket/ray-demo/ -r ``` -Ray Data wrote the dataset as a Parquet block: +Ray Data a écrit le jeu de données sous la forme d’un bloc Parquet : ```text ray-demo/events/0_000000_000000.parquet ``` -![Ray dataset files stored in the RustFS Console](./images/rustfs-ray-data.png) +![Fichiers de jeu de données Ray stockés dans la Console RustFS](./images/rustfs-ray-data.png) -## 4. Stop or reset +## 4. Arrêter ou réinitialiser -Ray Data holds no state of its own. To delete the demo dataset: +Ray Data ne conserve aucun état propre. Pour supprimer le jeu de données de démonstration : ```bash rc rm rustfs/my-bucket/ray-demo/ --recursive --force ``` -## Troubleshooting +## Dépannage -### `Unable to connect to endpoint` or timeouts +### `Unable to connect to endpoint` ou délais dépassés -Confirm `endpoint_override` includes the scheme and is reachable from the Ray container. Inside a Compose network the hostname is `rustfs`; from the host use `http://localhost:9000`. +Vérifiez que `endpoint_override` inclut le schéma et qu’il est joignable depuis le conteneur Ray. À l’intérieur d’un réseau Compose, le nom d’hôte est `rustfs` ; depuis l’hôte, utilisez `http://localhost:9000`. -### `Access Denied` on write +### `Access Denied` à l’écriture -Confirm the access key and secret key are passed to `S3FileSystem` itself — Ray does not read the container's AWS environment variables through this code path. +Vérifiez que la clé d’accès et la clé secrète sont passées à `S3FileSystem` lui-même — Ray ne lit pas les variables d’environnement AWS du conteneur par ce chemin de code. -## Next steps +## Étapes suivantes -- Review [S3 compatibility notes](/administration/protocols/s3) before adopting additional Ray operations. -- Create dedicated production credentials with [Access Key Management](/security-compliance/iam/access-token). -- Follow the [Ray Data documentation](https://docs.ray.io/en/latest/data/data.html) to chain transformations, training ingestion, and checkpointing on the same bucket. +- Consultez les [notes de compatibilité S3](/fr/administration/protocols/s3) avant d’adopter d’autres opérations Ray. +- Créez des identifiants de production dédiés avec la [gestion des clés d’accès](/fr/security-compliance/iam/access-token). +- Suivez la [documentation Ray Data](https://docs.ray.io/en/latest/data/data.html) pour enchaîner des transformations, l’ingestion d’entraînement et les points de contrôle sur le même compartiment. diff --git a/content/fr/developer/integration/ai/vllm.md b/content/fr/developer/integration/ai/vllm.md index c471096cf..412472941 100644 --- a/content/fr/developer/integration/ai/vllm.md +++ b/content/fr/developer/integration/ai/vllm.md @@ -1,13 +1,13 @@ --- title: "vLLM" -description: "Serve LLM inference with vLLM loading model weights stored in RustFS." +description: "Servez de l’inférence de grands modèles de langage (LLM) avec vLLM en chargeant des poids de modèle stockés dans RustFS." --- -This guide connects [vLLM](https://github.com/vllm-project/vllm) — the high-throughput LLM inference engine — to **RustFS** as its model-weight store. You will upload a model into a RustFS bucket, expose the bucket to the vLLM host through an rclone mount, and serve the model with the OpenAI-compatible API. The workflow was verified with `vllm/vllm-openai-cpu` (vLLM 0.30.0) serving `facebook/opt-125m` from a RustFS bucket backed by `rustfs/rustfs-x86-musl:v2.3.1`, on a CPU-only host. +Ce guide connecte [vLLM](https://github.com/vllm-project/vllm) — le moteur d’inférence de grands modèles de langage (LLM) à haut débit — à **RustFS** comme magasin de poids de modèles. Vous allez charger (upload) un modèle dans un compartiment (bucket) RustFS, exposer le compartiment à l’hôte vLLM via un montage rclone et servir le modèle avec l’API compatible avec OpenAI. Le flux a été validé avec `vllm/vllm-openai-cpu` (vLLM 0.30.0) servant `facebook/opt-125m` depuis un compartiment RustFS adossé à `rustfs/rustfs-x86-musl:v2.3.1`, sur un hôte uniquement CPU. -You need Docker and an rclone binary on the host that runs vLLM. This deployment is intended for local integration testing, not production. +Vous avez besoin de Docker et d’un binaire rclone sur l’hôte qui exécute vLLM. Ce déploiement est destiné aux tests d’intégration locaux, pas à la production. -## Architecture +## Schéma d’architecture ```mermaid flowchart LR @@ -17,17 +17,17 @@ flowchart LR Client["OpenAI SDK / curl"] -->|"completions"| vLLM ``` -The bucket is the single copy of the model. Hosts that serve the model mount the bucket read-only, so every node pulls weights from RustFS and no local model store exists to drift. +Le compartiment est la seule copie du modèle. Les hôtes qui servent le modèle montent le compartiment en lecture seule, si bien que chaque nœud récupère les poids depuis RustFS et qu’il n’existe aucun magasin de modèles local susceptible de diverger. -:::note[Why an rclone mount] +:::note[Pourquoi un montage rclone] -vLLM 0.30 loads `s3://` model paths through the RunAI model streamer, whose ranged reads currently fail against custom S3 endpoints such as RustFS (the loader errors with `File access error` on any non-zero offset). Mounting the bucket as a filesystem is the verified way to keep the weights in RustFS while vLLM reads them as local files. +vLLM 0.30 charge les chemins de modèle `s3://` via le streamer de modèles RunAI, dont les lectures par plage échouent actuellement face aux points de terminaison S3 personnalisés tels que RustFS (le chargeur signale `File access error` pour tout décalage non nul). Monter le compartiment comme système de fichiers est la méthode validée pour conserver les poids dans RustFS pendant que vLLM les lit comme des fichiers locaux. ::: -## 1. Upload the model to RustFS +## 1. Charger le modèle vers RustFS -Create the bucket and copy model weights into it, replacing all connection placeholders: +Créez le compartiment et copiez-y les poids du modèle, en remplaçant tous les espaces réservés de connexion : ```ini title="rclone.conf" [rustfs] @@ -44,11 +44,11 @@ rc mb rustfs/vllm-models rclone copy ./opt-125m rustfs:vllm-models/opt-125m --transfers 4 ``` -Any Hugging Face layout works — `config.json`, the tokenizer files, and the weight files (`model.safetensors` or `pytorch_model.bin`). Keep one model per prefix so several models can share the bucket. +Toute disposition Hugging Face convient — `config.json`, les fichiers du tokenizer et les fichiers de poids (`model.safetensors` ou `pytorch_model.bin`). Conservez un modèle par préfixe afin que plusieurs modèles puissent partager le compartiment. -## 2. Mount the bucket on the vLLM host +## 2. Monter le compartiment sur l’hôte vLLM -On the machine that runs vLLM, mount the bucket read-only for clients with `--allow-other`: +Sur la machine qui exécute vLLM, montez le compartiment en lecture seule pour les clients, avec `--allow-other` : ```bash mkdir -p /mnt/vllm-models @@ -61,9 +61,9 @@ ls /mnt/vllm-models/opt-125m/ config.json merges.txt model.safetensors tokenizer.json vocab.json ``` -## 3. Run vLLM +## 3. Exécuter vLLM -Start the CPU image against the mounted weights: +Démarrez l’image CPU face aux poids montés : ```bash docker run -d --name vllm -p 8000:8000 --shm-size=2g \ @@ -73,7 +73,7 @@ docker run -d --name vllm -p 8000:8000 --shm-size=2g \ --dtype float32 --max-model-len 256 --gpu-memory-utilization 0.15 ``` -vLLM reads the weights through the mount — the container stays stateless and the model lives in RustFS. Wait for the server to come up: +vLLM lit les poids à travers le montage — le conteneur reste sans état et le modèle réside dans RustFS. Attendez que le serveur soit prêt : ```bash curl -s http://localhost:8000/v1/models | head -c 200 @@ -83,11 +83,11 @@ curl -s http://localhost:8000/v1/models | head -c 200 {"object":"list","data":[{"id":"opt-125m","object":"model","created":...,"root":"/models/opt-125m",...}]} ``` -`--gpu-memory-utilization` controls the fraction of RAM reserved for the KV cache on the CPU backend; lower it on small hosts. `--dtype float32` matches what the CPU attention kernels support for this model. +`--gpu-memory-utilization` contrôle la fraction de RAM réservée au cache KV sur le backend CPU ; réduisez-la sur les petits hôtes. `--dtype float32` correspond à ce que les noyaux d’attention CPU prennent en charge pour ce modèle. -## 4. Run inference +## 4. Exécuter l’inférence -Send an OpenAI-compatible completion request: +Envoyez une requête de complétion compatible avec OpenAI : ```bash curl -s http://localhost:8000/v1/completions \ @@ -101,7 +101,7 @@ curl -s http://localhost:8000/v1/completions \ "finish_reason":"length",...}]} ``` -The request is standard OpenAI schema, so the Python client works unchanged: +La requête suit le schéma OpenAI standard, si bien que le client Python fonctionne sans modification : ```python from openai import OpenAI @@ -112,43 +112,43 @@ print(client.completions.create( ).choices[0].text) ``` -![vLLM model weights stored in the RustFS Console](./images/rustfs-vllm-models.png) +![Poids de modèle vLLM stockés dans la Console RustFS](./images/rustfs-vllm-models.png) -## 5. Stop or reset +## 5. Arrêter ou réinitialiser -To tear down the demo while keeping the bucket objects: +Pour démonter la démonstration tout en conservant les objets du compartiment : ```bash docker rm -f vllm fusermount -u /mnt/vllm-models ``` -To delete the stored model: +Pour supprimer le modèle stocké : ```bash rclone purge rustfs:vllm-models ``` -## Troubleshooting +## Dépannage ### `Cannot find any model weights with /models/...` -The mount had a stale directory cache or the weight files never made it to the bucket. Re-run `rclone copy` and confirm the files through the mount with `ls` before starting vLLM. A short `--dir-cache-time` (for example `10s`) helps while you iterate. +Le montage avait un cache de répertoires périmé, ou les fichiers de poids ne sont jamais arrivés dans le compartiment. Relancez `rclone copy` et confirmez les fichiers à travers le montage avec `ls` avant de démarrer vLLM. Un `--dir-cache-time` court (par exemple `10s`) aide pendant que vous itérez. ### `Unsupported CPU attention configuration: head_dim=...` -vLLM's CPU kernels support a fixed set of head dimensions. Tiny test models such as `hf-internal-testing/tiny-random-*` use exotic shapes that fail at request time — use a real small model such as `facebook/opt-125m`. +Les noyaux CPU de vLLM prennent en charge un ensemble fixe de dimensions de tête. Les tout petits modèles de test tels que `hf-internal-testing/tiny-random-*` utilisent des formes exotiques qui échouent au moment de la requête — utilisez un petit modèle réel tel que `facebook/opt-125m`. ### `Insufficient space in /dev/shm` -vLLM's CPU engine exchanges tensors through shared memory. Run the container with `--shm-size=2g` (or `--ipc=host`). +Le moteur CPU de vLLM échange des tenseurs via la mémoire partagée. Exécutez le conteneur avec `--shm-size=2g` (ou `--ipc=host`). -### Server exits with `Available memory on node 0 ... is less than desired CPU memory utilization` +### Le serveur s’arrête avec `Available memory on node 0 ... is less than desired CPU memory utilization` -The default KV-cache reservation is 90% of system RAM. Lower it with `--gpu-memory-utilization 0.15` (the flag applies to the CPU backend as a memory fraction despite its name). +La réservation par défaut du cache KV représente 90 % de la RAM système. Réduisez-la avec `--gpu-memory-utilization 0.15` (l’indicateur s’applique au backend CPU comme fraction de mémoire, malgré son nom). -## Next steps +## Étapes suivantes -- Review [S3 compatibility notes](/administration/protocols/s3) before adopting additional serving setups. -- Create dedicated production credentials with [Access Key Management](/security-compliance/iam/access-token). -- Follow the [vLLM documentation](https://docs.vllm.ai/en/latest/serving/openai_compatible_server.html) for chat templates, tensor parallelism, and quantized weights on top of the same bucket-backed model store. +- Consultez les [notes de compatibilité S3](/fr/administration/protocols/s3) avant d’adopter d’autres configurations de service. +- Créez des identifiants de production dédiés avec la [gestion des clés d’accès](/fr/security-compliance/iam/access-token). +- Suivez la [documentation vLLM](https://docs.vllm.ai/serving/openai_compatible_server.html) pour les modèles de conversation, le parallélisme de tenseurs et les poids quantifiés, au-dessus du même magasin de modèles adossé au compartiment. diff --git a/content/fr/developer/integration/backup/kopia.md b/content/fr/developer/integration/backup/kopia.md index fed21e5a3..4888d12e7 100644 --- a/content/fr/developer/integration/backup/kopia.md +++ b/content/fr/developer/integration/backup/kopia.md @@ -1,13 +1,13 @@ --- title: "Kopia" -description: "Back up files to RustFS with Kopia's S3 repository backend." +description: "Sauvegardez des fichiers vers RustFS avec le backend de dépôt S3 de Kopia." --- -This guide connects [Kopia](https://github.com/kopia/kopia) — the open-source backup and restore tool — to **RustFS** as an S3 repository. You will create a repository in a RustFS bucket, take a snapshot of a directory, restore it into an empty directory, and compare checksums. The workflow was verified with `kopia/kopia:0.18.1` and `rustfs/rustfs-x86-musl:v2.3.1`. +Ce guide connecte [Kopia](https://github.com/kopia/kopia) — l’outil open source de sauvegarde et de restauration — à **RustFS** comme dépôt S3. Vous allez créer un dépôt dans un compartiment (bucket) RustFS, prendre un instantané d’un répertoire, le restaurer dans un répertoire vide et comparer les sommes de contrôle. Le flux a été validé avec `kopia/kopia:0.18.1` et `rustfs/rustfs-x86-musl:v2.3.1`. -You need Docker. This deployment is intended for local integration testing, not production. +Vous avez besoin de Docker. Ce déploiement est destiné aux tests d’intégration locaux, pas à la production. -## Architecture +## Schéma d’architecture ```mermaid flowchart LR @@ -16,11 +16,11 @@ flowchart LR Kopia -->|restore| Restore["Restored files"] ``` -Kopia stores the repository format files and deduplicated, encrypted content blocks in the bucket. Restores read the blocks back and reassemble the original files, so the checksum of every restored file must match the source. +Kopia stocke les fichiers de format du dépôt ainsi que les blocs de contenu dédupliqués et chiffrés dans le compartiment. Les restaurations relisent les blocs et reconstituent les fichiers d’origine, si bien que la somme de contrôle de chaque fichier restauré doit correspondre à la source. -## 1. Create the repository +## 1. Créer le dépôt -Create the bucket first, then initialize the Kopia repository inside it. The endpoint is a bare `host:port` (no scheme); `--disable-tls` switches the client to plain HTTP: +Créez d’abord le compartiment, puis initialisez le dépôt Kopia à l’intérieur. Le point de terminaison est un `host:port` nu (sans schéma) ; `--disable-tls` fait passer le client en HTTP simple : ```bash rc alias set rustfs http://:9000 @@ -37,11 +37,11 @@ docker run --rm --network oo-rustfs_default kopia/kopia:0.18.1 repository create --override-username demo --override-hostname workstation ``` -Kopia validates the provider by reading and writing through the S3 API before it reports success. +Kopia valide le fournisseur en lisant et en écrivant via l’API S3 avant de signaler le succès. -## 2. Connect, snapshot, and restore +## 2. Se connecter, prendre un instantané et restaurer -Run the following commands from the directory holding your `repository.config` (created by the previous step). Kopia reads the connection settings from that file, so the S3 flags are only needed once: +Exécutez les commandes suivantes depuis le répertoire qui contient votre `repository.config` (créé à l’étape précédente). Kopia lit les réglages de connexion dans ce fichier, si bien que les indicateurs S3 ne sont nécessaires qu’une fois : ```bash export KOPIA_PASSWORD= @@ -65,7 +65,7 @@ kopia snapshot create /source kopia snapshot list ``` -Restore the snapshot into an empty directory and compare checksums with the source. The snapshot ID is the `ka...` identifier printed by `snapshot list`: +Restaurez l’instantané dans un répertoire vide et comparez les sommes de contrôle avec la source. L’ID d’instantané est l’identifiant `ka...` affiché par `snapshot list` : ```bash kopia restore /restore @@ -78,15 +78,15 @@ bec4530e2798465b... source/blob.bin bec4530e2798465b... restore/blob.bin ``` -## 3. Verify objects in RustFS +## 3. Vérifier les objets dans RustFS -List the bucket: +Listez le compartiment : ```bash rc ls rustfs/kopia-backups/ -r ``` -The output shows the repository format files plus the packed content blocks written by the snapshot: +La sortie montre les fichiers de format du dépôt ainsi que les blocs de contenu empaquetés écrits par l’instantané : ```text kopia.blobcfg @@ -94,32 +94,32 @@ kopia.repository p0000.../... ``` -![Kopia repository blocks stored in the RustFS Console](./images/rustfs-kopia-repo.png) +![Blocs du dépôt Kopia stockés dans la Console RustFS](./images/rustfs-kopia-repo.png) -## 4. Stop or reset +## 4. Arrêter ou réinitialiser -Kopia is a client-side tool and holds no running state. To delete the repository and all snapshots, remove the bucket: +Kopia est un outil côté client et ne conserve aucun état en cours d’exécution. Pour supprimer le dépôt et tous les instantanés, supprimez le compartiment : ```bash rc rb rustfs/kopia-backups --force ``` -## Troubleshooting +## Dépannage ### `Endpoint url cannot have fully qualified paths` -The endpoint must be a bare `host:port` value without a scheme or path — Kopia builds the object URLs itself. +Le point de terminaison doit être une valeur `host:port` nue, sans schéma ni chemin — Kopia construit lui-même les URL des objets. ### `server gave HTTP response to HTTPS client` -Without `--disable-tls`, Kopia speaks HTTPS. RustFS without TLS needs the `--disable-tls` flag on both `repository create s3` and `repository connect s3`. +Sans `--disable-tls`, Kopia parle HTTPS. RustFS sans TLS a besoin de l’indicateur `--disable-tls` à la fois sur `repository create s3` et sur `repository connect s3`. -### `can't connect to storage` with a DNS error +### `can't connect to storage` avec une erreur DNS -The S3 client is using virtual-hosted addressing. Keep the endpoint as a bare `host:port` value; Kopia uses path-style requests for endpoints given in that form. +Le client S3 utilise l’adressage de type hôte virtuel. Conservez le point de terminaison sous la forme d’une valeur `host:port` nue ; Kopia utilise des requêtes en adressage de type chemin (path-style) pour les points de terminaison donnés sous cette forme. -## Next steps +## Étapes suivantes -- Review [S3 compatibility notes](/administration/protocols/s3) before adopting additional Kopia operations. -- Create dedicated production credentials with [Access Key Management](/security-compliance/iam/access-token). -- Follow the [Kopia repository documentation](https://kopia.io/docs/repositories/) to add policies, retention, and scheduled snapshots. +- Consultez les [notes de compatibilité S3](/fr/administration/protocols/s3) avant d’adopter d’autres opérations Kopia. +- Créez des identifiants de production dédiés avec la [gestion des clés d’accès](/fr/security-compliance/iam/access-token). +- Suivez la [documentation des dépôts Kopia](https://kopia.io/docs/repositories/) pour ajouter des politiques, une rétention et des instantanés planifiés. diff --git a/content/fr/developer/integration/backup/longhorn.md b/content/fr/developer/integration/backup/longhorn.md index 497f43cdb..d1ee77464 100644 --- a/content/fr/developer/integration/backup/longhorn.md +++ b/content/fr/developer/integration/backup/longhorn.md @@ -1,13 +1,13 @@ --- title: "Longhorn" -description: "Configure Longhorn to store Kubernetes volume backups in RustFS through its S3 backup target." +description: "Configurez Longhorn pour stocker les sauvegardes de volumes Kubernetes dans RustFS via sa cible de sauvegarde S3." --- -This guide connects [Longhorn](https://github.com/longhorn/longhorn) — the distributed block storage system for Kubernetes — to **RustFS** as its S3 backup target. You will configure the backup target, back up a volume that contains data, delete the volume, restore it from RustFS, and verify the data. The workflow was verified with Longhorn 1.9.0 on k3s (Kubernetes 1.30) and `rustfs/rustfs-x86-musl:v2.3.1`. +Ce guide connecte [Longhorn](https://github.com/longhorn/longhorn) — le système de stockage bloc distribué pour Kubernetes — à **RustFS** comme cible de sauvegarde S3. Vous allez configurer la cible de sauvegarde, sauvegarder un volume qui contient des données, supprimer le volume, le restaurer depuis RustFS et vérifier les données. Le flux a été validé avec Longhorn 1.9.0 sur k3s (Kubernetes 1.30) et `rustfs/rustfs-x86-musl:v2.3.1`. -You need a Kubernetes cluster with Longhorn installed and `kubectl` access to it. This guide is intended for integration testing, not production. +Vous avez besoin d’un cluster Kubernetes avec Longhorn installé et d’un accès `kubectl`. Ce guide est destiné aux tests d’intégration, pas à la production. -## Architecture +## Schéma d’architecture ```mermaid flowchart LR @@ -16,22 +16,22 @@ flowchart LR Backup -->|"blocks + config"| RustFS["RustFS :9000"] ``` -Longhorn stores backups in the `backupstore/volumes/` prefix of the target bucket as content-addressed blocks plus a small volume configuration file. Restores read those objects back into a new volume on any node that can reach RustFS. +Longhorn stocke les sauvegardes dans le préfixe `backupstore/volumes/` du compartiment cible, sous forme de blocs adressés par le contenu plus un petit fichier de configuration de volume. Les restaurations relisent ces objets dans un nouveau volume, sur tout nœud qui peut joindre RustFS. -## 1. Create the backup bucket +## 1. Créer le compartiment de sauvegarde -Create a dedicated bucket with the [`rc` client](https://github.com/rustfs/cli), using your own endpoint and credentials: +Créez un compartiment (bucket) dédié avec le client [`rc`](https://github.com/rustfs/cli), en utilisant votre propre point de terminaison et vos identifiants : ```bash rc alias set rustfs http://:9000 rc mb rustfs/longhorn-backups ``` -Longhorn does not create the bucket, so this step must complete before the first backup. +Longhorn ne crée pas le compartiment, si bien que cette étape doit être terminée avant la première sauvegarde. -## 2. Configure the backup target +## 2. Configurer la cible de sauvegarde -Store the RustFS credentials in a secret in the `longhorn-system` namespace. `AWS_ENDPOINTS` must be an endpoint every node can reach — use the node IP or an internal load balancer address, not a port forward from your workstation: +Stockez les identifiants RustFS dans un secret de l’espace de noms `longhorn-system`. `AWS_ENDPOINTS` doit être un point de terminaison que chaque nœud peut joindre — utilisez l’adresse IP du nœud ou l’adresse d’un répartiteur de charge interne, pas une redirection de port depuis votre poste de travail : ```bash kubectl -n longhorn-system create secret generic rustfs-s3-secret \ @@ -40,7 +40,7 @@ kubectl -n longhorn-system create secret generic rustfs-s3-secret \ --from-literal=AWS_ENDPOINTS=http://:9000 ``` -Longhorn 1.9 manages backup targets through the `BackupTarget` resource. Patch the `default` target with the RustFS bucket: +Longhorn 1.9 gère les cibles de sauvegarde via la ressource `BackupTarget`. Corrigez la cible `default` avec le compartiment RustFS : ```bash kubectl -n longhorn-system patch backupTarget default --type merge -p ' @@ -50,9 +50,9 @@ spec: pollInterval: 5m' ``` -The `@us-east-1` segment is the region annotation in the S3 URL format; it does not need to match a real deployment region. +Le segment `@us-east-1` est l’annotation de région dans le format d’URL S3 ; il n’a pas besoin de correspondre à une région de déploiement réelle. -Wait for the target to become available — it confirms that Longhorn reached the bucket through the secret: +Attendez que la cible devienne disponible — cela confirme que Longhorn a atteint le compartiment via le secret : ```bash kubectl -n longhorn-system get backupTarget default @@ -63,9 +63,9 @@ NAME URL CREDENTIAL AVAILABLE LAST default s3://longhorn-backups@us-east-1/ rustfs-s3-secret true 2026-09-21T08:36:55Z ``` -## 3. Write data and create a backup +## 3. Écrire des données et créer une sauvegarde -Create a test volume with data in it. The following manifest creates a 1 GiB PVC and a pod that writes a marker file: +Créez un volume de test qui contient des données. Le manifeste suivant crée un PVC de 1 GiB et un pod qui écrit un fichier marqueur : ```yaml title="demo.yaml" apiVersion: v1 @@ -97,14 +97,14 @@ spec: mountPath: /data ``` -Apply it and wait for the pod to run: +Appliquez-le et attendez que le pod s’exécute : ```bash kubectl apply -f demo.yaml kubectl get pod demo-app ``` -Create a snapshot and back it up. You can do this in the Longhorn UI (Volume → Snapshot → Backup) or declaratively: +Créez un instantané et sauvegardez-le. Vous pouvez le faire dans l’interface Longhorn (**Volume** → **Snapshot** → **Backup**, soit volume, instantané et sauvegarde) ou de façon déclarative : ```bash VOLUME=$(kubectl get pvc demo-vol -o jsonpath='{.spec.volumeName}') @@ -119,7 +119,7 @@ spec: EOF ``` -Then create the `Backup` resource for that snapshot: +Créez ensuite la ressource `Backup` pour cet instantané : ```bash kubectl -n longhorn-system apply -f - < --type merge -p ' @@ -276,18 +276,18 @@ spec: ### `failed to create backup ... missing input parameter` -The backup ran before the default backup target was configured. Complete step 2, confirm `AVAILABLE` is `true`, and create the backup again. +La sauvegarde s’est exécutée avant la configuration de la cible de sauvegarde par défaut. Terminez l’étape 2, confirmez que `AVAILABLE` vaut `true`, puis créez de nouveau la sauvegarde. -### The backup target never becomes available +### La cible de sauvegarde ne devient jamais disponible -The secret must exist before the target syncs, and `AWS_ENDPOINTS` must be reachable from the nodes themselves. Check the `longhorn-manager` logs for S3 errors: +Le secret doit exister avant la synchronisation de la cible, et `AWS_ENDPOINTS` doit être joignable depuis les nœuds eux-mêmes. Consultez les journaux de `longhorn-manager` pour les erreurs S3 : ```bash kubectl -n longhorn-system logs -l app=longhorn-manager | grep -i s3 | tail ``` -## Next steps +## Étapes suivantes -- Review [S3 compatibility notes](/administration/protocols/s3) before adopting additional backup targets. -- Create dedicated production credentials with [Access Key Management](/security-compliance/iam/access-token). -- Follow the [Longhorn backup documentation](https://longhorn.io/docs/1.9.0/backups-and-restore/) to configure recurring backup jobs and scheduled snapshots. +- Consultez les [notes de compatibilité S3](/fr/administration/protocols/s3) avant d’adopter d’autres cibles de sauvegarde. +- Créez des identifiants de production dédiés avec la [gestion des clés d’accès](/fr/security-compliance/iam/access-token). +- Suivez la [documentation de sauvegarde Longhorn](https://longhorn.io/docs/1.9.0/backups-and-restore/) pour configurer des tâches de sauvegarde récurrentes et des instantanés planifiés. diff --git a/content/fr/developer/integration/backup/restic.md b/content/fr/developer/integration/backup/restic.md index 7ae46c797..629806d2c 100644 --- a/content/fr/developer/integration/backup/restic.md +++ b/content/fr/developer/integration/backup/restic.md @@ -11,7 +11,7 @@ Vous avez besoin d’une instance RustFS en cours d’exécution, d’un compart Le backend S3 de Restic doit utiliser l’adressage de type chemin avec RustFS. Cette page définit `-o s3.bucket-lookup=path` et utilise le nom du compartiment dans l’URL du dépôt. -:: : +::: ## Schéma d’architecture @@ -87,5 +87,5 @@ 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 +- [CLI Client (rc)](/fr/operations/rc) pour créer des compartiments et inspecter les objets depuis la ligne de commande. +- [Configuration TLS](/fr/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/backup/velero.md b/content/fr/developer/integration/backup/velero.md index 0140296bf..10ae24c9f 100644 --- a/content/fr/developer/integration/backup/velero.md +++ b/content/fr/developer/integration/backup/velero.md @@ -1,13 +1,13 @@ --- title: "Velero" -description: "Back up Kubernetes cluster resources to RustFS with Velero's AWS object store provider." +description: "Sauvegardez les ressources d’un cluster Kubernetes vers RustFS avec le fournisseur de stockage objet AWS de Velero." --- -This guide connects [Velero](https://github.com/vmware-tanzu/velero) — the Kubernetes backup and restore tool — to **RustFS** as its object storage backend. You will install Velero into a Kubernetes cluster with a RustFS backup location, back up cluster resources, delete them, restore from the bucket, and verify the restored objects. The workflow was verified with Velero CLI 1.16.2, `velero-plugin-for-aws:v1.12.2` on k3s (Kubernetes 1.30), and `rustfs/rustfs-x86-musl:v2.3.1`. +Ce guide connecte [Velero](https://github.com/vmware-tanzu/velero) — l’outil de sauvegarde et de restauration Kubernetes — à **RustFS** comme backend de stockage objet. Vous allez installer Velero dans un cluster Kubernetes avec un emplacement de sauvegarde RustFS, sauvegarder les ressources du cluster, les supprimer, restaurer depuis le compartiment (bucket) et vérifier les objets restaurés. Le flux a été validé avec la CLI Velero 1.16.2, `velero-plugin-for-aws:v1.12.2` sur k3s (Kubernetes 1.30) et `rustfs/rustfs-x86-musl:v2.3.1`. -You need a Kubernetes cluster with `kubectl` access and the Velero CLI. This guide is intended for integration testing, not production. +Vous avez besoin d’un cluster Kubernetes avec un accès `kubectl` et la CLI Velero. Ce guide est destiné aux tests d’intégration, pas à la production. -## Architecture +## Schéma d’architecture ```mermaid flowchart LR @@ -15,20 +15,20 @@ flowchart LR V -->|"backups + logs"| RustFS["RustFS :9000"] ``` -Velero serializes Kubernetes resources and (optionally) pod volume data into gzip archives under `backups//` in the bucket. Restores download those archives and recreate the resources in the cluster. +Velero sérialise les ressources Kubernetes et, de façon facultative, les données de volumes de pods dans des archives gzip sous `backups//` dans le compartiment. Les restaurations téléchargent ces archives et recréent les ressources dans le cluster. -## 1. Create the backup bucket +## 1. Créer le compartiment de sauvegarde -Create a dedicated bucket — Velero does not create buckets: +Créez un compartiment dédié — Velero ne crée pas les compartiments : ```bash rc alias set rustfs http://:9000 rc mb rustfs/velero-backups ``` -## 2. Install Velero +## 2. Installer Velero -Write the credentials to a file and install the Velero server. The `s3Url` must be an endpoint reachable from the cluster pods themselves — use the node IP or an internal address, not a port forward from your workstation: +Écrivez les identifiants dans un fichier et installez le serveur Velero. Le `s3Url` doit être un point de terminaison joignable depuis les pods du cluster eux-mêmes — utilisez l’adresse IP du nœud ou une adresse interne, pas une redirection de port depuis votre poste de travail : ```bash cat > velero-creds <|"poll key"| RustFS ``` -Every S3 interaction inside a DAG goes through the provider's S3 client, pointed at RustFS by the connection's `endpoint_url`. Operators, sensors, and hooks share the same connection object. +Chaque interaction S3 à l’intérieur d’un DAG passe par le client S3 du fournisseur, orienté vers RustFS par le `endpoint_url` de la connexion. Les opérateurs, les sensors et les hooks partagent le même objet de connexion. -## 1. Run Airflow +## 1. Exécuter Airflow -Start a standalone instance with examples disabled, and create the demo bucket: +Démarrez une instance autonome avec les exemples désactivés, puis créez le compartiment de démonstration : ```bash docker run -d --name airflow --network oo-rustfs_default -p 8080:8080 \ @@ -31,11 +31,11 @@ docker run -d --name airflow --network oo-rustfs_default -p 8080:8080 \ rc mb rustfs/airflow-demo ``` -The image ships with all providers preinstalled, including `apache-airflow-providers-amazon`. +L’image est livrée avec tous les fournisseurs préinstallés, y compris `apache-airflow-providers-amazon`. -## 2. Register the RustFS connection +## 2. Enregistrer la connexion RustFS -The S3 provider reads its endpoint from the connection's extra field. Replace all connection placeholders: +Le fournisseur S3 lit son point de terminaison dans le champ extra de la connexion. Remplacez tous les espaces réservés de la connexion : ```bash docker exec airflow airflow connections add rustfs \ @@ -43,11 +43,11 @@ docker exec airflow airflow connections add rustfs \ --conn-extra '{"endpoint_url": "http://:9000", "region_name": "us-east-1", "aws_access_key_id": "", "aws_secret_access_key": ""}' ``` -The keys `aws_access_key_id` and `aws_secret_access_key` inside `--conn-extra` supply credentials; `endpoint_url` redirects the boto3 client from AWS to RustFS. +Les clés `aws_access_key_id` et `aws_secret_access_key` dans `--conn-extra` fournissent les identifiants ; `endpoint_url` redirige le client boto3 d’AWS vers RustFS. -## 3. Write the DAG +## 3. Écrire le DAG -The DAG writes an object with an operator, waits for the key with a sensor, and reads it back with the hook: +Le DAG écrit un objet avec un opérateur, attend la clé avec un sensor, puis la relit avec le hook : ```python title="rustfs_demo.py" import datetime @@ -95,18 +95,18 @@ def rustfs_demo(): rustfs_demo() ``` -Note the import paths: `S3CreateObjectOperator` lives in the `operators` module while `S3KeySensor` lives in the `sensors` module — importing both from one place fails. +Notez les chemins d’import : `S3CreateObjectOperator` se trouve dans le module `operators`, tandis que `S3KeySensor` se trouve dans le module `sensors` — importer les deux depuis le même endroit échoue. -## 4. Unpause and trigger +## 4. Réactiver et déclencher -New DAGs start paused, and a trigger fired while paused stays queued forever. Unpause first, then trigger: +Les nouveaux DAG démarrent en pause, et un déclenchement effectué pendant la pause reste en file d’attente indéfiniment. Réactivez d’abord, puis déclenchez : ```bash docker exec airflow airflow dags unpause rustfs_demo docker exec airflow airflow dags trigger rustfs_demo ``` -Watch the run finish: +Surveillez la fin de l’exécution : ```bash docker exec airflow airflow dags list-runs rustfs_demo | head -3 @@ -117,11 +117,11 @@ dag_id run_id state rustfs_demo manual__2026-09-29T13:15:57.332688+00:00 success ``` -All three tasks succeed: `write_object`, `wait_for_object`, and `read_object`. +Les trois tâches réussissent : `write_object`, `wait_for_object` et `read_object`. -## 5. Verify objects in RustFS +## 5. Vérifier les objets dans RustFS -List the bucket prefix: +Listez le préfixe du compartiment : ```bash rc ls rustfs/airflow-demo/ -r @@ -133,38 +133,38 @@ rc cat rustfs/airflow-demo/dags/airflow-put.txt written by airflow to rustfs ``` -![Airflow object stored in the RustFS Console](./images/rustfs-airflow-object.png) +![Objet Airflow stocké dans la Console RustFS](./images/rustfs-airflow-object.png) -## 6. Stop or reset +## 6. Arrêter ou réinitialiser -To tear down the demo while keeping the bucket objects: +Pour démonter la démonstration tout en conservant les objets du compartiment : ```bash docker rm -f airflow ``` -To delete the stored data: +Pour supprimer les données stockées : ```bash rc rm rustfs/airflow-demo/ --recursive --force ``` -## Troubleshooting +## Dépannage -### Dag runs stay `queued` after triggering +### Les exécutions de DAG restent `queued` après le déclenchement -The DAG is paused. New DAGs are paused by default in Airflow 3, and runs triggered in that state never execute. Run `airflow dags unpause rustfs_demo`; queued runs then start on their own. +Le DAG est en pause. Dans Airflow 3, les nouveaux DAG sont en pause par défaut, et les exécutions déclenchées dans cet état ne s’exécutent jamais. Exécutez `airflow dags unpause rustfs_demo` ; les exécutions en file d’attente démarrent alors d’elles-mêmes. ### `cannot import name 'S3KeySensor' from 'airflow.providers.amazon.aws.operators.s3'` -The sensor lives in a separate module: `from airflow.providers.amazon.aws.sensors.s3 import S3KeySensor`. +Le sensor se trouve dans un module distinct : `from airflow.providers.amazon.aws.sensors.s3 import S3KeySensor`. -### Tasks fail with connection errors +### Les tâches échouent avec des erreurs de connexion -The `endpoint_url` must be reachable from the Airflow container — use the Docker network hostname for RustFS, not `localhost`. Airflow 3 serves its health endpoint under `/api/v2/monitor/health` if you need to check component status. +Le `endpoint_url` doit être joignable depuis le conteneur Airflow — utilisez le nom d’hôte du réseau Docker pour RustFS, pas `localhost`. Airflow 3 expose son point de terminaison de contrôle d’intégrité sous `/api/v2/monitor/health` si vous avez besoin de vérifier l’état des composants. -## Next steps +## Étapes suivantes -- Review [S3 compatibility notes](/administration/protocols/s3) before adopting additional provider hooks. -- Create dedicated production credentials with [Access Key Management](/security-compliance/iam/access-token). -- Follow the [Amazon provider documentation](https://airflow.apache.org/docs/apache-airflow-providers-amazon/stable/index.html) for transfer operators such as `S3ToLocalFilesystemOperator` and `LocalFilesystemToS3Operator`. +- Consultez les [notes de compatibilité S3](/fr/administration/protocols/s3) avant d’adopter d’autres hooks du fournisseur. +- Créez des identifiants de production dédiés avec la [gestion des clés d’accès](/fr/security-compliance/iam/access-token). +- Suivez la [documentation du fournisseur Amazon](https://airflow.apache.org/docs/apache-airflow-providers-amazon/stable/index.html) pour les opérateurs de transfert tels que `S3ToLocalFilesystemOperator` et `LocalFilesystemToS3Operator`. diff --git a/content/fr/developer/integration/big-data/automq.md b/content/fr/developer/integration/big-data/automq.md index 053a28dee..fbbc73984 100644 --- a/content/fr/developer/integration/big-data/automq.md +++ b/content/fr/developer/integration/big-data/automq.md @@ -1,13 +1,13 @@ --- title: "AutoMQ" -description: "Run AutoMQ with RustFS as the S3-backed log storage." +description: "Exécutez AutoMQ avec RustFS comme stockage de journaux adossé à S3." --- -This guide connects [AutoMQ](https://github.com/AutoMQ/automq) — the cloud-native Kafka distribution that keeps its log storage in object storage — to **RustFS**. You will start a single-node AutoMQ broker in KRaft mode with its S3 log buckets pointed at RustFS, then produce and consume messages. The workflow was verified with AutoMQ 1.3.0 (Kafka 3.9.0 API) against `rustfs/rustfs-x86-musl:v2.3.1`. +Ce guide connecte [AutoMQ](https://github.com/AutoMQ/automq) — la distribution Kafka cloud native qui conserve son stockage de journaux dans le stockage objet — à **RustFS**. Vous allez démarrer un broker AutoMQ à nœud unique en mode KRaft, avec ses compartiments (buckets) de journaux S3 orientés vers RustFS, puis produire et consommer des messages. Le flux a été validé avec AutoMQ 1.3.0 (API Kafka 3.9.0) face à `rustfs/rustfs-x86-musl:v2.3.1`. -You need Docker. This deployment is intended for local integration testing, not production. +Vous avez besoin de Docker. Ce déploiement est destiné aux tests d’intégration locaux, pas à la production. -## Architecture +## Schéma d’architecture ```mermaid flowchart LR @@ -17,11 +17,11 @@ flowchart LR Consumer["Console consumer"] -->|"fetch"| Broker ``` -AutoMQ decouples storage from brokers: the write-ahead log is buffered locally, then uploaded as immutable stream objects into the bucket. The broker keeps no local data directory beyond the WAL. +AutoMQ découple le stockage des brokers : le journal d’écriture anticipée (write-ahead log) est mis en tampon localement, puis chargé (upload) sous forme d’objets de flux immuables dans le compartiment. Le broker ne conserve aucun répertoire de données local au-delà du WAL. -## 1. Run the broker +## 1. Exécuter le broker -Start AutoMQ with the S3 buckets pointed at RustFS. Four details are mandatory: space-separated script arguments (`--key=value` makes the startup script loop forever), `JAVA_TOOL_OPTIONS` with `-XX:-UseContainerSupport` (the bundled JDK 17 crashes on cgroup v2 detection otherwise), the `server` combined role, and credentials via `KAFKA_S3_ACCESS_KEY`/`KAFKA_S3_SECRET_KEY` environment variables (the `--s3.access.key` script arguments are ignored): +Démarrez AutoMQ avec les compartiments S3 orientés vers RustFS. Quatre détails sont obligatoires : des arguments de script séparés par des espaces (`--key=value` fait boucler le script de démarrage indéfiniment), `JAVA_TOOL_OPTIONS` avec `-XX:-UseContainerSupport` (sinon le JDK 17 fourni plante lors de la détection de cgroup v2), le rôle combiné `server`, et les identifiants via les variables d’environnement `KAFKA_S3_ACCESS_KEY`/`KAFKA_S3_SECRET_KEY` (les arguments de script `--s3.access.key` sont ignorés) : ```bash docker run -d --name automq --hostname automq --network oo-rustfs_default -p 9092:9092 \ @@ -39,9 +39,9 @@ docker run -d --name automq --hostname automq --network oo-rustfs_default -p 909 --s3.endpoint http://rustfs:9000 ``` -The broker binds its listener to the container IP. For the console tools, address it by that IP (the hostname `automq` also works from inside the container). +Le broker associe son listener à l’adresse IP du conteneur. Pour les outils de console, adressez-le par cette adresse IP (le nom d’hôte `automq` fonctionne aussi depuis l’intérieur du conteneur). -## 2. Create a topic and produce +## 2. Créer un topic et produire ```bash AIP= @@ -53,7 +53,7 @@ docker exec automq sh -c "cd /opt/automq/kafka && \ ./bin/kafka-console-producer.sh --bootstrap-server $AIP:9092 --topic rustfs-automq" ``` -## 3. Consume the messages +## 3. Consommer les messages ```bash docker exec automq sh -c "cd /opt/automq/kafka && \ @@ -68,9 +68,9 @@ mq-msg-three Processed a total of 3 messages ``` -## 4. Verify objects in RustFS +## 4. Vérifier les objets dans RustFS -List the bucket — AutoMQ writes its log streams and metrics as objects: +Listez le compartiment — AutoMQ écrit ses flux de journaux et ses métriques sous forme d’objets : ```bash rc ls rustfs/automq-demo/ -r @@ -82,41 +82,41 @@ automq/logs/rZdE0DjZSrqy96PXrMUZVw/0/2026100701/52877dc7-... automq/metrics/rZdE0DjZSrqy96PXrMUZVw/0/2026100701/4733e680-... ``` -The log stream objects hold the topic data — the broker keeps only the WAL locally, so scaling brokers up or down does not move data. +Les objets de flux de journaux contiennent les données du topic — le broker ne conserve localement que le WAL, si bien qu’augmenter ou réduire le nombre de brokers ne déplace pas les données. -![AutoMQ log streams stored in the RustFS Console](./images/rustfs-automq-logs.png) +![Flux de journaux AutoMQ stockés dans la Console RustFS](./images/rustfs-automq-logs.png) -## 5. Stop or reset +## 5. Arrêter ou réinitialiser ```bash docker rm -f automq rc rm rustfs/automq-demo/ --recursive --force ``` -## Troubleshooting +## Dépannage -### Startup script prints `setup_value:` lines forever at 100% CPU +### Le script de démarrage affiche des lignes `setup_value:` indéfiniment, à 100 % de CPU -The argument parser only accepts the space-separated form (`--s3.bucket x`, not `--s3.bucket=x`). The `=` form makes the parser loop forever. +L’analyseur d’arguments n’accepte que la forme séparée par des espaces (`--s3.bucket x`, et non `--s3.bucket=x`). La forme avec `=` fait boucler l’analyseur indéfiniment. ### `java.lang.NullPointerException ... CgroupInfo.getMountPoint()` -The bundled JDK 17 fails cgroup v2 detection in this image. Set `JAVA_TOOL_OPTIONS="-XX:-UseContainerSupport"`. +Le JDK 17 fourni échoue à la détection de cgroup v2 dans cette image. Définissez `JAVA_TOOL_OPTIONS="-XX:-UseContainerSupport"`. ### `unknown process role broker,controller` -AutoMQ 1.3.0's script expects the combined role to be spelled `server`. +Le script d’AutoMQ 1.3.0 attend que le rôle combiné s’écrive `server`. -### Broker starts but clients get `Connection to node -1 could not be established` +### Le broker démarre, mais les clients obtiennent `Connection to node -1 could not be established` -The listener binds to the container IP (`hostname -I`). Address the broker by that IP or by the hostname `automq` from inside the same Docker network — `localhost` only works for tools running inside the broker container itself. +Le listener s’associe à l’adresse IP du conteneur (`hostname -I`). Adressez le broker par cette adresse IP ou par le nom d’hôte `automq` depuis le même réseau Docker — `localhost` ne fonctionne que pour les outils exécutés à l’intérieur du conteneur du broker lui-même. ### `List objects failed, cost: 120000+ ms` -AutoMQ uses virtual-host addressing by default and falls into a retry loop against IP endpoints. Force path-style buckets by overriding the bucket URLs with `KAFKA_CFG_S3_DATA_BUCKETS`/`KAFKA_CFG_S3_OPS_BUCKETS` set to `0@s3://?region=us-east-1&endpoint=http://rustfs:9000&pathStyle=true&authType=static`, and pass credentials via `KAFKA_S3_ACCESS_KEY`/`KAFKA_S3_SECRET_KEY`. +AutoMQ utilise par défaut l’adressage de type hôte virtuel et entre dans une boucle de nouvelles tentatives face aux points de terminaison par adresse IP. Forcez l’adressage de type chemin (path-style) des compartiments en remplaçant les URL de compartiment par `KAFKA_CFG_S3_DATA_BUCKETS`/`KAFKA_CFG_S3_OPS_BUCKETS` définies sur `0@s3://?region=us-east-1&endpoint=http://rustfs:9000&pathStyle=true&authType=static`, et passez les identifiants via `KAFKA_S3_ACCESS_KEY`/`KAFKA_S3_SECRET_KEY`. -## Next steps +## Étapes suivantes -- Compare with the [Kafka](/developer/integration/big-data/kafka) guide when you prefer connect-based S3 integration on stock Kafka. -- Create dedicated production credentials with [Access Key Management](/security-compliance/iam/access-token). -- Follow the [AutoMQ documentation](https://docs.automq.com/) for multi-node clusters and WAL parameter tuning on the same bucket. +- Comparez avec le guide [Kafka](/fr/developer/integration/big-data/kafka) lorsque vous préférez une intégration S3 fondée sur Connect avec un Kafka standard. +- Créez des identifiants de production dédiés avec la [gestion des clés d’accès](/fr/security-compliance/iam/access-token). +- Suivez la [documentation AutoMQ](https://docs.automq.com/) pour les clusters à plusieurs nœuds et le réglage des paramètres du WAL sur le même compartiment. diff --git a/content/fr/developer/integration/big-data/delta-lake.md b/content/fr/developer/integration/big-data/delta-lake.md index b1bfae566..bcad61c6f 100644 --- a/content/fr/developer/integration/big-data/delta-lake.md +++ b/content/fr/developer/integration/big-data/delta-lake.md @@ -1,13 +1,13 @@ --- title: "Delta Lake" -description: "Write and read Delta tables on RustFS with delta-rs." +description: "Écrivez et lisez des tables Delta sur RustFS avec delta-rs." --- -This guide connects [Delta Lake](https://github.com/delta-io/delta) — the open-source lakehouse table format — to **RustFS** through delta-rs, the Rust-native Delta implementation. You will write a Delta table to a RustFS bucket from Python, read it back with ACID transaction history, and confirm the `_delta_log` and Parquet files in the bucket. The workflow was verified with the `deltalake` Python package (delta-rs) and pandas against `rustfs/rustfs-x86-musl:v2.3.1`. +Ce guide connecte [Delta Lake](https://github.com/delta-io/delta) — le format de table lakehouse open source — à **RustFS** via delta-rs, l’implémentation Delta native en Rust. Vous allez écrire une table Delta dans un compartiment (bucket) RustFS depuis Python, la relire avec l’historique des transactions ACID, et confirmer les fichiers `_delta_log` et Parquet dans le compartiment. Le flux a été validé avec le paquet Python `deltalake` (delta-rs) et pandas face à `rustfs/rustfs-x86-musl:v2.3.1`. -You need Python 3.9 or newer. This deployment is intended for local integration testing, not production. +Vous avez besoin de Python 3.9 ou plus récent. Ce déploiement est destiné aux tests d’intégration locaux, pas à la production. -## Architecture +## Schéma d’architecture ```mermaid flowchart LR @@ -16,19 +16,19 @@ flowchart LR Query["DeltaTable"] -->|"read / time travel"| RustFS ``` -delta-rs stores each table as Parquet files plus a transaction log (`_delta_log/`). All I/O goes through the `object_store` crate, configured with the same AWS environment variables as other S3 clients. +delta-rs stocke chaque table sous forme de fichiers Parquet plus un journal de transactions (`_delta_log/`). Toutes les E/S passent par la crate `object_store`, configurée avec les mêmes variables d’environnement AWS que les autres clients S3. -## 1. Install the client +## 1. Installer le client ```bash pip install deltalake pandas pyarrow ``` -`pyarrow` is required to convert pandas frames into Delta-compatible record batches. +`pyarrow` est requis pour convertir les cadres pandas en lots d’enregistrements compatibles avec Delta. -## 2. Write a Delta table +## 2. Écrire une table Delta -Create the bucket and write a table, replacing all connection placeholders. `AWS_S3_ALLOW_UNSAFE_RENAME` is needed because RustFS does not provide copy-if-not-exists, which delta-rs otherwise uses for commit conflicts: +Créez le compartiment et écrivez une table, en remplaçant tous les espaces réservés de connexion. `AWS_S3_ALLOW_UNSAFE_RENAME` est nécessaire parce que RustFS ne fournit pas copy-if-not-exists, que delta-rs utilise sinon pour les conflits de commit : ```python title="delta_s3.py" import pandas as pd @@ -53,9 +53,9 @@ print("written:", df.shape[0], "rows") written: 3 rows ``` -The `table` URI uses the standard `s3://bucket/prefix` form; the endpoint and credentials come from `storage_options`. +L’URI `table` utilise la forme standard `s3://bucket/prefix` ; le point de terminaison et les identifiants viennent de `storage_options`. -## 3. Read the table back +## 3. Relire la table ```python title="delta_read.py" from deltalake import DeltaTable @@ -75,51 +75,51 @@ read back: 3 rows version: 0 ``` -Because the version is tracked in the transaction log, the same table supports time travel with `DeltaTable(..., version=N)` and appends that bump the version. +Comme la version est suivie dans le journal des transactions, la même table prend en charge le voyage dans le temps avec `DeltaTable(..., version=N)` et les ajouts qui incrémentent la version. -## 4. Verify objects in RustFS +## 4. Vérifier les objets dans RustFS -List the table prefix: +Listez le préfixe de la table : ```bash rc ls rustfs// -r ``` -The first commit created the transaction log and one Parquet file: +Le premier commit a créé le journal des transactions et un fichier Parquet : ```text events/_delta_log/00000000000000000000.json events/part-00000-3859855e-45e4-4ae5-94ff-2d8eab5e7ebb-c000.snappy.parquet ``` -Every new write adds a `NNNNNNNNNNNNNNNNNNNN.json` log entry and Parquet parts; readers replay the log to get a consistent snapshot. +Chaque nouvelle écriture ajoute une entrée de journal `NNNNNNNNNNNNNNNNNNNN.json` et des parties Parquet ; les lecteurs rejouent le journal pour obtenir un instantané cohérent. -![Delta table files stored in the RustFS Console](./images/rustfs-delta-table.png) +![Fichiers de table Delta stockés dans la Console RustFS](./images/rustfs-delta-table.png) -## 5. Stop or reset +## 5. Arrêter ou réinitialiser -delta-rs holds no state of its own. To delete the table: +delta-rs ne conserve aucun état propre. Pour supprimer la table : ```bash rc rm rustfs//events/ --recursive --force ``` -## Troubleshooting +## Dépannage -### `Import pyarrow failed` when writing a pandas DataFrame +### `Import pyarrow failed` lors de l’écriture d’un DataFrame pandas -`write_deltalake` converts frames through Arrow. Install `pyarrow` alongside `deltalake` and `pandas`. +`write_deltalake` convertit les cadres via Arrow. Installez `pyarrow` en plus de `deltalake` et de `pandas`. -### `Generic DeltaTable error: commit conflict` or rename errors on commit +### `Generic DeltaTable error: commit conflict` ou erreurs de renommage au commit -delta-rs commits by copying and renaming temporary objects, which requires atomic rename on the backend. For S3-compatible stores without copy-if-not-exists, set `AWS_S3_ALLOW_UNSAFE_RENAME: "true"` in `storage_options` — acceptable for a single writer, not for concurrent writers. +delta-rs valide les commits en copiant et en renommant des objets temporaires, ce qui exige un renommage atomique sur le backend. Pour les magasins compatibles avec S3 sans copy-if-not-exists, définissez `AWS_S3_ALLOW_UNSAFE_RENAME: "true"` dans `storage_options` — acceptable pour un seul rédacteur, pas pour des rédacteurs concurrents. ### `Unknown lengthy error: AWS connectivity or endpoint errors` -Confirm `AWS_ENDPOINT_URL` includes the scheme and that `AWS_ALLOW_HTTP` is `"true"` for plain-HTTP endpoints; without it the S3 client only speaks HTTPS. +Vérifiez que `AWS_ENDPOINT_URL` inclut le schéma et que `AWS_ALLOW_HTTP` vaut `"true"` pour les points de terminaison en HTTP simple ; sans cela, le client S3 ne parle que HTTPS. -## Next steps +## Étapes suivantes -- Review [S3 compatibility notes](/administration/protocols/s3) before adopting additional Delta clients. -- Create dedicated production credentials with [Access Key Management](/security-compliance/iam/access-token). -- Follow the [delta-rs usage documentation](https://delta-io.github.io/delta-rs/usage/writing/writing-to-s3/) for concurrent-writer setups with DynamoDB-backed commit coordination. +- Consultez les [notes de compatibilité S3](/fr/administration/protocols/s3) avant d’adopter d’autres clients Delta. +- Créez des identifiants de production dédiés avec la [gestion des clés d’accès](/fr/security-compliance/iam/access-token). +- Suivez la [documentation d’utilisation de delta-rs](https://delta-io.github.io/delta-rs/usage/writing/writing-to-s3/) pour les configurations à rédacteurs concurrents avec une coordination de commit adossée à DynamoDB. diff --git a/content/fr/developer/integration/big-data/dolphinscheduler.md b/content/fr/developer/integration/big-data/dolphinscheduler.md index ca90bc0aa..da621bd94 100644 --- a/content/fr/developer/integration/big-data/dolphinscheduler.md +++ b/content/fr/developer/integration/big-data/dolphinscheduler.md @@ -1,13 +1,13 @@ --- title: "DolphinScheduler" -description: "Store DolphinScheduler resources on RustFS over S3." +description: "Stockez les ressources DolphinScheduler sur RustFS via S3." --- -This guide connects [Apache DolphinScheduler](https://github.com/apache/dolphinscheduler) — the workflow scheduler — to **RustFS** as its resource center storage. You will run the standalone server, switch the resource storage to S3, upload a resource file through the API, and verify the object in the bucket. The workflow was verified with DolphinScheduler 3.2.1 (standalone server) against `rustfs/rustfs-x86-musl:v2.3.1`. +Ce guide connecte [Apache DolphinScheduler](https://github.com/apache/dolphinscheduler) — l’ordonnanceur de workflows — à **RustFS** comme stockage de son centre de ressources. Vous allez exécuter le serveur autonome, basculer le stockage des ressources vers S3, charger (upload) un fichier de ressource via l’API et vérifier l’objet dans le compartiment (bucket). Le flux a été validé avec DolphinScheduler 3.2.1 (serveur autonome) face à `rustfs/rustfs-x86-musl:v2.3.1`. -You need Docker. +Vous avez besoin de Docker. -## Architecture +## Schéma d’architecture ```mermaid flowchart LR @@ -15,9 +15,9 @@ flowchart LR DS -->|"S3 API"| RustFS["RustFS :9000"] ``` -The resource center stores workflow scripts, dependency JARs, and other files. With S3 storage every uploaded file becomes an object under `dolphinscheduler//resources/` in the bucket. +Le centre de ressources stocke les scripts de workflow, les JAR de dépendances et d’autres fichiers. Avec le stockage S3, chaque fichier chargé devient un objet sous `dolphinscheduler//resources/` dans le compartiment. -## 1. Run the standalone server +## 1. Exécuter le serveur autonome ```bash docker run -d --name dolphinscheduler --hostname dolphinscheduler \ @@ -25,11 +25,11 @@ docker run -d --name dolphinscheduler --hostname dolphinscheduler \ apache/dolphinscheduler-standalone-server:3.2.1 ``` -The single container bundles master, worker, API, alert, and an embedded ZooKeeper. The UI is at `http://localhost:12345/dolphinscheduler/ui` (default login `admin` / `dolphinscheduler123`). +Le conteneur unique regroupe le master, le worker, l’API, l’alerte et un ZooKeeper intégré. L’interface est à `http://localhost:12345/dolphinscheduler/ui` (connexion par défaut `admin` / `dolphinscheduler123`). -## 2. Switch the resource center to RustFS +## 2. Basculer le centre de ressources vers RustFS -The storage backend lives in `/opt/dolphinscheduler/conf/common.properties`. Append the S3 properties to the existing file — do not replace the file, it holds many other settings: +Le backend de stockage se trouve dans `/opt/dolphinscheduler/conf/common.properties`. Ajoutez les propriétés S3 au fichier existant — ne remplacez pas le fichier, il contient de nombreux autres réglages : ```bash docker exec dolphinscheduler bash -c "cat >> /opt/dolphinscheduler/conf/common.properties << 'EOF' @@ -45,15 +45,15 @@ EOF" docker restart dolphinscheduler ``` -Wait for the API to come back (about a minute), then create the bucket: +Attendez le retour de l’API (environ une minute), puis créez le compartiment : ```bash rc mb rustfs/ds-demo ``` -## 3. Upload a resource file +## 3. Charger un fichier de ressource -Log in through the API to get a session id, then upload a file. The endpoint requires both `name` and `fullName` parameters: +Connectez-vous via l’API pour obtenir un identifiant de session, puis chargez un fichier. Le point de terminaison exige les deux paramètres `name` et `fullName` : ```bash printf "ds resource file stored in rustfs" > /tmp/ds-file.txt @@ -71,9 +71,9 @@ curl -s -m 30 -X POST "http://localhost:12345/dolphinscheduler/resources" \ {"code":0,"msg":"success","data":null,"failed":false,"success":true} ``` -## 4. Verify in DolphinScheduler and RustFS +## 4. Vérifier dans DolphinScheduler et RustFS -Read the file back through the API: +Relisez le fichier via l’API : ```bash curl -s -m 30 "http://localhost:12345/dolphinscheduler/resources/view-ui?fullName=/ds-file.txt&skipLineNum=100&limit=100" \ @@ -84,7 +84,7 @@ curl -s -m 30 "http://localhost:12345/dolphinscheduler/resources/view-ui?fullNam ds resource file stored in rustfs ``` -List the bucket — the file sits under the tenant's resources prefix: +Listez le compartiment — le fichier se trouve sous le préfixe de ressources du tenant : ```bash rc ls rustfs/ds-demo/ -r @@ -95,31 +95,31 @@ dolphinscheduler/default/resources/ds-file.txt dolphinscheduler/default/udfs/ ``` -![DolphinScheduler resources stored in the RustFS Console](./images/rustfs-ds-resources.png) +![Ressources DolphinScheduler stockées dans la Console RustFS](./images/rustfs-ds-resources.png) -## 5. Stop or reset +## 5. Arrêter ou réinitialiser ```bash docker rm -f dolphinscheduler rc rm rustfs/ds-demo/ --recursive --force ``` -## Troubleshooting +## Dépannage -### Server fails to start with an Azure `clientId/tenantId/clientSecret` error +### Le serveur ne démarre pas et signale une erreur Azure `clientId/tenantId/clientSecret` -The storage config was written as a brand-new file instead of appended, so `resource.storage.type=S3` was lost and the defaults pointed at Azure. Always append to the existing `common.properties` as in step 2. +La configuration de stockage a été écrite comme un fichier entièrement nouveau au lieu d’être ajoutée, si bien que `resource.storage.type=S3` a été perdu et que les valeurs par défaut pointaient vers Azure. Ajoutez toujours le contenu au fichier `common.properties` existant, comme à l’étape 2. ### `Required request parameter 'name'/'fullName' is not present` -The resource create endpoint requires both `name` and `fullName` form fields alongside `file`, `type`, and `currentDir`. +Le point de terminaison de création de ressource exige les deux champs de formulaire `name` et `fullName`, en plus de `file`, `type` et `currentDir`. -### API returns 405 for the token call +### L’API renvoie 405 pour l’appel de jeton -The login/token endpoints accept POST but `/api/v2/token` style endpoints differ per version — use the login form shown in step 3 and pass `session-id` header plus `Cookie: sessionId=...` on every call. +Les points de terminaison de connexion et de jeton acceptent POST, mais les points de terminaison de style `/api/v2/token` diffèrent selon la version — utilisez le formulaire de connexion indiqué à l’étape 3 et transmettez l’en-tête `session-id` ainsi que `Cookie: sessionId=...` à chaque appel. -## Next steps +## Étapes suivantes -- Compare with the [Airflow](/developer/integration/big-data/airflow) guide for orchestration without a built-in resource center. -- Create dedicated production credentials with [Access Key Management](/security-compliance/iam/access-token). -- Follow the [DolphinScheduler documentation](https://dolphinscheduler.apache.org/en-us/docs/latest/user_doc/common/resource-management.html) to wire the same S3 resource center into worker task execution. +- Comparez avec le guide [Airflow](/fr/developer/integration/big-data/airflow) pour une orchestration sans centre de ressources intégré. +- Créez des identifiants de production dédiés avec la [gestion des clés d’accès](/fr/security-compliance/iam/access-token). +- Suivez la [documentation DolphinScheduler](https://dolphinscheduler.apache.org/en-us/docs/latest/user_doc/common/resource-management.html) pour raccorder le même centre de ressources S3 à l’exécution des tâches du worker. diff --git a/content/fr/developer/integration/big-data/flink.md b/content/fr/developer/integration/big-data/flink.md index dfa4c5fc9..7e0df4fdd 100644 --- a/content/fr/developer/integration/big-data/flink.md +++ b/content/fr/developer/integration/big-data/flink.md @@ -239,7 +239,7 @@ Vous pouvez également parcourir le préfixe dans la Console RustFS : ## 6. Utiliser RustFS S3 Tables -RustFS S3 Tables fournit un catalogue REST Apache Iceberg intégré, permettant à Flink de traiter un compartiment de tables (table bucket) comme un entrepôt Iceberg géré tandis que les données restent dans RustFS. Activez un compartiment de tables et orientez le catalogue REST du connecteur Iceberg de Flink vers RustFS comme décrit dans [S3 Tables](/administration/data/s3-tables) : l’URI du catalogue REST est `http://:9000/iceberg`, le warehouse est le nom du compartiment, et les requêtes de catalogue (AWS Signature Version 4, nom de signature `s3`) comme l’accès aux fichiers S3 utilisent l’adressage de type chemin (path-style). +RustFS S3 Tables fournit un catalogue REST Apache Iceberg intégré, permettant à Flink de traiter un compartiment de tables (table bucket) comme un entrepôt Iceberg géré tandis que les données restent dans RustFS. Activez un compartiment de tables et orientez le catalogue REST du connecteur Iceberg de Flink vers RustFS comme décrit dans [S3 Tables](/fr/administration/data/s3-tables) : l’URI du catalogue REST est `http://:9000/iceberg`, le warehouse est le nom du compartiment, et les requêtes de catalogue (AWS Signature Version 4, nom de signature `s3`) comme l’accès aux fichiers S3 utilisent l’adressage de type chemin (path-style). Selon la matrice de prise en charge S3 Tables, validez les versions exactes de Flink et d’Iceberg que vous déployez par rapport au catalogue avant d’adopter ce chemin en production. @@ -273,6 +273,6 @@ La reprise d’un chargement S3 (upload) en cours après un échec peut laisser ## Étapes suivantes -- Consultez les [notes de compatibilité S3](/administration/protocols/s3) avant d’adopter d’autres opérations S3. -- Créez des identifiants de production dédiés avec la [gestion des clés d’accès](/security-compliance/iam/access-token). +- Consultez les [notes de compatibilité S3](/fr/administration/protocols/s3) avant d’adopter d’autres opérations S3. +- Créez des identifiants de production dédiés avec la [gestion des clés d’accès](/fr/security-compliance/iam/access-token). - Suivez la [documentation Apache Flink](https://nightlies.apache.org/flink/flink-docs-stable/) pour les options du connecteur filesystem telles que le partitionnement et la compaction. diff --git a/content/fr/developer/integration/big-data/hive.md b/content/fr/developer/integration/big-data/hive.md index e1d506726..2c6c887c2 100644 --- a/content/fr/developer/integration/big-data/hive.md +++ b/content/fr/developer/integration/big-data/hive.md @@ -1,13 +1,13 @@ --- title: "Hive" -description: "Store Hive table data on RustFS over S3A." +description: "Stockez les données de tables Hive sur RustFS via S3A." --- -This guide connects [Apache Hive](https://github.com/apache/hive) — the classic data warehouse — to **RustFS** through the S3A filesystem. You will run the Hive 4.0.1 Docker image with a metastore and HiveServer2, configure S3A in three configuration layers, create an external table over a RustFS location, and load and query data. The workflow was verified with Hive 4.0.1 against `rustfs/rustfs-x86-musl:v2.3.1`. +Ce guide connecte [Apache Hive](https://github.com/apache/hive) — l’entrepôt de données classique — à **RustFS** via le système de fichiers S3A. Vous allez exécuter l’image Docker Hive 4.0.1 avec un metastore et HiveServer2, configurer S3A dans trois couches de configuration, créer une table externe sur un emplacement RustFS, puis charger et interroger les données. Le flux a été validé avec Hive 4.0.1 face à `rustfs/rustfs-x86-musl:v2.3.1`. -You need Docker (two containers: metastore and hiveserver2). +Vous avez besoin de Docker (deux conteneurs : metastore et hiveserver2). -## Architecture +## Schéma d’architecture ```mermaid flowchart LR @@ -16,9 +16,9 @@ flowchart LR HS2 -->|"Tez tasks: S3A"| RustFS["RustFS :9000"] ``` -Hive stores table metadata in the metastore (Derby in this test) and table data in the table's S3A location. Query execution runs on Tez inside the hiveserver2 container. +Hive stocke les métadonnées des tables dans le metastore (Derby dans ce test) et les données des tables dans l’emplacement S3A de la table. L’exécution des requêtes s’effectue sur Tez à l’intérieur du conteneur hiveserver2. -## 1. Run the metastore and HiveServer2 +## 1. Exécuter le metastore et HiveServer2 ```bash docker run -d --name hive-metastore --hostname hive-meta --network oo-rustfs_default \ @@ -28,11 +28,11 @@ docker run -d --name hive-server --hostname hive-server --network oo-rustfs_defa -e SERVICE_NAME=hiveserver2 -e DB_DRIVER=derby apache/hive:4.0.1 ``` -The metastore takes 1-2 minutes to initialize its Derby schema; HiveServer2 listens on 10000, the metastore on 9083. +Le metastore met 1 à 2 minutes à initialiser son schéma Derby ; HiveServer2 écoute sur le port 10000, le metastore sur le port 9083. -## 2. Configure S3A in three places +## 2. Configurer S3A à trois endroits -Tez tasks read the Hadoop configuration directory, HiveServer2 reads the Hive configuration, and the metastore needs the endpoint too. Create one properties file and copy it to all three paths: +Les tâches Tez lisent le répertoire de configuration Hadoop, HiveServer2 lit la configuration Hive, et le metastore a aussi besoin du point de terminaison. Créez un seul fichier de propriétés et copiez-le vers les trois chemins : ```xml title="s3a-core-site.xml" @@ -61,9 +61,9 @@ docker exec hive-server bash -c \ docker restart hive-server ``` -The `hadoop-aws` jar ships in `/opt/hadoop/share/hadoop/tools/lib` — the `HADOOP_CLASSPATH` export puts it on the query classpath. `mkdir /home/hive/.beeline` silences a harmless beeline home-directory error. +Le JAR `hadoop-aws` est livré dans `/opt/hadoop/share/hadoop/tools/lib` — l’export `HADOOP_CLASSPATH` le place sur le classpath des requêtes. `mkdir /home/hive/.beeline` fait taire une erreur inoffensive de répertoire personnel de beeline. -## 3. Create an external table +## 3. Créer une table externe ```bash docker exec hive-server bash -c "cd /opt/hive && beeline -u 'jdbc:hive2://localhost:10000' \ @@ -72,11 +72,11 @@ docker exec hive-server bash -c "cd /opt/hive && beeline -u 'jdbc:hive2://localh LOCATION 's3a://hive-demo/warehouse/events';\"" ``` -An `EXTERNAL` table with an S3A `LOCATION` keeps all data in RustFS. (A managed `CREATE TABLE ... LOCATION` on a non-default database path is rejected by Hive 4 managed-table rules — use external tables for S3A locations.) +Une table `EXTERNAL` avec un `LOCATION` S3A conserve toutes les données dans RustFS. (Un `CREATE TABLE ... LOCATION` géré, sur un chemin de base autre que celui par défaut, est refusé par les règles des tables gérées de Hive 4 — utilisez des tables externes pour les emplacements S3A.) -## 4. Load and query data +## 4. Charger les données et les interroger -`LOAD DATA INPATH` moves a local file into the table's S3A location (the rename is executed by HiveServer2, which has the credentials): +`LOAD DATA INPATH` déplace un fichier local vers l’emplacement S3A de la table (le renommage est exécuté par HiveServer2, qui dispose des identifiants) : ```bash docker exec hive-server bash -c "printf '1,alpha\n2,beta\n3,gamma\n' > /tmp/hive-load.txt" @@ -88,7 +88,7 @@ docker exec hive-server bash -c "cd /opt/hive && beeline -u 'jdbc:hive2://localh INFO : Loading data to table default.events from file:/tmp/hive-load.txt ``` -## 5. Query and verify in RustFS +## 5. Interroger et vérifier dans RustFS ```bash docker exec hive-server bash -c "cd /opt/hive && beeline -u 'jdbc:hive2://localhost:10000' \ @@ -101,7 +101,7 @@ docker exec hive-server bash -c "cd /opt/hive && beeline -u 'jdbc:hive2://localh 3 gamma ``` -List the table directory — the loaded file is an ordinary object: +Listez le répertoire de la table — le fichier chargé est un objet ordinaire : ```bash rc ls rustfs/hive-demo/warehouse/events/ @@ -113,35 +113,35 @@ warehouse/events/hive-load_copy_1.txt warehouse/events/hive-load_copy_2.txt ``` -![Hive warehouse files stored in the RustFS Console](./images/rustfs-hive-warehouse.png) +![Fichiers d’entrepôt Hive stockés dans la Console RustFS](./images/rustfs-hive-warehouse.png) -## 6. Stop or reset +## 6. Arrêter ou réinitialiser ```bash docker rm -f hive-server hive-metastore rc rm rustfs/hive-demo/ --recursive --force ``` -## Troubleshooting +## Dépannage -### `NoClassDefFoundError: org.apache.tez.mapreduce.hadoop.InputSplitInfo` on INSERT +### `NoClassDefFoundError: org.apache.tez.mapreduce.hadoop.InputSplitInfo` sur INSERT -The Tez jars are missing from the query classpath. Add the `HADOOP_CLASSPATH` export from step 2 (tools lib + tez + tez lib) to `/opt/hive/conf/hive-env.sh`. +Les JAR Tez sont absents du classpath des requêtes. Ajoutez l’export `HADOOP_CLASSPATH` de l’étape 2 (bibliothèque tools, plus tez et tez lib) à `/opt/hive/conf/hive-env.sh`. ### `NoAwsCredentialsException: SimpleAWSCredentialsProvider: No AWS credentials in the Hadoop configuration` -Tez task processes read `/opt/hadoop/etc/hadoop/core-site.xml`, not only the Hive conf directory. Copy the S3A properties to all three paths from step 2. +Les processus de tâches Tez lisent `/opt/hadoop/etc/hadoop/core-site.xml`, et pas seulement le répertoire de configuration Hive. Copiez les propriétés S3A vers les trois chemins de l’étape 2. -### `Permission denied` printed after every beeline command +### `Permission denied` s’affiche après chaque commande beeline -beeline tries to create `/home/hive/.beeline`. Run `mkdir -p /home/hive/.beeline && chmod 777` once (as root in the container). +beeline tente de créer `/home/hive/.beeline`. Exécutez `mkdir -p /home/hive/.beeline && chmod 777` une fois (en tant que root dans le conteneur). ### `Unable to create database managed path file:/user/hive/warehouse/...` -Hive 4 keeps managed databases inside the managed warehouse root. Use `CREATE EXTERNAL TABLE ... LOCATION 's3a://...'` for S3A locations. +Hive 4 conserve les bases gérées à l’intérieur de la racine de l’entrepôt géré. Utilisez `CREATE EXTERNAL TABLE ... LOCATION 's3a://...'` pour les emplacements S3A. -## Next steps +## Étapes suivantes -- Compare with the [Trino](/developer/integration/database/trino) guide when you want interactive SQL over the same objects without a metastore. -- Create dedicated production credentials with [Access Key Management](/security-compliance/iam/access-token). -- Follow the [Hive documentation](https://hive.apache.org/) to attach a MySQL-backed metastore and share the same warehouse across Hive and Spark on the same bucket. +- Comparez avec le guide [Trino](/fr/developer/integration/database/trino) lorsque vous voulez du SQL interactif sur les mêmes objets, sans metastore. +- Créez des identifiants de production dédiés avec la [gestion des clés d’accès](/fr/security-compliance/iam/access-token). +- Suivez la [documentation Hive](https://hive.apache.org/) pour rattacher un metastore adossé à MySQL et partager le même entrepôt entre Hive et Spark sur le même compartiment (bucket). diff --git a/content/fr/developer/integration/big-data/hudi.md b/content/fr/developer/integration/big-data/hudi.md index 42026454b..fc2d3b367 100644 --- a/content/fr/developer/integration/big-data/hudi.md +++ b/content/fr/developer/integration/big-data/hudi.md @@ -1,24 +1,24 @@ --- title: "Apache Hudi" -description: "Write Apache Hudi tables to RustFS through Spark and the s3a connector." +description: "Écrivez des tables Apache Hudi vers RustFS via Spark et le connecteur s3a." --- -This guide connects [Apache Hudi](https://github.com/apache/hudi) — the transactional data lake platform — to **RustFS** as its copy-on-write table store. You will run Spark with the Hudi bundle, write a table to the `s3a://` location inside a RustFS bucket, read it back, and verify the table files. The workflow was verified with `apache/spark:3.5.6`, `hudi-spark3.5-bundle_2.12:0.15.0`, `hadoop-aws:3.3.4`, and `rustfs/rustfs-x86-musl:v2.3.1`. +Ce guide connecte [Apache Hudi](https://github.com/apache/hudi) — la plateforme transactionnelle de lac de données — à **RustFS** comme magasin de tables en copie sur écriture (copy-on-write). Vous allez exécuter Spark avec le bundle Hudi, écrire une table vers l’emplacement `s3a://` à l’intérieur d’un compartiment (bucket) RustFS, la relire et vérifier les fichiers de la table. Le flux a été validé avec `apache/spark:3.5.6`, `hudi-spark3.5-bundle_2.12:0.15.0`, `hadoop-aws:3.3.4` et `rustfs/rustfs-x86-musl:v2.3.1`. -You need Docker. This deployment is intended for local integration testing, not production. +Vous avez besoin de Docker. Ce déploiement est destiné aux tests d’intégration locaux, pas à la production. -## Architecture +## Schéma d’architecture ```mermaid flowchart LR Job["Spark + Hudi"] -->|"commit + parquet"| RustFS["RustFS :9000"] ``` -Hudi stores the `.hoodie/` timeline, commit files, and Parquet data blocks under the table path in the bucket. Reads resolve the latest table snapshot from the timeline, so every write and query goes through the S3 API. +Hudi stocke la chronologie `.hoodie/`, les fichiers de commit et les blocs de données Parquet sous le chemin de la table dans le compartiment. Les lectures déterminent le dernier instantané de la table à partir de la chronologie, si bien que chaque écriture et chaque requête passe par l’API S3. -## 1. Run the Spark write +## 1. Exécuter l’écriture Spark -Hudi requires the Kryo serializer and the s3a credentials as Hadoop properties. The following `spark-shell` session creates a non-partitioned table in `my-bucket` — replace all connection placeholders: +Hudi exige le sérialiseur Kryo et les identifiants s3a sous forme de propriétés Hadoop. La session `spark-shell` suivante crée une table non partitionnée dans `my-bucket` — remplacez tous les espaces réservés de connexion : ```scala import org.apache.spark.sql.SaveMode @@ -52,7 +52,7 @@ docker run --rm --network oo-rustfs_default \ -i /tmp/hudi_test.scala ``` -The `--packages` flags download the Hudi bundle and the s3a connector on first run. The `spark.jars.ivy` setting avoids Ivy cache permission errors in the container. The read-back `show()` prints the three rows: +Les indicateurs `--packages` téléchargent le bundle Hudi et le connecteur s3a au premier lancement. Le réglage `spark.jars.ivy` évite les erreurs de droits sur le cache Ivy dans le conteneur. Le `show()` de relecture affiche les trois lignes : ```text +---+----+ @@ -62,15 +62,15 @@ The `--packages` flags download the Hudi bundle and the s3a connector on first r +---+----+ ``` -## 2. Verify objects in RustFS +## 2. Vérifier les objets dans RustFS -List the table prefix: +Listez le préfixe de la table : ```bash rc ls rustfs/my-bucket/hudi-demo/ -r ``` -The Hudi table layout appears under the table path — the `.hoodie/` timeline with the commit file, plus the Parquet data block: +La disposition de la table Hudi apparaît sous le chemin de la table — la chronologie `.hoodie/` avec le fichier de commit, plus le bloc de données Parquet : ```text hudi-demo/events/.hoodie/20260922015803291.commit @@ -78,32 +78,32 @@ hudi-demo/events/.hoodie/20260922015803291.commit.requested hudi-demo/events/// ``` -![Hudi table files stored in the RustFS Console](./images/rustfs-hudi-table.png) +![Fichiers de table Hudi stockés dans la Console RustFS](./images/rustfs-hudi-table.png) -## 3. Stop or reset +## 3. Arrêter ou réinitialiser -Spark runs as a one-shot client and holds no state. To delete the demo table: +Spark s’exécute comme un client ponctuel et ne conserve aucun état. Pour supprimer la table de démonstration : ```bash rc rm rustfs/my-bucket/hudi-demo/ --recursive --force ``` -## Troubleshooting +## Dépannage ### `hoodie only support org.apache.spark.serializer.KryoSerializer as spark.serializer` -Hudi rejects the default Spark serializer. Pass `--conf spark.serializer=org.apache.spark.serializer.KryoSerializer` as shown above. +Hudi refuse le sérialiseur Spark par défaut. Passez `--conf spark.serializer=org.apache.spark.serializer.KryoSerializer` comme indiqué ci-dessus. -### `Partition-path field has to be non-empty` or keygenerator class errors +### `Partition-path field has to be non-empty` ou erreurs de classe keygenerator -For a non-partitioned table, keep the default key generator (do not set `hoodie.datasource.write.keygenerator.class`) and set `hoodie.datasource.write.partitionpath.field` to the empty string. +Pour une table non partitionnée, conservez le générateur de clés par défaut (ne définissez pas `hoodie.datasource.write.keygenerator.class`) et définissez `hoodie.datasource.write.partitionpath.field` comme chaîne vide. -### `NoSuchMethodError` or `ClassNotFoundException` in the Hudi write +### `NoSuchMethodError` ou `ClassNotFoundException` dans l’écriture Hudi -The Spark and Hudi bundle versions must match: `hudi-spark3.5-bundle_2.12` goes with Spark 3.5.x, and the bundled Hadoop client must be compatible with `hadoop-aws:3.3.4`. +Les versions de Spark et du bundle Hudi doivent correspondre : `hudi-spark3.5-bundle_2.12` va avec Spark 3.5.x, et le client Hadoop fourni doit être compatible avec `hadoop-aws:3.3.4`. -## Next steps +## Étapes suivantes -- Review [S3 compatibility notes](/administration/protocols/s3) before adopting additional Hudi operations. -- Create dedicated production credentials with [Access Key Management](/security-compliance/iam/access-token). -- Follow the [Hudi Spark guide](https://hudi.apache.org/docs/quick-start-guide/) to add upserts, compaction, and query integrations on the same table. +- Consultez les [notes de compatibilité S3](/fr/administration/protocols/s3) avant d’adopter d’autres opérations Hudi. +- Créez des identifiants de production dédiés avec la [gestion des clés d’accès](/fr/security-compliance/iam/access-token). +- Suivez le [guide Spark de Hudi](https://hudi.apache.org/docs/quick-start-guide/) pour ajouter des upserts, la compaction et des intégrations de requêtes sur la même table. diff --git a/content/fr/developer/integration/big-data/iceberg.md b/content/fr/developer/integration/big-data/iceberg.md index 5b1899b89..2d05f3a4e 100644 --- a/content/fr/developer/integration/big-data/iceberg.md +++ b/content/fr/developer/integration/big-data/iceberg.md @@ -5,7 +5,7 @@ description: "Exécutez Apache Iceberg avec Spark, un catalogue REST et le stock Ce guide exécute **Apache Iceberg** avec Spark, un catalogue REST Iceberg et **RustFS** comme entrepôt compatible avec S3. Vous allez créer une table Iceberg, écrire des lignes, les interroger et vérifier que les fichiers de la table sont stockés dans RustFS. -Pour utiliser le catalogue REST intégré à RustFS, suivez la [configuration de S3 Tables](/administration/data/s3-tables) et le [guide PyIceberg](/developer/integration/big-data/pyiceberg). Le déploiement ci-dessous exécute un service de catalogue distinct. +Pour utiliser le catalogue REST intégré à RustFS, suivez la [configuration de S3 Tables](/fr/administration/data/s3-tables) et le [guide PyIceberg](/fr/developer/integration/big-data/pyiceberg). Le déploiement ci-dessous exécute un service de catalogue distinct. Vous avez besoin de Docker avec le plugin Compose et de ressources locales suffisantes pour quatre conteneurs. Ce déploiement est destiné à un test d’intégration local, pas à la production. @@ -13,7 +13,7 @@ Vous avez besoin de Docker avec le plugin Compose et de ressources locales suffi La [demande d’intégration n° 14928](https://github.com/apache/iceberg/pull/14928) d’Apache Iceberg a démontré le même flux Spark, catalogue REST, `S3FileIO` et RustFS, y compris la création de table et les écritures. Cette demande a été fermée sans être fusionnée, et le [guide de démarrage Spark](https://iceberg.apache.org/spark-quickstart/#docker-compose) actuel utilise encore un autre stockage compatible avec S3. La configuration ci-dessous documente donc une intégration RustFS, et non un réglage par défaut d’Apache Iceberg. -:: : +::: ## Schéma d’architecture @@ -154,7 +154,7 @@ L’[image `rc`](https://github.com/rustfs/cli) fournit le client en ligne de co Les images du guide de démarrage Apache Iceberg sont publiées sans étiquettes de version stables dans l’exemple en amont. Avant d’utiliser ce modèle au-delà d’un test local, épinglez chaque image sur une étiquette ou une empreinte testée, et validez ensemble les versions de Spark, du moteur Iceberg et du catalogue REST. -:: : +::: ## 2. Valider et démarrer le déploiement @@ -270,6 +270,6 @@ La propriété du catalogue REST utilise des doubles traits de soulignement dans ## Étapes suivantes -- Consultez les [notes de compatibilité S3](/administration/protocols/s3) avant d’adopter d’autres opérations Iceberg. -- Créez des identifiants de production dédiés avec la [gestion des clés d’accès](/security-compliance/iam/access-token). +- Consultez les [notes de compatibilité S3](/fr/administration/protocols/s3) avant d’adopter d’autres opérations Iceberg. +- Créez des identifiants de production dédiés avec la [gestion des clés d’accès](/fr/security-compliance/iam/access-token). - Suivez la [documentation Spark d’Apache Iceberg](https://iceberg.apache.org/docs/latest/spark-getting-started/) pour configurer votre environnement Spark existant. \ No newline at end of file diff --git a/content/fr/developer/integration/big-data/kafka.md b/content/fr/developer/integration/big-data/kafka.md index ff1e92f9f..4547e867a 100644 --- a/content/fr/developer/integration/big-data/kafka.md +++ b/content/fr/developer/integration/big-data/kafka.md @@ -1,15 +1,15 @@ --- title: "Kafka" -description: "Offload Kafka topic data to RustFS with the Kafka Connect S3 sink connector." +description: "Déchargez les données de topics Kafka vers RustFS avec le connecteur sink S3 de Kafka Connect." --- -This guide connects [Apache Kafka](https://github.com/apache/kafka) — the distributed event streaming platform — to **RustFS** through the Kafka Connect S3 sink connector. You will run a KRaft broker and a Connect worker, deploy the S3 sink for a topic, and produce records that land as objects in a RustFS bucket. The workflow was verified with `apache/kafka:4.0.0` and `confluentinc/kafka-connect-s3` v10.5.25 against `rustfs/rustfs-x86-musl:v2.3.1`. +Ce guide connecte [Apache Kafka](https://github.com/apache/kafka) — la plateforme distribuée de streaming d’événements — à **RustFS** via le connecteur sink S3 de Kafka Connect. Vous allez exécuter un broker KRaft et un worker Connect, déployer le sink S3 pour un topic et produire des enregistrements qui arrivent sous forme d’objets dans un compartiment (bucket) RustFS. Le flux a été validé avec `apache/kafka:4.0.0` et `confluentinc/kafka-connect-s3` v10.5.25 face à `rustfs/rustfs-x86-musl:v2.3.1`. -Kafka's KIP-405 tiered storage needs a `RemoteLogStorageManager` plugin, and the S3 implementations in the ecosystem are vendor-proprietary. The Connect S3 sink is the open, self-hosted way to move topic data to S3-compatible storage and is the approach documented here. +Le stockage hiérarchisé KIP-405 de Kafka nécessite un plugin `RemoteLogStorageManager`, et les implémentations S3 de l’écosystème sont des solutions propriétaires d’éditeurs. Le sink S3 de Connect est le moyen ouvert et auto-hébergé de déplacer les données de topic vers un stockage compatible avec S3, et c’est l’approche documentée ici. -You need Docker. This deployment is intended for local integration testing, not production. +Vous avez besoin de Docker. Ce déploiement est destiné aux tests d’intégration locaux, pas à la production. -## Architecture +## Schéma d’architecture ```mermaid flowchart LR @@ -18,11 +18,11 @@ flowchart LR Connect -->|"batched objects"| RustFS["RustFS :9000"] ``` -The sink task consumes a topic in a dedicated consumer group and writes record batches to the bucket, one object per `flush.size` records per partition. +La tâche du sink consomme un topic dans un groupe de consommateurs dédié et écrit les lots d’enregistrements dans le compartiment, un objet par `flush.size` enregistrements et par partition. -## 1. Run the broker +## 1. Exécuter le broker -Start a KRaft broker whose advertised listener is reachable from other containers: +Démarrez un broker KRaft dont le listener annoncé est joignable depuis les autres conteneurs : ```bash docker run -d --name kafka --hostname kafka --network oo-rustfs_default \ @@ -46,20 +46,20 @@ docker exec kafka /opt/kafka/bin/kafka-topics.sh \ rc mb rustfs/kafka-demo ``` -The image defaults to advertising `localhost:9092`, which only works from inside the broker container. The `KAFKA_ADVERTISED_LISTENERS` override is what makes Connect (and any remote client) able to reach the broker. +Par défaut, l’image annonce `localhost:9092`, ce qui ne fonctionne que depuis l’intérieur du conteneur du broker. C’est le remplacement de `KAFKA_ADVERTISED_LISTENERS` qui permet à Connect (et à tout client distant) d’atteindre le broker. -## 2. Install the connector +## 2. Installer le connecteur -Download the Confluent Hub archive, which bundles the connector and its dependencies, and unpack it where the worker can see it: +Téléchargez l’archive Confluent Hub, qui regroupe le connecteur et ses dépendances, puis décompressez-la là où le worker peut la voir : ```bash curl -Lo kafka-connect-s3.zip "https://hub-downloads.confluent.io/api/plugins/confluentinc/kafka-connect-s3/versions/10.5.25/confluentinc-kafka-connect-s3-10.5.25.zip" unzip kafka-connect-s3.zip -d /opt/kafka-conn/plugins ``` -## 3. Configure the worker and the sink +## 3. Configurer le worker et le sink -Create the worker properties. The value converter must be `ByteArrayConverter` so records are written verbatim: +Créez les propriétés du worker. Le convertisseur de valeurs doit être `ByteArrayConverter` afin que les enregistrements soient écrits tels quels : ```ini title="worker.properties" bootstrap.servers=kafka:9092 @@ -70,7 +70,7 @@ offset.flush.interval.ms=5000 plugin.path=/opt/kafka-conn-plugins ``` -Create the sink connector configuration, replacing all connection placeholders: +Créez la configuration du connecteur sink, en remplaçant tous les espaces réservés de connexion : ```ini title="rustfs-sink.properties" name=rustfs-sink @@ -87,11 +87,11 @@ format.class=io.confluent.connect.s3.format.bytearray.ByteArrayFormat consumer.override.auto.offset.reset=earliest ``` -Kafka 4.0 moved the class to `org.apache.kafka.connect.converters.ByteArrayConverter` — the old `storage` package path no longer resolves. +Kafka 4.0 a déplacé la classe vers `org.apache.kafka.connect.converters.ByteArrayConverter` — l’ancien chemin du paquet `storage` ne se résout plus. -## 4. Run the worker +## 4. Exécuter le worker -Run `connect-standalone` in the foreground so its logs go to `docker logs`, with the bucket credentials in the environment: +Exécutez `connect-standalone` au premier plan pour que ses journaux aillent dans `docker logs`, avec les identifiants du compartiment dans l’environnement : ```bash docker run -d --name kafka-connect --hostname kafka-connect \ @@ -105,22 +105,22 @@ docker run -d --name kafka-connect --hostname kafka-connect \ /opt/kafka/bin/connect-standalone.sh /etc/kafka/worker.properties /etc/kafka/sink.properties ``` -The worker is ready when the sink task claims the partition: +Le worker est prêt lorsque la tâche du sink revendique la partition : ```text INFO [rustfs-sink|task-0] Assigned topic partitions: [rustfs-topic-0] ``` -## 5. Produce records +## 5. Produire des enregistrements -Send at least `flush.size` records so the connector completes a batch: +Envoyez au moins `flush.size` enregistrements pour que le connecteur termine un lot : ```bash docker exec kafka sh -c "printf 'msg-one\nmsg-two\nmsg-three\n' | \ /opt/kafka/bin/kafka-console-producer.sh --bootstrap-server localhost:9092 --topic rustfs-topic" ``` -After a few seconds the batch becomes an object in the bucket: +Après quelques secondes, le lot devient un objet dans le compartiment : ```bash rc ls rustfs/kafka-demo/ -r @@ -135,44 +135,44 @@ msg-two msg-three ``` -The object name encodes topic, partition, and starting offset. Each subsequent batch of three records lands in the next object (`+0000000003.bin` and so on). +Le nom de l’objet encode le topic, la partition et l’offset de départ. Chaque lot suivant de trois enregistrements arrive dans l’objet suivant (`+0000000003.bin` et ainsi de suite). -![Kafka sink objects stored in the RustFS Console](./images/rustfs-kafka-sink.png) +![Objets du sink Kafka stockés dans la Console RustFS](./images/rustfs-kafka-sink.png) -## 6. Stop or reset +## 6. Arrêter ou réinitialiser -To tear down the demo while keeping the bucket objects: +Pour démonter la démonstration tout en conservant les objets du compartiment : ```bash docker rm -f kafka-connect kafka ``` -To delete the stored data: +Pour supprimer les données stockées : ```bash rc rm rustfs/kafka-demo/ --recursive --force ``` -## Troubleshooting +## Dépannage -### `AdminClient ... Rebootstrapping with Cluster (id: null)` loops forever +### `AdminClient ... Rebootstrapping with Cluster (id: null)` boucle indéfiniment -The broker advertises `localhost:9092`, so a remote client receives metadata pointing at itself. Set `KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://kafka:9092` (and matching listener variables) as in step 1. +Le broker annonce `localhost:9092`, si bien qu’un client distant reçoit des métadonnées qui pointent vers lui-même. Définissez `KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://kafka:9092` (et les variables de listener correspondantes) comme à l’étape 1. ### `Invalid schema type for ByteArrayConverter: STRING` -The `ByteArrayFormat` writer only accepts raw bytes. Either switch the worker's `value.converter` to the ByteArray converter or choose a format class that matches the converter you use. +Le rédacteur `ByteArrayFormat` n’accepte que des octets bruts. Basculez le `value.converter` du worker vers le convertisseur ByteArray, ou choisissez une classe de format qui correspond au convertisseur que vous utilisez. ### `Class org.apache.kafka.connect.storage.ByteArrayConverter could not be found` -Kafka 4.0 moved the class to `org.apache.kafka.connect.converters.ByteArrayConverter`. Use the new package path in `worker.properties`. +Kafka 4.0 a déplacé la classe vers `org.apache.kafka.connect.converters.ByteArrayConverter`. Utilisez le nouveau chemin de paquet dans `worker.properties`. -### The connector downloads but the plugin is not found +### Le connecteur se télécharge, mais le plugin est introuvable -The plain connector JAR from Maven lacks its dependencies. Use the Confluent Hub archive from step 2, which bundles the complete `lib/` directory, and make sure `plugin.path` points at the directory that contains the connector folder. +Le JAR nu du connecteur issu de Maven n’a pas ses dépendances. Utilisez l’archive Confluent Hub de l’étape 2, qui regroupe le répertoire `lib/` complet, et assurez-vous que `plugin.path` pointe vers le répertoire qui contient le dossier du connecteur. -## Next steps +## Étapes suivantes -- Review [S3 compatibility notes](/administration/protocols/s3) before adopting additional connectors. -- Create dedicated production credentials with [Access Key Management](/security-compliance/iam/access-token). -- Follow the [Kafka Connect S3 sink documentation](https://docs.confluent.io/kafka-connect-s3/current/index.html) for Parquet and Avro formats, partitioning by time, and IAM-based credential chains. +- Consultez les [notes de compatibilité S3](/fr/administration/protocols/s3) avant d’adopter d’autres connecteurs. +- Créez des identifiants de production dédiés avec la [gestion des clés d’accès](/fr/security-compliance/iam/access-token). +- Suivez la [documentation du sink S3 de Kafka Connect](https://docs.confluent.io/kafka-connect-s3/current/index.html) pour les formats Parquet et Avro, le partitionnement par le temps et les chaînes d’identifiants fondées sur IAM. diff --git a/content/fr/developer/integration/big-data/paimon.md b/content/fr/developer/integration/big-data/paimon.md index f8f542656..f80ed225a 100644 --- a/content/fr/developer/integration/big-data/paimon.md +++ b/content/fr/developer/integration/big-data/paimon.md @@ -1,13 +1,13 @@ --- title: "Paimon" -description: "Run Paimon lakehouse tables on RustFS with Spark." +description: "Exécutez des tables lakehouse Paimon sur RustFS avec Spark." --- -This guide connects [Apache Paimon](https://github.com/apache/paimon) — the streaming lakehouse table format — to **RustFS** as its warehouse storage. You will create a Paimon catalog over a RustFS bucket with Spark, write a primary-key table, and read it back. The workflow was verified with Paimon 1.2.0 on Spark 3.5.6 against `rustfs/rustfs-x86-musl:v2.3.1`. +Ce guide connecte [Apache Paimon](https://github.com/apache/paimon) — le format de table lakehouse en flux continu — à **RustFS** comme stockage d’entrepôt. Vous allez créer un catalogue Paimon sur un compartiment (bucket) RustFS avec Spark, écrire une table à clé primaire et la relire. Le flux a été validé avec Paimon 1.2.0 sur Spark 3.5.6 face à `rustfs/rustfs-x86-musl:v2.3.1`. -You need Docker and the `rc` client. +Vous avez besoin de Docker et du client `rc`. -## Architecture +## Schéma d’architecture ```mermaid flowchart LR @@ -15,9 +15,9 @@ flowchart LR Paimon -->|"schemas, snapshots, data files"| RustFS["RustFS :9000"] ``` -Paimon stores each table under the catalog warehouse as a `*.db` directory containing `schema/`, `snapshot/`, and data files. All I/O goes through Paimon's own S3 FileIO (`paimon-s3`), not Hadoop S3A. +Paimon stocke chaque table sous l’entrepôt du catalogue sous la forme d’un répertoire `*.db` qui contient `schema/`, `snapshot/` et les fichiers de données. Toutes les E/S passent par le FileIO S3 propre à Paimon (`paimon-s3`), et non par Hadoop S3A. -## 1. Run Spark +## 1. Exécuter Spark ```bash docker run -d --name spark-paimon --hostname spark --network oo-rustfs_default \ @@ -25,7 +25,7 @@ docker run -d --name spark-paimon --hostname spark --network oo-rustfs_default \ docker cp paimon_test.sql spark-paimon:/tmp/paimon_test.sql ``` -Create the SQL file (note: the catalog options are passed on the CLI below, not in the file): +Créez le fichier SQL (remarque : les options du catalogue sont passées sur la CLI ci-dessous, pas dans le fichier) : ```sql title="paimon_test.sql" CREATE TABLE paimon.default.events (id INT, label STRING) TBLPROPERTIES ("primary-key"="id"); @@ -33,9 +33,9 @@ INSERT INTO paimon.default.events VALUES (1,'alpha'),(2,'beta'),(3,'gamma'); SELECT * FROM paimon.default.events ORDER BY id; ``` -## 2. Run the SQL script +## 2. Exécuter le script SQL -Three pieces are required: the Spark extensions, Paimon's own S3 FileIO (`paimon-s3` — the Hadoop S3A jars are not used by Paimon's reader), and the catalog-level `s3.*` options: +Trois éléments sont requis : les extensions Spark, le FileIO S3 propre à Paimon (`paimon-s3` — les JAR Hadoop S3A ne sont pas utilisés par le lecteur de Paimon) et les options `s3.*` au niveau du catalogue : ```bash docker exec -u root spark-paimon bash -c "cd /opt/spark && \ @@ -59,9 +59,9 @@ Time taken: 9.447 seconds Time taken: 1.257 seconds, Fetched 3 row(s) ``` -Without the extensions line Paimon fails fast with a `requiredSparkConfsCheck` error; without `paimon-s3` the catalog fails with `UnsupportedSchemeException: Could not find a file io implementation for scheme 's3'`. +Sans la ligne des extensions, Paimon échoue immédiatement avec une erreur `requiredSparkConfsCheck` ; sans `paimon-s3`, le catalogue échoue avec `UnsupportedSchemeException: Could not find a file io implementation for scheme 's3'`. -## 3. Verify objects in RustFS +## 3. Vérifier les objets dans RustFS ```bash rc ls rustfs/paimon-demo/warehouse/ -r | head -6 @@ -74,37 +74,37 @@ warehouse/default.db/events/bucket-0/data-... warehouse/default.db/events/manifest/... ``` -The bucket holds the full lakehouse layout: schemas, snapshots, manifests, and data files per bucket. +Le compartiment contient toute la disposition du lakehouse : schémas, instantanés, manifestes et fichiers de données pour chaque groupe de hachage. -![Paimon warehouse stored in the RustFS Console](./images/rustfs-paimon-warehouse.png) +![Entrepôt Paimon stocké dans la Console RustFS](./images/rustfs-paimon-warehouse.png) -## 4. Stop or reset +## 4. Arrêter ou réinitialiser ```bash docker rm -f spark-paimon rc rm rustfs/paimon-demo/ --recursive --force ``` -## Troubleshooting +## Dépannage ### `UnsupportedSchemeException: Could not find a file io implementation for scheme 's3'` -Paimon's own FileIO needs its S3 plugin on the classpath. Add `org.apache.paimon:paimon-s3:1.2.0` to `--packages` alongside the Spark connector. +Le FileIO propre à Paimon a besoin de son plugin S3 sur le classpath. Ajoutez `org.apache.paimon:paimon-s3:1.2.0` à `--packages`, à côté du connecteur Spark. ### `When using Paimon, it is necessary to configure spark.sql.extensions...` -Add `--conf spark.sql.extensions=org.apache.paimon.spark.extensions.PaimonSparkSessionExtensions` — Paimon fails fast without it. +Ajoutez `--conf spark.sql.extensions=org.apache.paimon.spark.extensions.PaimonSparkSessionExtensions` — Paimon échoue immédiatement sans cela. ### `SCHEMA_NOT_FOUND: The schema paimon cannot be found` -The catalog was not registered. Register it as `spark.sql.catalog.paimon` and qualify table names with `paimon.`. +Le catalogue n’était pas enregistré. Enregistrez-le sous `spark.sql.catalog.paimon` et qualifiez les noms de tables avec `paimon.`. -### Writes fail with S3 errors on the exec side +### Les écritures échouent avec des erreurs S3 côté exécuteurs -The catalog-level `s3.*` options (`s3.endpoint`, `s3.access-key`, `s3.secret-key`, `s3.path-style-access`) are what Paimon's FileIO reads — Hadoop `fs.s3a.*` settings alone are not used by the exec-side file operations. +Ce sont les options `s3.*` au niveau du catalogue (`s3.endpoint`, `s3.access-key`, `s3.secret-key`, `s3.path-style-access`) que lit le FileIO de Paimon — les seuls réglages Hadoop `fs.s3a.*` ne sont pas utilisés par les opérations de fichiers côté exécuteurs. -## Next steps +## Étapes suivantes -- Compare with the [Iceberg](/developer/integration/big-data/iceberg), [Hudi](/developer/integration/big-data/hudi), and [Delta Lake](/developer/integration/big-data/delta-lake) guides for the other lakehouse formats on the same bucket. -- Create dedicated production credentials with [Access Key Management](/security-compliance/iam/access-token). -- Follow the [Paimon documentation](https://paimon.apache.org/docs/master/) for compaction, changelog producers, and Flink streaming writes on the same bucket. +- Comparez avec les guides [Iceberg](/fr/developer/integration/big-data/iceberg), [Hudi](/fr/developer/integration/big-data/hudi) et [Delta Lake](/fr/developer/integration/big-data/delta-lake) pour les autres formats lakehouse sur le même compartiment. +- Créez des identifiants de production dédiés avec la [gestion des clés d’accès](/fr/security-compliance/iam/access-token). +- Suivez la [documentation Paimon](https://paimon.apache.org/docs/master/) pour la compaction, les producteurs de changelog et les écritures en flux Flink sur le même compartiment. diff --git a/content/fr/developer/integration/big-data/pyiceberg.md b/content/fr/developer/integration/big-data/pyiceberg.md index 77e963ecd..44df18e7f 100644 --- a/content/fr/developer/integration/big-data/pyiceberg.md +++ b/content/fr/developer/integration/big-data/pyiceberg.md @@ -7,7 +7,7 @@ Utilisez **PyIceberg** pour créer un espace de noms et une table dans le catalo ## Prérequis -- Terminez la [configuration de S3 Tables](/administration/data/s3-tables) : créez et activez `my-bucket` et respectez les exigences relatives au compte et à TLS. +- Terminez la [configuration de S3 Tables](/fr/administration/data/s3-tables) : créez et activez `my-bucket` et respectez les exigences relatives au compte et à TLS. - Conservez les variables `RUSTFS_ENDPOINT`, `AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY` et `AWS_DEFAULT_REGION` définies dans ce guide. ## 1. Installer le client @@ -90,7 +90,7 @@ catalog = RustFSRestCatalog( L’adaptateur redéfinit le hook `_init_sigv4` de PyIceberg afin que la découverte soit signée avant la fin du constructeur du catalogue. Conservez la version PyIceberg fixée pour ce module et réexécutez tout le tutoriel avant d’en changer. -:: : +::: ## 3. Créer et lire une table @@ -159,9 +159,9 @@ Le résultat devrait contenir `("analytics", "events")`. :::note[Suppression des entrées du catalogue uniquement] -Les commandes suivantes retirent l’entrée de table de ce tutoriel et son espace de noms devenu vide. Le compartiment et les objets sous-jacents sont conservés. Planifiez tout nettoyage de données avant de continuer : après `drop_table`, la maintenance ne peut plus trouver la table. Consultez la [maintenance et la protection des données](/administration/data/s3-tables). +Les commandes suivantes retirent l’entrée de table de ce tutoriel et son espace de noms devenu vide. Le compartiment et les objets sous-jacents sont conservés. Planifiez tout nettoyage de données avant de continuer : après `drop_table`, la maintenance ne peut plus trouver la table. Consultez la [maintenance et la protection des données](/fr/administration/data/s3-tables). -:: : +::: ```bash python - <<'PY' @@ -175,4 +175,4 @@ PY ## Étapes suivantes - Suivez la [documentation de l’API PyIceberg](https://py.iceberg.apache.org/api/) pour les opérations client, en vérifiant chacune par rapport au périmètre pris en charge par RustFS. -- Utilisez l’[intégration avec un catalogue Iceberg externe](/developer/integration/big-data/iceberg) si vous gérez un service de catalogue séparé. +- Utilisez l’[intégration avec un catalogue Iceberg externe](/fr/developer/integration/big-data/iceberg) si vous gérez un service de catalogue séparé. diff --git a/content/fr/developer/integration/big-data/seatunnel.md b/content/fr/developer/integration/big-data/seatunnel.md index 0d1ebf67a..b9f9e2526 100644 --- a/content/fr/developer/integration/big-data/seatunnel.md +++ b/content/fr/developer/integration/big-data/seatunnel.md @@ -1,13 +1,13 @@ --- title: "SeaTunnel" -description: "Move data between SeaTunnel and RustFS with the S3File connector." +description: "Déplacez des données entre SeaTunnel et RustFS avec le connecteur S3File." --- -This guide connects [Apache SeaTunnel](https://github.com/apache/seatunnel) — the data integration engine — to **RustFS** through the S3File connector. You will run a batch job that generates rows with FakeSource and writes them as JSON files into a RustFS bucket. The workflow was verified with SeaTunnel 2.3.12 against `rustfs/rustfs-x86-musl:v2.3.1`. +Ce guide connecte [Apache SeaTunnel](https://github.com/apache/seatunnel) — le moteur d’intégration de données — à **RustFS** via le connecteur S3File. Vous allez exécuter une tâche par lots qui génère des lignes avec FakeSource et les écrit sous forme de fichiers JSON dans un compartiment (bucket) RustFS. Le flux a été validé avec SeaTunnel 2.3.12 face à `rustfs/rustfs-x86-musl:v2.3.1`. -You need Docker and the `rc` client. +Vous avez besoin de Docker et du client `rc`. -## Architecture +## Schéma d’architecture ```mermaid flowchart LR @@ -15,11 +15,11 @@ flowchart LR Job -->|"S3File sink"| RustFS["RustFS :9000"] ``` -The S3File sink writes through the Hadoop S3A filesystem, so the connector accepts both its own credential options and the standard `fs.s3a.*` Hadoop keys. +Le sink S3File écrit via le système de fichiers Hadoop S3A, si bien que le connecteur accepte à la fois ses propres options d’identifiants et les clés Hadoop `fs.s3a.*` standard. -## 1. Run the engine +## 1. Exécuter le moteur -The connector and the Hadoop AWS jars ship inside the image: +Le connecteur et les JAR Hadoop AWS sont livrés dans l’image : ```bash docker run --rm apache/seatunnel:2.3.12 \ @@ -31,9 +31,9 @@ connector-file-s3-2.3.12.jar seatunnel-hadoop-aws.jar ``` -## 2. Write the job config +## 2. Écrire la configuration de la tâche -The tricky part: the sink validates `access_key`/`secret_key` at compile time, while the actual S3A client reads the `fs.s3a.*` keys. Provide both, and keep the endpoint without a scheme — the bundled Hadoop version rejects `http://` endpoints: +Le point délicat : le sink valide `access_key`/`secret_key` à la compilation, tandis que le client S3A réel lit les clés `fs.s3a.*`. Fournissez les deux, et conservez le point de terminaison sans schéma — la version Hadoop fournie refuse les points de terminaison `http://` : ```text title="seatunnel-rustfs.conf" env { @@ -71,7 +71,7 @@ sink { } ``` -## 3. Run the job +## 3. Exécuter la tâche ```bash docker run --rm --network oo-rustfs_default \ @@ -84,7 +84,7 @@ docker run --rm --network oo-rustfs_default \ 2026-10-07 ... INFO ... Submit job finished, job id: 1159846059493556225 ``` -## 4. Verify objects in RustFS +## 4. Vérifier les objets dans RustFS ```bash rc ls rustfs/seatunnel-demo/out/ @@ -96,38 +96,38 @@ out/T_1159846059493556225_2de3d99235_0_1_0.json {"id":168282592,"name":"ELyqD","value":1.594479327987022E308} ``` -Five FakeSource rows landed as one JSON file in the bucket. +Cinq lignes FakeSource sont arrivées sous la forme d’un seul fichier JSON dans le compartiment. -![SeaTunnel output files stored in the RustFS Console](./images/rustfs-seatunnel-out.png) +![Fichiers de sortie SeaTunnel stockés dans la Console RustFS](./images/rustfs-seatunnel-out.png) -## 5. Stop or reset +## 5. Arrêter ou réinitialiser -SeaTunnel in `-e local` mode is stateless. To delete the output: +SeaTunnel en mode `-e local` ne conserve aucun état. Pour supprimer la sortie : ```bash rc rm rustfs/seatunnel-demo/ --recursive --force ``` -## Troubleshooting +## Dépannage ### `Plugin PluginIdentifier{... pluginName='S3'} not found` -The sink class is registered as `S3File`, not `S3`. +La classe du sink est enregistrée sous le nom `S3File`, et non `S3`. ### `There are unconfigured options, the options('access_key', 'secret_key') are required` -The S3File sink requires its own `access_key`/`secret_key` options even when `fs.s3a.*` keys are present. Provide both sets as in step 2. +Le sink S3File exige ses propres options `access_key`/`secret_key` même lorsque les clés `fs.s3a.*` sont présentes. Fournissez les deux jeux, comme à l’étape 2. ### `No AWS Credentials provided by InstanceProfileCredentialsProvider` -The S3A client on the coordinator side fell back to the instance-profile provider because `fs.s3a.aws.credentials.provider` and the `fs.s3a.access.key`/`fs.s3a.secret.key` pair were missing. Add all three as in step 2. +Le client S3A côté coordinateur est retombé sur le fournisseur de profil d’instance, parce que `fs.s3a.aws.credentials.provider` et la paire `fs.s3a.access.key`/`fs.s3a.secret.key` étaient absents. Ajoutez les trois, comme à l’étape 2. -### Job hangs on `doesBucketExist` +### La tâche reste bloquée sur `doesBucketExist` -The bundled Hadoop version rejects `http://` scheme endpoints. Use the bare `host:port` form for `fs.s3a.endpoint` and add `fs.s3a.connection.ssl.enabled = "false"`. +La version Hadoop fournie refuse les points de terminaison avec le schéma `http://`. Utilisez la forme `host:port` nue pour `fs.s3a.endpoint` et ajoutez `fs.s3a.connection.ssl.enabled = "false"`. -## Next steps +## Étapes suivantes -- Review [S3 compatibility notes](/administration/protocols/s3) before adopting additional SeaTunnel connectors. -- Create dedicated production credentials with [Access Key Management](/security-compliance/iam/access-token). -- Follow the [SeaTunnel S3File documentation](https://seatunnel.apache.org/docs/connector-v2/sink/S3File) for parquet/orc formats, partitioned writes, and the matching S3File source. +- Consultez les [notes de compatibilité S3](/fr/administration/protocols/s3) avant d’adopter d’autres connecteurs SeaTunnel. +- Créez des identifiants de production dédiés avec la [gestion des clés d’accès](/fr/security-compliance/iam/access-token). +- Suivez la [documentation S3File de SeaTunnel](https://seatunnel.apache.org/docs/connector-v2/sink/S3File) pour les formats parquet/orc, les écritures partitionnées et la source S3File correspondante. diff --git a/content/fr/developer/integration/big-data/spark.md b/content/fr/developer/integration/big-data/spark.md index 856ce857f..f5cd593c2 100644 --- a/content/fr/developer/integration/big-data/spark.md +++ b/content/fr/developer/integration/big-data/spark.md @@ -177,7 +177,7 @@ Vous pouvez également parcourir le préfixe dans la Console RustFS : ## 4. Utiliser RustFS S3 Tables -RustFS S3 Tables fournit un catalogue REST Apache Iceberg intégré, permettant à Spark de traiter un compartiment de tables (table bucket) comme un entrepôt Iceberg géré tandis que les données restent dans RustFS. Activez un compartiment de tables et connectez le catalogue REST Iceberg de Spark comme décrit dans [S3 Tables](/administration/data/s3-tables) : l’URI du catalogue REST est `http://:9000/iceberg`, le warehouse est le nom du compartiment, et les requêtes de catalogue (AWS Signature Version 4, nom de signature `s3`) comme l’accès aux fichiers S3 utilisent l’adressage de type chemin (path-style). +RustFS S3 Tables fournit un catalogue REST Apache Iceberg intégré, permettant à Spark de traiter un compartiment de tables (table bucket) comme un entrepôt Iceberg géré tandis que les données restent dans RustFS. Activez un compartiment de tables et connectez le catalogue REST Iceberg de Spark comme décrit dans [S3 Tables](/fr/administration/data/s3-tables) : l’URI du catalogue REST est `http://:9000/iceberg`, le warehouse est le nom du compartiment, et les requêtes de catalogue (AWS Signature Version 4, nom de signature `s3`) comme l’accès aux fichiers S3 utilisent l’adressage de type chemin (path-style). Selon la matrice de prise en charge S3 Tables, validez les versions exactes de Spark et d’Iceberg que vous déployez par rapport au catalogue avant d’adopter ce chemin en production. @@ -215,6 +215,6 @@ docker compose logs create-bucket ## Étapes suivantes -- Consultez les [notes de compatibilité S3](/administration/protocols/s3) avant d’adopter d’autres opérations S3. -- Créez des identifiants de production dédiés avec la [gestion des clés d’accès](/security-compliance/iam/access-token). +- Consultez les [notes de compatibilité S3](/fr/administration/protocols/s3) avant d’adopter d’autres opérations S3. +- Créez des identifiants de production dédiés avec la [gestion des clés d’accès](/fr/security-compliance/iam/access-token). - Suivez la [documentation Spark](https://spark.apache.org/docs/latest/) pour le structured streaming et les options de sources de données. diff --git a/content/fr/developer/integration/big-data/zeppelin.md b/content/fr/developer/integration/big-data/zeppelin.md index e7f47375e..f3517e556 100644 --- a/content/fr/developer/integration/big-data/zeppelin.md +++ b/content/fr/developer/integration/big-data/zeppelin.md @@ -1,13 +1,13 @@ --- title: "Apache Zeppelin" -description: "Store Apache Zeppelin notebooks in RustFS through the S3 notebook repository." +description: "Stockez les notebooks Apache Zeppelin dans RustFS via le dépôt de notebooks S3." --- -This guide connects [Apache Zeppelin](https://github.com/apache/zeppelin) — the web-based notebook for data analytics — to **RustFS** through Zeppelin's S3 notebook storage. You will start Zeppelin pointed at a RustFS bucket, create a note, and verify that the notebook file is stored in RustFS and survives a restart. The workflow was verified with `apache/zeppelin:0.12.0` and `rustfs/rustfs-x86-musl:v2.3.1`. +Ce guide connecte [Apache Zeppelin](https://github.com/apache/zeppelin) — le notebook web pour l’analyse de données — à **RustFS** via le stockage de notebooks S3 de Zeppelin. Vous allez démarrer Zeppelin orienté vers un compartiment (bucket) RustFS, créer une note et vérifier que le notebook est stocké dans RustFS et survit à un redémarrage. Le flux a été validé avec `apache/zeppelin:0.12.0` et `rustfs/rustfs-x86-musl:v2.3.1`. -You need Docker. This deployment is intended for local integration testing, not production. +Vous avez besoin de Docker. Ce déploiement est destiné aux tests d’intégration locaux, pas à la production. -## Architecture +## Schéma d’architecture ```mermaid flowchart LR @@ -15,18 +15,18 @@ flowchart LR Z -->|".zpln files"| RustFS["RustFS :9000"] ``` -With the `S3NotebookRepo` storage class, every note is persisted as a `.zpln` JSON file under the `user/notebook/` prefix of the bucket. Zeppelin reads and writes the bucket directly, so notes survive container restarts and can be shared between instances. +Avec la classe de stockage `S3NotebookRepo`, chaque note est persistée sous la forme d’un fichier JSON `.zpln` sous le préfixe `user/notebook/` du compartiment. Zeppelin lit et écrit directement dans le compartiment, si bien que les notes survivent aux redémarrages de conteneur et peuvent être partagées entre les instances. -## 1. Start Zeppelin +## 1. Démarrer Zeppelin -Create an environment file and replace both credential placeholders: +Créez un fichier d’environnement et remplacez les deux espaces réservés d’identifiants : ```ini title=".env" AWS_ACCESS_KEY_ID= AWS_SECRET_ACCESS_KEY= ``` -Start Zeppelin on the same Docker network as RustFS with the S3 storage settings: +Démarrez Zeppelin sur le même réseau Docker que RustFS, avec les réglages de stockage S3 : ```bash docker run -d --name zeppelin --network oo-rustfs_default \ @@ -40,11 +40,11 @@ docker run -d --name zeppelin --network oo-rustfs_default \ apache/zeppelin:0.12.0 ``` -Zeppelin reads `ZEPPELIN_*` environment variables as configuration properties, so no `zeppelin-site.xml` edit is needed. This guide uses the existing `my-bucket`; notes land under its `user/notebook/` prefix, which the S3 storage creates on demand. +Zeppelin lit les variables d’environnement `ZEPPELIN_*` comme des propriétés de configuration, si bien qu’aucune modification de `zeppelin-site.xml` n’est nécessaire. Ce guide utilise le `my-bucket` existant ; les notes arrivent sous son préfixe `user/notebook/`, que le stockage S3 crée à la demande. -## 2. Create a note +## 2. Créer une note -Wait for the UI on `http://localhost:8080`, then create a note named `rustfs-demo` in the notebook list and add a paragraph, or use the REST API: +Attendez l’interface sur `http://localhost:8080`, puis créez une note nommée `rustfs-demo` dans la liste des notebooks et ajoutez un paragraphe, ou utilisez l’API REST : ```bash NOTE=$(curl -s -X POST "http://localhost:8080/api/notebook" \ @@ -53,57 +53,57 @@ NOTE=$(curl -s -X POST "http://localhost:8080/api/notebook" \ echo "note id: $NOTE" ``` -## 3. Verify the notebook in RustFS +## 3. Vérifier le notebook dans RustFS -List the notebook prefix: +Listez le préfixe des notebooks : ```bash rc ls rustfs/my-bucket/user/notebook/ -r ``` -The note is stored as a JSON file named after the note and its ID: +La note est stockée sous la forme d’un fichier JSON nommé d’après la note et son ID : ```text user/notebook/rustfs-demo_2N4PY7UY5.zpln ``` -![Zeppelin notebooks stored in the RustFS Console](./images/rustfs-zeppelin-notebook.png) +![Notebooks Zeppelin stockés dans la Console RustFS](./images/rustfs-zeppelin-notebook.png) -Notes survive a restart because Zeppelin loads them from the bucket: +Les notes survivent à un redémarrage parce que Zeppelin les lit depuis le compartiment : ```bash docker restart zeppelin curl -s "http://localhost:8080/api/notebook" | head -c 200 ``` -The note list contains `2N4PY7UY5` again after the restart. +La liste des notes contient de nouveau `2N4PY7UY5` après le redémarrage. -## 4. Stop or reset the deployment +## 4. Arrêter ou réinitialiser le déploiement -Stop Zeppelin while keeping the notes: +Arrêtez Zeppelin tout en conservant les notes : ```bash docker rm -f zeppelin ``` -The notes stay in the `user/notebook/` prefix of `my-bucket`. To delete them, remove the prefix: +Les notes restent dans le préfixe `user/notebook/` de `my-bucket`. Pour les supprimer, supprimez le préfixe : ```bash rc rm rustfs/my-bucket/user/notebook/ --recursive --force ``` -## Troubleshooting +## Dépannage -### Zeppelin starts but notes never appear in the bucket +### Zeppelin démarre, mais les notes n’apparaissent jamais dans le compartiment -Confirm the three `ZEPPELIN_NOTEBOOK_S3_*` variables are set and that the credentials environment variables reach the container — the S3 repository is initialized at startup, so the container must be recreated after any change. +Vérifiez que les trois variables `ZEPPELIN_NOTEBOOK_S3_*` sont définies et que les variables d’environnement d’identifiants parviennent au conteneur — le dépôt S3 est initialisé au démarrage, si bien que le conteneur doit être recréé après toute modification. ### `UnknownHostException: my-bucket.rustfs` -The path-style flag was not picked up. Keep `ZEPPELIN_NOTEBOOK_S3_PATH_STYLE_ACCESS=true` exactly as shown; with path-style disabled Zeppelin treats the bucket as a hostname. +L’indicateur d’adressage de type chemin (path-style) n’a pas été pris en compte. Conservez `ZEPPELIN_NOTEBOOK_S3_PATH_STYLE_ACCESS=true` exactement comme indiqué ; lorsque l’adressage de type chemin est désactivé, Zeppelin traite le compartiment comme un nom d’hôte. -## Next steps +## Étapes suivantes -- Review [S3 compatibility notes](/administration/protocols/s3) before adopting additional Zeppelin operations. -- Create dedicated production credentials with [Access Key Management](/security-compliance/iam/access-token). -- Follow the [Zeppelin storage documentation](https://zeppelin.apache.org/docs/latest/setup/storage/storage.html#notebook-storage-in-s3) to organize notes in per-user prefixes. +- Consultez les [notes de compatibilité S3](/fr/administration/protocols/s3) avant d’adopter d’autres opérations Zeppelin. +- Créez des identifiants de production dédiés avec la [gestion des clés d’accès](/fr/security-compliance/iam/access-token). +- Suivez la [documentation de stockage Zeppelin](https://zeppelin.apache.org/docs/latest/setup/storage/storage.html#notebook-storage-in-s3) pour organiser les notes dans des préfixes par utilisateur. diff --git a/content/fr/developer/integration/cloud-native/celld.md b/content/fr/developer/integration/cloud-native/celld.md index 37e2a757c..ccbd70083 100644 --- a/content/fr/developer/integration/cloud-native/celld.md +++ b/content/fr/developer/integration/cloud-native/celld.md @@ -1,13 +1,13 @@ --- title: "celld" -description: "Run denoland celld — self-hosted Durable Objects — with fleet state on RustFS." +description: "Exécutez celld de Denoland, l’environnement Durable Objects auto-hébergé, avec l’état de la flotte sur RustFS." --- -This guide connects [celld](https://github.com/denoland/celld) — the self-hosted, distributed Durable Objects runtime from Denoland — to **RustFS** as its fleet bucket. You will run `celld diagnose` against a RustFS bucket (including the conditional-write probe), deploy a Counter worker, mutate Durable Object state over HTTP, restart celld, and confirm the state survives. The workflow was verified with celld v0.6.2 against `rustfs/rustfs-x86-musl:v2.3.1`. +Ce guide connecte [celld](https://github.com/denoland/celld) — l’environnement d’exécution distribué et auto-hébergé de Durable Objects, proposé par Denoland — à **RustFS** comme compartiment (bucket) de flotte. Vous allez exécuter `celld diagnose` sur un compartiment RustFS (y compris la sonde d’écriture conditionnelle), déployer un worker Counter, modifier l’état d’un Durable Object via HTTP, redémarrer celld et confirmer que l’état survit. Le flux a été validé avec celld v0.6.2 face à `rustfs/rustfs-x86-musl:v2.3.1`. -You need the `celld` binary, `esbuild` (for bundling), and Node.js to drive the deployed worker. +Vous avez besoin du binaire `celld`, de l’outil `esbuild` (pour l’empaquetage) et de Node.js pour piloter le worker déployé. -## Architecture +## Schéma d’architecture ```mermaid flowchart LR @@ -15,9 +15,9 @@ flowchart LR celld -->|"LTX replicas + ownership + deploy"| RustFS["RustFS :9000"] ``` -celld keeps only a local WAL. Every committed SQLite write is captured in LTX format and uploaded to the fleet bucket; a conditional bucket write (put-if-not-exists) assigns node ownership. The bucket is the source of truth — nodes can crash or restart without losing Durable Object state. +celld ne conserve qu’un WAL local. Chaque écriture SQLite validée est capturée au format LTX et chargée dans le compartiment de flotte ; une écriture conditionnelle sur le compartiment (put-if-not-exists) attribue la propriété du nœud. Le compartiment est la source de vérité — les nœuds peuvent tomber en panne ou redémarrer sans perdre l’état des Durable Objects. -## 1. Install celld +## 1. Installer celld ```bash curl -sLo /tmp/celld.gz \ @@ -31,15 +31,15 @@ celld --version celld 0.6.2 ``` -Install esbuild as well — `celld deploy` bundles workers with it: +Installez aussi esbuild — `celld deploy` empaquete les workers avec cet outil : ```bash npm install -g esbuild ``` -## 2. Diagnose the bucket +## 2. Diagnostiquer le compartiment -`celld diagnose` probes the bucket including the conditional write that celld requires for ownership fencing: +`celld diagnose` sonde le compartiment, y compris l’écriture conditionnelle dont celld a besoin pour réserver la propriété d’un nœud : ```bash export S3_ENDPOINT=http://:9000 @@ -58,11 +58,11 @@ ok bucket conditional write: create, reject-create, update, reject-stale ok fleet: 0 node lease(s) enumerated ``` -`ok bucket conditional write` is the important line — RustFS supports put-if-not-exists natively, so no fallback storage is needed. +`ok bucket conditional write` est la ligne importante — RustFS prend en charge put-if-not-exists nativement, donc aucun stockage de repli n’est nécessaire. -## 3. Start a node +## 3. Démarrer un nœud -A non-loopback `--listen` requires an explicit `--internal-listen`: +Un `--listen` qui n’est pas en loopback exige un `--internal-listen` explicite : ```bash nohup celld --bucket s3://celld-demo \ @@ -76,9 +76,9 @@ INFO celld: host runtime initialized event="host_runtime" worker_count=4 INFO celld::fleet: no deployment yet; run `celld deploy` ... ``` -## 4. Deploy the Counter worker +## 4. Déployer le worker Counter -Use the counter example from the celld repository — a Durable Object that increments `n` in SQLite storage on every request: +Utilisez l’exemple counter du dépôt celld — un Durable Object qui incrémente `n` dans le stockage SQLite à chaque requête : ```bash curl -sLo /tmp/celld.zip https://codeload.github.com/denoland/celld/zip/refs/tags/v0.6.2 @@ -93,9 +93,9 @@ Uploaded counter (0.02 sec) Current Version ID: bf5806589892a6cc ``` -## 5. Mutate Durable Object state +## 5. Modifier l’état du Durable Object -Each request routes to the `Counter` Durable Object, which reads `n` from storage, increments, and writes it back: +Chaque requête est routée vers le Durable Object `Counter`, qui lit `n` dans le stockage, l’incrémente et le réécrit : ```bash curl -s "http://127.0.0.1:18080/?name=rustfs" @@ -109,9 +109,9 @@ curl -s "http://127.0.0.1:18080/?name=rustfs" {"n":3,"url":"http://127.0.0.1:18080/?name=rustfs"} ``` -## 6. Restart celld and verify persistence +## 6. Redémarrer celld et vérifier la persistance -Kill the node, start it again, and hit the same URL — the counter continues from where it stopped, because the state was in RustFS the whole time: +Arrêtez le nœud, redémarrez-le et interrogez la même URL — le compteur reprend là où il s’était arrêté, car l’état se trouvait dans RustFS depuis le début : ```bash pkill -f "celld --bucket" @@ -126,7 +126,7 @@ curl -s "http://127.0.0.1:18080/?name=rustfs" {"n":4,"url":"http://127.0.0.1:18080/?name=rustfs"} ``` -List the bucket — the fleet state is all there: +Listez le compartiment — l’état de la flotte s’y trouve entièrement : ```bash rc ls rustfs/celld-demo/ -r | head -5 @@ -139,35 +139,35 @@ deploy/counter/bf5806589892a6cc/index.js deploy/counter/current.json ``` -![celld state stored in the RustFS Console](./images/rustfs-celld-state.png) +![État celld stocké dans la Console RustFS](./images/rustfs-celld-state.png) -## 7. Stop or reset +## 7. Arrêter ou réinitialiser ```bash pkill -f "celld --bucket" rc rm rustfs/celld-demo/ --recursive --force ``` -## Troubleshooting +## Dépannage ### `bind --listen 127.0.0.0.1:8080 ... Address already in use` -Port 8080 is commonly taken (a local GitLab registry or dev server). Move the Worker listener: `--listen 0.0.0.0:18080`. +Le port 8080 est souvent déjà pris (un registre GitLab local ou un serveur de développement). Déplacez l’écouteur du Worker : `--listen 0.0.0.0:18080`. ### `a non-loopback --listen requires an explicit --internal-listen` -Binding a public interface requires a separate peer listener: add `--internal-listen 0.0.0.0:9099 --advertise 127.0.0.1:9099`. +Lier une interface publique exige un écouteur pair distinct : ajoutez `--internal-listen 0.0.0.0:9099 --advertise 127.0.0.1:9099`. ### `esbuild not found` -`celld deploy` bundles the worker with esbuild. Install it globally (`npm install -g esbuild`) or point `CELLD_ESBUILD` at the binary. +`celld deploy` empaquete le worker avec esbuild. Installez-le globalement (`npm install -g esbuild`) ou faites pointer `CELLD_ESBUILD` vers le binaire. -### `celld deploy` on the example prints `unknown command init for argo` at runtime +### `celld deploy` sur l’exemple affiche `unknown command init for argo` à l’exécution -That means the executor container/pod is running an `argo` CLI binary instead of argoexec — a sign the wrong image was tagged as the executor in your cluster setup, unrelated to celld itself. On a plain host (no cluster) this does not occur. +Cela signifie que le conteneur ou le pod d’exécuteur exécute un binaire CLI `argo` à la place d’argoexec — signe qu’une mauvaise image a été étiquetée comme exécuteur dans la configuration de votre cluster, sans rapport avec celld lui-même. Sur un hôte simple (sans cluster), cela ne se produit pas. -## Next steps +## Étapes suivantes -- Compare with the [Cloudflare Durable Objects documentation](https://developers.cloudflare.com/durable-objects/) — celld runs the same programming model on your own bucket. -- Create dedicated production credentials with [Access Key Management](/security-compliance/iam/access-token). -- Follow the [celld README](https://github.com/denoland/celld) for multi-node fleets: point a second node at the same bucket and let conditional writes elect the owner. +- Comparez avec la [documentation Cloudflare Durable Objects](https://developers.cloudflare.com/durable-objects/) — celld exécute le même modèle de programmation sur votre propre compartiment. +- Créez des identifiants de production dédiés avec la [gestion des clés d’accès](/fr/security-compliance/iam/access-token). +- Suivez le [README de celld](https://github.com/denoland/celld) pour les flottes multi-nœuds : pointez un second nœud vers le même compartiment et laissez les écritures conditionnelles élire le propriétaire. diff --git a/content/fr/developer/integration/cloud-native/cortex.md b/content/fr/developer/integration/cloud-native/cortex.md index 3db19b471..4c21921e6 100644 --- a/content/fr/developer/integration/cloud-native/cortex.md +++ b/content/fr/developer/integration/cloud-native/cortex.md @@ -1,13 +1,13 @@ --- title: "Cortex" -description: "Run Cortex with RustFS as the S3-compatible blocks, ruler, and alertmanager storage backend." +description: "Exécutez Cortex avec RustFS comme backend de stockage compatible avec S3 pour les blocs, le ruler et l’alertmanager." --- -This guide connects [Cortex](https://github.com/cortexproject/cortex) — the horizontally scalable Prometheus-compatible metrics backend — to **RustFS** through Cortex's native S3 bucket storage. You will run Cortex in single-binary mode with blocks, ruler, and alertmanager storage pointed at a RustFS bucket, push metrics with remote write, store a rule group, and verify the objects. The workflow was verified with `cortexproject/cortex:v1.21.1` and `rustfs/rustfs-x86-musl:v2.3.1`. +Ce guide connecte [Cortex](https://github.com/cortexproject/cortex) — le backend de métriques compatible avec Prometheus et extensible horizontalement — à **RustFS** via le stockage S3 natif de Cortex. Vous allez exécuter Cortex en mode binaire unique (single-binary), diriger le stockage des blocs, du ruler et de l’alertmanager vers un compartiment (bucket) RustFS, envoyer des métriques par remote write, enregistrer un groupe de règles et vérifier les objets. Le flux a été validé avec `cortexproject/cortex:v1.21.1` et `rustfs/rustfs-x86-musl:v2.3.1`. -You need Docker. This deployment is intended for local integration testing, not production. +Vous avez besoin de Docker. Ce déploiement est destiné aux tests d’intégration locaux, pas à la production. -## Architecture +## Schéma d’architecture ```mermaid flowchart LR @@ -15,11 +15,11 @@ flowchart LR Cortex -->|"blocks, rules, configs"| RustFS["RustFS :9000"] ``` -Cortex stores every TSDB block, ruler rule group, and alertmanager configuration in object storage. Pointing the `s3` backend at RustFS makes the bucket the single source of truth for all tenant data. +Cortex stocke chaque bloc TSDB, chaque groupe de règles du ruler et chaque configuration d’alertmanager dans le stockage objet. Diriger le backend `s3` vers RustFS fait du compartiment la source de vérité unique pour toutes les données de tenant. -## 1. Create the Cortex config +## 1. Créer la configuration Cortex -Create the config file, replacing all connection placeholders: +Créez le fichier de configuration en remplaçant toutes les valeurs de connexion indicatives : ```yaml title="cortex.yaml" target: all @@ -88,11 +88,11 @@ alertmanager_storage: <<: *s3 ``` -Cortex names the bucket field `bucket_name` and controls addressing with `bucket_lookup_type: path`. `insecure: true` allows the plain-HTTP endpoint. The `block_ranges_period` and `ship_interval` values shorten the block cycle so the test produces objects quickly; keep the defaults in production. +Cortex nomme le champ du compartiment `bucket_name` et contrôle l’adressage avec `bucket_lookup_type: path`. `insecure: true` autorise le point de terminaison en HTTP non chiffré. Les valeurs `block_ranges_period` et `ship_interval` raccourcissent le cycle des blocs afin que le test produise des objets rapidement ; conservez les valeurs par défaut en production. -## 2. Run Cortex +## 2. Exécuter Cortex -Create the bucket and start Cortex on the same Docker network as RustFS: +Créez le compartiment et démarrez Cortex sur le même réseau Docker que RustFS : ```bash rc mb rustfs/cortex @@ -107,9 +107,9 @@ docker run -d --name cortex --network oo-rustfs_default -p 9009:9009 \ ts=... caller=cortex.go:469 level=info msg="Cortex started" ``` -## 3. Push metrics and rules +## 3. Envoyer des métriques et des règles -Start a Prometheus that scrapes itself and remote-writes into Cortex: +Démarrez un Prometheus qui se collecte lui-même et envoie les métriques en remote write vers Cortex : ```yaml title="prometheus.yml" global: @@ -128,7 +128,7 @@ docker run -d --name prom-writer --network oo-rustfs_default \ prom/prometheus:latest --config.file=/etc/prometheus/prometheus.yml ``` -Store a rule group through the ruler API: +Enregistrez un groupe de règles via l’API du ruler : ```bash cat > rules.yaml << "EOF" @@ -151,7 +151,7 @@ curl -s -o /dev/null -w "%{http_code}\n" \ 202 ``` -Query the ingested series back: +Réinterrogez les séries ingérées : ```bash curl -s "http://localhost:9009/prometheus/api/v1/query?query=up" @@ -161,15 +161,15 @@ curl -s "http://localhost:9009/prometheus/api/v1/query?query=up" {"status":"success","data":{"resultType":"vector","result":[{"metric":{"__name__":"up",...},"value":[...,"1"]}]}} ``` -## 4. Verify objects in RustFS +## 4. Vérifier les objets dans RustFS -List the bucket prefixes: +Listez les préfixes du compartiment : ```bash rc ls rustfs/cortex/ -r ``` -The ruler config landed immediately, and the ingester shipped two TSDB blocks (each with `chunks`, `index`, and `meta.json`): +La configuration du ruler est arrivée immédiatement, et l’ingester a expédié deux blocs TSDB (chacun avec `chunks`, `index` et `meta.json`) : ```text fake/01M35WE4B1G6RRKHRV0HSGADY1/chunks/000001 @@ -181,38 +181,38 @@ fake/01M35WWS2YCC7FBK1JSBKFQGRP/meta.json rules/fake/cnVzdGZzLWRlbW8=/cnVzdGZzLWRlbW8= ``` -![Cortex blocks and rules stored in the RustFS Console](./images/rustfs-cortex-blocks.png) +![Blocs et règles Cortex stockés dans la Console RustFS](./images/rustfs-cortex-blocks.png) -## 5. Stop or reset +## 5. Arrêter ou réinitialiser -To tear down the demo while keeping the bucket objects: +Pour arrêter la démonstration tout en conservant les objets du compartiment : ```bash docker rm -f cortex prom-writer ``` -To delete the stored data: +Pour supprimer les données stockées : ```bash rc rm rustfs/cortex/ --recursive --force ``` -## Troubleshooting +## Dépannage ### `field bucket not found in type s3.Config` -Cortex uses `bucket_name`, not `bucket`. Path-style addressing is set with `bucket_lookup_type: path` — the `force_path_style` key used by Thanos does not exist in Cortex. +Cortex utilise `bucket_name`, et non `bucket`. L’adressage de type chemin (path-style) se définit avec `bucket_lookup_type: path` — la clé `force_path_style` utilisée par Thanos n’existe pas dans Cortex. -### Blocks never appear in the bucket +### Les blocs n’apparaissent jamais dans le compartiment -The ingester only ships a block after the head is compacted at a `block_ranges_period` boundary (default 2h). For tests, set a small range such as `[15m]` together with `ship_interval: 30s` and wait for one period. +L’ingester n’expédie un bloc qu’après compactage du head à une frontière de `block_ranges_period` (2 h par défaut). Pour les tests, définissez une petite plage telle que `[15m]` avec `ship_interval: 30s` et attendez une période. -### `Unauthorized` or empty bucket listings +### `Unauthorized` ou listes de compartiment vides -Confirm `access_key_id` and `secret_access_key` are present in every `s3` block that uses the bucket, and that `insecure: true` matches the plain-HTTP endpoint. +Vérifiez que `access_key_id` et `secret_access_key` sont présents dans chaque bloc `s3` qui utilise le compartiment, et que `insecure: true` correspond au point de terminaison en HTTP non chiffré. -## Next steps +## Étapes suivantes -- Review [S3 compatibility notes](/administration/protocols/s3) before adopting additional Cortex storage options. -- Create dedicated production credentials with [Access Key Management](/security-compliance/iam/access-token). -- Combine Cortex with [Thanos](/developer/integration/observability/thanos) when you need block storage for long-term Prometheus data as well. +- Consultez les [notes de compatibilité S3](/fr/administration/protocols/s3) avant d’adopter d’autres options de stockage Cortex. +- Créez des identifiants de production dédiés avec la [gestion des clés d’accès](/fr/security-compliance/iam/access-token). +- Combinez Cortex avec [Thanos](/fr/developer/integration/observability/thanos) lorsque vous avez aussi besoin d’un stockage de blocs pour les données Prometheus à long terme. diff --git a/content/fr/developer/integration/cloud-native/flux.md b/content/fr/developer/integration/cloud-native/flux.md index 0319cc855..5c47e462c 100644 --- a/content/fr/developer/integration/cloud-native/flux.md +++ b/content/fr/developer/integration/cloud-native/flux.md @@ -1,13 +1,13 @@ --- title: "Flux" -description: "Deliver Kubernetes manifests to Flux CD from RustFS through the Bucket source API." +description: "Livrez des manifestes Kubernetes à Flux CD depuis RustFS via l’API source Bucket." --- -This guide connects [Flux CD](https://github.com/fluxcd/flux2) — the GitOps toolkit for Kubernetes — to **RustFS** through the source-controller Bucket API. You will seed a RustFS bucket with Kubernetes manifests, register the bucket as a Flux `Bucket` source with the `generic` provider, and let a Kustomization apply everything it contains. The workflow was verified with `flux v2.9.5` (source-controller) on `k3s v1.36.4+k3s1` against `rustfs/rustfs-x86-musl:v2.3.1`. +Ce guide connecte [Flux CD](https://github.com/fluxcd/flux2) — le kit d’outils GitOps pour Kubernetes — à **RustFS** via l’API Bucket du source-controller. Vous allez amorcer un compartiment (bucket) RustFS avec des manifestes Kubernetes, enregistrer ce compartiment comme source Flux `Bucket` avec le fournisseur `generic`, et laisser une Kustomization appliquer tout ce qu’il contient. Le flux a été validé avec `flux v2.9.5` (source-controller) sur `k3s v1.36.4+k3s1` face à `rustfs/rustfs-x86-musl:v2.3.1`. -You need a Kubernetes cluster with Flux installed (`flux install`) and the `rc` client. This deployment is intended for local integration testing, not production. +Vous avez besoin d’un cluster Kubernetes avec Flux installé (`flux install`) et du client `rc`. Ce déploiement est destiné aux tests d’intégration locaux, pas à la production. -## Architecture +## Schéma d’architecture ```mermaid flowchart LR @@ -17,11 +17,11 @@ flowchart LR kustomize-controller -->|"apply"| Cluster["Kubernetes cluster"] ``` -The source-controller lists and downloads objects from the bucket over the S3 API, packs them into an artifact, and the kustomize-controller applies the manifests from that artifact. RustFS acts as the pull-based source of truth for the cluster. +Le source-controller répertorie et télécharge les objets du compartiment via l’API S3, les emballe dans un artefact, et le kustomize-controller applique les manifestes de cet artefact. RustFS sert de source de vérité du cluster, consommée par tirage (pull). -## 1. Seed the bucket +## 1. Amorcer le compartiment -Store a Kustomize overlay in the bucket, replacing all connection placeholders: +Déposez un overlay Kustomize dans le compartiment, en remplaçant toutes les valeurs de connexion indicatives : ```yaml title="clusters/staging/kustomization.yaml" apiVersion: kustomize.config.k8s.io/v1beta1 @@ -41,7 +41,7 @@ data: source: s3-bucket ``` -Upload the files: +Chargez (upload) les fichiers : ```bash rc mb rustfs/flux-src @@ -54,9 +54,9 @@ staging/kustomization.yaml staging/rustfs-demo-configmap.yaml ``` -## 2. Create the credentials secret +## 2. Créer le secret d’identifiants -Flux reads the credentials from a secret in the same namespace as the source, using lowercase keys: +Flux lit les identifiants dans un secret du même espace de noms que la source, avec des clés en minuscules : ```bash kubectl -n flux-system create secret generic rustfs-creds \ @@ -64,11 +64,11 @@ kubectl -n flux-system create secret generic rustfs-creds \ --from-literal=secretkey= ``` -The field names must be `accesskey` and `secretkey` — capitalization such as `accessKey` fails with an `AuthenticationFailed` status. +Les noms de champs doivent être `accesskey` et `secretkey` — une capitalisation telle que `accessKey` échoue avec un statut `AuthenticationFailed`. -## 3. Register the Bucket source +## 3. Enregistrer la source Bucket -Create the Bucket source with the `generic` provider: +Créez la source Bucket avec le fournisseur `generic` : ```bash flux create source bucket rustfs-demo \ @@ -85,18 +85,18 @@ flux create source bucket rustfs-demo \ ✔ Bucket source reconciliation completed ``` -If reconciliation is still running, check the status with `flux get sources bucket`: +Si la réconciliation est encore en cours, vérifiez l’état avec `flux get sources bucket` : ```text NAME REVISION SUSPENDED READY MESSAGE rustfs-demo sha256:481816d1 False True stored artifact: revision 'sha256:481816d1' ``` -The `generic` provider uses path-style requests and plain HTTP with `--insecure`, so the endpoint is the bare `host:port`. +Le fournisseur `generic` utilise des requêtes en adressage de type chemin (path-style) et le HTTP non chiffré avec `--insecure`, si bien que le point de terminaison se limite à `host:port`. -## 4. Apply the manifests +## 4. Appliquer les manifestes -Create a Kustomization that consumes the artifact: +Créez une Kustomization qui consomme l’artefact : ```bash flux create kustomization rustfs-demo \ @@ -111,7 +111,7 @@ flux create kustomization rustfs-demo \ ✔ applied revision sha256:481816d1 ``` -Confirm the manifest landed on the cluster: +Confirmez que le manifeste est arrivé sur le cluster : ```bash kubectl -n default get configmap rustfs-flux-demo -o jsonpath="{.data}" @@ -121,37 +121,37 @@ kubectl -n default get configmap rustfs-flux-demo -o jsonpath="{.data}" {"source":"s3-bucket","storage":"rustfs"} ``` -## 5. Stop or reset +## 5. Arrêter ou réinitialiser -Suspend or delete the Flux resources without touching the bucket: +Suspendez ou supprimez les ressources Flux sans toucher au compartiment : ```bash flux suspend source bucket rustfs-demo --namespace=flux-system flux delete kustomization rustfs-demo --namespace=flux-system ``` -To delete the bucket contents: +Pour supprimer le contenu du compartiment : ```bash rc rm rustfs/flux-src/ --recursive --force ``` -## Troubleshooting +## Dépannage ### `invalid 'rustfs-creds' secret data: required fields 'accesskey' and 'secretkey'` -The secret keys are lowercase. Recreate the secret with `accesskey` and `secretkey` as literal key names. +Les clés du secret sont en minuscules. Recréez le secret avec `accesskey` et `secretkey` comme noms de clés littéraux. -### Reconciliation never becomes ready +### La réconciliation ne passe jamais à l’état prêt -Confirm the endpoint is reachable from inside the cluster — pods cannot use `localhost`, so point the source at the host IP or the Docker bridge gateway (commonly `172.17.0.1`) that publishes the RustFS port. `--insecure` is required for plain HTTP. +Vérifiez que le point de terminaison est joignable depuis l’intérieur du cluster — les pods ne peuvent pas utiliser `localhost`, donc pointez la source vers l’adresse IP de l’hôte ou la passerelle du pont Docker (souvent `172.17.0.1`) qui publie le port RustFS. `--insecure` est requis pour le HTTP non chiffré. -### `AuthenticationFailed` despite valid credentials +### `AuthenticationFailed` malgré des identifiants valides -Check that the secret lives in the same namespace as the Bucket source and that the keys have no trailing whitespace or quoting. +Vérifiez que le secret se trouve dans le même espace de noms que la source Bucket et que les clés ne comportent ni espace final ni guillemets. -## Next steps +## Étapes suivantes -- Review [S3 compatibility notes](/administration/protocols/s3) before adopting additional source types. -- Create dedicated production credentials with [Access Key Management](/security-compliance/iam/access-token). -- Follow the [Flux Bucket source documentation](https://fluxcd.io/flux/components/source/buckets/) to combine bucket sources with Helm releases and image automation. +- Consultez les [notes de compatibilité S3](/fr/administration/protocols/s3) avant d’adopter d’autres types de sources. +- Créez des identifiants de production dédiés avec la [gestion des clés d’accès](/fr/security-compliance/iam/access-token). +- Suivez la [documentation des sources Bucket de Flux](https://fluxcd.io/flux/components/source/buckets/) pour combiner les sources Bucket avec les releases Helm et l’automatisation d’images. diff --git a/content/fr/developer/integration/cloud-native/index.md b/content/fr/developer/integration/cloud-native/index.md index e703d7a73..ebe44929a 100644 --- a/content/fr/developer/integration/cloud-native/index.md +++ b/content/fr/developer/integration/cloud-native/index.md @@ -1,14 +1,14 @@ --- -title: "Cloud Native" -description: "Connect cloud native platforms to RustFS through S3-compatible object storage interfaces." +title: "Cloud natif" +description: "Connectez des plateformes cloud natives à RustFS par des interfaces de stockage objet compatibles avec S3." --- -Use **RustFS** as the object storage layer for cloud native platforms that support an S3-compatible endpoint. +Utilisez **RustFS** comme couche de stockage objet pour les plateformes cloud natives qui prennent en charge un point de terminaison compatible avec S3. -## Platforms +## Plateformes - [Cortex](./cortex.md) - [Flux](./flux.md) - [celld](./celld.md) -Keep platform state in a dedicated bucket, and use credentials scoped to the required bucket operations. +Conservez l’état de la plateforme dans un compartiment (bucket) dédié, et utilisez des identifiants limités aux opérations requises sur ce compartiment. diff --git a/content/fr/developer/integration/cloud-native/meta.json b/content/fr/developer/integration/cloud-native/meta.json index fbe75f4b9..00e256bc5 100644 --- a/content/fr/developer/integration/cloud-native/meta.json +++ b/content/fr/developer/integration/cloud-native/meta.json @@ -1,5 +1,5 @@ { - "title": "Cloud Native", + "title": "Cloud natif", "pages": [ "cortex", "flux", diff --git a/content/fr/developer/integration/database/clickhouse.md b/content/fr/developer/integration/database/clickhouse.md index ac9d8d4b2..5c316c0f9 100644 --- a/content/fr/developer/integration/database/clickhouse.md +++ b/content/fr/developer/integration/database/clickhouse.md @@ -1,13 +1,13 @@ --- title: "ClickHouse" -description: "Run ClickHouse with an S3 disk backed by RustFS for MergeTree table data." +description: "Exécutez ClickHouse avec un disque S3 adossé à RustFS pour les données des tables MergeTree." --- -This guide connects [ClickHouse](https://github.com/ClickHouse/ClickHouse) — the real-time OLAP database — to **RustFS** through ClickHouse's S3 disk storage policy. You will start a ClickHouse server with Docker, create a MergeTree table that stores its parts on RustFS, insert rows, and verify that the table data lives in the bucket. The workflow was verified with `clickhouse/clickhouse-server:25.8` and `rustfs/rustfs-x86-musl:v2.3.1`. +Ce guide connecte [ClickHouse](https://github.com/ClickHouse/ClickHouse) — la base de données OLAP temps réel — à **RustFS** via la politique de stockage sur disque S3 de ClickHouse. Vous allez démarrer un serveur ClickHouse avec Docker, créer une table MergeTree qui stocke ses parties sur RustFS, insérer des lignes et vérifier que les données de la table se trouvent dans le compartiment (bucket). Le flux a été validé avec `clickhouse/clickhouse-server:25.8` et `rustfs/rustfs-x86-musl:v2.3.1`. -You need Docker. This deployment is intended for local integration testing, not production. +Vous avez besoin de Docker. Ce déploiement est destiné aux tests d’intégration locaux, pas à la production. -## Architecture +## Schéma d’architecture ```mermaid flowchart LR @@ -15,18 +15,18 @@ flowchart LR CH -->|"MergeTree parts"| RustFS["RustFS :9000"] ``` -The `rustfs` disk is a ClickHouse S3 disk pointed at the `clickhouse-data` bucket. Tables created with the matching storage policy write their parts — data, index, and checksum files — to the bucket instead of the local filesystem. +Le disque `rustfs` est un disque S3 ClickHouse dirigé vers le compartiment `clickhouse-data`. Les tables créées avec la politique de stockage correspondante écrivent leurs parties — données, index et fichiers de sommes de contrôle — dans le compartiment plutôt que sur le système de fichiers local. -## 1. Create the project files +## 1. Créer les fichiers du projet -Create the bucket first — ClickHouse does not create buckets: +Créez d’abord le compartiment — ClickHouse ne crée pas les compartiments : ```bash rc alias set rustfs http://:9000 rc mb rustfs/clickhouse-data ``` -Create the storage configuration, replacing both credential placeholders: +Créez la configuration de stockage en remplaçant les deux valeurs d’identifiants indicatives : ```xml title="storage.xml" @@ -52,9 +52,9 @@ Create the storage configuration, replacing both credential placeholders: ``` -The endpoint must end with `/` and includes the bucket name as the first path segment. Inside the Compose network the hostname is `rustfs`; from the host use `http://localhost:9000/clickhouse-data/`. +Le point de terminaison doit se terminer par `/` et inclut le nom du compartiment comme premier segment de chemin. À l’intérieur du réseau Compose, le nom d’hôte est `rustfs` ; depuis l’hôte, utilisez `http://localhost:9000/clickhouse-data/`. -Start ClickHouse with the configuration mounted: +Démarrez ClickHouse avec la configuration montée : ```bash docker run -d --name clickhouse --network oo-rustfs_default \ @@ -64,9 +64,9 @@ docker run -d --name clickhouse --network oo-rustfs_default \ clickhouse/clickhouse-server:25.8 ``` -## 2. Create a table on the S3 disk +## 2. Créer une table sur le disque S3 -Wait for the HTTP interface, then create a database and a MergeTree table with the storage policy: +Attendez l’interface HTTP, puis créez une base de données et une table MergeTree avec la politique de stockage : ```bash curl "http://localhost:8123/?password=" \ @@ -83,7 +83,7 @@ curl "http://localhost:8123/?password=" \ VALUES (1, 'clickhouse-on-rustfs'), (2, 'second')" ``` -Read the rows back and confirm ClickHouse reports the part on the `rustfs` disk: +Relisez les lignes et confirmez que ClickHouse signale la partie sur le disque `rustfs` : ```bash curl "http://localhost:8123/?password=" \ @@ -99,15 +99,15 @@ curl "http://localhost:8123/?password=" \ all_1_1_0 rustfs ``` -## 3. Verify objects in RustFS +## 3. Vérifier les objets dans RustFS -List the bucket: +Listez le compartiment : ```bash rc ls rustfs/clickhouse-data/ -r ``` -ClickHouse writes each part as content-addressed blobs. The output contains several small objects, and the count grows as more parts are written: +ClickHouse écrit chaque partie sous forme de blobs adressés par leur contenu. La sortie contient plusieurs petits objets, et leur nombre augmente à mesure que d’autres parties sont écrites : ```text dtg/hpsyncexixvdnsgorvseobogcgowg @@ -115,9 +115,9 @@ dzp/zfblobhsatzdveqdrsfqcupkdehja izg/gvhchqobrizpkdftuvlmakkoutwps ``` -![ClickHouse parts stored in the RustFS Console](./images/rustfs-clickhouse-disk.png) +![Parties ClickHouse stockées dans la Console RustFS](./images/rustfs-clickhouse-disk.png) -The data survives a container restart because the parts live in RustFS: +Les données survivent à un redémarrage du conteneur, car les parties résident dans RustFS : ```bash docker restart clickhouse @@ -125,36 +125,36 @@ curl "http://localhost:8123/?password=" \ --data-binary "SELECT count() FROM rustfs_demo.events" ``` -## 4. Stop or reset the deployment +## 4. Arrêter ou réinitialiser le déploiement -Stop the server while keeping the data: +Arrêtez le serveur tout en conservant les données : ```bash docker rm -f clickhouse ``` -The parts stay in the `clickhouse-data` bucket and the table can be queried again after the next start. To delete the data, remove the bucket: +Les parties restent dans le compartiment `clickhouse-data` et la table peut à nouveau être interrogée après le prochain démarrage. Pour supprimer les données, supprimez le compartiment : ```bash rc rb rustfs/clickhouse-data --force ``` -## Troubleshooting +## Dépannage -### `REQUIRED_PASSWORD` on every query +### `REQUIRED_PASSWORD` à chaque requête -ClickHouse 25.8 images require a password for the `default` user. Set `CLICKHOUSE_PASSWORD` on the container and pass the same value as the `password` query parameter, as shown above. +Les images ClickHouse 25.8 exigent un mot de passe pour l’utilisateur `default`. Définissez `CLICKHOUSE_PASSWORD` sur le conteneur et transmettez la même valeur comme paramètre de requête `password`, comme indiqué ci-dessus. -### Table creation fails with a disk or endpoint error +### La création de la table échoue avec une erreur de disque ou de point de terminaison -Confirm that the bucket exists before the table is created, that the endpoint ends with `/`, and that the credentials match the RustFS deployment. Check the server log for the underlying S3 error: +Vérifiez que le compartiment existe avant la création de la table, que le point de terminaison se termine par `/` et que les identifiants correspondent au déploiement RustFS. Consultez le journal du serveur pour l’erreur S3 sous-jacente : ```bash docker logs clickhouse | grep -i s3 | tail ``` -## Next steps +## Étapes suivantes -- Review [S3 compatibility notes](/administration/protocols/s3) before adopting additional ClickHouse operations. -- Create dedicated production credentials with [Access Key Management](/security-compliance/iam/access-token). -- Follow the [ClickHouse S3 disk documentation](https://clickhouse.com/docs/engines/table-engines/mergetree-family/mergetree#table_engine-mergetree-s3) to add a cache disk or a tiered hot/cold policy. +- Consultez les [notes de compatibilité S3](/fr/administration/protocols/s3) avant d’adopter d’autres opérations ClickHouse. +- Créez des identifiants de production dédiés avec la [gestion des clés d’accès](/fr/security-compliance/iam/access-token). +- Suivez la [documentation du disque S3 de ClickHouse](https://clickhouse.com/docs/engines/table-engines/mergetree-family/mergetree#table_engine-mergetree-s3) pour ajouter un disque de cache ou une politique à étages chaud/froid. diff --git a/content/fr/developer/integration/database/databend.md b/content/fr/developer/integration/database/databend.md index 829763398..6bb2a8e94 100644 --- a/content/fr/developer/integration/database/databend.md +++ b/content/fr/developer/integration/database/databend.md @@ -1,13 +1,13 @@ --- title: "Databend" -description: "Run Databend with RustFS as the S3-compatible storage backend." +description: "Exécutez Databend avec RustFS comme backend de stockage compatible avec S3." --- -This guide connects [Databend](https://github.com/datafuselabs/databend) — the open-source cloud data warehouse — to **RustFS** as its object storage backend. You will start the meta service and query node, point the storage backend at a RustFS bucket, create a database and table, and verify the Parquet files in the bucket. The workflow was verified with Databend v1.2.925-patch-13 against `rustfs/rustfs-x86-musl:v2.3.1`. +Ce guide connecte [Databend](https://github.com/datafuselabs/databend) — l’entrepôt de données cloud open source — à **RustFS** comme backend de stockage objet. Vous allez démarrer le service meta et le nœud de requête, diriger le backend de stockage vers un compartiment (bucket) RustFS, créer une base de données et une table, puis vérifier les fichiers Parquet dans le compartiment. Le flux a été validé avec Databend v1.2.925-patch-13 face à `rustfs/rustfs-x86-musl:v2.3.1`. -You need the Databend release tarball on a Linux host (or Docker). This deployment is intended for local integration testing, not production. +Vous avez besoin de l’archive de version Databend sur un hôte Linux (ou de Docker). Ce déploiement est destiné aux tests d’intégration locaux, pas à la production. -## Architecture +## Schéma d’architecture ```mermaid flowchart LR @@ -16,11 +16,11 @@ flowchart LR Query -->|"Parquet SSTs + indexes"| RustFS["RustFS :9000"] ``` -Databend stores table data as Parquet files with bloom-filter indexes in object storage, so the bucket holds the entire table dataset and the query node stays stateless. +Databend stocke les données des tables en fichiers Parquet, avec des index de filtre de Bloom, dans le stockage objet, de sorte que le compartiment contient l’intégralité du jeu de données de la table et que le nœud de requête reste sans état. -## 1. Download and install +## 1. Télécharger et installer -Grab a release tarball and unpack the binaries: +Récupérez une archive de version et décompressez les binaires : ```bash curl -Lo /tmp/databend.tgz \ @@ -28,15 +28,15 @@ curl -Lo /tmp/databend.tgz \ tar -xzf /tmp/databend.tgz -C /opt ``` -Create the data directories: +Créez les répertoires de données : ```bash mkdir -p /opt/databend/data /opt/databend/logs /opt/databend/meta-logs ``` -## 2. Configure the meta service +## 2. Configurer le service meta -Create `databend-meta.toml` — note the top-level addresses and the `[raft_config]` section with `single = true`: +Créez `databend-meta.toml` — notez les adresses de premier niveau et la section `[raft_config]` avec `single = true` : ```toml title="databend-meta.toml" admin_api_address = "0.0.0.0:28002" @@ -57,9 +57,9 @@ raft_advertise_host = "127.0.0.1" single = true ``` -## 3. Configure the query node +## 3. Configurer le nœud de requête -Create `databend-query.toml`. The `tenant_id` and `cluster_id` keys must live inside the `[query]` section, and `[storage.s3]` points at RustFS: +Créez `databend-query.toml`. Les clés `tenant_id` et `cluster_id` doivent se trouver dans la section `[query]`, et `[storage.s3]` pointe vers RustFS : ```toml title="databend-query.toml" [query] @@ -96,9 +96,9 @@ secret_access_key = "" enable_virtual_host_style = false ``` -Keep all keys before the `[[query.users]]` array entry — TOML treats everything after it as part of that array element, and misplaced keys fail validation with confusing errors. +Placez toutes les clés avant l’entrée de tableau `[[query.users]]` — TOML traite tout ce qui suit comme faisant partie de cet élément de tableau, et des clés mal placées échouent à la validation avec des erreurs peu claires. -## 4. Start the services +## 4. Démarrer les services ```bash nohup /opt/databend/bin/databend-meta -c /opt/databend/databend-meta.toml > /opt/databend/meta.out 2>&1 & @@ -107,9 +107,9 @@ nohup /opt/databend/bin/databend-query -c /opt/databend/databend-query.toml > /o sleep 20 ``` -## 5. Create a table and query +## 5. Créer une table et l’interroger -Databend serves an HTTP API on port 8000. Create a database and a table, insert rows, and read them back — quotes inside SQL must be single quotes (double quotes mean identifiers): +Databend expose une API HTTP sur le port 8000. Créez une base de données et une table, insérez des lignes et relisez-les — les guillemets à l’intérieur du SQL doivent être des guillemets simples (les guillemets doubles désignent des identifiants) : ```bash curl -s -m 90 -u databend: http://127.0.0.1:8000/v1/query \ @@ -129,9 +129,9 @@ curl -s -m 120 -u databend: http://127.0.0.1:8000/v1/query \ {"id":"...","state":"Succeeded",...,"data":[["1","alpha"],["2","beta"],["3","gamma"]],...} ``` -## 6. Verify objects in RustFS +## 6. Vérifier les objets dans RustFS -List the bucket — the table lives as Parquet blocks with index files under numeric prefixes: +Listez le compartiment — la table y réside sous forme de blocs Parquet accompagnés de fichiers d’index, sous des préfixes numériques : ```bash rc ls rustfs/databend-demo/ -r | head -4 @@ -142,35 +142,35 @@ rc ls rustfs/databend-demo/ -r | head -4 73/116/_i_b_v2/01a1192b11b07c38b9ae1178abc78882_v4.parquet ``` -![Databend Parquet files stored in the RustFS Console](./images/rustfs-databend-parquet.png) +![Fichiers Parquet Databend stockés dans la Console RustFS](./images/rustfs-databend-parquet.png) -## 7. Stop or reset +## 7. Arrêter ou réinitialiser ```bash pkill -f databend-query; pkill -f databend-meta rc rm rustfs/databend-demo/ --recursive --force ``` -## Troubleshooting +## Dépannage ### `cluster_id is empty without resources management` -`tenant_id` and `cluster_id` were placed outside the `[query]` section. In TOML, every key belongs to the most recent section header — move them back under `[query]`. +`tenant_id` et `cluster_id` ont été placés en dehors de la section `[query]`. En TOML, chaque clé appartient à l’en-tête de section le plus récent — remettez-les sous `[query]`. ### `CannotListenerPort ... 127.0.0.1:9090` -The flight API defaults to 9090, which other local services often occupy. Set `flight_api_address`, `metric_api_address`, and `admin_api_address` to free ports inside `[query]`. +L’API Flight utilise le port 9090 par défaut, que d’autres services locaux occupent souvent. Définissez `flight_api_address`, `metric_api_address` et `admin_api_address` sur des ports libres, à l’intérieur de `[query]`. -### Query returns `Authentication error: no authorization header provided` +### La requête renvoie `Authentication error: no authorization header provided` -The HTTP API requires basic auth matching the `[[query.users]]` entry, e.g. `-u databend:` with `auth_type = "no_password"`. +L’API HTTP exige une authentification Basic correspondant à l’entrée `[[query.users]]`, par exemple `-u databend:` avec `auth_type = "no_password"`. -### `Unknown table` right after CREATE succeeded +### `Unknown table` juste après la réussite de CREATE -Double-quoted strings in SQL are identifiers, not literals. Use single quotes for VALUES and for the CONNECTION/LOCATION options. +Les chaînes entre guillemets doubles en SQL sont des identifiants, pas des littéraux. Utilisez des guillemets simples pour VALUES et pour les options CONNECTION/LOCATION. -## Next steps +## Étapes suivantes -- Review [S3 compatibility notes](/administration/protocols/s3) before adopting additional Databend storage options. -- Create dedicated production credentials with [Access Key Management](/security-compliance/iam/access-token). -- Follow the [Databend documentation](https://docs.databend.com/) for multi-node clusters and share tables on top of the same bucket. +- Consultez les [notes de compatibilité S3](/fr/administration/protocols/s3) avant d’adopter d’autres options de stockage Databend. +- Créez des identifiants de production dédiés avec la [gestion des clés d’accès](/fr/security-compliance/iam/access-token). +- Suivez la [documentation Databend](https://docs.databend.com/) pour les clusters multi-nœuds et les tables partagées au-dessus du même compartiment. diff --git a/content/fr/developer/integration/database/doris.md b/content/fr/developer/integration/database/doris.md index 1c3665b5c..9486a4bcd 100644 --- a/content/fr/developer/integration/database/doris.md +++ b/content/fr/developer/integration/database/doris.md @@ -1,13 +1,13 @@ --- title: "Apache Doris" -description: "Back up Apache Doris tables to RustFS through an S3 repository and restore them." +description: "Sauvegardez des tables Apache Doris vers RustFS via un dépôt S3, puis restaurez-les." --- -This guide connects [Apache Doris](https://github.com/apache/doris) — the real-time analytical data warehouse — to **RustFS** through an S3 backup repository. You will start an all-in-one Doris container, create an S3 repository pointing at a RustFS bucket, back up a table, drop it, and restore it from RustFS. The workflow was verified with `apache/doris:all-in-one-4.1.3` and `rustfs/rustfs-x86-musl:v2.3.1`. +Ce guide connecte [Apache Doris](https://github.com/apache/doris) — l’entrepôt de données analytique temps réel — à **RustFS** via un dépôt de sauvegarde S3. Vous allez démarrer un conteneur Doris all-in-one, créer un dépôt S3 qui pointe vers un compartiment (bucket) RustFS, sauvegarder une table, la supprimer, puis la restaurer depuis RustFS. Le flux a été validé avec `apache/doris:all-in-one-4.1.3` et `rustfs/rustfs-x86-musl:v2.3.1`. -You need Docker. This deployment is intended for local integration testing, not production. +Vous avez besoin de Docker. Ce déploiement est destiné aux tests d’intégration locaux, pas à la production. -## Architecture +## Schéma d’architecture ```mermaid flowchart LR @@ -15,27 +15,27 @@ flowchart LR Doris -->|"BACKUP / RESTORE"| RustFS["RustFS :9000"] ``` -The repository is a named S3 location under the `doris-backups` bucket. `BACKUP SNAPSHOT` uploads table metadata and tablet data files; `RESTORE SNAPSHOT` downloads them into a new table. +Le dépôt est un emplacement S3 nommé sous le compartiment `doris-backups`. `BACKUP SNAPSHOT` charge les métadonnées de la table et les fichiers de données des tablets ; `RESTORE SNAPSHOT` les télécharge dans une nouvelle table. -## 1. Start Doris and create the repository +## 1. Démarrer Doris et créer le dépôt -Create the bucket first — Doris does not create buckets: +Créez d’abord le compartiment — Doris ne crée pas les compartiments : ```bash rc alias set rustfs http://:9000 rc mb rustfs/doris-backups ``` -Start the all-in-one container on the same Docker network as RustFS: +Démarrez le conteneur all-in-one sur le même réseau Docker que RustFS : ```bash docker run -d --name doris --network oo-rustfs_default \ -p 8030:8030 -p 9030:9030 apache/doris:all-in-one-4.1.3 ``` -Wait for the frontend to become healthy, then connect with the MySQL protocol (port 9030, user `root`, no password in the all-in-one image). +Attendez que le frontend soit prêt, puis connectez-vous avec le protocole MySQL (port 9030, utilisateur `root`, sans mot de passe dans l’image all-in-one). -Create a test table with rows: +Créez une table de test avec des lignes : ```sql CREATE DATABASE rustfs_demo; @@ -46,7 +46,7 @@ CREATE TABLE rustfs_demo.events INSERT INTO rustfs_demo.events VALUES (1, 'doris-on-rustfs'), (2, 'backup-test'); ``` -Create the S3 repository, replacing the endpoint with the IP address of the RustFS container and both credential placeholders: +Créez le dépôt S3, en remplaçant le point de terminaison par l’adresse IP du conteneur RustFS et les deux valeurs d’identifiants indicatives : ```sql CREATE REPOSITORY `rustfs_repo` @@ -61,11 +61,11 @@ CREATE REPOSITORY `rustfs_repo` ); ``` -Doris 4.1 resolves the bucket into the endpoint hostname even with `AWS_PATH_STYLE_ACCESS` enabled, so a hostname endpoint fails with `UnknownHostException: doris-backups.rustfs`. Using the container IP address forces path-style requests and works; `SHOW REPOSITORIES` confirms the repository registered with an empty `ErrMsg`. +Doris 4.1 place le nom du compartiment dans le nom d’hôte du point de terminaison même lorsque `AWS_PATH_STYLE_ACCESS` est activé, si bien qu’un point de terminaison par nom d’hôte échoue avec `UnknownHostException: doris-backups.rustfs`. L’adresse IP du conteneur force les requêtes en adressage de type chemin (path-style) et fonctionne ; `SHOW REPOSITORIES` confirme que le dépôt est enregistré avec un `ErrMsg` vide. -## 2. Back up a table to RustFS +## 2. Sauvegarder une table vers RustFS -Take a snapshot of the table: +Prenez un snapshot de la table : ```sql BACKUP SNAPSHOT rustfs_demo.demo_snapshot @@ -73,23 +73,23 @@ BACKUP SNAPSHOT rustfs_demo.demo_snapshot ON (events); ``` -The statement returns immediately; the backup job runs in the background. Watch its state: +L’instruction revient immédiatement ; la tâche de sauvegarde s’exécute en arrière-plan. Surveillez son état : ```sql SHOW BACKUP; ``` -Wait until `State` reaches `FINISHED` — the snapshot metadata and tablet data files are now objects in the bucket. +Attendez que `State` atteigne `FINISHED` — les métadonnées du snapshot et les fichiers de données des tablets sont alors des objets dans le compartiment. -## 3. Verify the backup in RustFS +## 3. Vérifier la sauvegarde dans RustFS -List the bucket: +Listez le compartiment : ```bash rc ls rustfs/doris-backups/ -r ``` -The repository stores a repository descriptor, the snapshot metadata, and the tablet files: +Le dépôt conserve un descripteur de dépôt, les métadonnées du snapshot et les fichiers de tablets : ```text rustfs-repo/__palo_repository_rustfs_repo/__repo_info @@ -97,11 +97,11 @@ rustfs-repo/__palo_repository_rustfs_repo/__ss_demo_snapshot/__meta.d50ecf9b... rustfs-repo/__palo_repository_rustfs_repo/__ss_demo_snapshot/__ss_content/.../...dat... ``` -![Doris backup objects stored in the RustFS Console](./images/rustfs-doris-backup.png) +![Objets de sauvegarde Doris stockés dans la Console RustFS](./images/rustfs-doris-backup.png) -## 4. Restore the table from RustFS +## 4. Restaurer la table depuis RustFS -Drop the table and restore it from the snapshot. The timestamp comes from the snapshot name shown by `SHOW SNAPSHOT ON REPOSITORY rustfs_repo;`: +Supprimez la table et restaurez-la depuis le snapshot. L’horodatage provient du nom de snapshot affiché par `SHOW SNAPSHOT ON REPOSITORY rustfs_repo;` : ```sql DROP TABLE rustfs_demo.events; @@ -115,7 +115,7 @@ RESTORE SNAPSHOT rustfs_demo.demo_snapshot ); ``` -Wait for the restore job to finish and confirm the data: +Attendez la fin de la tâche de restauration et confirmez les données : ```sql SHOW RESTORE; @@ -126,36 +126,36 @@ SELECT count(*) FROM rustfs_demo.events; 2 ``` -## 5. Stop or reset the deployment +## 5. Arrêter ou réinitialiser le déploiement -Stop Doris while keeping the data: +Arrêtez Doris tout en conservant les données : ```bash docker rm -f doris ``` -The backup stays in the `doris-backups` bucket and can be restored into any Doris cluster that registers the same repository. To delete it, remove the bucket: +La sauvegarde reste dans le compartiment `doris-backups` et peut être restaurée dans tout cluster Doris qui enregistre le même dépôt. Pour la supprimer, supprimez le compartiment : ```bash rc rb rustfs/doris-backups --force ``` -## Troubleshooting +## Dépannage -### `UnknownHostException: doris-backups.rustfs` when creating the repository +### `UnknownHostException: doris-backups.rustfs` lors de la création du dépôt -Doris is building a virtual-hosted hostname from the bucket and endpoint. Use the RustFS container IP address in `AWS_ENDPOINT` together with `AWS_PATH_STYLE_ACCESS = "true"`, as shown above. +Doris construit un nom d’hôte en adressage de type hôte virtuel à partir du compartiment et du point de terminaison. Utilisez l’adresse IP du conteneur RustFS dans `AWS_ENDPOINT` avec `AWS_PATH_STYLE_ACCESS = "true"`, comme indiqué ci-dessus. -### The backup stays in `SNAPSHOTING` for a long time +### La sauvegarde reste longtemps dans `SNAPSHOTING` -The backend uploads the tablet files. Confirm the backend is healthy (`SHOW BACKENDS;`) and can reach the endpoint; the all-in-one image needs a minute or two after start before both processes report ready. +Le backend charge les fichiers de tablets. Vérifiez que le backend est sain (`SHOW BACKENDS;`) et qu’il peut atteindre le point de terminaison ; l’image all-in-one a besoin d’une ou deux minutes après le démarrage avant que les deux processus ne se déclarent prêts. ### `Failed to create repository: ... file status` -The bucket does not exist or the credentials are wrong. Create `doris-backups` with `rc mb` and re-check the access key pair. +Le compartiment n’existe pas ou les identifiants sont incorrects. Créez `doris-backups` avec `rc mb` et vérifiez à nouveau les clés d’accès. -## Next steps +## Étapes suivantes -- Review [S3 compatibility notes](/administration/protocols/s3) before adopting additional Doris operations. -- Create dedicated production credentials with [Access Key Management](/security-compliance/iam/access-token). -- Follow the [Doris backup and restore documentation](https://doris.apache.org/docs/data-operate/backup-restore/) to schedule periodic snapshots. +- Consultez les [notes de compatibilité S3](/fr/administration/protocols/s3) avant d’adopter d’autres opérations Doris. +- Créez des identifiants de production dédiés avec la [gestion des clés d’accès](/fr/security-compliance/iam/access-token). +- Suivez la [documentation de sauvegarde et de restauration Doris](https://doris.apache.org/docs/data-operate/backup-restore/) pour planifier des snapshots périodiques. diff --git a/content/fr/developer/integration/database/duckdb.md b/content/fr/developer/integration/database/duckdb.md index 655effa7f..624bc7989 100644 --- a/content/fr/developer/integration/database/duckdb.md +++ b/content/fr/developer/integration/database/duckdb.md @@ -239,6 +239,6 @@ docker compose logs create-bucket ## Étapes suivantes -- Consultez les [notes de compatibilité S3](/administration/protocols/s3) avant d’adopter d’autres opérations S3. -- Créez des identifiants de production dédiés avec la [gestion des clés d’accès](/security-compliance/iam/access-token). +- Consultez les [notes de compatibilité S3](/fr/administration/protocols/s3) avant d’adopter d’autres opérations S3. +- Créez des identifiants de production dédiés avec la [gestion des clés d’accès](/fr/security-compliance/iam/access-token). - Suivez la [documentation httpfs de DuckDB](https://duckdb.org/docs/stable/extensions/httpfs/overview) pour les options avancées telles que les remplacements de région et les limites de connexion. diff --git a/content/fr/developer/integration/database/index.md b/content/fr/developer/integration/database/index.md index 53e1550a6..ae64c130c 100644 --- a/content/fr/developer/integration/database/index.md +++ b/content/fr/developer/integration/database/index.md @@ -1,11 +1,11 @@ --- -title: "Database" -description: "Connect databases to RustFS through S3-compatible object storage interfaces." +title: "Bases de données" +description: "Connectez des bases de données à RustFS par des interfaces de stockage objet compatibles avec S3." --- -Use **RustFS** as the object storage layer for databases that support an S3-compatible endpoint. +Utilisez **RustFS** comme couche de stockage objet pour les bases de données qui prennent en charge un point de terminaison compatible avec S3. -## Databases +## Bases de données - [ClickHouse](./clickhouse.md) - [Doris](./doris.md) @@ -17,4 +17,4 @@ Use **RustFS** as the object storage layer for databases that support an S3-comp - [Databend](./databend.md) - [Vitess](./vitess.md) -Keep database data and backups in a dedicated bucket and prefix, and use credentials scoped to the required bucket operations. +Conservez les données et les sauvegardes de base de données dans un compartiment (bucket) et un préfixe dédiés, et utilisez des identifiants limités aux opérations requises sur ce compartiment. diff --git a/content/fr/developer/integration/database/influxdb.md b/content/fr/developer/integration/database/influxdb.md index 3829dcf23..42f3c7620 100644 --- a/content/fr/developer/integration/database/influxdb.md +++ b/content/fr/developer/integration/database/influxdb.md @@ -148,7 +148,7 @@ Token: La valeur du token n’est affichée qu’une seule fois et ne peut pas être récupérée ultérieurement. Si le nom du token existe déjà (HTTP 409), le nœud possède des métadonnées — repartez d’un préfixe de compartiment neuf ou supprimez le préfixe du nœud dans le compartiment avant de réessayer. -:: : +::: ## 4. Écrire du line protocol @@ -274,6 +274,6 @@ docker compose logs create-bucket ## Étapes suivantes -- Consultez les [notes de compatibilité S3](/administration/protocols/s3) avant d’adopter d’autres opérations S3. -- Créez des identifiants de production dédiés avec la [gestion des clés d’accès](/security-compliance/iam/access-token). +- Consultez les [notes de compatibilité S3](/fr/administration/protocols/s3) avant d’adopter d’autres opérations S3. +- Créez des identifiants de production dédiés avec la [gestion des clés d’accès](/fr/security-compliance/iam/access-token). - Suivez la [documentation InfluxDB 3 Core](https://docs.influxdata.com/influxdb3/core/) pour connecter telegraf ou les API d’écriture comme producteurs de données. diff --git a/content/fr/developer/integration/database/lancedb.md b/content/fr/developer/integration/database/lancedb.md index 38a0703ab..d923f103c 100644 --- a/content/fr/developer/integration/database/lancedb.md +++ b/content/fr/developer/integration/database/lancedb.md @@ -1,13 +1,13 @@ --- title: "LanceDB" -description: "Store and query LanceDB vector tables directly on RustFS." +description: "Stockez et interrogez des tables vectorielles LanceDB directement sur RustFS." --- -This guide connects [LanceDB](https://github.com/lancedb/lancedb) — the open-source vector database built on the Lance columnar format — to **RustFS** as its storage backend. You will create a vector table directly at an `s3://` location, add rows, run a vector search, and confirm the Lance table files in the bucket. The workflow was verified with the `lancedb` Python package against `rustfs/rustfs-x86-musl:v2.3.1`. +Ce guide connecte [LanceDB](https://github.com/lancedb/lancedb) — la base de données vectorielle open source fondée sur le format en colonnes Lance — à **RustFS** comme backend de stockage. Vous allez créer une table vectorielle directement à un emplacement `s3://`, ajouter des lignes, exécuter une recherche vectorielle et confirmer les fichiers de table Lance dans le compartiment (bucket). Le flux a été validé avec le paquet Python `lancedb` face à `rustfs/rustfs-x86-musl:v2.3.1`. -You need Python 3.9 or newer. This deployment is intended for local integration testing, not production. +Vous avez besoin de Python 3.9 ou d’une version plus récente. Ce déploiement est destiné aux tests d’intégration locaux, pas à la production. -## Architecture +## Schéma d’architecture ```mermaid flowchart LR @@ -15,17 +15,17 @@ flowchart LR LanceDB -->|"Lance fragments + manifests"| RustFS["RustFS :9000"] ``` -LanceDB is embedded: there is no server to run. The Python (or Rust, or JavaScript) client talks to the bucket directly, storing each table as a `*.lance` directory with data fragments, version manifests, and transaction logs. +LanceDB est embarqué : il n’y a pas de serveur à exécuter. Le client Python (ou Rust, ou JavaScript) parle directement au compartiment et stocke chaque table dans un répertoire `*.lance` avec des fragments de données, des manifestes de version et des journaux de transactions. -## 1. Install the client +## 1. Installer le client ```bash pip install lancedb ``` -## 2. Create a table on RustFS +## 2. Créer une table sur RustFS -Connect straight to the bucket and create a table, replacing all connection placeholders. The `storage_options` keys follow Lance's object-store conventions; custom endpoints use path-style addressing: +Connectez-vous directement au compartiment et créez une table, en remplaçant toutes les valeurs de connexion indicatives. Les clés `storage_options` suivent les conventions object-store de Lance ; les points de terminaison personnalisés utilisent l’adressage de type chemin (path-style) : ```python title="lance_s3.py" import lancedb @@ -54,9 +54,9 @@ created: 5 rows after add: 6 rows ``` -The table URI uses the `s3://bucket/prefix` form; every write and read goes to RustFS over its S3 API. +L’URI de la table utilise la forme `s3://bucket/prefix` ; chaque écriture et chaque lecture passe par l’API S3 de RustFS. -## 3. Run a vector search +## 3. Exécuter une recherche vectorielle ```python title="lance_search.py" import lancedb @@ -74,17 +74,17 @@ top3: [(99, 'query-target'), (4, 'row-4'), (3, 'row-3')] version: 2 ``` -The nearest neighbor is the row added in the previous step, and the version counter reflects the two commits (create and add). +Le plus proche voisin est la ligne ajoutée à l’étape précédente, et le compteur de version reflète les deux commits (création et ajout). -## 4. Verify objects in RustFS +## 4. Vérifier les objets dans RustFS -List the table prefix: +Listez le préfixe de la table : ```bash rc ls rustfs// -r ``` -Each table is a `.lance` directory holding data fragments, version manifests, and transaction records: +Chaque table est un répertoire `.lance` qui contient des fragments de données, des manifestes de version et des enregistrements de transaction : ```text tables/events.lance/_transactions/0-b93cf795-fc3d-4bc9-88c8-e37baeefdd46.txn @@ -92,34 +92,34 @@ tables/events.lance/_versions/18446744073709551613.manifest tables/events.lance/data/101101011110110010000100e7a149411b847dbad6ebc7d47e.lance ``` -Multiple tables share the bucket under the `tables/` prefix, so one bucket can back an entire LanceDB workspace. +Plusieurs tables partagent le compartiment sous le préfixe `tables/`, si bien qu’un seul compartiment peut porter tout un espace de travail LanceDB. -![LanceDB table files stored in the RustFS Console](./images/rustfs-lancedb-table.png) +![Fichiers de table LanceDB stockés dans la Console RustFS](./images/rustfs-lancedb-table.png) -## 5. Stop or reset +## 5. Arrêter ou réinitialiser -LanceDB holds no server state. To delete the table: +LanceDB ne conserve aucun état serveur. Pour supprimer la table : ```bash rc rm rustfs//tables/ --recursive --force ``` -## Troubleshooting +## Dépannage -### Connection or signature errors on first use +### Erreurs de connexion ou de signature à la première utilisation -Confirm `endpoint` includes the scheme, `allow_http` is `"true"` for plain-HTTP endpoints, and the bucket exists. The `region` value is required by the S3 signer even though RustFS ignores it. +Vérifiez que `endpoint` inclut le schéma, que `allow_http` vaut `"true"` pour les points de terminaison en HTTP non chiffré, et que le compartiment existe. La valeur `region` est exigée par le signataire S3, même si RustFS l’ignore. -### `Table not found` after creating it +### `Table not found` après la création -LanceDB lists the bucket prefix to discover tables. A stale client cache or a wrong `tables/` prefix in the URI makes new tables invisible; reconnect with the same URI used at creation time. +LanceDB répertorie le préfixe du compartiment pour découvrir les tables. Un cache client périmé ou un mauvais préfixe `tables/` dans l’URI rend les nouvelles tables invisibles ; reconnectez-vous avec la même URI que lors de la création. -### Slow bulk loads over the network +### Chargements volumineux lents sur le réseau -Lance writes one fragment per commit. For large imports, batch rows into fewer `table.add` calls — each call produces a new data file in the bucket. +Lance écrit un fragment par commit. Pour les imports volumineux, regroupez les lignes dans moins d’appels `table.add` — chaque appel produit un nouveau fichier de données dans le compartiment. -## Next steps +## Étapes suivantes -- Review [S3 compatibility notes](/administration/protocols/s3) before adopting additional LanceDB storage options. -- Create dedicated production credentials with [Access Key Management](/security-compliance/iam/access-token). -- Follow the [LanceDB documentation](https://lancedb.github.io/lancedb/) for ANN indexes, hybrid search, and multi-tenant bucket layouts on top of the same backend. +- Consultez les [notes de compatibilité S3](/fr/administration/protocols/s3) avant d’adopter d’autres options de stockage LanceDB. +- Créez des identifiants de production dédiés avec la [gestion des clés d’accès](/fr/security-compliance/iam/access-token). +- Suivez la [documentation LanceDB](https://lancedb.github.io/lancedb/) pour les index ANN, la recherche hybride et les dispositions de compartiments multi-locataires au-dessus du même backend. diff --git a/content/fr/developer/integration/database/meta.json b/content/fr/developer/integration/database/meta.json index cbf3ed7b8..60ba9a6fe 100644 --- a/content/fr/developer/integration/database/meta.json +++ b/content/fr/developer/integration/database/meta.json @@ -1,5 +1,5 @@ { - "title": "Database", + "title": "Bases de données", "pages": [ "clickhouse", "doris", diff --git a/content/fr/developer/integration/database/milvus.md b/content/fr/developer/integration/database/milvus.md index 2b17701bf..bfae3ee9e 100644 --- a/content/fr/developer/integration/database/milvus.md +++ b/content/fr/developer/integration/database/milvus.md @@ -1,19 +1,19 @@ --- title: "Milvus" -description: "Run Milvus with RustFS as its S3-compatible object storage backend using Docker Compose." +description: "Exécutez Milvus avec RustFS comme backend de stockage objet compatible avec S3, à l’aide de Docker Compose." --- -This guide runs **Milvus Standalone** with **RustFS** as its S3-compatible object storage backend. You will start Milvus, etcd, RustFS, and Attu; insert sample vectors; and verify that Milvus persists objects in RustFS. +Ce guide exécute **Milvus Standalone** avec **RustFS** comme backend de stockage objet compatible avec S3. Vous allez démarrer Milvus, etcd, RustFS et Attu, insérer des vecteurs d’exemple et vérifier que Milvus persiste des objets dans RustFS. -You need Docker with the Compose plugin and Python 3.9 or later. This deployment is intended for local integration testing, not production. +Vous avez besoin de Docker avec le plugin Compose et de Python 3.9 ou d’une version plus récente. Ce déploiement est destiné aux tests d’intégration locaux, pas à la production. -:::note[Milvus configuration names] +:::note[Noms de configuration Milvus] -Milvus groups S3-compatible storage settings under the `minio` configuration key. The name does not require a MinIO server. In this guide, `minio.address` points to the RustFS service, and Milvus uses the S3 API exposed by RustFS. +Milvus regroupe les paramètres de stockage compatible avec S3 sous la clé de configuration `minio`. Ce nom n’exige pas un serveur MinIO. Dans ce guide, `minio.address` pointe vers le service RustFS, et Milvus utilise l’API S3 exposée par RustFS. ::: -## Architecture +## Schéma d’architecture ```mermaid flowchart LR @@ -24,27 +24,27 @@ flowchart LR Init["Bucket initializer"] -->|Create my-bucket| RustFS ``` -Milvus stores service metadata in etcd and persists vector data, indexes, and related objects under `s3://my-bucket/milvus` in RustFS. The local Milvus volume remains necessary for runtime data and caches. +Milvus stocke les métadonnées de service dans etcd et persiste les données vectorielles, les index et les objets associés sous `s3://my-bucket/milvus` dans RustFS. Le volume local de Milvus reste nécessaire pour les données d’exécution et les caches. -## 1. Create the project files +## 1. Créer les fichiers du projet -Create a working directory: +Créez un répertoire de travail : ```bash mkdir rustfs-milvus cd rustfs-milvus ``` -Create an environment file and replace both credential placeholders: +Créez un fichier d’environnement et remplacez les deux valeurs d’identifiants indicatives : ```ini title=".env" RUSTFS_ACCESS_KEY= RUSTFS_SECRET_KEY= ``` -Use dedicated credentials for the Milvus bucket. Do not commit `.env` to source control. +Utilisez des identifiants dédiés pour le compartiment (bucket) Milvus. N’ajoutez pas le fichier `.env` au dépôt. -Create the Milvus storage override: +Créez le fichier de surcharge du stockage Milvus : ```yaml title="user.yaml" common: @@ -62,9 +62,9 @@ minio: useVirtualHost: false ``` -`useVirtualHost: false` selects path-style S3 requests. The hostname `rustfs` resolves inside the Compose network; clients on the host use `http://localhost:9000`. +`useVirtualHost: false` sélectionne les requêtes S3 en adressage de type chemin (path-style). Le nom d’hôte `rustfs` se résout à l’intérieur du réseau Compose ; les clients sur l’hôte utilisent `http://localhost:9000`. -Create the Compose file: +Créez le fichier Compose : ```yaml title="compose.yaml" services: @@ -186,46 +186,46 @@ volumes: milvus-data: ``` -The `create-bucket` service uses the official [`rc`](https://github.com/rustfs/cli) image and exits after ensuring that `my-bucket` exists. Named volumes preserve etcd metadata, RustFS objects, and Milvus local data when containers are recreated. +Le service `create-bucket` utilise l’image officielle [`rc`](https://github.com/rustfs/cli) et se termine après avoir vérifié que `my-bucket` existe. Les volumes nommés conservent les métadonnées etcd, les objets RustFS et les données locales de Milvus lorsque les conteneurs sont recréés. -:::warning[Protect local service ports] +:::warning[Protégez les ports des services locaux] -The Compose file publishes the RustFS API and Console, Milvus gRPC and health ports, and Attu on the host for local testing. Do not expose these ports to an untrusted network. Production deployments require scoped credentials, TLS, authentication, resource planning, backups, and independently operated dependencies. +Le fichier Compose publie l’API et la Console RustFS, les ports gRPC et de contrôle d’intégrité de Milvus, ainsi qu’Attu, sur l’hôte pour les tests locaux. N’exposez pas ces ports à un réseau non fiable. Les déploiements de production exigent des identifiants limités, TLS, une authentification, une planification des ressources, des sauvegardes et des dépendances exploitées séparément. ::: -## 2. Validate and start the deployment +## 2. Valider et démarrer le déploiement -Resolve the Compose file before starting containers: +Résolvez le fichier Compose avant de démarrer les conteneurs : ```bash docker compose config ``` -Start the services: +Démarrez les services : ```bash docker compose up -d docker compose ps -a ``` -The `create-bucket` service should exit with code `0`, and `etcd`, `rustfs`, and `standalone` should become healthy. Inspect logs if a service does not reach its expected state: +Le service `create-bucket` devrait se terminer avec le code `0`, et `etcd`, `rustfs` ainsi que `standalone` devraient passer à l’état sain (healthy). Consultez les journaux si un service n’atteint pas l’état attendu : ```bash docker compose logs create-bucket rustfs standalone ``` -Open these local interfaces: +Ouvrez ces interfaces locales : -- RustFS Console: `http://localhost:9001` -- Attu: `http://localhost:8000` -- Milvus health endpoint: `http://localhost:9091/healthz` +- Console RustFS : `http://localhost:9001` +- Attu : `http://localhost:8000` +- Point de terminaison de contrôle d’intégrité Milvus : `http://localhost:9091/healthz` -Attu connects to `standalone:19530` through the Compose network. If Attu asks for a connection address, use that service name instead of `localhost:19530`. +Attu se connecte à `standalone:19530` via le réseau Compose. Si Attu demande une adresse de connexion, utilisez ce nom de service à la place de `localhost:19530`. -## 3. Insert and query sample vectors +## 3. Insérer et interroger des vecteurs d’exemple -Create a Python virtual environment and install the Milvus client version that matches the server release: +Créez un environnement virtuel Python et installez la version du client Milvus qui correspond à la version du serveur : ```bash python3 -m venv .venv @@ -233,7 +233,7 @@ source .venv/bin/activate python -m pip install "pymilvus==2.6.0" ``` -Create a test script: +Créez un script de test : ```python title="verify_milvus.py" from pymilvus import MilvusClient @@ -270,85 +270,85 @@ print(results) client.close() ``` -Run the script: +Exécutez le script : ```bash python verify_milvus.py ``` -The result should rank the row with ID `1` first. Open Attu and confirm that the `rustfs_demo` collection contains three entities. +Le résultat devrait classer en premier la ligne d’ID `1`. Ouvrez Attu et confirmez que la collection `rustfs_demo` contient trois entités. -## 4. Verify Milvus objects in RustFS +## 4. Vérifier les objets Milvus dans RustFS -Use the bucket-initializer image to list objects below the configured `milvus` root path: +Utilisez l’image d’initialisation du compartiment pour lister les objets sous le chemin racine `milvus` configuré : ```bash docker compose run --rm --entrypoint /bin/sh create-bucket -c \ '/usr/bin/rc alias set rustfs http://rustfs:9000 "$RUSTFS_ACCESS_KEY" "$RUSTFS_SECRET_KEY" --region us-east-1 --bucket-lookup path >/dev/null && /usr/bin/rc find rustfs/my-bucket/milvus' ``` -The output should contain objects created by Milvus below the `milvus/` prefix. You can also open `my-bucket` in the RustFS Console. +La sortie devrait contenir des objets créés par Milvus sous le préfixe `milvus/`. Vous pouvez aussi ouvrir `my-bucket` dans la Console RustFS. -Milvus may buffer or compact data before every expected object appears. The successful insert, flush, query, and RustFS object listing together validate the integration path. +Milvus peut mettre les données en tampon ou les compacter avant que chaque objet attendu n’apparaisse. L’insertion, le flush, la requête et le listage d’objets RustFS, lorsqu’ils réussissent ensemble, valident le chemin d’intégration. -## 5. Stop or reset the stack +## 5. Arrêter ou réinitialiser la pile -Stop the containers while retaining all named volumes: +Arrêtez les conteneurs tout en conservant tous les volumes nommés : ```bash docker compose down ``` -To delete the local test data, including the Milvus bucket contents and etcd metadata, explicitly remove the volumes: +Pour supprimer les données de test locales, y compris le contenu du compartiment Milvus et les métadonnées etcd, supprimez explicitement les volumes : ```bash docker compose down --volumes ``` -:::warning[Reset removes the test data] +:::warning[La réinitialisation supprime les données de test] -The `--volumes` option permanently deletes the named volumes used by this Compose project. Do not run it against data you need to retain. +L’option `--volumes` supprime définitivement les volumes nommés utilisés par ce projet Compose. Ne l’exécutez pas sur des données que vous devez conserver. ::: -## Troubleshooting +## Dépannage -### Milvus cannot reach RustFS +### Milvus n’atteint pas RustFS -Use `rustfs:9000` as the S3 endpoint inside Compose. `localhost:9000` inside the Milvus container refers to that container, not RustFS. +Utilisez `rustfs:9000` comme point de terminaison S3 à l’intérieur de Compose. `localhost:9000` à l’intérieur du conteneur Milvus désigne ce conteneur, et non RustFS. -Confirm that `useVirtualHost` remains `false` and that the credential values passed to Milvus match the RustFS credentials: +Vérifiez que `useVirtualHost` reste à `false` et que les identifiants transmis à Milvus correspondent aux identifiants RustFS : ```bash docker compose logs standalone rustfs ``` -### The bucket initializer fails +### L’initialiseur de compartiment échoue -Check RustFS readiness and the initializer logs: +Vérifiez l’état de préparation de RustFS et les journaux de l’initialiseur : ```bash curl -fsS http://localhost:9000/health/ready docker compose logs create-bucket ``` -Verify that `.env` contains non-empty credentials and that `docker compose config` resolves both variables. +Vérifiez que `.env` contient des identifiants non vides et que `docker compose config` résout les deux variables. -### Milvus starts without existing data +### Milvus démarre sans les données existantes -Do not change `minio.bucketName`, `minio.rootPath`, or the etcd root for an existing deployment. Confirm that the `rustfs-data`, `etcd-data`, and `milvus-data` volumes still exist and that the same Compose project name is in use. +Ne modifiez pas `minio.bucketName`, `minio.rootPath` ni la racine etcd d’un déploiement existant. Vérifiez que les volumes `rustfs-data`, `etcd-data` et `milvus-data` existent encore et que le même nom de projet Compose est utilisé. -### Attu cannot connect +### Attu ne peut pas se connecter -The Attu container must use `standalone:19530`. A browser or host-side client uses `localhost:19530`. Check Milvus health and Attu logs: +Le conteneur Attu doit utiliser `standalone:19530`. Un navigateur ou un client côté hôte utilise `localhost:19530`. Vérifiez le contrôle d’intégrité de Milvus et les journaux d’Attu : ```bash curl -fsS http://localhost:9091/healthz docker compose logs attu standalone ``` -## Next steps +## Étapes suivantes -- Review [S3 compatibility notes](/administration/protocols/s3) before enabling additional Milvus storage features. -- Create dedicated production credentials with [Access Key Management](/security-compliance/iam/access-token). -- Follow the [Milvus documentation](https://milvus.io/docs) when adapting this local pattern to a managed or distributed deployment. \ No newline at end of file +- Consultez les [notes de compatibilité S3](/fr/administration/protocols/s3) avant d’activer d’autres fonctionnalités de stockage Milvus. +- Créez des identifiants de production dédiés avec la [gestion des clés d’accès](/fr/security-compliance/iam/access-token). +- Suivez la [documentation Milvus](https://milvus.io/docs) pour adapter ce schéma local à un déploiement géré ou distribué. \ No newline at end of file diff --git a/content/fr/developer/integration/database/trino.md b/content/fr/developer/integration/database/trino.md index 3291f567f..b17136bcd 100644 --- a/content/fr/developer/integration/database/trino.md +++ b/content/fr/developer/integration/database/trino.md @@ -203,7 +203,7 @@ Vous pouvez également parcourir le préfixe dans la Console RustFS : ## 6. Utiliser RustFS S3 Tables -RustFS S3 Tables fournit un catalogue REST Apache Iceberg intégré, permettant à Trino de traiter un compartiment de tables (table bucket) comme un entrepôt Iceberg géré tandis que les données restent dans RustFS. Activez un compartiment de tables et connectez le connecteur Iceberg de Trino au catalogue REST comme décrit dans [S3 Tables](/administration/data/s3-tables) : l’URI du catalogue REST est `http://:9000/iceberg`, le warehouse est le nom du compartiment, et les requêtes de catalogue (AWS Signature Version 4, nom de signature `s3`) comme l’accès aux fichiers S3 utilisent l’adressage de type chemin (path-style). +RustFS S3 Tables fournit un catalogue REST Apache Iceberg intégré, permettant à Trino de traiter un compartiment de tables (table bucket) comme un entrepôt Iceberg géré tandis que les données restent dans RustFS. Activez un compartiment de tables et connectez le connecteur Iceberg de Trino au catalogue REST comme décrit dans [S3 Tables](/fr/administration/data/s3-tables) : l’URI du catalogue REST est `http://:9000/iceberg`, le warehouse est le nom du compartiment, et les requêtes de catalogue (AWS Signature Version 4, nom de signature `s3`) comme l’accès aux fichiers S3 utilisent l’adressage de type chemin (path-style). Selon la matrice de prise en charge S3 Tables, Trino a fait l’objet d’une vérification en lecture seule face au catalogue ; validez la compatibilité en écriture et la version exacte de Trino que vous déployez avant d’adopter ce chemin en production. @@ -245,6 +245,6 @@ docker compose logs create-bucket ## Étapes suivantes -- Consultez les [notes de compatibilité S3](/administration/protocols/s3) avant d’adopter d’autres opérations S3. -- Créez des identifiants de production dédiés avec la [gestion des clés d’accès](/security-compliance/iam/access-token). +- Consultez les [notes de compatibilité S3](/fr/administration/protocols/s3) avant d’adopter d’autres opérations S3. +- Créez des identifiants de production dédiés avec la [gestion des clés d’accès](/fr/security-compliance/iam/access-token). - Suivez la [documentation Trino](https://trino.io/docs/current/) pour connecter des outils BI et ajouter des catalogues de stockage objet. diff --git a/content/fr/developer/integration/database/vitess.md b/content/fr/developer/integration/database/vitess.md index 2260b7449..5f73e48b4 100644 --- a/content/fr/developer/integration/database/vitess.md +++ b/content/fr/developer/integration/database/vitess.md @@ -1,13 +1,13 @@ --- title: "Vitess" -description: "Back up Vitess to RustFS through the S3 backup storage implementation." +description: "Sauvegardez Vitess vers RustFS via l’implémentation de stockage de sauvegarde S3." --- -This guide connects [Vitess](https://github.com/vitessio/vitess) — the database clustering system for horizontal scaling of MySQL — to **RustFS** through Vitess's S3 backup storage implementation. You will bring up a minimal Vitess topology on a single host, run `Backup` on a tablet, and confirm the backup chunks and `MANIFEST` in the bucket, then read the backup list back from RustFS. The workflow was verified with `vitess/lite` (Vitess v25.0.0-SNAPSHOT, built 2026-09-22), MySQL 8.4, and `rustfs/rustfs-x86-musl:v2.3.1`; stable Vitess 20+ releases use the same flags. +Ce guide connecte [Vitess](https://github.com/vitessio/vitess) — le système de clustering de bases de données pour la mise à l’échelle horizontale de MySQL — à **RustFS** via l’implémentation de stockage de sauvegarde S3 de Vitess. Vous allez mettre en place une topologie Vitess minimale sur un seul hôte, exécuter `Backup` sur un tablet, confirmer les fragments de sauvegarde et le `MANIFEST` dans le compartiment (bucket), puis relire la liste des sauvegardes depuis RustFS. Le flux a été validé avec `vitess/lite` (Vitess v25.0.0-SNAPSHOT, construit le 2026-09-22), MySQL 8.4 et `rustfs/rustfs-x86-musl:v2.3.1` ; les versions stables de Vitess 20 et suivantes utilisent les mêmes options. -You need Docker. This deployment is intended for local integration testing, not production. +Vous avez besoin de Docker. Ce déploiement est destiné aux tests d’intégration locaux, pas à la production. -## Architecture +## Schéma d’architecture ```mermaid flowchart LR @@ -16,11 +16,11 @@ flowchart LR Tablet -->|"S3 API"| RustFS["RustFS :9000"] ``` -`vtctld` triggers the backup, but the `vttablet` owning the tablet performs it: it snapshots MySQL, compresses the data into numbered chunks, and uploads them together with a `MANIFEST` through the S3-compatible endpoint. +`vtctld` déclenche la sauvegarde, mais le `vttablet` qui possède le tablet l’exécute : il prend un instantané de MySQL, compresse les données en fragments numérotés et les charge avec un `MANIFEST` via le point de terminaison compatible avec S3. -## 1. Run etcd and the Vitess image +## 1. Exécuter etcd et l’image Vitess -Vitess stores its topology in etcd, and the `vitess/lite` image ships all Vitess binaries plus MySQL: +Vitess stocke sa topologie dans etcd, et l’image `vitess/lite` fournit tous les binaires Vitess ainsi que MySQL : ```bash docker run -d --name etcd --hostname etcd --network oo-rustfs_default \ @@ -34,26 +34,26 @@ docker run -d --name vtess --hostname vtess --network oo-rustfs_default \ vitess/lite:latest sleep infinity ``` -The AWS environment variables supply the credentials for the S3 backup storage in both `vtctld` and `vttablet`. +Les variables d’environnement AWS fournissent les identifiants du stockage de sauvegarde S3, à la fois pour `vtctld` et pour `vttablet`. -## 2. Initialize MySQL +## 2. Initialiser MySQL -Initialize a MySQL instance in the standard Vitess tablet directory so `vttablet` can load its `my.cnf` later: +Initialisez une instance MySQL dans le répertoire de tablet Vitess standard, afin que `vttablet` puisse charger son `my.cnf` ensuite : ```bash docker exec vtess sh -c \ "/vt/bin/mysqlctl --log_dir /tmp/vtlogs init --tablet-dir vt_0000000100" ``` -The instance is ready when the socket file exists: +L’instance est prête lorsque le fichier de socket existe : ```text /vt/vtdataroot/vt_0000000100/mysql.sock ``` -## 3. Start vtctld and vttablet +## 3. Démarrer vtctld et vttablet -Start `vtctld` with the S3 backup flags, register the cell, and start the tablet. Replace all connection placeholders: +Démarrez `vtctld` avec les options de sauvegarde S3, enregistrez la cell et démarrez le tablet. Remplacez toutes les valeurs de connexion indicatives : ```bash docker exec vtess sh -c "nohup /vt/bin/vtctld \ @@ -95,7 +95,7 @@ docker exec vtess sh -c "nohup /vt/bin/vttablet \ --log_dir /tmp/vtlogs > /tmp/vtlogs/vttablet.out 2>&1 &" ``` -Both processes carry the S3 flags because `vttablet` performs the backup while `vtctld` lists and removes backups. `--s3-backup-force-path-style` is mandatory for non-AWS endpoints. Check that the tablet registered: +Les deux processus incluent les options S3, car `vttablet` exécute la sauvegarde tandis que `vtctld` répertorie et supprime les sauvegardes. `--s3-backup-force-path-style`, qui impose l’adressage de type chemin (path-style), est obligatoire pour les points de terminaison autres qu’AWS. Vérifiez que le tablet est enregistré : ```bash docker exec vtess /vt/bin/vtctldclient --server localhost:15998 GetTablets @@ -105,9 +105,9 @@ docker exec vtess /vt/bin/vtctldclient --server localhost:15998 GetTablets zone1-0000000100 commerce 0 replica vtess:15100 vtess:3306 [] ``` -## 4. Run the backup +## 4. Exécuter la sauvegarde -Create the bucket and trigger the backup: +Créez le compartiment et déclenchez la sauvegarde : ```bash rc mb rustfs/vitess-backups @@ -116,21 +116,21 @@ docker exec vtess /vt/bin/vtctldclient --server localhost:15998 \ Backup zone1-0000000100 ``` -The stream ends with the engine writing the manifest: +Le flux se termine lorsque le moteur écrit le manifeste : ```text commerce/0 (zone1-0000000100): ... value:"Completed backing up MANIFEST (attempt 1/2)" ``` -## 5. Verify objects in RustFS +## 5. Vérifier les objets dans RustFS -List the backup prefix: +Listez le préfixe de sauvegarde : ```bash rc ls rustfs/vitess-backups/ -r | head -4 ``` -The tablet uploaded compressed data chunks plus the metadata files: +Le tablet a chargé des fragments de données compressés ainsi que les fichiers de métadonnées : ```text commerce/commerce/0/2026-09-23.011225.zone1-0000000100/0 @@ -138,9 +138,9 @@ commerce/commerce/0/2026-09-23.011225.zone1-0000000100/1 commerce/commerce/0/2026-09-23.011225.zone1-0000000100/MANIFEST ``` -![Vitess backup files stored in the RustFS Console](./images/rustfs-vitess-backups.png) +![Fichiers de sauvegarde Vitess stockés dans la Console RustFS](./images/rustfs-vitess-backups.png) -Read the backup list back from RustFS through `vtctld`: +Relisez la liste des sauvegardes depuis RustFS via `vtctld` : ```bash docker exec vtess /vt/bin/vtctldclient --server localhost:15998 GetBackups commerce/0 @@ -150,40 +150,40 @@ docker exec vtess /vt/bin/vtctldclient --server localhost:15998 GetBackups comme 2026-09-23.011225.zone1-0000000100 ``` -## 6. Stop or reset +## 6. Arrêter ou réinitialiser -To tear down the demo while keeping the bucket objects: +Pour arrêter la démonstration tout en conservant les objets du compartiment : ```bash docker rm -f vtess etcd ``` -To delete the stored backups: +Pour supprimer les sauvegardes stockées : ```bash rc rm rustfs/vitess-backups/ --recursive --force ``` -## Troubleshooting +## Dépannage ### `cannot perform backup without my.cnf` -Passing connection parameters such as `--db-socket` or `--db-host` makes `vttablet` skip loading `my.cnf`, and backups refuse to run. Start `vttablet` with `--mycnf-file` pointing at the instance config and let it discover the socket from there — this is why the MySQL instance lives in the `vt_0000000100` directory from step 2. +Si vous transmettez des paramètres de connexion tels que `--db-socket` ou `--db-host`, `vttablet` n’charge pas `my.cnf` et les sauvegardes refusent de s’exécuter. Démarrez `vttablet` avec `--mycnf-file` pointant vers la configuration de l’instance et laissez-le découvrir le socket à partir de là — c’est pourquoi l’instance MySQL se trouve dans le répertoire `vt_0000000100` depuis l’étape 2. ### `unknown service vtctlservice.Vtctld` -`vtctld` exposes the API used by `vtctldclient` only when the service map includes it: `--service-map grpc-vtctl,grpc-vtctld`. Also make sure `vtctldclient --server` points at the gRPC port (`15998` here), not the web UI port. +`vtctld` n’expose l’API utilisée par `vtctldclient` que lorsque la carte des services l’inclut : `--service-map grpc-vtctl,grpc-vtctld`. Assurez-vous aussi que `vtctldclient --server` pointe vers le port gRPC (`15998` ici), et non vers le port de l’interface web. ### `node doesn't exist: /vitess/global/cells/zone1/CellInfo` -The cell must exist before tablets register. Run `vtctldclient AddCellInfo` as shown in step 3 before starting `vttablet`. +La cell doit exister avant l’enregistrement des tablets. Exécutez `vtctldclient AddCellInfo` comme indiqué à l’étape 3 avant de démarrer `vttablet`. -### Flag parse errors such as `unknown shorthand flag` +### Erreurs d’analyse d’options telles que `unknown shorthand flag` -Vitess 20+ normalizes underscores to dashes, so write flags in dash style (`--tablet-path`). A single-dash long flag like `-tablet_dir` is parsed as shorthand options and fails. +Vitess 20 et les versions suivantes normalisent les tirets bas en tirets, donc écrivez les options avec des tirets (`--tablet-path`). Une option longue à un seul tiret, comme `-tablet_dir`, est analysée comme des options abrégées et échoue. -## Next steps +## Étapes suivantes -- Review [S3 compatibility notes](/administration/protocols/s3) before adopting additional Vitess storage options. -- Create dedicated production credentials with [Access Key Management](/security-compliance/iam/access-token). -- Follow the [Vitess backup and restore documentation](https://vitess.io/docs/user-guides/configuration-basic/#backups) to schedule backups and restore tablets from the bucket. +- Consultez les [notes de compatibilité S3](/fr/administration/protocols/s3) avant d’adopter d’autres options de stockage Vitess. +- Créez des identifiants de production dédiés avec la [gestion des clés d’accès](/fr/security-compliance/iam/access-token). +- Suivez la [documentation de sauvegarde et de restauration Vitess](https://vitess.io/docs/user-guides/configuration-basic/#backups) pour planifier les sauvegardes et restaurer des tablets depuis le compartiment. diff --git a/content/fr/developer/integration/devops/elasticsearch.md b/content/fr/developer/integration/devops/elasticsearch.md index 148211db6..dabbadb44 100644 --- a/content/fr/developer/integration/devops/elasticsearch.md +++ b/content/fr/developer/integration/devops/elasticsearch.md @@ -1,13 +1,13 @@ --- title: "Elasticsearch" -description: "Use RustFS as the S3 snapshot repository for Elasticsearch indices, deployed with Docker Compose." +description: "Utilisez RustFS comme dépôt d’instantanés S3 pour les index Elasticsearch, déployé avec Docker Compose." --- -This guide connects [Elasticsearch](https://github.com/elastic/elasticsearch) — the distributed search and analytics engine — to **RustFS** as the S3 snapshot repository for its indices. You will start Elasticsearch with the `repository-s3` plugin, register a snapshot repository backed by RustFS, index documents, take a snapshot, and prove the full cycle by deleting the index and restoring it from RustFS. The workflow was verified with `docker.elastic.co/elasticsearch/elasticsearch:8.18.0` and `rustfs/rustfs-x86-musl:v2.3.1`. +Ce guide connecte [Elasticsearch](https://github.com/elastic/elasticsearch) — le moteur distribué de recherche et d’analyse — à **RustFS** comme dépôt d’instantanés S3 pour ses index. Vous allez démarrer Elasticsearch avec le plugin `repository-s3`, enregistrer un dépôt d’instantanés adossé à RustFS, indexer des documents, prendre un instantané, puis démontrer le cycle complet en supprimant l’index et en le restaurant depuis RustFS. Le flux a été validé avec `docker.elastic.co/elasticsearch/elasticsearch:8.18.0` et `rustfs/rustfs-x86-musl:v2.3.1`. -You need Docker with the Compose plugin. This deployment is intended for local integration testing, not production. +Vous avez besoin de Docker avec le plugin Compose. Ce déploiement est destiné aux tests d’intégration locaux, pas à la production. -## Architecture +## Schéma d’architecture ```mermaid flowchart LR @@ -16,27 +16,27 @@ flowchart LR Init["init-bucket job"] -->|"create my-bucket"| RustFS ``` -Elasticsearch stores its primary data on local disks and offloads index backups to a snapshot repository. The `repository-s3` plugin writes snapshot metadata and shard data blobs to RustFS through the S3 API with path-style addressing over plain HTTP. +Elasticsearch conserve ses données primaires sur des disques locaux et externalise les sauvegardes d’index vers un dépôt d’instantanés. Le plugin `repository-s3` écrit les métadonnées d’instantané et les blobs de données des shards vers RustFS via l’API S3, avec un adressage de type chemin (path-style) en HTTP non chiffré. -## 1. Create the project files +## 1. Créer les fichiers du projet -Create a working directory: +Créez un répertoire de travail : ```bash mkdir rustfs-elasticsearch cd rustfs-elasticsearch ``` -Create an environment file and replace both credential placeholders: +Créez un fichier d’environnement et remplacez les deux valeurs d’identifiants indicatives : ```ini title=".env" RUSTFS_ACCESS_KEY= RUSTFS_SECRET_KEY= ``` -Use dedicated credentials for the bucket. Do not commit `.env` to source control. +Utilisez des identifiants dédiés pour le compartiment (bucket). N’ajoutez pas le fichier `.env` au dépôt (ne le versionnez pas). -Elasticsearch splits its S3 settings between `elasticsearch.yml` (non-secret values) and the keystore (credentials). Create the configuration file: +Elasticsearch répartit ses réglages S3 entre `elasticsearch.yml` (valeurs non secrètes) et le keystore (identifiants). Créez le fichier de configuration : ```yaml title="elasticsearch.yml" discovery.type: single-node @@ -47,7 +47,7 @@ s3.client.default.path_style_access: "true" s3.client.default.region: "us-east-1" ``` -Create the Compose file: +Créez le fichier Compose : ```yaml title="compose.yaml" services: @@ -121,26 +121,26 @@ volumes: rustfs-data: ``` -`repository-s3` is a bundled plugin and installs without network access. Only the access key and secret key belong in the keystore — non-secure settings such as the endpoint must live in `elasticsearch.yml`, otherwise the node refuses to start. +`repository-s3` est un plugin fourni avec la distribution et s’installe sans accès réseau. Seules la clé d’accès et la clé secrète appartiennent au keystore — les réglages non sécurisés, comme le point de terminaison, doivent figurer dans `elasticsearch.yml`, sinon le nœud refuse de démarrer. -## 2. Start the deployment +## 2. Démarrer le déploiement -Resolve the Compose file before starting containers: +Vérifiez le fichier Compose avant de démarrer les conteneurs : ```bash docker compose config ``` -Start the services and wait for Elasticsearch to finish booting (the first start installs the plugin and creates the keystore entries, which takes a minute or two): +Démarrez les services et attendez la fin du démarrage d’Elasticsearch (le premier démarrage installe le plugin et crée les entrées du keystore, ce qui prend une à deux minutes) : ```bash docker compose up -d curl -s http://localhost:9200 ``` -## 3. Register the snapshot repository and index documents +## 3. Enregistrer le dépôt d’instantanés et indexer des documents -Register RustFS as the snapshot repository, create an index, and index five documents: +Enregistrez RustFS comme dépôt d’instantanés, créez un index et indexez cinq documents : ```bash curl -s -X PUT "http://localhost:9200/_snapshot/rustfs_repo" \ @@ -164,9 +164,9 @@ curl -s "http://localhost:9200/rustfs_index/_count" {"count":5,...} ``` -## 4. Take a snapshot +## 4. Prendre un instantané -Create a snapshot with `wait_for_completion` so the result is known immediately: +Créez un instantané avec `wait_for_completion` afin que le résultat soit connu immédiatement : ```bash curl -s -X PUT "http://localhost:9200/_snapshot/rustfs_repo/snap1?wait_for_completion=true" @@ -176,16 +176,16 @@ curl -s -X PUT "http://localhost:9200/_snapshot/rustfs_repo/snap1?wait_for_compl {"snapshot":{"snapshot":"snap1",...,"indices":["rustfs_index"],"shards":{"total":1,"failed":0,"successful":1}}} ``` -## 5. Verify objects in RustFS +## 5. Vérifier les objets dans RustFS -List the snapshot objects through the bucket-initializer image: +Listez les objets d’instantané via l’image d’initialisation du compartiment : ```bash docker compose run --rm --entrypoint /bin/sh create-bucket -c \ '/usr/bin/rc alias set rustfs http://rustfs:9000 "$RUSTFS_ACCESS_KEY" "$RUSTFS_SECRET_KEY" >/dev/null && /usr/bin/rc ls rustfs/my-bucket/indices --recursive' ``` -Snapshot metadata and shard data blobs live under `indices/` in the bucket: +Les métadonnées d’instantané et les blobs de données des shards se trouvent sous `indices/` dans le compartiment : ```text [2026-09-21 02:58:01] 3.56 KiB indices/mvyat2-dSEOG3uiCCiFzRA/0/__LbLsSgUUTpqji_EXvqHYCg @@ -193,13 +193,13 @@ Snapshot metadata and shard data blobs live under `indices/` in the bucket: [2026-09-21 02:58:01] 1.00 KiB indices/mvyat2-dSEOG3uiCCiFzRA/0/index-e9P8q6E9QhitpkiOdgjVDQ ``` -You can also browse the prefix in the RustFS Console: +Vous pouvez également parcourir le préfixe dans la Console RustFS : -![Elasticsearch snapshot blobs stored in the RustFS Console](./images/rustfs-es-snapshots.png) +![Blobs d’instantané Elasticsearch stockés dans la Console RustFS](./images/rustfs-es-snapshots.png) -## 6. Restore the index from RustFS +## 6. Restaurer l’index depuis RustFS -Delete the index, then restore it from the snapshot: +Supprimez l’index, puis restaurez-le depuis l’instantané : ```bash curl -s -X DELETE "http://localhost:9200/rustfs_index" > /dev/null @@ -211,31 +211,31 @@ curl -s "http://localhost:9200/rustfs_index/_count" {"count":5,...} ``` -The documents come back because the snapshot blobs were read from RustFS. +Les documents réapparaissent, car les blobs d’instantané ont été lus depuis RustFS. -## 7. Stop or reset the stack +## 7. Arrêter ou réinitialiser la pile -Stop the containers while keeping the RustFS data volume: +Arrêtez les conteneurs en conservant le volume de données RustFS : ```bash docker compose down ``` -To delete the snapshots and start from an empty RustFS volume, explicitly include `--volumes`: +Pour supprimer les instantanés et repartir d’un volume RustFS vide, ajoutez explicitement `--volumes` : ```bash docker compose down --volumes ``` -## Troubleshooting +## Dépannage -### The node refuses to start with "non-secure setting ... must be stored inside elasticsearch.yml" +### Le nœud refuse de démarrer avec « non-secure setting ... must be stored inside elasticsearch.yml » -Only `s3.client.default.access_key` and `s3.client.default.secret_key` belong in the keystore. Endpoint, protocol, path-style access, and region are non-secure settings and must be defined in `elasticsearch.yml`. +Seuls `s3.client.default.access_key` et `s3.client.default.secret_key` appartiennent au keystore. Le point de terminaison, le protocole, l’accès en adressage de type chemin et la région sont des réglages non sécurisés et doivent être définis dans `elasticsearch.yml`. -### Restored or new shards stay unassigned +### Les shards restaurés ou nouveaux restent non assignés -Elasticsearch stops allocating shards when disk usage passes the low watermark (85 percent by default). Free disk space, or disable the check for a local test: +Elasticsearch cesse d’allouer des shards lorsque l’utilisation du disque dépasse le seuil bas (low watermark, 85 pour cent par défaut). Libérez de l’espace disque, ou désactivez le contrôle pour un test local : ```bash curl -s -X PUT "http://localhost:9200/_cluster/settings" \ @@ -243,20 +243,20 @@ curl -s -X PUT "http://localhost:9200/_cluster/settings" \ -d '{"transient":{"cluster.routing.allocation.disk.threshold_enabled":false}}' ``` -### Restore fails because the index already exists +### La restauration échoue parce que l’index existe déjà -A previous failed restore leaves the index behind. Delete it with `DELETE /rustfs_index` and run the restore again. +Une restauration précédente en échec laisse l’index en place. Supprimez-le avec `DELETE /rustfs_index` et relancez la restauration. -### AccessDenied or 403 responses +### Réponses AccessDenied ou 403 -Confirm that the credentials in the keystore match the RustFS credentials and that the `create-bucket` service completed successfully: +Vérifiez que les identifiants du keystore correspondent aux identifiants RustFS et que le service `create-bucket` s’est terminé avec succès : ```bash docker compose logs create-bucket ``` -## Next steps +## Étapes suivantes -- Review [S3 compatibility notes](/administration/protocols/s3) before adopting additional S3 operations. -- Create dedicated production credentials with [Access Key Management](/security-compliance/iam/access-token). -- Follow the [Elasticsearch snapshot documentation](https://www.elastic.co/guide/en/elasticsearch/reference/current/snapshot-restore.html) for snapshot lifecycle management (SLM). +- Consultez les [notes de compatibilité S3](/fr/administration/protocols/s3) avant d’adopter d’autres opérations S3. +- Créez des identifiants de production dédiés avec la [gestion des clés d’accès](/fr/security-compliance/iam/access-token). +- Suivez la [documentation des instantanés Elasticsearch](https://www.elastic.co/docs/deploy-manage/tools/snapshot-and-restore) pour la gestion du cycle de vie des instantanés (SLM). diff --git a/content/fr/developer/integration/devops/gitea.md b/content/fr/developer/integration/devops/gitea.md index 239b6ad25..791d22d80 100644 --- a/content/fr/developer/integration/devops/gitea.md +++ b/content/fr/developer/integration/devops/gitea.md @@ -1,13 +1,13 @@ --- title: "Gitea" -description: "Run Gitea with RustFS as the S3 storage backend for LFS objects and attachments, deployed with Docker Compose." +description: "Exécutez Gitea avec RustFS comme backend de stockage S3 pour les objets LFS et les pièces jointes, déployé avec Docker Compose." --- -This guide connects [Gitea](https://github.com/go-gitea/gitea) — the self-hosted Git service — to **RustFS** through Gitea's `minio` storage type. You will start Gitea with Docker Compose, create a repository, push a Git LFS object, attach a file to an issue, and verify that both the LFS object and the attachment are stored in RustFS. The workflow was verified with `gitea/gitea:1.24.4` and `rustfs/rustfs-x86-musl:v2.3.1`. +Ce guide connecte [Gitea](https://github.com/go-gitea/gitea) — le service Git auto-hébergé — à **RustFS** via le type de stockage `minio` de Gitea. Vous allez démarrer Gitea avec Docker Compose, créer un dépôt, pousser un objet Git LFS, joindre un fichier à un ticket (issue), puis vérifier que l’objet LFS et la pièce jointe sont tous deux stockés dans RustFS. Le flux a été validé avec `gitea/gitea:1.24.4` et `rustfs/rustfs-x86-musl:v2.3.1`. -You need Docker with the Compose plugin and the `git` and `git-lfs` clients on your workstation. This deployment is intended for local integration testing, not production. +Vous avez besoin de Docker avec le plugin Compose, ainsi que des clients `git` et `git-lfs` sur votre poste de travail. Ce déploiement est destiné aux tests d’intégration locaux, pas à la production. -## Architecture +## Schéma d’architecture ```mermaid flowchart LR @@ -15,27 +15,27 @@ flowchart LR Gitea -->|"LFS + attachments"| RustFS["RustFS :9000"] ``` -Gitea stores the Git repository itself on its local disk, while the `minio` storage type routes large files — LFS objects, issue attachments, avatars, repository archives, packages, and Actions artifacts — to the `gitea-data` bucket in RustFS. Gitea creates the bucket on startup if it does not exist. +Gitea conserve le dépôt Git lui-même sur son disque local, tandis que le type de stockage `minio` achemine les fichiers volumineux — objets LFS, pièces jointes de tickets, avatars, archives de dépôt, paquets et artefacts Actions — vers le compartiment (bucket) `gitea-data` dans RustFS. Gitea crée le compartiment au démarrage s’il n’existe pas. -## 1. Create the project files +## 1. Créer les fichiers du projet -Create a working directory: +Créez un répertoire de travail : ```bash mkdir rustfs-gitea cd rustfs-gitea ``` -Create an environment file and replace both credential placeholders: +Créez un fichier d’environnement et remplacez les deux valeurs d’identifiants indicatives : ```ini title=".env" RUSTFS_ACCESS_KEY= RUSTFS_SECRET_KEY= ``` -Use dedicated credentials for the `gitea-data` bucket. Do not commit `.env` to source control. +Utilisez des identifiants dédiés pour le compartiment `gitea-data`. N’ajoutez pas le fichier `.env` au dépôt (ne le versionnez pas). -Create the Gitea configuration and replace both credential placeholders with the same values you set in `.env` — the global `minio` storage type applies to LFS, attachments, avatars, repository archives, packages, and Actions artifacts: +Créez la configuration Gitea et remplacez les deux valeurs d’identifiants indicatives par les mêmes valeurs que dans `.env` — le type de stockage global `minio` s’applique au LFS, aux pièces jointes, aux avatars, aux archives de dépôt, aux paquets et aux artefacts Actions : ```ini title="app.ini" APP_NAME = RustFS Gitea @@ -70,9 +70,9 @@ INSTALL_LOCK = true SECRET_KEY = change-me-to-a-random-string ``` -`LFS_START_SERVER` enables the Git LFS HTTP API. `MINIO_ENDPOINT` uses the Compose-internal hostname `rustfs`; the endpoint is reached with path-style requests by default. +`LFS_START_SERVER` active l’API HTTP Git LFS. `MINIO_ENDPOINT` utilise le nom d’hôte interne à Compose `rustfs` ; le point de terminaison est joint par défaut avec des requêtes en adressage de type chemin (path-style). -Create the Compose file: +Créez le fichier Compose : ```yaml title="compose.yaml" services: @@ -123,36 +123,36 @@ volumes: gitea-data: ``` -The volume-backed `/data` directory keeps the SQLite database and the Git repositories across container restarts, while LFS objects and attachments live in RustFS. +Le répertoire `/data`, adossé à un volume, conserve la base SQLite et les dépôts Git entre les redémarrages du conteneur, tandis que les objets LFS et les pièces jointes résident dans RustFS. -## 2. Validate and start the deployment +## 2. Valider et démarrer le déploiement -Resolve the Compose file before starting containers: +Vérifiez le fichier Compose avant de démarrer les conteneurs : ```bash docker compose config ``` -Start the services: +Démarrez les services : ```bash docker compose up -d docker compose ps ``` -Watch the Gitea log until every storage backend reports the Minio type: +Surveillez le journal de Gitea jusqu’à ce que chaque backend de stockage signale le type Minio : ```bash docker compose logs gitea | grep "Initialising" ``` -The output should list `Attachment`, `Avatar`, `LFS`, and the remaining storage sections, each followed by a `Creating Minio storage at rustfs:9000:gitea-data` line. +La sortie devrait lister `Attachment`, `Avatar`, `LFS` et les autres sections de stockage, chacune suivie d’une ligne `Creating Minio storage at rustfs:9000:gitea-data`. -Open `http://localhost:3000` and create the administrator account, then open the RustFS Console at `http://localhost:9001` — the `gitea-data` bucket appears after the first storage operation. +Ouvrez `http://localhost:3000` et créez le compte administrateur, puis ouvrez la Console RustFS à l’adresse `http://localhost:9001` — le compartiment `gitea-data` apparaît après la première opération de stockage. -## 3. Push a Git LFS object +## 3. Pousser un objet Git LFS -Create a repository named `rustfs-demo` in the Gitea web UI, then push an LFS-tracked file from your workstation: +Créez un dépôt nommé `rustfs-demo` dans l’interface web de Gitea, puis poussez un fichier suivi par LFS depuis votre poste de travail : ```bash mkdir lfs-demo && cd lfs-demo @@ -169,68 +169,68 @@ git remote add origin http://localhost:3000//rustfs-demo.git git push origin main ``` -`git push` uploads the LFS object through the Gitea LFS API, which writes it to RustFS. Clone the repository into a second directory and run `git lfs pull` — the downloaded `dataset.bin` must be byte-identical to the original: +`git push` charge (upload) l’objet LFS via l’API LFS de Gitea, qui l’écrit dans RustFS. Clonez le dépôt dans un second répertoire et exécutez `git lfs pull` — le fichier `dataset.bin` téléchargé doit être identique octet pour octet à l’original : ```bash sha256sum dataset.bin cd ../lfs-demo-clone && git lfs pull && sha256sum dataset.bin ``` -Both checksums match because both clients read the object from RustFS. +Les deux sommes de contrôle correspondent, car les deux clients lisent l’objet depuis RustFS. -## 4. Attach a file to an issue +## 4. Joindre un fichier à un ticket -Open the `rustfs-demo` repository, create an issue, and attach a small text file through the issue form. Gitea stores the upload as `attachments//` in the `gitea-data` bucket and serves downloads through `/attachments/`. +Ouvrez le dépôt `rustfs-demo`, créez un ticket et joignez un petit fichier texte via le formulaire du ticket. Gitea stocke le chargement sous `attachments//` dans le compartiment `gitea-data` et sert les téléchargements via `/attachments/`. -## 5. Verify objects in RustFS +## 5. Vérifier les objets dans RustFS -List the bucket with the [`rc` client](https://github.com/rustfs/cli): +Listez le compartiment avec le [client `rc`](https://github.com/rustfs/cli) : ```bash docker compose exec rustfs /usr/bin/rc ls local/gitea-data/ -r ``` -The output should include the LFS object under `lfs/` and the attachment under `attachments/`: +La sortie devrait inclure l’objet LFS sous `lfs/` et la pièce jointe sous `attachments/` : ```text attachments/9/2/92fdd48d-531c-4cba-8b3f-4e2004a10fc7 lfs/37/76/6ddfc07e803de58a69328db9a58a07cf7080ddde55c155a7531bc650a000 ``` -The LFS object key is the SHA-256 content hash used by the Git LFS protocol. +La clé d’objet LFS est le hachage de contenu SHA-256 utilisé par le protocole Git LFS. -![Gitea LFS and attachment objects in the RustFS Console](./images/rustfs-gitea-objects.png) +![Objets LFS et pièces jointes Gitea dans la Console RustFS](./images/rustfs-gitea-objects.png) -## 6. Stop or reset the deployment +## 6. Arrêter ou réinitialiser le déploiement -Stop the containers while keeping all data: +Arrêtez les conteneurs en conservant toutes les données : ```bash docker compose down ``` -The RustFS volume keeps the `gitea-data` bucket, so LFS objects and attachments survive a restart. To delete everything, including the objects in RustFS, add `--volumes`. +Le volume RustFS conserve le compartiment `gitea-data`, de sorte que les objets LFS et les pièces jointes survivent à un redémarrage. Pour tout supprimer, y compris les objets dans RustFS, ajoutez `--volumes`. -## Troubleshooting +## Dépannage -### The Gitea install page appears instead of the login page +### La page d’installation de Gitea s’affiche à la place de la page de connexion -The configuration file must exist at `/data/gitea/conf/app.ini` inside the container. If the mount path is wrong, Gitea starts with defaults and shows the installation wizard. Mount the file as shown in the Compose example and restart. +Le fichier de configuration doit se trouver à l’emplacement `/data/gitea/conf/app.ini` dans le conteneur. Si le chemin de montage est incorrect, Gitea démarre avec les valeurs par défaut et affiche l’assistant d’installation. Montez le fichier comme dans l’exemple Compose, puis redémarrez. -### Push fails with an LFS or 403 error +### Le push échoue avec une erreur LFS ou 403 -Confirm the credentials in `app.ini` match the RustFS credentials and that the `rustfs` hostname resolves inside the Compose network: +Vérifiez que les identifiants de `app.ini` correspondent aux identifiants RustFS et que le nom d’hôte `rustfs` se résout dans le réseau Compose : ```bash docker compose logs gitea | grep -i minio ``` -### Objects land in local storage instead of RustFS +### Les objets arrivent dans le stockage local au lieu de RustFS -The `GITEA__storage__STORAGE_TYPE: minio` environment variable and the `[storage]` section of `app.ini` must agree. After changing either, restart Gitea and check the `Initialising` log lines again. +La variable d’environnement `GITEA__storage__STORAGE_TYPE: minio` et la section `[storage]` de `app.ini` doivent concorder. Après avoir modifié l’une ou l’autre, redémarrez Gitea et vérifiez de nouveau les lignes de journal `Initialising`. -## Next steps +## Étapes suivantes -- Review [S3 compatibility notes](/administration/protocols/s3) before adopting additional Gitea storage targets. -- Create dedicated production credentials with [Access Key Management](/security-compliance/iam/access-token). -- Follow the [Gitea storage documentation](https://docs.gitea.com/administration/storage-configurations) to move packages, Actions artifacts, or individual storage sections to separate buckets. +- Consultez les [notes de compatibilité S3](/fr/administration/protocols/s3) avant d’adopter d’autres cibles de stockage Gitea. +- Créez des identifiants de production dédiés avec la [gestion des clés d’accès](/fr/security-compliance/iam/access-token). +- Suivez la [documentation de stockage Gitea](https://docs.gitea.com/administration/storage-configurations) pour déplacer les paquets, les artefacts Actions ou des sections de stockage individuelles vers des compartiments distincts. diff --git a/content/fr/developer/integration/devops/jenkins.md b/content/fr/developer/integration/devops/jenkins.md index 1d78f31b0..38b80fe52 100644 --- a/content/fr/developer/integration/devops/jenkins.md +++ b/content/fr/developer/integration/devops/jenkins.md @@ -1,13 +1,13 @@ --- title: "Jenkins" -description: "Store Jenkins build artifacts in RustFS with the Artifact Manager on S3 plugin." +description: "Stockez les artefacts de build Jenkins dans RustFS avec le plugin Artifact Manager on S3." --- -This guide connects [Jenkins](https://github.com/jenkinsci/jenkins) — the automation server — to **RustFS** through the Artifact Manager on S3 plugin. You will start Jenkins with the plugin, point its artifact manager at a RustFS bucket, run a job that archives an artifact, and verify that the artifact is stored in RustFS. The workflow was verified with `jenkins/jenkins:lts-jdk17` (Jenkins 2.5xx LTS) and `rustfs/rustfs-x86-musl:v2.3.1`. +Ce guide connecte [Jenkins](https://github.com/jenkinsci/jenkins) — le serveur d’automatisation — à **RustFS** via le plugin Artifact Manager on S3. Vous allez démarrer Jenkins avec le plugin, pointer son gestionnaire d’artefacts vers un compartiment (bucket) RustFS, exécuter un job qui archive un artefact, puis vérifier que l’artefact est stocké dans RustFS. Le flux a été validé avec `jenkins/jenkins:lts-jdk17` (Jenkins 2.5xx LTS) et `rustfs/rustfs-x86-musl:v2.3.1`. -You need Docker. This deployment is intended for local integration testing, not production. +Vous avez besoin de Docker. Ce déploiement est destiné aux tests d’intégration locaux, pas à la production. -## Architecture +## Schéma d’architecture ```mermaid flowchart LR @@ -15,18 +15,18 @@ flowchart LR J -->|"archiveArtifacts"| RustFS["RustFS :9000"] ``` -With the plugin active, every job that publishes artifacts through the standard `archiveArtifacts` step (or `stash`/`unstash`) uploads them to the `jenkins-artifacts` bucket under the configured prefix instead of storing them on the controller disk. +Lorsque le plugin est actif, chaque job qui publie des artefacts via l’étape standard `archiveArtifacts` (ou `stash`/`unstash`) les charge (upload) dans le compartiment `jenkins-artifacts`, sous le préfixe configuré, au lieu de les stocker sur le disque du contrôleur. -## 1. Create the project files +## 1. Créer les fichiers du projet -Create the bucket first — the plugin validates the bucket but does not create it: +Créez d’abord le compartiment — le plugin le valide, mais ne le crée pas : ```bash rc alias set rustfs http://:9000 rc mb rustfs/jenkins-artifacts ``` -Create a Dockerfile that installs the plugin into the Jenkins LTS image: +Créez un Dockerfile qui installe le plugin dans l’image Jenkins LTS : ```dockerfile title="Dockerfile" FROM jenkins/jenkins:lts-jdk17 @@ -35,9 +35,9 @@ RUN jenkins-plugin-cli --plugins artifact-manager-s3 aws-credentials USER jenkins ``` -The `artifact-manager-s3` plugin brings in the AWS credentials support it needs; listing `aws-credentials` explicitly keeps the credential type available. +Le plugin `artifact-manager-s3` apporte la prise en charge des identifiants AWS dont il a besoin ; indiquer `aws-credentials` explicitement conserve le type d’identifiant disponible. -Build and start Jenkins on the same Docker network as RustFS: +Construisez l’image et démarrez Jenkins sur le même réseau Docker que RustFS : ```bash docker build -t jenkins-rustfs . @@ -45,31 +45,31 @@ docker run -d --name jenkins --network oo-rustfs_default \ -p 8080:8080 -v jenkins-home:/var/jenkins_home jenkins-rustfs ``` -Complete the setup wizard, then create an AWS credential: **Manage Jenkins → Credentials → global → Add Credentials**, kind **AWS Credential**, ID `rustfs-creds`, with your RustFS access key and secret key. +Terminez l’assistant de configuration, puis créez un identifiant AWS : **Manage Jenkins → Credentials → global → Add Credentials** (Gérer Jenkins, Identifiants, global, Ajouter des identifiants), de type **AWS Credential** (identifiant AWS), avec l’ID `rustfs-creds`, ainsi que votre clé d’accès et votre clé secrète RustFS. -## 2. Configure the artifact manager +## 2. Configurer le gestionnaire d’artefacts -Open **Manage Jenkins → AWS Configuration** (from the `aws-global-configuration` plugin) and set: +Ouvrez **Manage Jenkins → AWS Configuration** (Configuration AWS, fournie par le plugin `aws-global-configuration`) et définissez : -- **Region name**: `us-east-1` -- **Credentials**: `rustfs-creds` +- **Region name** (nom de la région) : `us-east-1` +- **Credentials** (identifiants) : `rustfs-creds` -Open **Manage Jenkins → System** and locate the **Artifact Management for Builds** section. Select **Cloud Provider Amazon S3**, and fill in the S3 configuration: +Ouvrez **Manage Jenkins → System** (Système) et repérez la section **Artifact Management for Builds** (gestion des artefacts des builds). Sélectionnez **Cloud Provider Amazon S3** (fournisseur cloud Amazon S3), puis renseignez la configuration S3 : -- **S3 Bucket Name**: `jenkins-artifacts` -- **S3 Bucket Region**: `us-east-1` -- **Base Prefix**: `artifacts/` -- **Custom Endpoint**: `:9000` (for example `rustfs:9000` inside the Compose network) -- **Custom Signing Region**: `us-east-1` -- **Use Path Style URL**: enabled -- **Use Insecure HTTP**: enabled -- **Disable Session Token**: enabled +- **S3 Bucket Name** (nom du compartiment S3) : `jenkins-artifacts` +- **S3 Bucket Region** (région du compartiment S3) : `us-east-1` +- **Base Prefix** (préfixe de base) : `artifacts/` +- **Custom Endpoint** (point de terminaison personnalisé) : `:9000` (par exemple `rustfs:9000` à l’intérieur du réseau Compose) +- **Custom Signing Region** (région de signature personnalisée) : `us-east-1` +- **Use Path Style URL** (utiliser une URL en adressage de type chemin (path-style)) : activé +- **Use Insecure HTTP** (utiliser HTTP non chiffré) : activé +- **Disable Session Token** (désactiver le jeton de session) : activé -Path-style addressing and plain HTTP are required for a non-AWS endpoint without TLS. Disabling the session token stops the plugin from calling AWS STS, which a plain access key pair cannot answer. Click **Validate S3 Bucket configuration** to confirm the settings, then save. +L’adressage de type chemin et HTTP non chiffré sont requis pour un point de terminaison non AWS sans TLS. Désactiver le jeton de session empêche le plugin d’appeler AWS STS : une simple paire de clés d’accès ne peut pas répondre à cet appel. Cliquez sur **Validate S3 Bucket configuration** (valider la configuration du compartiment S3) pour confirmer les réglages, puis enregistrez. -## 3. Run a job that archives an artifact +## 3. Exécuter un job qui archive un artefact -Create a freestyle job (or pipeline) that produces a file and archives it: +Créez un job freestyle (ou un pipeline) qui produit un fichier et l’archive : ```groovy pipeline { @@ -89,56 +89,56 @@ pipeline { } ``` -Run the build and wait for it to finish. The artifact upload goes to RustFS transparently — the job configuration does not mention S3 at all. +Exécutez le build et attendez qu’il se termine. Le chargement de l’artefact part vers RustFS de façon transparente — la configuration du job ne mentionne pas S3 du tout. -## 4. Verify objects in RustFS +## 4. Vérifier les objets dans RustFS -List the bucket: +Listez le compartiment : ```bash rc ls rustfs/jenkins-artifacts/ -r ``` -The artifact is stored under the prefix, organized by job and build number: +L’artefact est stocké sous le préfixe, organisé par job et par numéro de build : ```text artifacts/s3-artifacts-demo/3/artifacts/report.txt ``` -![Jenkins artifacts stored in the RustFS Console](./images/rustfs-jenkins-artifacts.png) +![Artefacts Jenkins stockés dans la Console RustFS](./images/rustfs-jenkins-artifacts.png) -Downloading the artifact from the build page reads it back from RustFS. +Le téléchargement de l’artefact depuis la page du build le relit depuis RustFS. -## 5. Stop or reset the deployment +## 5. Arrêter ou réinitialiser le déploiement -Stop Jenkins while keeping the data: +Arrêtez Jenkins en conservant les données : ```bash docker rm -f jenkins ``` -The artifacts stay in the `jenkins-artifacts` bucket. To delete them, remove the bucket: +Les artefacts restent dans le compartiment `jenkins-artifacts`. Pour les supprimer, supprimez le compartiment : ```bash rc rb rustfs/jenkins-artifacts --force ``` -## Troubleshooting +## Dépannage ### `StsException: The security token included in the request is invalid` -The plugin is calling AWS STS to obtain session credentials. Enable **Disable Session Token** in the S3 configuration — a static access key pair cannot answer an STS call. +Le plugin appelle AWS STS pour obtenir des identifiants de session. Activez **Disable Session Token** dans la configuration S3 — une paire de clés d’accès statique ne peut pas répondre à un appel STS. ### `UnknownHostException: jenkins-artifacts.rustfs` -The plugin is using virtual-hosted addressing. Enable **Use Path Style URL** — RustFS resolves buckets from the URL path, not the hostname. +Le plugin utilise l’adressage de type hôte virtuel. Activez **Use Path Style URL** — RustFS résout les compartiments à partir du chemin de l’URL, et non du nom d’hôte. -### `No valid session credentials` or empty credential errors +### `No valid session credentials` ou erreurs d’identifiant vide -Confirm the AWS Configuration page has the credential selected and saved **before** the S3 bucket settings are used, and that the credential ID matches the one you created. +Vérifiez que la page AWS Configuration a l’identifiant sélectionné et enregistré **avant** que les réglages du compartiment S3 ne soient utilisés, et que l’ID d’identifiant correspond à celui que vous avez créé. -## Next steps +## Étapes suivantes -- Review [S3 compatibility notes](/administration/protocols/s3) before adopting additional Jenkins integrations. -- Create dedicated production credentials with [Access Key Management](/security-compliance/iam/access-token). -- Follow the [Artifact Manager on S3 plugin documentation](https://plugins.jenkins.io/artifact-manager-s3/) for stash support and cleanup options. +- Consultez les [notes de compatibilité S3](/fr/administration/protocols/s3) avant d’adopter d’autres intégrations Jenkins. +- Créez des identifiants de production dédiés avec la [gestion des clés d’accès](/fr/security-compliance/iam/access-token). +- Suivez la [documentation du plugin Artifact Manager on S3](https://plugins.jenkins.io/artifact-manager-s3/) pour la prise en charge de stash et les options de nettoyage. diff --git a/content/fr/developer/integration/devops/opensearch.md b/content/fr/developer/integration/devops/opensearch.md index 9d44e530b..aadedbb99 100644 --- a/content/fr/developer/integration/devops/opensearch.md +++ b/content/fr/developer/integration/devops/opensearch.md @@ -1,13 +1,13 @@ --- title: "OpenSearch" -description: "Snapshot OpenSearch indices to RustFS with the repository-s3 plugin." +description: "Créez des instantanés des index OpenSearch dans RustFS avec le plugin repository-s3." --- -This guide connects [OpenSearch](https://github.com/opensearch-project/OpenSearch) — the open-source search and analytics suite derived from Elasticsearch — to **RustFS** through the `repository-s3` plugin. You will register an S3 snapshot repository backed by a RustFS bucket, take a snapshot of an index, and restore it. The workflow was verified with `opensearchproject/opensearch:3.8.0` and the bundled `repository-s3` plugin against `rustfs/rustfs-x86-musl:v2.3.1`. +Ce guide connecte [OpenSearch](https://github.com/opensearch-project/OpenSearch) — la suite open source de recherche et d’analyse dérivée d’Elasticsearch — à **RustFS** via le plugin `repository-s3`. Vous allez enregistrer un dépôt d’instantanés S3 adossé à un compartiment (bucket) RustFS, prendre un instantané d’un index, puis le restaurer. Le flux a été validé avec `opensearchproject/opensearch:3.8.0` et le plugin `repository-s3` livré avec l’image, face à `rustfs/rustfs-x86-musl:v2.3.1`. -You need Docker, or an OpenSearch node where you can install plugins and edit configuration. This deployment is intended for local integration testing, not production. +Vous avez besoin de Docker, ou d’un nœud OpenSearch sur lequel vous pouvez installer des plugins et modifier la configuration. Ce déploiement est destiné aux tests d’intégration locaux, pas à la production. -## Architecture +## Schéma d’architecture ```mermaid flowchart LR @@ -16,11 +16,11 @@ flowchart LR RustFS -->|"restore"| OS ``` -The `repository-s3` plugin writes snapshots as shard archives plus metadata blobs in the bucket. Registration is cluster-wide, so every node needs the plugin and the same client configuration. +Le plugin `repository-s3` écrit les instantanés sous forme d’archives de shard et de blobs de métadonnées dans le compartiment. L’enregistrement porte sur l’ensemble du cluster, si bien que chaque nœud a besoin du plugin et de la même configuration client. -## 1. Run OpenSearch +## 1. Exécuter OpenSearch -Start a single node with security disabled and a small heap: +Démarrez un nœud unique avec la sécurité désactivée et un petit tas mémoire (heap) : ```bash docker run -d --name opensearch --network oo-rustfs_default -p 9200:9200 \ @@ -30,20 +30,20 @@ docker run -d --name opensearch --network oo-rustfs_default -p 9200:9200 \ opensearchproject/opensearch:3.8.0 ``` -The node is ready when `curl http://localhost:9200` returns the cluster header (allow one to two minutes). +Le nœud est prêt lorsque `curl http://localhost:9200` renvoie l’en-tête du cluster (prévoyez une à deux minutes). -## 2. Install the repository-s3 plugin +## 2. Installer le plugin repository-s3 -The S3 repository plugin is not preloaded. Install it and restart the node: +Le plugin de dépôt S3 n’est pas préchargé. Installez-le et redémarrez le nœud : ```bash docker exec opensearch bin/opensearch-plugin install --batch repository-s3 docker restart opensearch ``` -## 3. Configure the S3 client +## 3. Configurer le client S3 -Credentials are secure settings: they belong in the OpenSearch keystore, not in the repository request or `opensearch.yml`. Create the keystore entries, replacing all connection placeholders: +Les identifiants sont des réglages sécurisés : ils appartiennent au keystore OpenSearch, et non à la requête de dépôt ni à `opensearch.yml`. Créez les entrées du keystore, en remplaçant toutes les valeurs de connexion indicatives : ```bash docker exec opensearch sh -c \ @@ -52,7 +52,7 @@ docker exec opensearch sh -c \ printf '' | bin/opensearch-keystore add -f -x s3.client.default.secret_key" ``` -Add the non-secure client settings to `config/opensearch.yml`: +Ajoutez les réglages client non sécurisés à `config/opensearch.yml` : ```yaml title="opensearch.yml" network.host: 0.0.0.0 @@ -62,21 +62,21 @@ s3.client.default.protocol: http s3.client.default.path_style_access: "true" ``` -Restart the node once more so it reads both the keystore and the new settings: +Redémarrez le nœud une fois de plus afin qu’il lise à la fois le keystore et les nouveaux réglages : ```bash docker restart opensearch ``` -Create the bucket while the node boots: +Créez le compartiment pendant le démarrage du nœud : ```bash rc mb rustfs/opensearch-snapshots ``` -## 4. Register the repository and snapshot +## 4. Enregistrer le dépôt et l’instantané -Create a test index with a document, then register the repository: +Créez un index de test avec un document, puis enregistrez le dépôt : ```bash curl -sX PUT http://localhost:9200/rustfs-demo -H "Content-Type: application/json" \ @@ -89,9 +89,9 @@ curl -sX PUT "http://localhost:9200/_snapshot/rustfs-repo" -H "Content-Type: app -d '{"type":"s3","settings":{"bucket":"opensearch-snapshots","region":"us-east-1","server_side_encryption_type":"bucket_default"}}' ``` -The `server_side_encryption_type: bucket_default` setting matters: without it the plugin requests SSE-S3, which a self-hosted RustFS without a server-side encryption master key rejects. +Le réglage `server_side_encryption_type: bucket_default` est important : sans lui, le plugin demande SSE-S3, qu’un RustFS auto-hébergé dépourvu de clé maître de chiffrement côté serveur refuse. -Take a snapshot and wait for completion: +Prenez un instantané et attendez la fin : ```bash curl -sX PUT "http://localhost:9200/_snapshot/rustfs-repo/snapshot-1?wait_for_completion=true" \ @@ -102,9 +102,9 @@ curl -sX PUT "http://localhost:9200/_snapshot/rustfs-repo/snapshot-1?wait_for_co {"snapshot":{"snapshot":"snapshot-1","state":"SUCCESS","indices":["rustfs-demo"],...}} ``` -## 5. Verify objects and restore +## 5. Vérifier les objets et restaurer -List the bucket: +Listez le compartiment : ```bash rc ls rustfs/opensearch-snapshots/ -r @@ -119,7 +119,7 @@ meta-kRgFBiuyQIyPo3_-CMp7Hw.dat snap-kRgFBiuyQIyPo3_-CMp7Hw.dat ``` -Delete the index and restore it from the snapshot: +Supprimez l’index et restaurez-le depuis l’instantané : ```bash curl -sX DELETE http://localhost:9200/rustfs-demo @@ -131,42 +131,42 @@ curl -s http://localhost:9200/rustfs-demo/_doc/1 {"_index":"rustfs-demo","_id":"1","found":true,"_source":{"product":"rustfs","via":"opensearch-snapshot"}} ``` -![OpenSearch snapshot stored in the RustFS Console](./images/rustfs-opensearch-snapshot.png) +![Instantané OpenSearch stocké dans la Console RustFS](./images/rustfs-opensearch-snapshot.png) -## 6. Stop or reset +## 6. Arrêter ou réinitialiser -To tear down the demo while keeping the bucket objects: +Pour arrêter la démonstration tout en conservant les objets du compartiment : ```bash docker rm -f opensearch ``` -To delete the stored snapshots: +Pour supprimer les instantanés stockés : ```bash rc rm rustfs/opensearch-snapshots/ --recursive --force ``` -## Troubleshooting +## Dépannage ### `Setting [access_key] is insecure, but property [allow_insecure_settings] is not set` -Inline credentials in the repository request are rejected. Store them in the keystore as shown in step 3 — `access_key` and `secret_key` are secure settings in OpenSearch. +Les identifiants placés dans la requête de dépôt sont refusés. Stockez-les dans le keystore comme à l’étape 3 — `access_key` et `secret_key` sont des réglages sécurisés dans OpenSearch. ### `SSE-S3 requires RUSTFS_SSE_S3_MASTER_KEY ... (Status Code: 400)` -The plugin encrypts uploads with SSE-S3 by default. Register the repository with `"server_side_encryption_type": "bucket_default"` so no encryption header is sent, as in step 4. +Le plugin chiffre les chargements (upload) avec SSE-S3 par défaut. Enregistrez le dépôt avec `"server_side_encryption_type": "bucket_default"` afin qu’aucun en-tête de chiffrement ne soit envoyé, comme à l’étape 4. -### `unknown setting [s3.client.default.access_key]` at startup +### `unknown setting [s3.client.default.access_key]` au démarrage -The settings reference the repository-s3 plugin. If the node fails to start with them present, the plugin is not installed in that container — repeat step 2 (a fresh container loses plugins installed with `docker exec`). +Les réglages font référence au plugin repository-s3. Si le nœud ne démarre pas alors qu’ils sont présents, le plugin n’est pas installé dans ce conteneur — recommencez l’étape 2 (un conteneur neuf perd les plugins installés avec `docker exec`). -### Repository verification fails with `path is not accessible` +### La vérification du dépôt échoue avec `path is not accessible` -The node cannot reach the bucket: check that `s3.client.default.endpoint` is reachable from the container, `path_style_access` is `"true"`, and the keystore credentials were loaded (they are read at startup — restart after adding them). +Le nœud ne peut pas atteindre le compartiment : vérifiez que `s3.client.default.endpoint` est joignable depuis le conteneur, que `path_style_access` vaut `"true"`, et que les identifiants du keystore ont été chargés (ils sont lus au démarrage — redémarrez après les avoir ajoutés). -## Next steps +## Étapes suivantes -- Review [S3 compatibility notes](/administration/protocols/s3) before adopting additional OpenSearch repositories. -- Create dedicated production credentials with [Access Key Management](/security-compliance/iam/access-token). -- Follow the [OpenSearch snapshots documentation](https://docs.opensearch.org/docs/latest/tuning-your-cluster/availability-and-recovery/snapshots/index/) to automate snapshots with Snapshot Management (SM) policies. +- Consultez les [notes de compatibilité S3](/fr/administration/protocols/s3) avant d’adopter d’autres dépôts OpenSearch. +- Créez des identifiants de production dédiés avec la [gestion des clés d’accès](/fr/security-compliance/iam/access-token). +- Suivez la [documentation des instantanés OpenSearch](https://docs.opensearch.org/docs/latest/tuning-your-cluster/availability-and-recovery/snapshots/index/) pour automatiser les instantanés avec les politiques Snapshot Management (SM). diff --git a/content/fr/developer/integration/devops/terraform.md b/content/fr/developer/integration/devops/terraform.md index 8744833a2..7433d3a7a 100644 --- a/content/fr/developer/integration/devops/terraform.md +++ b/content/fr/developer/integration/devops/terraform.md @@ -1,31 +1,31 @@ --- title: "Terraform" -description: "Store Terraform state in RustFS object storage with the S3 backend, including state locking." +description: "Stockez l’état Terraform dans le stockage objet RustFS avec le backend S3, y compris le verrouillage de l’état." --- -This guide connects [Terraform](https://github.com/hashicorp/terraform) — the infrastructure as code tool from HashiCorp — to **RustFS** through the S3 backend: the state file, and the lock file that prevents concurrent runs, are stored as objects in RustFS. You will initialize the backend, apply a small configuration, and verify the state object in RustFS. The workflow was verified with `terraform 1.12.2` and `rustfs/rustfs-x86-musl:v2.3.1`. +Ce guide connecte [Terraform](https://github.com/hashicorp/terraform) — l’outil d’infrastructure en tant que code de HashiCorp — à **RustFS** via le backend S3 : le fichier d’état, et le fichier de verrou qui empêche les exécutions concurrentes, sont stockés comme objets dans RustFS. Vous allez initialiser le backend, appliquer une petite configuration, puis vérifier l’objet d’état dans RustFS. Le flux a été validé avec `terraform 1.12.2` et `rustfs/rustfs-x86-musl:v2.3.1`. -You need a RustFS deployment reachable from your workstation (see the guides under [Installation](/installation)) and Terraform 1.10 or later, which supports S3-native locking via `use_lockfile`. +Vous avez besoin d’un déploiement RustFS joignable depuis votre poste de travail (voir les guides sous [Installation](/fr/installation)) et de Terraform 1.10 ou ultérieur, qui prend en charge le verrouillage natif S3 via `use_lockfile`. -## Architecture +## Schéma d’architecture ```mermaid flowchart LR Client["terraform init / apply"] -->|"state + lock objects"| RustFS["RustFS :9000"] ``` -The S3 backend stores the state file under the `key` prefix in the bucket. With `use_lockfile = true`, Terraform writes a `.tflock` object while a run holds the lock, replacing the former DynamoDB-based locking for this setup. +Le backend S3 stocke le fichier d’état sous le préfixe `key` dans le compartiment (bucket). Avec `use_lockfile = true`, Terraform écrit un objet `.tflock` tant qu’une exécution détient le verrou, ce qui remplace, pour cette configuration, l’ancien verrouillage fondé sur DynamoDB. -## 1. Create the project files +## 1. Créer les fichiers du projet -Create a working directory: +Créez un répertoire de travail : ```bash mkdir rustfs-terraform cd rustfs-terraform ``` -Create the configuration. Replace the credential placeholders and point the endpoint at your RustFS server — `localhost:9000` when Terraform runs on the same host: +Créez la configuration. Remplacez les valeurs d’identifiants indicatives et faites pointer le point de terminaison vers votre serveur RustFS — `localhost:9000` lorsque Terraform s’exécute sur le même hôte : ```hcl title="main.tf" terraform { @@ -54,11 +54,11 @@ resource "local_file" "demo" { } ``` -`force_path_style` and `insecure` select path-style addressing over plain HTTP, which is what RustFS expects for the local endpoint. `use_lockfile` enables S3-native state locking so concurrent runs cannot corrupt the state. +`force_path_style` et `insecure` sélectionnent l’adressage de type chemin (path-style) en HTTP non chiffré, ce qu’attend RustFS pour le point de terminaison local. `use_lockfile` active le verrouillage d’état natif S3, afin que des exécutions concurrentes ne puissent pas corrompre l’état. -## 2. Initialize the backend +## 2. Initialiser le backend -Download the provider and configure the S3 backend: +Téléchargez le fournisseur et configurez le backend S3 : ```bash terraform init -input=false @@ -69,9 +69,9 @@ Successfully configured the backend "s3"! Terraform will automatically use this backend unless the backend configuration changes. ``` -## 3. Apply the configuration +## 3. Appliquer la configuration -Create the resource and write the state to RustFS: +Créez la ressource et écrivez l’état dans RustFS : ```bash terraform apply -auto-approve -input=false @@ -81,9 +81,9 @@ terraform apply -auto-approve -input=false Apply complete! Resources: 1 added, 0 changed, 0 destroyed. ``` -## 4. Verify the state in RustFS +## 4. Vérifier l’état dans RustFS -List the state objects through the `rc` CLI: +Listez les objets d’état via la CLI `rc` : ```bash docker run --rm --network -v "$PWD:/m" \ @@ -95,13 +95,13 @@ docker run --rm --network -v "$PWD:/m" \ [2026-09-21 03:05:03] 1.62 KiB rustfs-demo/terraform.tfstate ``` -You can also browse the prefix in the RustFS Console: +Vous pouvez également parcourir le préfixe dans la Console RustFS : -![The Terraform state file stored in the RustFS Console](./images/rustfs-terraform-state.png) +![Le fichier d’état Terraform stocké dans la Console RustFS](./images/rustfs-terraform-state.png) -## 5. Confirm the state is reloaded from RustFS +## 5. Confirmer que l’état est rechargé depuis RustFS -Run a plan — Terraform reads the state from RustFS and compares it against the configuration: +Exécutez un plan — Terraform lit l’état depuis RustFS et le compare à la configuration : ```bash terraform plan -input=false @@ -111,34 +111,34 @@ terraform plan -input=false No changes. Your infrastructure matches the configuration. ``` -The plan is clean because the state was read back from RustFS, not from any local file. +Le plan ne contient aucune modification, car l’état a été relu depuis RustFS, et non depuis un fichier local. -## 6. Destroy and reset +## 6. Détruire et réinitialiser -Tear the resource down; the state update is written to RustFS the same way: +Détruisez la ressource ; la mise à jour de l’état est écrite dans RustFS de la même manière : ```bash terraform destroy -auto-approve -input=false ``` -Delete the state objects in the RustFS Console (or with `rc rm`) to start from scratch. +Supprimez les objets d’état dans la Console RustFS (ou avec `rc rm`) pour repartir de zéro. -## Troubleshooting +## Dépannage -### "dial tcp: lookup rustfs ... server misbehaving" or connection failures +### « dial tcp: lookup rustfs ... server misbehaving » ou échecs de connexion -The `endpoint` must be reachable from the machine where Terraform runs. Inside a Compose network use `http://rustfs:9000`; from the host use `http://localhost:9000`. +`endpoint` doit être joignable depuis la machine où s’exécute Terraform. À l’intérieur d’un réseau Compose, utilisez `http://rustfs:9000` ; depuis l’hôte, `http://localhost:9000`. -### "Bucket cannot have ACLs set" or signature errors +### « Bucket cannot have ACLs set » ou erreurs de signature -`skip_credentials_validation`, `skip_region_validation`, `skip_metadata_api_check`, `skip_requesting_account_id`, `force_path_style`, and `insecure` are all required for a non-AWS endpoint; missing any of them makes the backend talk to AWS defaults instead of RustFS. +`skip_credentials_validation`, `skip_region_validation`, `skip_metadata_api_check`, `skip_requesting_account_id`, `force_path_style` et `insecure` sont tous requis pour un point de terminaison non AWS ; s’il en manque un, le backend s’adresse aux valeurs par défaut d’AWS au lieu de RustFS. -### The state does not appear in the bucket +### L’état n’apparaît pas dans le compartiment -Confirm that the bucket exists and that the credentials match the RustFS credentials. The state object appears under the `key` path (`rustfs-demo/terraform.tfstate` in this guide) after the first `init` or `apply`. +Vérifiez que le compartiment existe et que les identifiants correspondent aux identifiants RustFS. L’objet d’état apparaît sous le chemin `key` (`rustfs-demo/terraform.tfstate` dans ce guide) après le premier `init` ou `apply`. -## Next steps +## Étapes suivantes -- Review [S3 compatibility notes](/administration/protocols/s3) before adopting additional S3 operations. -- Create dedicated production credentials with [Access Key Management](/security-compliance/iam/access-token). -- Follow the [Terraform S3 backend documentation](https://developer.hashicorp.com/terraform/language/backend/s3) for options such as workspace prefixes and role assumption. +- Consultez les [notes de compatibilité S3](/fr/administration/protocols/s3) avant d’adopter d’autres opérations S3. +- Créez des identifiants de production dédiés avec la [gestion des clés d’accès](/fr/security-compliance/iam/access-token). +- Suivez la [documentation du backend S3 de Terraform](https://developer.hashicorp.com/terraform/language/backend/s3) pour des options telles que les préfixes d’espace de travail et l’emprunt d’un rôle (assume role). diff --git a/content/fr/developer/integration/observability/fluentd.md b/content/fr/developer/integration/observability/fluentd.md index 4607c0ec3..377bfe267 100644 --- a/content/fr/developer/integration/observability/fluentd.md +++ b/content/fr/developer/integration/observability/fluentd.md @@ -1,13 +1,13 @@ --- title: "Fluentd" -description: "Ship Fluentd log events to RustFS with the S3 output plugin." +description: "Envoyez les événements de journaux Fluentd vers RustFS avec le plugin de sortie S3." --- -This guide connects [Fluentd](https://github.com/fluent/fluentd) — the open-source data collector — to **RustFS** through the `out_s3` output plugin. You will run Fluentd with a tail source, buffer log events, and verify that the flushed objects are stored in RustFS. The workflow was verified with `fluent/fluentd:v1.17-1`, `fluent-plugin-s3` 1.8.6, and `rustfs/rustfs-x86-musl:v2.3.1`. +Ce guide connecte [Fluentd](https://github.com/fluent/fluentd) — le collecteur de données open source — à **RustFS** via le plugin de sortie `out_s3`. Vous allez exécuter Fluentd avec une source tail, mettre les événements de journaux en tampon, puis vérifier que les objets vidés sont stockés dans RustFS. Le flux a été validé avec `fluent/fluentd:v1.17-1`, `fluent-plugin-s3` 1.8.6 et `rustfs/rustfs-x86-musl:v2.3.1`. -You need Docker. This deployment is intended for local integration testing, not production. +Vous avez besoin de Docker. Ce déploiement est destiné aux tests d’intégration locaux, pas à la production. -## Architecture +## Schéma d’architecture ```mermaid flowchart LR @@ -16,18 +16,18 @@ flowchart LR Fluentd -->|"gzip objects"| RustFS["RustFS :9000"] ``` -The tail source reads new lines from `app.log` and hands them to the S3 output, which buffers events on a time key and uploads a gzip object per flush window. +La source tail lit les nouvelles lignes de `app.log` et les transmet à la sortie S3, qui met les événements en tampon selon une clé temporelle et charge (upload) un objet gzip par fenêtre de vidage. -## 1. Create the project files +## 1. Créer les fichiers du projet -Create the bucket first — Fluentd does not create buckets: +Créez d’abord le compartiment (bucket) — Fluentd ne crée pas les compartiments : ```bash rc alias set rustfs http://:9000 rc mb rustfs/fluentd-data ``` -The official Fluentd image runs as a non-root user and cannot install gems at startup, so build a small image with the S3 plugin: +L’image officielle de Fluentd s’exécute avec un utilisateur non root et ne peut pas installer de gems au démarrage ; construisez donc une petite image avec le plugin S3 : ```dockerfile title="Dockerfile" FROM fluent/fluentd:v1.17-1 @@ -36,7 +36,7 @@ RUN gem install fluent-plugin-s3 --no-document USER fluent ``` -Create the Fluentd configuration, replacing both credential placeholders: +Créez la configuration Fluentd, en remplaçant les deux valeurs d’identifiants indicatives : ```nginx title="fluent.conf" @@ -67,9 +67,9 @@ Create the Fluentd configuration, replacing both credential placeholders: ``` -`force_path_style true` is required — without it the plugin constructs `fluentd-data.rustfs` as a hostname and every request fails with a DNS error. Inside the Compose network the hostname is `rustfs`; from the host use `http://localhost:9000/`. +`force_path_style true` est requis — sans cela, le plugin construit `fluentd-data.rustfs` comme nom d’hôte et chaque requête échoue avec une erreur DNS. À l’intérieur du réseau Compose, le nom d’hôte est `rustfs` ; depuis l’hôte, utilisez `http://localhost:9000/`. -Build the image and start Fluentd on the same Docker network as RustFS: +Construisez l’image et démarrez Fluentd sur le même réseau Docker que RustFS : ```bash docker build -t fluentd-rustfs . @@ -79,74 +79,74 @@ docker run -d --name fluentd --network oo-rustfs_default \ -v "$PWD/logs":/var/log fluentd-rustfs ``` -## 2. Produce log events +## 2. Produire des événements de journaux -Append lines to the watched file: +Ajoutez des lignes au fichier surveillé : ```bash echo "rustfs fluentd demo line 1" >> logs/app.log echo "rustfs fluentd demo line 2" >> logs/app.log ``` -With a 30-second time key and immediate flush mode, each window uploads one gzip object shortly after it closes. Wait about a minute. +Avec une clé temporelle de 30 secondes et le mode de vidage immédiat, chaque fenêtre charge un objet gzip peu après sa fermeture. Attendez environ une minute. -## 3. Verify objects in RustFS +## 3. Vérifier les objets dans RustFS -List the bucket: +Listez le compartiment : ```bash rc ls rustfs/fluentd-data/ -r ``` -Each flush window produces one gzipped object: +Chaque fenêtre de vidage produit un objet compressé en gzip : ```text fluentd-logs20260921154400_0.gz fluentd-logs20260921154400_1.gz ``` -Read one object back to confirm the events are intact: +Relisez un objet pour confirmer que les événements sont intacts : ```bash rc cat rustfs/fluentd-data/fluentd-logs20260921154400_0.gz | gunzip ``` -![Fluentd log objects stored in the RustFS Console](./images/rustfs-fluentd-logs.png) +![Objets de journaux Fluentd stockés dans la Console RustFS](./images/rustfs-fluentd-logs.png) -## 4. Stop or reset the deployment +## 4. Arrêter ou réinitialiser le déploiement -Stop Fluentd while keeping the data: +Arrêtez Fluentd en conservant les données : ```bash docker rm -f fluentd ``` -The objects stay in the `fluentd-data` bucket. To delete them, remove the bucket: +Les objets restent dans le compartiment `fluentd-data`. Pour les supprimer, supprimez le compartiment : ```bash rc rb rustfs/fluentd-data --force ``` -## Troubleshooting +## Dépannage ### `Unknown output plugin 's3'` -The plugin is not installed. Confirm the Dockerfile installs `fluent-plugin-s3` as `root` before switching back to the `fluent` user — installing at container start as the default user fails with permission errors. +Le plugin n’est pas installé. Vérifiez que le Dockerfile installe `fluent-plugin-s3` en tant que `root` avant de revenir à l’utilisateur `fluent` — une installation au démarrage du conteneur avec l’utilisateur par défaut échoue avec des erreurs de permission. ### `Failed to open TCP connection to fluentd-data.rustfs` -Virtual-hosted addressing is in use. Add `force_path_style true` to the `s3` output so the bucket stays in the URL path. +L’adressage de type hôte virtuel est utilisé. Ajoutez `force_path_style true` à la sortie `s3` afin que le compartiment reste dans le chemin de l’URL. -### The worker crashes in a restart loop +### Le worker plante dans une boucle de redémarrage -The output fails hard when the bucket does not exist. Create `fluentd-data` before starting Fluentd and check the startup log: +La sortie échoue de façon brutale lorsque le compartiment n’existe pas. Créez `fluentd-data` avant de démarrer Fluentd et consultez le journal de démarrage : ```bash docker logs fluentd | grep -iE "error|bucket" | tail ``` -## Next steps +## Étapes suivantes -- Review [S3 compatibility notes](/administration/protocols/s3) before adopting additional Fluentd outputs. -- Create dedicated production credentials with [Access Key Management](/security-compliance/iam/access-token). -- Follow the [fluent-plugin-s3 documentation](https://github.com/fluent/fluent-plugin-s3) for object key formats and compression options. +- Consultez les [notes de compatibilité S3](/fr/administration/protocols/s3) avant d’adopter d’autres sorties Fluentd. +- Créez des identifiants de production dédiés avec la [gestion des clés d’accès](/fr/security-compliance/iam/access-token). +- Suivez la [documentation de fluent-plugin-s3](https://github.com/fluent/fluent-plugin-s3) pour les formats de clé d’objet et les options de compression. diff --git a/content/fr/developer/integration/observability/greptimedb.md b/content/fr/developer/integration/observability/greptimedb.md index 5b7ee6905..0a92536bc 100644 --- a/content/fr/developer/integration/observability/greptimedb.md +++ b/content/fr/developer/integration/observability/greptimedb.md @@ -1,13 +1,13 @@ --- title: "GreptimeDB" -description: "Run GreptimeDB with RustFS as the S3-compatible object storage backend." +description: "Exécutez GreptimeDB avec RustFS comme backend de stockage objet compatible avec S3." --- -This guide connects [GreptimeDB](https://github.com/GreptimeTeam/greptimedb) — the open-source, cloud-native time-series database — to **RustFS** as its object storage backend. You will start a standalone instance with its `[storage]` section pointed at a RustFS bucket, write time-series rows through the SQL API, and confirm the Parquet files and manifests in the bucket. The workflow was verified with `greptime/greptimedb` (main, commit `179ff8e5`) against `rustfs/rustfs-x86-musl:v2.3.1`. +Ce guide connecte [GreptimeDB](https://github.com/GreptimeTeam/greptimedb) — la base de données de séries temporelles open source et cloud native — à **RustFS** comme backend de stockage objet. Vous allez démarrer une instance autonome dont la section `[storage]` pointe vers un compartiment (bucket) RustFS, écrire des lignes de séries temporelles via l’API SQL, puis confirmer les fichiers Parquet et les manifestes dans le compartiment. Le flux a été validé avec `greptime/greptimedb` (branche main, commit `179ff8e5`) face à `rustfs/rustfs-x86-musl:v2.3.1`. -You need Docker, or a local GreptimeDB binary. This deployment is intended for local integration testing, not production. +Vous avez besoin de Docker, ou d’un binaire GreptimeDB local. Ce déploiement est destiné aux tests d’intégration locaux, pas à la production. -## Architecture +## Schéma d’architecture ```mermaid flowchart LR @@ -15,11 +15,11 @@ flowchart LR DB -->|"SST + manifests"| RustFS["RustFS :9000"] ``` -GreptimeDB keeps its write-ahead log and recent data locally, then persists SSTables (Parquet) and table manifests to object storage. Pointing the storage backend at RustFS makes the bucket the durable home of all table data. +GreptimeDB conserve localement son journal d’écriture anticipée et les données récentes, puis persiste les SSTables (Parquet) et les manifestes de table vers le stockage objet. Pointer le backend de stockage vers RustFS fait du compartiment l’emplacement durable de toutes les données de tables. -## 1. Configure the storage backend +## 1. Configurer le backend de stockage -Create the bucket and a config file with an S3 storage section, replacing all connection placeholders: +Créez le compartiment et un fichier de configuration avec une section de stockage S3, en remplaçant toutes les valeurs de connexion indicatives : ```toml title="greptimedb.toml" [storage] @@ -32,11 +32,11 @@ endpoint = "http://:9000" region = "us-east-1" ``` -GreptimeDB uses path-style requests for custom endpoints by default; virtual-hosted style must be opted into explicitly with `enable_virtual_host_style`, so no extra flag is needed for RustFS. +GreptimeDB utilise par défaut des requêtes en adressage de type chemin (path-style) pour les points de terminaison personnalisés ; l’adressage de type hôte virtuel doit être activé explicitement avec `enable_virtual_host_style`, si bien qu’aucun indicateur supplémentaire n’est nécessaire pour RustFS. -## 2. Run GreptimeDB +## 2. Exécuter GreptimeDB -Start a standalone instance with the config file: +Démarrez une instance autonome avec le fichier de configuration : ```bash docker run -d --name greptimedb --network oo-rustfs_default -p 4000:4000 -p 4002:4002 \ @@ -47,11 +47,11 @@ docker run -d --name greptimedb --network oo-rustfs_default -p 4000:4000 -p 4002 --config-file /etc/greptimedb/greptimedb.toml ``` -Port `4000` serves the HTTP SQL endpoint and `4002` the MySQL protocol. +Le port `4000` sert le point de terminaison SQL HTTP, et le port `4002` le protocole MySQL. -## 3. Write and query time series +## 3. Écrire et interroger des séries temporelles -Create a table, insert rows, and read them back. The HTTP SQL endpoint takes form-encoded requests: +Créez une table, insérez des lignes et relisez-les. Le point de terminaison SQL HTTP accepte des requêtes encodées en formulaire : ```bash curl -s -X POST "http://localhost:4000/v1/sql" \ @@ -65,7 +65,7 @@ curl -s -X POST "http://localhost:4000/v1/sql" \ {"output":[{"affectedrows":3}],"execution_time_ms":2} ``` -Query the rows back: +Relisez les lignes : ```bash curl -s -X POST "http://localhost:4000/v1/sql" \ @@ -76,9 +76,9 @@ curl -s -X POST "http://localhost:4000/v1/sql" \ {"output":[{"records":{"rows":[["node-2",0.51,0.71,1790681000000],["node-1",0.35,0.63,1790681060000]],"total_rows":2}}]} ``` -## 4. Verify objects in RustFS +## 4. Vérifier les objets dans RustFS -List the bucket — after the memtable flushes, the bucket holds Parquet SSTables and JSON manifests: +Listez le compartiment — après le vidage des memtables, le compartiment contient des SSTables Parquet et des manifestes JSON : ```bash rc ls rustfs// -r @@ -90,40 +90,40 @@ greptimedb/data/greptime/greptime_private/1025/1025_0000000000/b11e8b25-5763-4f0 greptimedb/data/greptime/greptime_private/1025/1025_0000000000/manifest/00000000000000000001.json ``` -Each database gets a directory under `data/`, and per-region `manifest/*.json` files describe the SSTables GreptimeDB reads back during queries. +Chaque base de données obtient un répertoire sous `data/`, et les fichiers `manifest/*.json` de chaque région décrivent les SSTables que GreptimeDB relit pendant les requêtes. -![GreptimeDB data stored in the RustFS Console](./images/rustfs-greptimedb-data.png) +![Données GreptimeDB stockées dans la Console RustFS](./images/rustfs-greptimedb-data.png) -## 5. Stop or reset +## 5. Arrêter ou réinitialiser -To tear down the demo while keeping the bucket objects: +Pour arrêter la démonstration tout en conservant les objets du compartiment : ```bash docker rm -f greptimedb ``` -To delete the stored data: +Pour supprimer les données stockées : ```bash rc rm rustfs// --recursive --force ``` -## Troubleshooting +## Dépannage ### `Form requests must have Content-Type: application/x-www-form-urlencoded` -The `/v1/sql` HTTP endpoint only accepts form-encoded bodies. Pass SQL with `curl --data-urlencode "sql=..."` (or `application/x-www-form-urlencoded`), not as a JSON body. +Le point de terminaison HTTP `/v1/sql` n’accepte que les corps encodés en formulaire. Transmettez le SQL avec `curl --data-urlencode "sql=..."` (ou `application/x-www-form-urlencoded`), et non comme un corps JSON. -### Bucket stays empty +### Le compartiment reste vide -GreptimeDB flushes memtables to object storage asynchronously. Run a few more inserts and wait a few seconds, or trigger a manual flush, then list the bucket again. +GreptimeDB vide les memtables vers le stockage objet de façon asynchrone. Exécutez quelques insertions supplémentaires et attendez quelques secondes, ou déclenchez un vidage manuel, puis listez de nouveau le compartiment. -### Startup fails with an S3 error +### Le démarrage échoue avec une erreur S3 -Confirm `endpoint` includes the scheme, the bucket exists, and `access_key_id`/`secret_access_key` match a RustFS access key. The `root` value is optional but keeps the table tree under a known prefix. +Vérifiez que `endpoint` inclut le schéma, que le compartiment existe, et que `access_key_id`/`secret_access_key` correspondent à une clé d’accès RustFS. La valeur `root` est facultative, mais elle conserve l’arborescence des tables sous un préfixe connu. -## Next steps +## Étapes suivantes -- Review [S3 compatibility notes](/administration/protocols/s3) before adopting additional GreptimeDB storage options. -- Create dedicated production credentials with [Access Key Management](/security-compliance/iam/access-token). -- Follow the [GreptimeDB configuration reference](https://docs.greptime.com/operational-guide/configure/configure-datanode/) to tune flush intervals and cache layers for production workloads. +- Consultez les [notes de compatibilité S3](/fr/administration/protocols/s3) avant d’adopter d’autres options de stockage GreptimeDB. +- Créez des identifiants de production dédiés avec la [gestion des clés d’accès](/fr/security-compliance/iam/access-token). +- Suivez la [référence de configuration GreptimeDB](https://docs.greptime.com/operational-guide/configure/configure-datanode/) pour régler les intervalles de vidage et les couches de cache des charges de production. diff --git a/content/fr/developer/integration/observability/loki.md b/content/fr/developer/integration/observability/loki.md index 228e9b8b6..559bc70e1 100644 --- a/content/fr/developer/integration/observability/loki.md +++ b/content/fr/developer/integration/observability/loki.md @@ -290,6 +290,6 @@ docker compose logs create-bucket ## Étapes suivantes -- Consultez les [notes de compatibilité S3](/administration/protocols/s3) avant d’adopter d’autres opérations S3. -- Créez des identifiants de production dédiés avec la [gestion des clés d’accès](/security-compliance/iam/access-token). +- Consultez les [notes de compatibilité S3](/fr/administration/protocols/s3) avant d’adopter d’autres opérations S3. +- Créez des identifiants de production dédiés avec la [gestion des clés d’accès](/fr/security-compliance/iam/access-token). - Suivez la [documentation Grafana Loki](https://grafana.com/docs/loki/latest/) pour connecter Promtail, Alloy ou l’OpenTelemetry Collector comme producteurs de journaux. diff --git a/content/fr/developer/integration/observability/openobserve.md b/content/fr/developer/integration/observability/openobserve.md index b2defd4a6..a0c19012e 100644 --- a/content/fr/developer/integration/observability/openobserve.md +++ b/content/fr/developer/integration/observability/openobserve.md @@ -58,7 +58,7 @@ ZO_ROOT_USER_PASSWORD=Complexpass#123 `root@example.com` et `Complexpass#123` sont les valeurs d’exemple de la documentation OpenObserve. OpenObserve v1.0.x applique une politique de mot de passe de 8 à 128 caractères avec majuscules, minuscules, chiffres et caractères spéciaux. Modifiez ces deux valeurs pour tout déploiement réel et ne commettez pas `.env` dans le contrôle de version. -:: : +::: Créez le fichier Compose : @@ -306,6 +306,6 @@ L’image RustFS s’exécute avec l’utilisateur et le groupe `10001`. Si vous ## Étapes suivantes -- Consultez les [notes de compatibilité S3](/administration/protocols/s3) avant d’adopter d’autres opérations S3. -- Créez des identifiants de production dédiés avec la [gestion des clés d’accès](/security-compliance/iam/access-token). +- Consultez les [notes de compatibilité S3](/fr/administration/protocols/s3) avant d’adopter d’autres opérations S3. +- Créez des identifiants de production dédiés avec la [gestion des clés d’accès](/fr/security-compliance/iam/access-token). - Suivez la [documentation OpenObserve](https://openobserve.ai/docs/) pour connecter de vrais producteurs de journaux tels que Fluent Bit ou l’OpenTelemetry Collector. diff --git a/content/fr/developer/integration/observability/opentelemetry.md b/content/fr/developer/integration/observability/opentelemetry.md index 283df4135..8c01ef1be 100644 --- a/content/fr/developer/integration/observability/opentelemetry.md +++ b/content/fr/developer/integration/observability/opentelemetry.md @@ -1,13 +1,13 @@ --- title: "OpenTelemetry" -description: "Export OpenTelemetry Collector logs to RustFS with the AWS S3 exporter." +description: "Exportez les journaux de l’OpenTelemetry Collector vers RustFS avec l’exporteur AWS S3." --- -This guide connects the [OpenTelemetry Collector](https://opentelemetry.io/docs/collector/) — the CNCF telemetry pipeline — to **RustFS** through the collector's `awss3` exporter. You will run the contrib collector with a `filelog` receiver, ship the log lines of a file into the `otel-data` bucket, and verify the partitioned objects in RustFS. The workflow was verified with `otel/opentelemetry-collector-contrib:0.138.0` and `rustfs/rustfs-x86-musl:v2.3.1`. +Ce guide connecte l’[OpenTelemetry Collector](https://opentelemetry.io/docs/collector/) — le pipeline de télémétrie de la CNCF — à **RustFS** via l’exporteur `awss3` du collecteur. Vous allez exécuter le collecteur contrib avec un récepteur `filelog`, envoyer les lignes de journal d’un fichier dans le compartiment (bucket) `otel-data`, puis vérifier les objets partitionnés dans RustFS. Le flux a été validé avec `otel/opentelemetry-collector-contrib:0.138.0` et `rustfs/rustfs-x86-musl:v2.3.1`. -You need Docker. This deployment is intended for local integration testing, not production. +Vous avez besoin de Docker. Ce déploiement est destiné aux tests d’intégration locaux, pas à la production. -## Architecture +## Schéma d’architecture ```mermaid flowchart LR @@ -15,18 +15,18 @@ flowchart LR Collector -->|awss3| RustFS["RustFS :9000"] ``` -The `filelog` receiver tails the log file and the `awss3` exporter uploads batches to the bucket, partitioned into time-based prefixes. Metrics and traces can be routed through the same exporter with their own pipelines. +Le récepteur `filelog` suit la fin du fichier de journal, et l’exporteur `awss3` charge (upload) les lots vers le compartiment, partitionnés en préfixes temporels. Les métriques et les traces peuvent être acheminées par le même exporteur, avec leurs propres pipelines. -## 1. Create the project files +## 1. Créer les fichiers du projet -Create the bucket first — the exporter does not create buckets: +Créez d’abord le compartiment — l’exporteur ne crée pas les compartiments : ```bash rc alias set rustfs http://:9000 rc mb rustfs/otel-data ``` -Create the collector configuration, replacing both credential placeholders: +Créez la configuration du collecteur, en remplaçant les deux valeurs d’identifiants indicatives : ```yaml title="config.yaml" receivers: @@ -52,9 +52,9 @@ service: exporters: [awss3] ``` -The exporter reads credentials from the standard `AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY`, and `AWS_REGION` environment variables. `marshaler: body` writes each log line as plain text; omit it to store OTLP JSON instead. `s3_force_path_style` and `disable_ssl` are required for a plain-HTTP, non-AWS endpoint. +L’exporteur lit les identifiants dans les variables d’environnement standard `AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY` et `AWS_REGION`. `marshaler: body` écrit chaque ligne de journal en texte brut ; omettez-le pour stocker du JSON OTLP à la place. `s3_force_path_style` et `disable_ssl` sont requis pour un point de terminaison non AWS en HTTP non chiffré. -Create the Compose file: +Créez le fichier Compose : ```yaml title="compose.yaml" services: @@ -75,9 +75,9 @@ networks: otel: ``` -## 2. Start the collector and produce logs +## 2. Démarrer le collecteur et produire des journaux -Start the stack and append lines to the watched file: +Démarrez la pile et ajoutez des lignes au fichier surveillé : ```bash echo "otel demo log line one" > app.log @@ -85,23 +85,23 @@ docker compose up -d echo "second line after start" >> app.log ``` -The collector tails the file from the beginning and uploads each buffer when the partition rolls over, so allow about a minute after the last line before checking. +Le collecteur suit le fichier depuis le début et charge chaque tampon lorsque la partition bascule ; attendez donc environ une minute après la dernière ligne avant de vérifier. -## 3. Verify objects in RustFS +## 3. Vérifier les objets dans RustFS -List the bucket: +Listez le compartiment : ```bash rc ls rustfs/otel-data/ -r ``` -Log records are uploaded under time-based partitions with the configured file prefix: +Les enregistrements de journal sont chargés sous des partitions temporelles, avec le préfixe de fichier configuré : ```text year=2026/month=09/day=21/hour=15/minute=53/logs/applogs_288361608.txt ``` -Read one object back to confirm the lines arrived intact: +Relisez un objet pour confirmer que les lignes sont arrivées intactes : ```bash rc cat rustfs/otel-data/year=2026/month=09/day=21/hour=15/minute=53/logs/applogs_288361608.txt @@ -112,34 +112,34 @@ otel demo log line one second line after start ``` -![OpenTelemetry log objects stored in the RustFS Console](./images/rustfs-otel-logs.png) +![Objets de journaux OpenTelemetry stockés dans la Console RustFS](./images/rustfs-otel-logs.png) -## 4. Stop or reset the deployment +## 4. Arrêter ou réinitialiser le déploiement -Stop the collector while keeping the data: +Arrêtez le collecteur en conservant les données : ```bash docker compose down ``` -The objects stay in the `otel-data` bucket. To delete them, remove the bucket: +Les objets restent dans le compartiment `otel-data`. Pour les supprimer, supprimez le compartiment : ```bash rc rb rustfs/otel-data --force ``` -## Troubleshooting +## Dépannage -### `has invalid keys` when the collector starts +### `has invalid keys` au démarrage du collecteur -The `awss3` exporter schema differs between collector releases. Version 0.138 nests the upload settings under `s3uploader` as shown above; the endpoint key is `endpoint` (not `s3_endpoint`). Newer releases move these keys to the top level — check the README for your exact collector version. +Le schéma de l’exporteur `awss3` diffère selon les versions du collecteur. La version 0.138 imbrique les réglages de chargement sous `s3uploader`, comme ci-dessus ; la clé du point de terminaison est `endpoint` (et non `s3_endpoint`). Les versions plus récentes déplacent ces clés au premier niveau — consultez le README de votre version exacte du collecteur. -### Nothing appears in the bucket +### Rien n’apparaît dans le compartiment -Confirm the credentials environment variables are set on the collector container, that `s3_force_path_style` is `true`, and that the exporter can reach `http://rustfs:9000` from inside the Compose network. Enable the `debug` exporter on the same pipeline to see whether records flow at all. +Vérifiez que les variables d’environnement d’identifiants sont définies sur le conteneur du collecteur, que `s3_force_path_style` vaut `true`, et que l’exporteur peut joindre `http://rustfs:9000` depuis l’intérieur du réseau Compose. Activez l’exporteur `debug` sur le même pipeline pour voir si des enregistrements circulent. -## Next steps +## Étapes suivantes -- Review [S3 compatibility notes](/administration/protocols/s3) before adopting additional collector operations. -- Create dedicated production credentials with [Access Key Management](/security-compliance/iam/access-token). -- Follow the [AWS S3 exporter documentation](https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/exporter/awss3exporter) to add metrics and traces pipelines. +- Consultez les [notes de compatibilité S3](/fr/administration/protocols/s3) avant d’adopter d’autres opérations du collecteur. +- Créez des identifiants de production dédiés avec la [gestion des clés d’accès](/fr/security-compliance/iam/access-token). +- Suivez la [documentation de l’exporteur AWS S3](https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/exporter/awss3exporter) pour ajouter des pipelines de métriques et de traces. diff --git a/content/fr/developer/integration/observability/tempo.md b/content/fr/developer/integration/observability/tempo.md index aa484b080..11545ffc7 100644 --- a/content/fr/developer/integration/observability/tempo.md +++ b/content/fr/developer/integration/observability/tempo.md @@ -288,6 +288,6 @@ docker compose logs create-bucket ## Étapes suivantes -- Consultez les [notes de compatibilité S3](/administration/protocols/s3) avant d’adopter d’autres opérations S3. -- Créez des identifiants de production dédiés avec la [gestion des clés d’accès](/security-compliance/iam/access-token). +- Consultez les [notes de compatibilité S3](/fr/administration/protocols/s3) avant d’adopter d’autres opérations S3. +- Créez des identifiants de production dédiés avec la [gestion des clés d’accès](/fr/security-compliance/iam/access-token). - Suivez la [documentation Grafana Tempo](https://grafana.com/docs/tempo/latest/) pour connecter l’OpenTelemetry Collector ou des applications instrumentées comme producteurs de traces. diff --git a/content/fr/developer/integration/observability/thanos.md b/content/fr/developer/integration/observability/thanos.md index 856c31db6..207707838 100644 --- a/content/fr/developer/integration/observability/thanos.md +++ b/content/fr/developer/integration/observability/thanos.md @@ -1,13 +1,13 @@ --- title: "Thanos" -description: "Run Thanos with RustFS as the S3 object storage backend for Prometheus blocks, deployed with Docker Compose." +description: "Exécutez Thanos avec RustFS comme backend de stockage objet S3 pour les blocs Prometheus, déployé avec Docker Compose." --- -This guide connects [Thanos](https://github.com/thanos-io/thanos) — the highly available Prometheus setup with long-term storage — to **RustFS** as its object store. You will run Prometheus with a Thanos sidecar that uploads TSDB blocks to RustFS, then query the historical data back through a Store Gateway and a Query frontend. The workflow was verified with `thanosio/thanos:v0.37.2`, `prom/prometheus:v2.53.1`, and `rustfs/rustfs-x86-musl:v2.3.1`. +Ce guide connecte [Thanos](https://github.com/thanos-io/thanos) — l’architecture Prometheus hautement disponible, avec stockage à long terme — à **RustFS** comme stockage objet. Vous allez exécuter Prometheus avec un sidecar Thanos qui charge (upload) les blocs TSDB vers RustFS, puis interroger de nouveau les données historiques via une Store Gateway et un frontal Query. Le flux a été validé avec `thanosio/thanos:v0.37.2`, `prom/prometheus:v2.53.1` et `rustfs/rustfs-x86-musl:v2.3.1`. -You need Docker with the Compose plugin. This deployment is intended for local integration testing, not production. +Vous avez besoin de Docker avec le plugin Compose. Ce déploiement est destiné aux tests d’intégration locaux, pas à la production. -## Architecture +## Schéma d’architecture ```mermaid flowchart LR @@ -18,27 +18,27 @@ flowchart LR Query -->|gRPC| Store ``` -The sidecar watches the Prometheus TSDB directory and uploads every two-hour block to the `thanos-data` bucket in RustFS. The Store Gateway reads the same bucket and answers queries about historical blocks, so Query resolves both live data through the sidecar and old data through the Store Gateway. +Le sidecar surveille le répertoire TSDB de Prometheus et charge chaque bloc de deux heures vers le compartiment (bucket) `thanos-data` dans RustFS. La Store Gateway lit le même compartiment et répond aux requêtes sur les blocs historiques, si bien que Query résout à la fois les données en direct via le sidecar et les anciennes données via la Store Gateway. -## 1. Create the project files +## 1. Créer les fichiers du projet -Create a working directory: +Créez un répertoire de travail : ```bash mkdir rustfs-thanos cd rustfs-thanos ``` -Create an environment file and replace both credential placeholders: +Créez un fichier d’environnement et remplacez les deux valeurs d’identifiants indicatives : ```ini title=".env" RUSTFS_ACCESS_KEY= RUSTFS_SECRET_KEY= ``` -Use dedicated credentials for the `thanos-data` bucket. Do not commit `.env` to source control. +Utilisez des identifiants dédiés pour le compartiment `thanos-data`. N’ajoutez pas le fichier `.env` au dépôt (ne le versionnez pas). -Create the Prometheus configuration with an external label — Thanos requires it to deduplicate blocks: +Créez la configuration Prometheus avec un label externe — Thanos l’exige pour dédupliquer les blocs : ```yaml title="prometheus.yml" global: @@ -56,7 +56,7 @@ scrape_configs: - targets: ["rustfs:9000"] ``` -Create the Thanos object store configuration: +Créez la configuration du stockage objet Thanos : ```yaml title="bucket.yml" type: S3 @@ -68,13 +68,13 @@ config: insecure: true ``` -Thanos does not interpolate `.env` files itself. Before starting the stack, replace the placeholders with the same values you set in `.env`: +Thanos n’interpole pas lui-même les fichiers `.env`. Avant de démarrer la pile, remplacez les valeurs indicatives par les mêmes valeurs que dans `.env` : ```bash sed -i.bak "s|\${RUSTFS_ACCESS_KEY}|$(grep RUSTFS_ACCESS_KEY .env | cut -d= -f2)|;s|\${RUSTFS_SECRET_KEY}|$(grep RUSTFS_SECRET_KEY .env | cut -d= -f2)|" bucket.yml ``` -Create the Compose file: +Créez le fichier Compose : ```yaml title="compose.yaml" services: @@ -189,47 +189,47 @@ volumes: store-data: ``` -The `--storage.tsdb.min-block-duration` and `--storage.tsdb.max-block-duration` flags disable Prometheus compaction. The sidecar refuses to ship blocks from a compacting TSDB because the local blocks would no longer match the uploaded ones. +Les indicateurs `--storage.tsdb.min-block-duration` et `--storage.tsdb.max-block-duration` désactivent la compaction Prometheus. Le sidecar refuse d’expédier les blocs d’un TSDB en cours de compaction, car les blocs locaux ne correspondraient plus à ceux qui ont été chargés. -## 2. Validate and start the deployment +## 2. Valider et démarrer le déploiement -Resolve the Compose file before starting containers: +Vérifiez le fichier Compose avant de démarrer les conteneurs : ```bash docker compose config ``` -Start the stack and wait until the sidecar reports itself ready: +Démarrez la pile et attendez que le sidecar se déclare prêt : ```bash docker compose up -d docker compose logs sidecar | grep -m1 "status=ready" ``` -Check that the sidecar picked up the Prometheus external labels: +Vérifiez que le sidecar a pris en compte les labels externes de Prometheus : ```bash docker compose logs sidecar | grep "external labels" ``` -The Thanos Query UI answers on `http://localhost:9091`, and the RustFS Console runs at `http://localhost:9001`. +L’interface Thanos Query répond sur `http://localhost:9091`, et la Console RustFS tourne à l’adresse `http://localhost:9001`. -## 3. Upload a block to RustFS +## 3. Charger un bloc vers RustFS -The sidecar uploads a block when Prometheus compacts one, which happens at a two-hour block boundary. To produce a block immediately, snapshot the TSDB through the admin API — with compaction disabled, the sidecar ships the head-block snapshot directly: +Le sidecar charge un bloc lorsque Prometheus en compacte un, ce qui se produit à la frontière d’un bloc de deux heures. Pour produire un bloc immédiatement, prenez un instantané du TSDB via l’API d’administration — avec la compaction désactivée, le sidecar expédie directement l’instantané du bloc de tête : ```bash curl -s -XPOST http://localhost:9090/api/v1/admin/tsdb/snapshot | head -c 200 ``` -Wait for the upload, then check the shipper state inside Prometheus: +Attendez le chargement, puis vérifiez l’état du shipper dans Prometheus : ```bash sleep 60 docker compose exec prometheus cat /prometheus/thanos.shipper.json ``` -The `uploaded` list should contain a block ID: +La liste `uploaded` devrait contenir un ID de bloc : ```json { @@ -240,15 +240,15 @@ The `uploaded` list should contain a block ID: } ``` -## 4. Query historical data from RustFS +## 4. Interroger les données historiques depuis RustFS -The Store Gateway periodically syncs the bucket. Confirm it downloaded the uploaded block: +La Store Gateway synchronise périodiquement le compartiment. Confirmez qu’elle a téléchargé le bloc chargé : ```bash docker compose logs store | grep "loaded new block" ``` -Query a series through the Query frontend over the block's time range: +Interrogez une série via le frontal Query sur la plage temporelle du bloc : ```bash START=$(date -u -d '2 hours ago' +%s) @@ -256,17 +256,17 @@ END=$(date -u +%s) curl -s "http://localhost:9091/api/v1/query_range?query=up%7Bjob%3D%22prometheus%22%7D&start=$START&end=$END&step=30" | head -c 300 ``` -The Store Gateway serves the response from the blocks it downloaded from RustFS, while the sidecar answers for the live head — both paths resolve through the same Query endpoint. +La Store Gateway sert la réponse à partir des blocs qu’elle a téléchargés depuis RustFS, tandis que le sidecar répond pour la tête active — les deux chemins aboutissent au même point de terminaison Query. -## 5. Verify objects in RustFS +## 5. Vérifier les objets dans RustFS -List the bucket: +Listez le compartiment : ```bash docker compose exec rustfs /usr/bin/rc ls local/thanos-data/ -r ``` -Each block is stored as three objects — the chunk files, the index, and `meta.json`: +Chaque bloc est stocké sous forme de trois objets — les fichiers de chunks, l’index et `meta.json` : ```text 01M31EPTZC5E0SETZTP0SPFY79/chunks/000001 @@ -274,38 +274,38 @@ Each block is stored as three objects — the chunk files, the index, and `meta. 01M31EPTZC5E0SETZTP0SPFY79/meta.json ``` -![Thanos blocks stored in the RustFS Console](./images/rustfs-thanos-blocks.png) +![Blocs Thanos stockés dans la Console RustFS](./images/rustfs-thanos-blocks.png) -## 6. Stop or reset the deployment +## 6. Arrêter ou réinitialiser le déploiement -Stop the containers while keeping all data: +Arrêtez les conteneurs en conservant toutes les données : ```bash docker compose down ``` -The RustFS volume keeps the uploaded blocks, so the Store Gateway serves historical queries again after a restart. To delete everything, including the blocks in RustFS, add `--volumes`. +Le volume RustFS conserve les blocs chargés, si bien que la Store Gateway sert de nouveau les requêtes historiques après un redémarrage. Pour tout supprimer, y compris les blocs dans RustFS, ajoutez `--volumes`. -## Troubleshooting +## Dépannage -### The sidecar logs `Compaction needs to be disabled` +### Le sidecar journalise `Compaction needs to be disabled` -Prometheus must run with `--storage.tsdb.min-block-duration` equal to `--storage.tsdb.max-block-duration` — set both to `2h` as shown in the Compose file. Otherwise the sidecar cannot guarantee that local blocks stay unchanged and refuses to upload. +Prometheus doit s’exécuter avec `--storage.tsdb.min-block-duration` égal à `--storage.tsdb.max-block-duration` — définissez les deux à `2h`, comme dans le fichier Compose. Sinon, le sidecar ne peut pas garantir que les blocs locaux restent inchangés et refuse le chargement. ### `The specified bucket does not exist` -Thanos does not create buckets. Check that the `create-bucket` service completed successfully: +Thanos ne crée pas les compartiments. Vérifiez que le service `create-bucket` s’est terminé avec succès : ```bash docker compose logs create-bucket ``` -### Queries return no historical data +### Les requêtes ne renvoient aucune donnée historique -Confirm that the Store Gateway has loaded at least one block (`docker compose logs store | grep "loaded new block"`) and that your query time range falls inside the uploaded block's window — check the block's `meta.json` in the RustFS Console for `minTime` and `maxTime`. +Vérifiez que la Store Gateway a chargé au moins un bloc (`docker compose logs store | grep "loaded new block"`) et que la plage temporelle de votre requête tombe dans la fenêtre du bloc chargé — consultez le `meta.json` du bloc dans la Console RustFS pour `minTime` et `maxTime`. -## Next steps +## Étapes suivantes -- Review [S3 compatibility notes](/administration/protocols/s3) before adopting additional Thanos components. -- Create dedicated production credentials with [Access Key Management](/security-compliance/iam/access-token). -- Follow the [Thanos documentation](https://thanos.io/tip/thanos/getting-started.md) to add Compactor, Ruler, or Receive for a production topology. +- Consultez les [notes de compatibilité S3](/fr/administration/protocols/s3) avant d’adopter d’autres composants Thanos. +- Créez des identifiants de production dédiés avec la [gestion des clés d’accès](/fr/security-compliance/iam/access-token). +- Suivez la [documentation Thanos](https://thanos.io/tip/thanos/getting-started.md) pour ajouter Compactor, Ruler ou Receive dans une topologie de production. diff --git a/content/fr/developer/integration/observability/victoriametrics.md b/content/fr/developer/integration/observability/victoriametrics.md index efc799d9a..af7bb794d 100644 --- a/content/fr/developer/integration/observability/victoriametrics.md +++ b/content/fr/developer/integration/observability/victoriametrics.md @@ -1,13 +1,13 @@ --- title: "VictoriaMetrics" -description: "Back up VictoriaMetrics snapshots to RustFS with vmbackup." +description: "Sauvegardez les instantanés VictoriaMetrics vers RustFS avec vmbackup." --- -This guide connects [VictoriaMetrics](https://github.com/VictoriaMetrics/VictoriaMetrics) — the Prometheus-compatible time-series database — to **RustFS** through `vmbackup` and `vmrestore`. You will run a single-node instance, import metrics, create an instant snapshot, back it up to a RustFS bucket, and restore the data into a fresh directory. The workflow was verified with `victoria-metrics`, `vmbackup`, and `vmrestore` v1.x images against `rustfs/rustfs-x86-musl:v2.3.1`. +Ce guide connecte [VictoriaMetrics](https://github.com/VictoriaMetrics/VictoriaMetrics) — la base de données de séries temporelles compatible avec Prometheus — à **RustFS** via `vmbackup` et `vmrestore`. Vous allez exécuter une instance à nœud unique, importer des métriques, créer un instantané immédiat, le sauvegarder vers un compartiment (bucket) RustFS, puis restaurer les données dans un répertoire neuf. Le flux a été validé avec les images `victoria-metrics`, `vmbackup` et `vmrestore` v1.x face à `rustfs/rustfs-x86-musl:v2.3.1`. -You need Docker. This deployment is intended for local integration testing, not production. +Vous avez besoin de Docker. Ce déploiement est destiné aux tests d’intégration locaux, pas à la production. -## Architecture +## Schéma d’architecture ```mermaid flowchart LR @@ -17,11 +17,11 @@ flowchart LR RustFS -->|"restore"| Restore["vmrestore"] ``` -`vmbackup` uploads a consistent point-in-time snapshot of the storage directory to any S3-compatible endpoint. `vmrestore` reverses the process, producing a data directory a VictoriaMetrics instance can open directly. +`vmbackup` charge (upload) un instantané cohérent à un instant donné du répertoire de stockage vers n’importe quel point de terminaison compatible avec S3. `vmrestore` inverse le processus et produit un répertoire de données qu’une instance VictoriaMetrics peut ouvrir directement. -## 1. Run VictoriaMetrics +## 1. Exécuter VictoriaMetrics -Create the bucket and start a single-node instance: +Créez le compartiment et démarrez une instance à nœud unique : ```bash rc mb rustfs/vm-backups @@ -32,16 +32,16 @@ docker run -d --name vm --network oo-rustfs_default -p 8428:8428 \ -storageDataPath=/storage -retentionPeriod=100y ``` -## 2. Import metrics +## 2. Importer des métriques -Write a couple of samples through the Prometheus import API: +Écrivez quelques échantillons via l’API d’import Prometheus : ```bash echo "vm_demo_metric 123" | curl -s --data-binary @- http://localhost:8428/api/v1/import/prometheus echo "vm_demo_metric 456" | curl -s --data-binary @- http://localhost:8428/api/v1/import/prometheus ``` -The endpoint answers `204 No Content`. Confirm the data is queryable: +Le point de terminaison répond `204 No Content`. Confirmez que les données sont interrogeables : ```bash curl -s "http://localhost:8428/api/v1/export?match[]=vm_demo_metric" @@ -51,9 +51,9 @@ curl -s "http://localhost:8428/api/v1/export?match[]=vm_demo_metric" {"metric":{"__name__":"vm_demo_metric"},"values":[123,456],"timestamps":[1790680894604,1790680894619]} ``` -## 3. Create a snapshot +## 3. Créer un instantané -Ask VictoriaMetrics for a consistent snapshot: +Demandez à VictoriaMetrics un instantané cohérent : ```bash curl -s http://localhost:8428/snapshot/create @@ -63,9 +63,9 @@ curl -s http://localhost:8428/snapshot/create {"status":"ok","snapshot":"20260929112134-18D9C6C76704F913"} ``` -## 4. Back the snapshot up to RustFS +## 4. Sauvegarder l’instantané vers RustFS -Run `vmbackup` against the same storage volume, replacing the credential placeholders. The snapshot name comes from step 3: +Exécutez `vmbackup` sur le même volume de stockage, en remplaçant les valeurs d’identifiants indicatives. Le nom de l’instantané provient de l’étape 3 : ```bash docker run --rm --network oo-rustfs_default \ @@ -83,11 +83,11 @@ docker run --rm --network oo-rustfs_default \ backup ... to S3{bucket: "vm-backups", dir: "demo/"} is complete; uploaded 760 bytes ``` -`-customS3Endpoint` redirects the AWS SDK to RustFS; custom endpoints are addressed with path-style requests automatically. Set `AWS_EC2_METADATA_DISABLED=true` on hosts without an EC2 metadata service to skip credential lookup delays. +`-customS3Endpoint` redirige le SDK AWS vers RustFS ; les points de terminaison personnalisés sont adressés automatiquement par des requêtes en adressage de type chemin (path-style). Définissez `AWS_EC2_METADATA_DISABLED=true` sur les hôtes sans service de métadonnées EC2 afin d’éviter les délais de recherche d’identifiants. -## 5. Verify and restore +## 5. Vérifier et restaurer -List the bucket prefix: +Listez le préfixe du compartiment : ```bash rc ls rustfs/vm-backups/demo/ @@ -100,7 +100,7 @@ data/ metadata/ ``` -`backup_complete.ignore` marks a complete backup. Restore it into a fresh directory: +`backup_complete.ignore` marque une sauvegarde complète. Restaurez-la dans un répertoire neuf : ```bash docker run --rm --network oo-rustfs_default \ @@ -117,41 +117,41 @@ docker run --rm --network oo-rustfs_default \ restored 760 bytes from backup in 0.055 seconds ``` -The restored directory contains `data/`, `metadata/`, and a lock file — exactly what a VictoriaMetrics instance expects at `-storageDataPath`. +Le répertoire restauré contient `data/`, `metadata/` et un fichier de verrou — exactement ce qu’une instance VictoriaMetrics attend pour `-storageDataPath`. -![VictoriaMetrics backup stored in the RustFS Console](./images/rustfs-vm-backups.png) +![Sauvegarde VictoriaMetrics stockée dans la Console RustFS](./images/rustfs-vm-backups.png) -## 6. Stop or reset +## 6. Arrêter ou réinitialiser -To tear down the demo while keeping the bucket objects: +Pour arrêter la démonstration tout en conservant les objets du compartiment : ```bash docker rm -f vm docker volume rm vm-data ``` -To delete the stored backups: +Pour supprimer les sauvegardes stockées : ```bash rc rm rustfs/vm-backups/ --recursive --force ``` -## Troubleshooting +## Dépannage -### `vmbackup` hangs at startup or fails to find credentials +### `vmbackup` reste bloqué au démarrage ou ne trouve pas les identifiants -The AWS SDK probes the EC2 metadata service when environment credentials are absent. On machines without IMDS, export `AWS_EC2_METADATA_DISABLED=true` next to the key variables. +Le SDK AWS interroge le service de métadonnées EC2 lorsque les identifiants d’environnement sont absents. Sur les machines sans IMDS, exportez `AWS_EC2_METADATA_DISABLED=true` à côté des variables de clé. -### Backup parts re-upload on every run +### Les parties de la sauvegarde sont de nouveau chargées à chaque exécution -`vmbackup` performs incremental backups by comparing local and remote file hashes. Restoring to a fresh directory and running `vmbackup` from there re-uploads everything; keep the original data directory for incremental runs. +`vmbackup` effectue des sauvegardes incrémentales en comparant les hachages des fichiers locaux et distants. Restaurer vers un répertoire neuf, puis exécuter `vmbackup` depuis celui-ci, charge de nouveau l’ensemble des fichiers ; conservez le répertoire de données d’origine pour les exécutions incrémentales. -### Query returns nothing right after import +### La requête ne renvoie rien juste après l’import -Imports are accepted asynchronously and the instant query endpoint can lag on a busy single node. Verify with `/api/v1/export` (or wait a few seconds) before creating the snapshot. +Les imports sont acceptés de façon asynchrone et le point de terminaison de requête instantanée peut prendre du retard sur un nœud unique chargé. Vérifiez avec `/api/v1/export` (ou attendez quelques secondes) avant de créer l’instantané. -## Next steps +## Étapes suivantes -- Review [S3 compatibility notes](/administration/protocols/s3) before adopting additional VictoriaMetrics components. -- Create dedicated production credentials with [Access Key Management](/security-compliance/iam/access-token). -- Follow the [vmbackup documentation](https://docs.victoriametrics.com/vmbackup/) to schedule backups and prune old snapshots. +- Consultez les [notes de compatibilité S3](/fr/administration/protocols/s3) avant d’adopter d’autres composants VictoriaMetrics. +- Créez des identifiants de production dédiés avec la [gestion des clés d’accès](/fr/security-compliance/iam/access-token). +- Suivez la [documentation vmbackup](https://docs.victoriametrics.com/vmbackup/) pour planifier les sauvegardes et purger les anciens instantanés. diff --git a/content/fr/developer/integration/others/capo.md b/content/fr/developer/integration/others/capo.md index 9470978b3..7444cba82 100644 --- a/content/fr/developer/integration/others/capo.md +++ b/content/fr/developer/integration/others/capo.md @@ -68,7 +68,7 @@ print(url) ## Client asynchrone -Le client asynchrone accepte les mêmes arguments et propose les mêmes opérations. Utilisez `await` pour chaque appel ainsi que des gestionnaires de contexte asynchrones pour le client et pour les réponses en flux : +Le client asynchrone accepte les mêmes arguments et propose les mêmes opérations. Utilisez await pour chaque appel ainsi que des gestionnaires de contexte asynchrones pour le client et pour les réponses en flux : ```python import asyncio diff --git a/content/fr/developer/integration/others/juicefs.md b/content/fr/developer/integration/others/juicefs.md index 428b08cec..ee0b61114 100644 --- a/content/fr/developer/integration/others/juicefs.md +++ b/content/fr/developer/integration/others/juicefs.md @@ -1,13 +1,13 @@ --- title: "JuiceFS" -description: "Build a POSIX filesystem on RustFS with JuiceFS S3 object storage." +description: "Construisez un système de fichiers POSIX sur RustFS avec le stockage objet S3 de JuiceFS." --- -This guide connects [JuiceFS](https://github.com/juicedata/juicefs) — the cloud-native distributed POSIX filesystem — to **RustFS** as its object storage backend. You will format a volume whose data chunks live in a RustFS bucket, mount it locally, and read and write files through the mount. The workflow was verified with `juicefs v1.3.1` (community edition, SQLite metadata engine) against `rustfs/rustfs-x86-musl:v2.3.1`. +Ce guide connecte [JuiceFS](https://github.com/juicedata/juicefs) — le système de fichiers POSIX distribué cloud native — à **RustFS** comme backend de stockage objet. Vous allez formater un volume dont les chunks de données résident dans un compartiment (bucket) RustFS, le monter localement, puis lire et écrire des fichiers via le point de montage. Le flux a été validé avec `juicefs v1.3.1` (édition communautaire, moteur de métadonnées SQLite) et `rustfs/rustfs-x86-musl:v2.3.1`. -You need the JuiceFS binary, a metadata engine, and FUSE (`fuse3` on Linux). This deployment is intended for local integration testing, not production. +Vous avez besoin du binaire JuiceFS, d’un moteur de métadonnées et de FUSE (`fuse3` sous Linux). Ce déploiement est destiné aux tests d’intégration locaux, pas à la production. -## Architecture +## Schéma d’architecture ```mermaid flowchart LR @@ -16,11 +16,11 @@ flowchart LR JuiceFS -->|"data chunks"| RustFS["RustFS :9000"] ``` -JuiceFS splits every file into chunks and stores them as objects under `chunks/` in the bucket, while the metadata engine tracks names, inodes, and layout. The filesystem behaves like a local disk but holds no data locally. +JuiceFS découpe chaque fichier en chunks et les stocke comme objets sous `chunks/` dans le compartiment, tandis que le moteur de métadonnées suit les noms, les inodes et la disposition. Le système de fichiers se comporte comme un disque local, mais ne conserve aucune donnée localement. -## 1. Format the volume +## 1. Formater le volume -Create the bucket and format a JuiceFS volume backed by RustFS, replacing all connection placeholders. The bucket URL carries the endpoint, which selects path-style addressing: +Créez le compartiment et formatez un volume JuiceFS adossé à RustFS, en remplaçant toutes les valeurs indicatives de connexion. L’URL du compartiment porte le point de terminaison, ce qui sélectionne l’adressage de type chemin (path-style) : ```bash rc mb rustfs/jfs-demo @@ -39,11 +39,11 @@ Data use s3://:9000/jfs-demo/rustfs-jfs/ OK, rustfs-jfs is ready ``` -`sqlite3:///opt/juicefs/jfs.db` is the metadata engine for this test. In production, use Redis, MySQL, or PostgreSQL instead so multiple clients can mount the same volume. +`sqlite3:///opt/juicefs/jfs.db` est le moteur de métadonnées de ce test. En production, utilisez plutôt Redis, MySQL ou PostgreSQL, afin que plusieurs clients puissent monter le même volume. -## 2. Mount the volume +## 2. Monter le volume -Mount the filesystem with the same metadata URL: +Montez le système de fichiers avec la même URL de métadonnées : ```bash mkdir -p /mnt/jfs @@ -54,11 +54,11 @@ juicefs mount -d sqlite3:///opt/juicefs/jfs.db /mnt/jfs OK, rustfs-jfs is ready at /mnt/jfs ``` -The `-d` flag runs the mount in the background. The volume is now a POSIX filesystem. +L’option `-d` exécute le montage en arrière-plan. Le volume est désormais un système de fichiers POSIX. -## 3. Read and write files +## 3. Lire et écrire des fichiers -Use the mount like any other directory: +Utilisez le point de montage comme n’importe quel autre répertoire : ```bash echo "hello rustfs jfs" > /mnt/jfs/hello.txt @@ -71,7 +71,7 @@ cat /mnt/jfs/hello.txt hello rustfs jfs ``` -Inspect the volume with `juicefs info`: +Inspectez le volume avec `juicefs info` : ```text /mnt/jfs : @@ -81,15 +81,15 @@ Inspect the volume with `juicefs info`: length: 3.00 MiB ``` -## 4. Verify chunks in RustFS +## 4. Vérifier les chunks dans RustFS -List the bucket prefixes: +Listez les préfixes du compartiment : ```bash rc ls rustfs/jfs-demo/ -r ``` -Every file was split into content-addressed chunk objects: +Chaque fichier a été découpé en objets chunk adressés par leur contenu : ```text rustfs-jfs/chunks/0/0/1_0_17 @@ -97,13 +97,13 @@ rustfs-jfs/chunks/0/0/3_0_3145728 rustfs-jfs/chunks/0/0/4_0_7 ``` -The chunk name encodes the inode, chunk index, and size — for example `3_0_3145728` is the 3 MiB file written in step 3. +Le nom du chunk encode l’inode, l’index du chunk et la taille — par exemple, `3_0_3145728` est le fichier de 3 MiB écrit à l’étape 3. -![JuiceFS data chunks stored in the RustFS Console](./images/rustfs-juicefs-chunks.png) +![Chunks de données JuiceFS stockés dans la Console RustFS](./images/rustfs-juicefs-chunks.png) -## 5. Stop or reset +## 5. Arrêter ou réinitialiser -Unmount the volume, then optionally wipe the volume metadata and bucket data: +Démontez le volume, puis effacez si besoin les métadonnées du volume et les données du compartiment : ```bash juicefs umount /mnt/jfs @@ -111,22 +111,22 @@ juicefs destroy --force sqlite3:///opt/juicefs/jfs.db rustfs-jfs rc rm rustfs/jfs-demo/ --recursive --force ``` -## Troubleshooting +## Dépannage ### `unknown option: --daemon` -The background flag is a single dash: `juicefs mount -d`. Running without it keeps the mount in the foreground (useful for debugging). +L’option d’arrière-plan prend un seul tiret : `juicefs mount -d`. Sans elle, le montage reste au premier plan (utile pour le débogage). ### `fusermount3: mount failed: Permission denied` -Mounting requires the FUSE device. Inside a container, add `--device /dev/fuse --cap-add SYS_ADMIN` (or `--privileged`); on a host, install `fuse3` and confirm `/dev/fuse` exists. +Le montage exige le périphérique FUSE. Dans un conteneur, ajoutez `--device /dev/fuse --cap-add SYS_ADMIN` (ou `--privileged`) ; sur un hôte, installez `fuse3` et vérifiez que `/dev/fuse` existe. -### Mount hangs or fails to reach storage +### Le montage reste bloqué ou n’atteint pas le stockage -The client must reach both the metadata engine and the bucket endpoint. Because the bucket URL embeds the endpoint, verify it from the mounting host with `curl` before formatting. +Le client doit joindre à la fois le moteur de métadonnées et le point de terminaison du compartiment. Comme l’URL du compartiment contient le point de terminaison, vérifiez-la depuis l’hôte de montage avec `curl` avant le formatage. -## Next steps +## Étapes suivantes -- Review [S3 compatibility notes](/administration/protocols/s3) before adopting additional JuiceFS storage backends. -- Create dedicated production credentials with [Access Key Management](/security-compliance/iam/access-token). -- Follow the [JuiceFS documentation](https://juicefs.com/docs/community/quick_start_guide/) to switch the metadata engine to Redis and mount the volume from multiple clients. +- Consultez les [notes de compatibilité S3](/fr/administration/protocols/s3) avant d’adopter d’autres backends de stockage JuiceFS. +- Créez des identifiants de production dédiés avec la [gestion des clés d’accès](/fr/security-compliance/iam/access-token). +- Suivez la [documentation JuiceFS](https://juicefs.com/docs/community/quick_start_guide/) pour passer le moteur de métadonnées à Redis et monter le volume depuis plusieurs clients. diff --git a/content/fr/developer/integration/others/nextcloud.md b/content/fr/developer/integration/others/nextcloud.md index f506d75ca..9f22b7e4b 100644 --- a/content/fr/developer/integration/others/nextcloud.md +++ b/content/fr/developer/integration/others/nextcloud.md @@ -1,13 +1,13 @@ --- title: "Nextcloud" -description: "Use RustFS as S3 external storage for Nextcloud files." +description: "Utilisez RustFS comme stockage externe S3 pour les fichiers Nextcloud." --- -This guide connects [Nextcloud](https://github.com/nextcloud/server) — the self-hosted content collaboration platform — to **RustFS** through its External Storage app with the S3 backend. You will enable `files_external`, mount a RustFS bucket into every user's files view, and upload a file through WebDAV that lands directly in the bucket. The workflow was verified with `nextcloud:32.0.15` (SQLite, single container) against `rustfs/rustfs-x86-musl:v2.3.1`. +Ce guide connecte [Nextcloud](https://github.com/nextcloud/server) — la plateforme auto-hébergée de collaboration sur le contenu — à **RustFS** via son application External Storage et le backend S3. Vous allez activer `files_external`, monter un compartiment (bucket) RustFS dans la vue des fichiers de chaque utilisateur, puis charger (upload) un fichier via WebDAV qui arrive directement dans le compartiment. Le flux a été validé avec `nextcloud:32.0.15` (SQLite, conteneur unique) et `rustfs/rustfs-x86-musl:v2.3.1`. -You need Docker, or an existing Nextcloud instance with `occ` access. This deployment is intended for local integration testing, not production. +Vous avez besoin de Docker, ou d’une instance Nextcloud existante avec un accès à `occ`. Ce déploiement est destiné aux tests d’intégration locaux, pas à la production. -## Architecture +## Schéma d’architecture ```mermaid flowchart LR @@ -15,11 +15,11 @@ flowchart LR Nextcloud -->|"files_external (S3)"| RustFS["RustFS :9000"] ``` -Nextcloud proxies file operations on the mount point to the S3 backend. Objects are stored under their mount-relative paths, so the bucket mirrors the names users see. +Nextcloud relaie les opérations sur les fichiers du point de montage vers le backend S3. Les objets sont stockés sous leurs chemins relatifs au montage, de sorte que le compartiment reflète les noms vus par les utilisateurs. -## 1. Install Nextcloud +## 1. Installer Nextcloud -Run Nextcloud with an admin account, replacing all connection placeholders. SQLite keeps the test self-contained; use MariaDB or PostgreSQL in production: +Exécutez Nextcloud avec un compte administrateur, en remplaçant toutes les valeurs indicatives de connexion. SQLite rend le test autonome ; en production, utilisez MariaDB ou PostgreSQL : ```bash docker run -d --name nextcloud --network oo-rustfs_default -p 8080:80 \ @@ -28,16 +28,16 @@ docker run -d --name nextcloud --network oo-rustfs_default -p 8080:80 \ nextcloud:32.0.15 ``` -If the web UI still shows the installer after startup, finish it manually: +Si l’interface web affiche encore l’installateur après le démarrage, terminez l’installation manuellement : ```bash docker exec -u www-data nextcloud php occ maintenance:install \ --admin-user --admin-password ``` -## 2. Enable the External Storage app +## 2. Activer l’application External Storage -The `files_external` app ships with Nextcloud but starts disabled, and its `occ` commands only exist once the app is enabled: +L’application `files_external` est livrée avec Nextcloud, mais elle démarre désactivée, et ses commandes `occ` n’existent qu’une fois l’application activée : ```bash docker exec -u www-data nextcloud php occ app:enable files_external @@ -47,9 +47,9 @@ docker exec -u www-data nextcloud php occ app:enable files_external files_external 1.24.1 enabled ``` -## 3. Mount the RustFS bucket +## 3. Monter le compartiment RustFS -Create an external storage of backend type `amazons3` with the `amazons3::accesskey` authentication backend. Replace all connection placeholders: +Créez un stockage externe de type de backend `amazons3`, avec le backend d’authentification `amazons3::accesskey`. Remplacez toutes les valeurs indicatives de connexion : ```bash docker exec -u www-data nextcloud php occ files_external:create \ @@ -68,7 +68,7 @@ docker exec -u www-data nextcloud php occ files_external:create \ Storage created with id 1 ``` -The mount point `/rustfs` appears in the files view of the given user. `use_path_style=true` is required for a non-AWS endpoint. Check the connection before using it: +Le point de montage `/rustfs` apparaît dans la vue des fichiers de l’utilisateur indiqué. `use_path_style=true` est obligatoire pour un point de terminaison autre qu’AWS. Vérifiez la connexion avant de l’utiliser : ```bash docker exec -u www-data nextcloud php occ files_external:verify 1 @@ -79,9 +79,9 @@ docker exec -u www-data nextcloud php occ files_external:verify 1 - code: 0 ``` -## 4. Upload a file and verify +## 4. Charger un fichier et vérifier -Upload through the WebDAV endpoint, which writes through the external storage: +Chargez le fichier via le point de terminaison WebDAV, qui écrit à travers le stockage externe : ```bash echo "nextcloud writes to rustfs" > /tmp/nc-demo.txt @@ -96,7 +96,7 @@ curl -u : \ 201 ``` -Read it back through the same path, then confirm the object in RustFS: +Relisez-le par le même chemin, puis confirmez l’objet dans RustFS : ```bash rc ls rustfs// -r @@ -106,40 +106,40 @@ rc ls rustfs// -r [2026-09-29 13:42:48] 27 B nc-demo.txt ``` -The object key equals the path inside the mount, so files uploaded through Nextcloud can also be read directly with any S3 client. +La clé d’objet correspond au chemin à l’intérieur du montage, de sorte que les fichiers chargés via Nextcloud peuvent aussi être lus directement avec n’importe quel client S3. -![Nextcloud file stored in the RustFS Console](./images/rustfs-nextcloud-file.png) +![Fichier Nextcloud stocké dans la Console RustFS](./images/rustfs-nextcloud-file.png) -## 5. Stop or reset +## 5. Arrêter ou réinitialiser -To remove the mount without touching the bucket: +Pour supprimer le montage sans toucher au compartiment : ```bash docker exec -u www-data nextcloud php occ files_external:delete 1 ``` -To delete the bucket contents: +Pour supprimer le contenu du compartiment : ```bash rc rm rustfs// --recursive --force ``` -## Troubleshooting +## Dépannage ### `There are no commands defined in the "files_external" namespace` -The app is not enabled yet. Run `occ app:enable files_external` first; the `occ files_external:*` commands only register afterwards. +L’application n’est pas encore activée. Exécutez d’abord `occ app:enable files_external` ; les commandes `occ files_external:*` ne s’enregistrent qu’ensuite. ### `Not enough arguments (missing: "authentication_backend")` -`files_external:create` takes the storage backend and the authentication backend as two separate arguments: `amazons3 amazons3::accesskey`. The backend identifiers are listed by `occ files_external:backends`. +`files_external:create` prend le backend de stockage et le backend d’authentification comme deux arguments distincts : `amazons3 amazons3::accesskey`. Les identifiants de backend sont listés par `occ files_external:backends`. -### Mount shows but is empty, or uploads fail +### Le montage s’affiche, mais reste vide, ou les chargements échouent -Confirm `hostname` is reachable from the Nextcloud container (use the container network name, not `localhost`), `use_path_style` is `true`, and the bucket exists. `occ files_external:verify ` reports the exact connection error. +Vérifiez que `hostname` est joignable depuis le conteneur Nextcloud (utilisez le nom sur le réseau de conteneurs, et non `localhost`), que `use_path_style` vaut `true` et que le compartiment existe. `occ files_external:verify ` indique l’erreur de connexion exacte. -## Next steps +## Étapes suivantes -- Review [S3 compatibility notes](/administration/protocols/s3) before adopting additional external storage backends. -- Create dedicated production credentials with [Access Key Management](/security-compliance/iam/access-token). -- Follow the [Nextcloud external storage documentation](https://docs.nextcloud.com/server/latest/admin_manual/configuration_files/external_storage_configuration_gui.html) to share the mount with groups and enable versioning. +- Consultez les [notes de compatibilité S3](/fr/administration/protocols/s3) avant d’adopter d’autres backends de stockage externe. +- Créez des identifiants de production dédiés avec la [gestion des clés d’accès](/fr/security-compliance/iam/access-token). +- Suivez la [documentation du stockage externe Nextcloud](https://docs.nextcloud.com/server/latest/admin_manual/configuration_files/external_storage_configuration_gui.html) pour partager le montage avec des groupes et activer la gestion des versions. diff --git a/content/fr/developer/integration/others/rclone.md b/content/fr/developer/integration/others/rclone.md index 34f9fe4aa..81187ae06 100644 --- a/content/fr/developer/integration/others/rclone.md +++ b/content/fr/developer/integration/others/rclone.md @@ -1,13 +1,13 @@ --- title: "rclone" -description: "Sync, mount, and serve RustFS buckets with rclone over its S3-compatible API." +description: "Synchronisez, montez et servez les compartiments (bucket) RustFS avec rclone, via son API compatible avec S3." --- -This guide connects [rclone](https://github.com/rclone/rclone) — the command-line tool for syncing files to and from cloud storage — to **RustFS** through its S3 backend. You will configure an S3 remote for RustFS, copy and sync files, read objects back, publish a bucket over HTTP with `rclone serve`, and mount the bucket as a local filesystem with `rclone mount`. The workflow was verified with `rclone v1.75.1` against `rustfs/rustfs-x86-musl:v2.3.1`. +Ce guide connecte [rclone](https://github.com/rclone/rclone) — l’outil en ligne de commande qui synchronise des fichiers vers et depuis le stockage cloud — à **RustFS** via son backend S3. Vous allez configurer un remote S3 pour RustFS, copier et synchroniser des fichiers, relire des objets, publier un compartiment en HTTP avec `rclone serve`, puis monter le compartiment comme système de fichiers local avec `rclone mount`. Le flux a été validé avec `rclone v1.75.1` et `rustfs/rustfs-x86-musl:v2.3.1`. -You need Docker, or a local rclone binary. This deployment is intended for local integration testing, not production. +Vous avez besoin de Docker, ou d’un binaire rclone local. Ce déploiement est destiné aux tests d’intégration locaux, pas à la production. -## Architecture +## Schéma d’architecture ```mermaid flowchart LR @@ -16,11 +16,11 @@ flowchart LR RustFS -->|"mount / serve"| Client["FUSE mount / HTTP clients"] ``` -One remote definition drives every rclone command: data transfer, mounting, and serving all use the same S3 connection. +Une seule définition de remote pilote toutes les commandes rclone : le transfert de données, le montage et le service utilisent la même connexion S3. -## 1. Configure the remote +## 1. Configurer le remote -Create an rclone config file with an S3 remote for RustFS, replacing all connection placeholders. The `Other` provider disables AWS-specific behavior, and path-style addressing is used automatically for custom endpoints: +Créez un fichier de configuration rclone avec un remote S3 pour RustFS, en remplaçant toutes les valeurs indicatives de connexion. Le fournisseur `Other` désactive les comportements propres à AWS, et l’adressage de type chemin (path-style) est utilisé automatiquement pour les points de terminaison personnalisés : ```ini title="rclone.conf" [rustfs] @@ -32,16 +32,16 @@ endpoint = http://:9000 region = us-east-1 ``` -## 2. Copy and read objects +## 2. Copier et lire des objets -Create the bucket and upload a directory with `rclone copy`: +Créez le compartiment et chargez (upload) un répertoire avec `rclone copy` : ```bash rc mb rustfs/rclone-demo rclone copy /data rustfs:rclone-demo/seed ``` -List and read back: +Listez, puis relisez : ```bash rclone ls rustfs:rclone-demo/seed @@ -54,11 +54,11 @@ rclone cat rustfs:rclone-demo/seed/hello.txt hello from rclone ``` -`rclone lsd rustfs:` lists every bucket on the endpoint. +`rclone lsd rustfs:` liste tous les compartiments du point de terminaison. -## 3. Sync a directory +## 3. Synchroniser un répertoire -`rclone sync` makes the destination identical to the source, including deletions. Remove a local file and sync: +`rclone sync` rend la destination identique à la source, y compris les suppressions. Supprimez un fichier local, puis synchronisez : ```bash rm /data/hello.txt @@ -70,17 +70,17 @@ rclone lsf rustfs:rclone-demo/seed blob.bin ``` -`hello.txt` disappears from the bucket. Add `--dry-run` first to preview the changes without touching the bucket. +`hello.txt` disparaît du compartiment. Ajoutez d’abord `--dry-run` pour prévisualiser les modifications sans toucher au compartiment. -## 4. Serve a bucket over HTTP +## 4. Servir un compartiment en HTTP -Publish the bucket contents as an HTTP file server: +Publiez le contenu du compartiment comme serveur de fichiers HTTP : ```bash rclone serve http --addr 0.0.0.0:8080 rustfs:rclone-demo/seed ``` -Any HTTP client can now download objects: +N’importe quel client HTTP peut alors télécharger les objets : ```bash curl -s http://localhost:8080/blob.bin -o /dev/null -w "%{http_code} %{size_download} bytes\n" @@ -90,11 +90,11 @@ curl -s http://localhost:8080/blob.bin -o /dev/null -w "%{http_code} %{size_down 200 3145728 bytes ``` -`rclone serve` also supports WebDAV, SFTP, and S3 endpoints over the same remote. +`rclone serve` prend aussi en charge les points de terminaison WebDAV, SFTP et S3 sur le même remote. -## 5. Mount the bucket as a filesystem +## 5. Monter le compartiment comme système de fichiers -With FUSE available, mount the bucket locally and use it like a directory: +Lorsque FUSE est disponible, montez le compartiment localement et utilisez-le comme un répertoire : ```bash rclone mount rustfs:rclone-demo /mnt/rclone --daemon @@ -103,7 +103,7 @@ echo test > /mnt/rclone/write-test.txt cat /mnt/rclone/write-test.txt ``` -Files written through the mount appear in RustFS as regular objects: +Les fichiers écrits à travers le montage apparaissent dans RustFS comme des objets ordinaires : ```bash rc ls rustfs/rclone-demo/ -r @@ -113,32 +113,32 @@ rc ls rustfs/rclone-demo/ -r [2026-09-29 11:12:41] 5 B write-test.txt ``` -Unmount with `fusermount -u /mnt/rclone` when finished. +Démontez avec `fusermount -u /mnt/rclone` une fois l’opération terminée. -## 6. Stop or reset +## 6. Arrêter ou réinitialiser -rclone holds no server-side state. To delete the demo data: +rclone ne conserve aucun état côté serveur. Pour supprimer les données de la démonstration : ```bash rclone purge rustfs:rclone-demo ``` -## Troubleshooting +## Dépannage -### `Access Denied` or empty listings +### `Access Denied` ou listages vides -Confirm `endpoint` includes the scheme and that the key pair matches a RustFS access key. The `region` value is required by the S3 signer even though RustFS ignores it; keep `us-east-1`. +Vérifiez que `endpoint` inclut le schéma et que la paire de clés correspond à une clé d’accès RustFS. La valeur `region` est exigée par le signataire S3, même si RustFS l’ignore ; conservez `us-east-1`. -### Mount fails with `fusermount3: mount failed: Permission denied` +### Le montage échoue avec `fusermount3: mount failed: Permission denied` -Mounting needs the FUSE device and elevated privileges. Inside a container, run with `--device /dev/fuse --cap-add SYS_ADMIN` — and use `--privileged` if the mount helper still fails. On a host, verify that `fuse3` is installed and `/dev/fuse` exists. +Le montage exige le périphérique FUSE et des privilèges élevés. Dans un conteneur, exécutez avec `--device /dev/fuse --cap-add SYS_ADMIN` — et utilisez `--privileged` si l’assistant de montage échoue encore. Sur un hôte, vérifiez que `fuse3` est installé et que `/dev/fuse` existe. -### Sync deleted nothing on the destination +### La synchronisation n’a rien supprimé sur la destination -`rclone copy` never deletes. Only `rclone sync` (or `rclone delete`) removes destination objects, and `--dry-run` is the safe way to preview either. +`rclone copy` ne supprime jamais rien. Seuls `rclone sync` (ou `rclone delete`) suppriment des objets sur la destination, et `--dry-run` est le moyen sûr de prévisualiser l’une ou l’autre commande. -## Next steps +## Étapes suivantes -- Review [S3 compatibility notes](/administration/protocols/s3) before adopting additional rclone backends. -- Create dedicated production credentials with [Access Key Management](/security-compliance/iam/access-token). -- Follow the [rclone S3 documentation](https://rclone.org/s3/) for flags such as `--transfers`, bandwidth limits, and crypt overlays. +- Consultez les [notes de compatibilité S3](/fr/administration/protocols/s3) avant d’adopter d’autres backends rclone. +- Créez des identifiants de production dédiés avec la [gestion des clés d’accès](/fr/security-compliance/iam/access-token). +- Suivez la [documentation S3 de rclone](https://rclone.org/s3/) pour les options telles que `--transfers`, les limites de bande passante et les surcouches crypt. diff --git a/content/fr/developer/integration/others/tusd.md b/content/fr/developer/integration/others/tusd.md index 99f3c5884..bfa413de2 100644 --- a/content/fr/developer/integration/others/tusd.md +++ b/content/fr/developer/integration/others/tusd.md @@ -1,13 +1,13 @@ --- title: "tusd" -description: "Receive resumable uploads into RustFS with the tusd server's S3 backend." +description: "Recevez des chargements reprisables dans RustFS avec le backend S3 du serveur tusd." --- -This guide connects [tusd](https://github.com/tus/tusd) — the official reference implementation of the tus resumable-upload protocol — to **RustFS** as its S3 storage backend. You will run tusd against a RustFS bucket, create an upload with the tus protocol, send the file in two chunks with an interruption in between, resume from the reported offset, and verify the assembled object in the bucket. The workflow was verified with `tusproject/tusd:v2.10.1` against `rustfs/rustfs-x86-musl:v2.3.1`. +Ce guide connecte [tusd](https://github.com/tus/tusd) — l’implémentation de référence officielle du protocole de chargement reprisable tus — à **RustFS** comme backend de stockage S3. Vous allez exécuter tusd face à un compartiment (bucket) RustFS, créer un chargement (upload) avec le protocole tus, envoyer le fichier en deux fragments avec une interruption entre les deux, reprendre à partir de l’offset indiqué, puis vérifier l’objet assemblé dans le compartiment. Le flux a été validé avec `tusproject/tusd:v2.10.1` et `rustfs/rustfs-x86-musl:v2.3.1`. -You need Docker, or a local tusd binary. This deployment is intended for local integration testing, not production. +Vous avez besoin de Docker, ou d’un binaire tusd local. Ce déploiement est destiné aux tests d’intégration locaux, pas à la production. -## Architecture +## Schéma d’architecture ```mermaid flowchart LR @@ -15,11 +15,11 @@ flowchart LR tusd -->|"multipart upload"| RustFS["RustFS :9000"] ``` -tusd stores each in-progress upload as S3 multipart parts in the bucket. A client that loses its connection asks the server for the last committed offset with `HEAD` and continues from there — the data already received is never sent twice. +tusd stocke chaque chargement en cours sous forme de parties de chargement partitionné S3 dans le compartiment. Un client qui perd sa connexion demande au serveur le dernier offset confirmé avec `HEAD`, puis reprend à partir de là — les données déjà reçues ne sont jamais envoyées deux fois. -## 1. Run tusd +## 1. Exécuter tusd -Create the bucket and start tusd with the S3 backend, replacing all connection placeholders. The AWS region must be set even though RustFS ignores it: +Créez le compartiment et démarrez tusd avec le backend S3, en remplaçant toutes les valeurs indicatives de connexion. La région AWS doit être définie, même si RustFS l’ignore : ```bash rc mb rustfs/tus-uploads @@ -33,7 +33,7 @@ docker run -d --name tusd --network oo-rustfs_default -p 8080:8080 \ -s3-endpoint http://:9000 ``` -Check that the server is healthy: +Vérifiez que le serveur répond correctement : ```bash curl -s -o /dev/null -w "%{http_code}\n" http://localhost:8080/health @@ -43,9 +43,9 @@ curl -s -o /dev/null -w "%{http_code}\n" http://localhost:8080/health 200 ``` -## 2. Create the upload +## 2. Créer le chargement -Create a 6 MiB upload and read the `Location` header: +Créez un chargement de 6 MiB et lisez l’en-tête `Location` : ```bash curl -s -D - -o /dev/null -X POST http://localhost:8080/files/ \ @@ -57,11 +57,11 @@ curl -s -D - -o /dev/null -X POST http://localhost:8080/files/ \ Location: http://localhost:8080/files/b7338250daa9...+NGVmNDRhZjEt... ``` -The upload URL contains the file ID and a message-authentication tag. Strip the scheme and host before re-sending it (the server echoes whatever `Host` it received, which may not be reachable from your next client). +L’URL de chargement contient l’identifiant de fichier et une étiquette d’authentification de message. Supprimez le schéma et l’hôte avant de la renvoyer (le serveur renvoie tel quel l’en-tête `Host` qu’il a reçu, qui peut ne pas être joignable depuis le client suivant). -## 3. Upload in chunks with an interruption +## 3. Charger par fragments, avec une interruption -Send the first 2.5 MB, then stop — this is the point where a mobile client would lose its connection: +Envoyez les premiers 2,5 MB, puis arrêtez — c’est à ce moment qu’un client mobile perdrait sa connexion : ```bash head -c 2500000 demo.bin > part1.bin @@ -76,7 +76,7 @@ curl -s -o /dev/null -w "%{http_code}\n" -X PATCH "http://localhost:8080${LOC}" 204 ``` -Ask the server how much it actually has — this is the resumable-upload core: +Demandez au serveur la quantité réellement reçue — c’est le cœur du chargement reprisable : ```bash curl -s -X HEAD "http://localhost:8080${LOC}" \ @@ -87,9 +87,9 @@ curl -s -X HEAD "http://localhost:8080${LOC}" \ Upload-Offset: 2500000 ``` -## 4. Resume and finish +## 4. Reprendre et terminer -Continue from offset 2500000 with the remaining bytes: +Reprenez à partir de l’offset 2500000 avec les octets restants : ```bash tail -c 3791456 demo.bin > part2.bin @@ -104,7 +104,7 @@ curl -s -o /dev/null -w "%{http_code}\n" -X PATCH "http://localhost:8080${LOC}" 204 ``` -Download the finished upload through tusd and compare checksums with the source: +Téléchargez le chargement terminé via tusd et comparez les sommes de contrôle avec la source : ```bash curl -s -o download.bin "http://localhost:8080${LOC}" @@ -116,55 +116,55 @@ d9016032ced6c7515b67a0c556e006c4b25a5858 demo.bin d9016032ced6c7515b67a0c556e006c4b25a5858 download.bin ``` -## 5. Verify objects in RustFS +## 5. Vérifier les objets dans RustFS -List the bucket: +Listez le compartiment : ```bash rc ls rustfs/tus-uploads/ -r ``` -The bucket holds the assembled object plus one `.info` metadata file per upload — both live and finished: +Le compartiment contient l’objet assemblé et un fichier de métadonnées `.info` par chargement — qu’il soit en cours ou terminé : ```text b7338250daa9a1a79c1343502b57b28f 6 MiB b7338250daa9a1a79c1343502b57b28f.info 378 B ``` -The object key is the upload ID, and the object body is the uploaded file byte-for-byte — so any S3 client can read completed uploads directly from the bucket. +La clé d’objet est l’identifiant de chargement, et le corps de l’objet est le fichier chargé octet pour octet. N’importe quel client S3 peut donc lire les chargements terminés directement depuis le compartiment. -![tus uploads stored in the RustFS Console](./images/rustfs-tus-uploads.png) +![Chargements tus stockés dans la Console RustFS](./images/rustfs-tus-uploads.png) -## 6. Stop or reset +## 6. Arrêter ou réinitialiser -To tear down the server while keeping the bucket objects: +Pour arrêter le serveur tout en conservant les objets du compartiment : ```bash docker rm -f tusd ``` -To delete the stored uploads: +Pour supprimer les chargements stockés : ```bash rc rm rustfs/tus-uploads/ --recursive --force ``` -## Troubleshooting +## Dépannage ### `CreateMultipartUpload ... A region must be set when sending requests to S3` -tusd builds its S3 client from the AWS environment, and the region is mandatory for endpoint resolution. Export `AWS_REGION=us-east-1` next to the credentials, as in step 1. +tusd construit son client S3 à partir de l’environnement AWS, et la région est obligatoire pour la résolution du point de terminaison. Exportez `AWS_REGION=us-east-1` à côté des identifiants, comme à l’étape 1. -### `PATCH` returns `404` or connects to the wrong host +### `PATCH` renvoie `404` ou se connecte au mauvais hôte -The `Location` URL echoes the `Host` header of the creation request. When your client and the server use different hostnames (container name versus published port), strip the scheme and host from the URL and send the path to the address the client can reach. +L’URL `Location` renvoie l’en-tête `Host` de la requête de création. Lorsque votre client et le serveur utilisent des noms d’hôte différents (nom du conteneur et port publié), supprimez le schéma et l’hôte de l’URL et envoyez le chemin vers l’adresse que le client peut joindre. -### Upload disappears after server restart +### Le chargement disparaît après un redémarrage du serveur -The S3 backend keeps `.info` files in the bucket, so uploads survive restarts. If you run tusd against an empty bucket that another process prunes, the metadata is lost — protect the `tus-uploads` prefix from cleanup jobs. +Le backend S3 conserve les fichiers `.info` dans le compartiment, les chargements survivent donc aux redémarrages. Si vous exécutez tusd sur un compartiment vide qu’un autre processus purge, les métadonnées sont perdues — protégez le préfixe `tus-uploads` des tâches de nettoyage. -## Next steps +## Étapes suivantes -- Review [S3 compatibility notes](/administration/protocols/s3) before adopting additional tusd backends. -- Create dedicated production credentials with [Access Key Management](/security-compliance/iam/access-token). -- Follow the [tus protocol documentation](https://tus.io/protocols/resumable-upload) for creation-with-upload, termination, and checksum extensions that tusd supports on top of the core protocol. +- Consultez les [notes de compatibilité S3](/fr/administration/protocols/s3) avant d’adopter d’autres backends tusd. +- Créez des identifiants de production dédiés avec la [gestion des clés d’accès](/fr/security-compliance/iam/access-token). +- Suivez la [documentation du protocole tus](https://tus.io/protocols/resumable-upload) pour la création avec chargement, la terminaison et les extensions de somme de contrôle que tusd prend en charge en plus du protocole de base. diff --git a/content/fr/developer/integration/registry/docker-registry.md b/content/fr/developer/integration/registry/docker-registry.md index ae84704a4..8e8752395 100644 --- a/content/fr/developer/integration/registry/docker-registry.md +++ b/content/fr/developer/integration/registry/docker-registry.md @@ -1,13 +1,13 @@ --- title: "Docker Registry" -description: "Store container images from Docker Registry in RustFS." +description: "Stockez dans RustFS les images de conteneurs issues de Docker Registry." --- -This guide connects the open-source [Docker Registry](https://github.com/distribution/distribution) (distribution) to **RustFS** as its S3 storage backend. You will run a registry that stores all layers and manifests in a RustFS bucket, then push and pull an image. The workflow was verified with `registry:2` against `rustfs/rustfs-x86-musl:v2.3.1`. +Ce guide connecte la [Docker Registry](https://github.com/distribution/distribution) open source (distribution) à **RustFS** comme backend de stockage S3. Vous allez exécuter un registre qui stocke toutes les couches et tous les manifestes dans un compartiment (bucket) RustFS, puis pousser une image et la tirer (pull). Le flux a été validé avec `registry:2` et `rustfs/rustfs-x86-musl:v2.3.1`. -You need Docker on the registry host. +Vous avez besoin de Docker sur l’hôte du registre. -## Architecture +## Schéma d’architecture ```mermaid flowchart LR @@ -15,11 +15,11 @@ flowchart LR Reg -->|"blobs + manifests"| RustFS["RustFS :9000"] ``` -The registry stores every blob (layers and configs) and manifest as objects under `docker/registry/v2/` in the bucket. The container itself is stateless, so registry nodes can be scaled horizontally against the same bucket. +Le registre stocke chaque blob (couches et configurations) et chaque manifeste comme objets sous `docker/registry/v2/` dans le compartiment. Le conteneur lui-même est sans état, de sorte que les nœuds du registre peuvent être mis à l’échelle horizontalement face au même compartiment. -## 1. Run the registry +## 1. Exécuter le registre -Configure the S3 driver entirely through environment variables. `REGISTRY_STORAGE_S3_REGIONENDPOINT` points the AWS SDK at RustFS: +Configurez entièrement le pilote S3 au moyen de variables d’environnement. `REGISTRY_STORAGE_S3_REGIONENDPOINT` oriente le SDK AWS vers RustFS : ```bash docker run -d --name registry --network oo-rustfs_default -p 5000:5000 \ @@ -32,7 +32,7 @@ docker run -d --name registry --network oo-rustfs_default -p 5000:5000 \ registry:2 ``` -Check that the v2 API is up: +Vérifiez que l’API v2 répond : ```bash curl -s -o /dev/null -w "%{http_code}\n" http://localhost:5000/v2/ @@ -42,9 +42,9 @@ curl -s -o /dev/null -w "%{http_code}\n" http://localhost:5000/v2/ 200 ``` -## 2. Push an image +## 2. Pousser une image -Tag any local image for the registry and push it: +Étiquetez n’importe quelle image locale pour le registre, puis poussez-la : ```bash docker pull alpine:3.20 @@ -56,7 +56,7 @@ docker push localhost:5000/rustfs-demo/alpine:3.20 3.20: digest: sha256:c64c687cbea9300178b30c95835354e34c4e4febc4badfe27102879de0483b5e ``` -## 3. Verify objects in RustFS +## 3. Vérifier les objets dans RustFS ```bash rc ls rustfs/registry-demo/docker/registry/v2/repositories/rustfs-demo/alpine/ -r | head -4 @@ -68,13 +68,13 @@ _repositories/rustfs-demo/alpine/_manifests/revisions/sha256/c64c687c.../link _repositories/rustfs-demo/alpine/_manifests/tags/3.20/current/link ``` -Every `_layers` link points at a blob object stored in the same bucket — the image data itself lives in RustFS, not on the registry host. +Chaque lien `_layers` pointe vers un objet blob stocké dans le même compartiment — les données de l’image elles-mêmes se trouvent dans RustFS, et non sur l’hôte du registre. -![Registry layers stored in the RustFS Console](./images/rustfs-registry-layers.png) +![Couches du registre stockées dans la Console RustFS](./images/rustfs-registry-layers.png) -## 4. Pull the image back +## 4. Tirer l’image -Remove the local copy and pull from the registry — the layers come back from RustFS: +Supprimez la copie locale et tirez l’image depuis le registre — les couches reviennent depuis RustFS : ```bash docker rmi localhost:5000/rustfs-demo/alpine:3.20 @@ -87,29 +87,29 @@ Digest: sha256:c64c687cbea9300178b30c95835354e34c4e4febc4badfe27102879de0483b5e Status: Downloaded newer image for localhost:5000/rustfs-demo/alpine:3.20 ``` -## 5. Stop or reset +## 5. Arrêter ou réinitialiser ```bash docker rm -f registry rc rm rustfs/registry-demo/ --recursive --force ``` -## Troubleshooting +## Dépannage -### Push fails with `unknown` or empty digest +### Le push échoue avec `unknown` ou un digest vide -Confirm `REGISTRY_STORAGE_S3_REGIONENDPOINT` is set — without it the registry sends requests to real AWS. Also check the bucket exists. +Vérifiez que `REGISTRY_STORAGE_S3_REGIONENDPOINT` est défini — sans cela, le registre envoie les requêtes vers le véritable AWS. Vérifiez aussi que le compartiment existe. -### `InvalidAccessKeyId` at push time +### `InvalidAccessKeyId` au moment du push -The access key and secret key must be passed with `REGISTRY_STORAGE_S3_ACCESSKEY` / `SECRETKEY`; the registry does not read the AWS credential environment chain in this driver. +La clé d’accès et la clé secrète doivent être transmises avec `REGISTRY_STORAGE_S3_ACCESSKEY` / `SECRETKEY` ; le registre ne lit pas la chaîne d’identifiants de l’environnement AWS dans ce pilote. -### Pull returns `manifest unknown` after the registry restarted +### La récupération renvoie `manifest unknown` après le redémarrage du registre -Manifests and blobs live in the bucket, so a restart cannot lose them — check that both registry instances point at the same `REGISTRY_STORAGE_S3_BUCKET` and `REGIONENDPOINT`. +Les manifestes et les blobs résident dans le compartiment, un redémarrage ne peut donc pas les perdre. Vérifiez que les deux instances du registre pointent vers le même `REGISTRY_STORAGE_S3_BUCKET` et le même `REGIONENDPOINT`. -## Next steps +## Étapes suivantes -- Compare with the [Harbor](/developer/integration/registry/harbor) guide when you need a UI, RBAC, or replication on top of the same bucket. -- Create dedicated production credentials with [Access Key Management](/security-compliance/iam/access-token). -- Follow the [distribution documentation](https://distribution.github.io/distribution/) for storage driver tuning and proxy-caching setups. +- Comparez avec le guide [Harbor](/fr/developer/integration/registry/harbor) lorsque vous avez besoin d’une interface, du RBAC ou de la réplication sur le même compartiment. +- Créez des identifiants de production dédiés avec la [gestion des clés d’accès](/fr/security-compliance/iam/access-token). +- Suivez la [documentation distribution](https://distribution.github.io/distribution/) pour le réglage du pilote de stockage et les configurations de cache proxy. diff --git a/content/fr/developer/integration/registry/harbor.md b/content/fr/developer/integration/registry/harbor.md index 1419d7bf9..50c8a1283 100644 --- a/content/fr/developer/integration/registry/harbor.md +++ b/content/fr/developer/integration/registry/harbor.md @@ -274,6 +274,6 @@ Le pilote écrit sous `docker/registry/v2/` dans le compartiment. Listez tout le ## Étapes suivantes -- Consultez les [notes de compatibilité S3](/administration/protocols/s3) avant d’adopter d’autres opérations S3. -- Créez des identifiants de production dédiés avec la [gestion des clés d’accès](/security-compliance/iam/access-token). +- Consultez les [notes de compatibilité S3](/fr/administration/protocols/s3) avant d’adopter d’autres opérations S3. +- Créez des identifiants de production dédiés avec la [gestion des clés d’accès](/fr/security-compliance/iam/access-token). - Suivez la [documentation Harbor](https://goharbor.io/docs/) pour configurer un déploiement Harbor complet avec réplication, scan de vulnérabilités et RBAC. diff --git a/content/fr/developer/integration/reverse-proxy/caddy.md b/content/fr/developer/integration/reverse-proxy/caddy.md index a49b24dae..f943fae94 100644 --- a/content/fr/developer/integration/reverse-proxy/caddy.md +++ b/content/fr/developer/integration/reverse-proxy/caddy.md @@ -1,35 +1,35 @@ --- title: "Caddy" -description: "Deploy RustFS behind Caddy with automatic HTTPS for separate S3 API and Console hostnames." +description: "Déployez RustFS derrière Caddy avec un HTTPS automatique pour des noms d’hôte distincts de l’API S3 et de la Console." --- -Use **Caddy** to obtain and renew TLS certificates automatically and route separate hostnames to the RustFS S3 API and Console. This deployment runs Caddy and a single-node RustFS instance with Docker Compose. You need Docker Engine, Docker Compose, a public server, and two DNS records that resolve to that server. +Utilisez **Caddy** pour obtenir et renouveler automatiquement les certificats TLS, et pour acheminer des noms d’hôte distincts vers l’API S3 et la Console de RustFS. Ce déploiement exécute Caddy et une instance RustFS à nœud unique avec Docker Compose. Vous avez besoin de Docker Engine, de Docker Compose, d’un serveur public et de deux enregistrements DNS qui pointent vers ce serveur. -This guide uses these example hostnames: +Ce guide utilise ces noms d’hôte d’exemple : -- `s3.example.com` for the S3 API -- `console.example.com` for the Console +- `s3.example.com` pour l’API S3 +- `console.example.com` pour la Console -Replace them with your public hostnames. Caddy's default ACME challenges require inbound access to ports `80` and `443`. +Remplacez-les par vos noms d’hôte publics. Les défis ACME par défaut de Caddy exigent un accès entrant sur les ports `80` et `443`. -:::warning[Serve S3 from the root path] +:::warning[Servir l’API S3 depuis le chemin racine] -Do not publish the S3 API under a path such as `/s3/`. AWS Signature Version 4 includes the request path and host, so rewriting either value can invalidate signed requests. +Ne publiez pas l’API S3 sous un chemin tel que `/s3/`. AWS Signature Version 4 inclut le chemin et l’hôte de la requête, de sorte que la réécriture de l’une ou l’autre de ces valeurs peut invalider les requêtes signées. ::: -## 1. Create the deployment directory +## 1. Créer le répertoire de déploiement -Create a directory for the deployment: +Créez un répertoire pour le déploiement : ```bash mkdir rustfs-caddy cd rustfs-caddy ``` -## 2. Set deployment variables +## 2. Définir les variables de déploiement -Create an environment file and replace each value: +Créez un fichier d’environnement et remplacez chaque valeur : ```ini title=".env" S3_HOSTNAME=s3.example.com @@ -39,11 +39,11 @@ RUSTFS_ACCESS_KEY= RUSTFS_SECRET_KEY= ``` -Use an email address that receives certificate notices. Do not commit `.env` to source control. +Utilisez une adresse e-mail qui reçoit les notifications de certificat. N’ajoutez pas le fichier `.env` au dépôt. -## 3. Configure Caddy +## 3. Configurer Caddy -Create a Caddyfile with one site block for each RustFS endpoint: +Créez un Caddyfile avec un bloc de site pour chaque point de terminaison RustFS : ```text title="Caddyfile" { @@ -73,11 +73,11 @@ Create a Caddyfile with one site block for each RustFS endpoint: } ``` -Caddy preserves the incoming `Host` header, HTTP method, and request URI by default. It also forwards client information through `X-Forwarded-*` headers and handles Console WebSocket upgrades without additional header rules. +Caddy conserve par défaut l’en-tête `Host` entrant, la méthode HTTP et l’URI de la requête. Il transmet aussi les informations du client au moyen des en-têtes `X-Forwarded-*` et gère les mises à niveau WebSocket de la Console sans règles d’en-tête supplémentaires. -## 4. Create the Compose file +## 4. Créer le fichier Compose -Create the Caddy and RustFS services: +Créez les services Caddy et RustFS : ```yaml title="compose.yaml" services: @@ -136,24 +136,24 @@ networks: rustfs: ``` -The persistent `caddy-data` volume stores certificates, private keys, and ACME account state. Back up this volume and do not share its contents. Only Caddy publishes host ports; RustFS remains reachable inside the Compose network. +Le volume persistant `caddy-data` stocke les certificats, les clés privées et l’état du compte ACME. Sauvegardez ce volume et n’en partagez pas le contenu. Seul Caddy publie des ports sur l’hôte ; RustFS reste accessible à l’intérieur du réseau Compose. -## 5. Validate and start the deployment +## 5. Valider et démarrer le déploiement -Render the Compose configuration and start RustFS: +Affichez la configuration Compose résolue et démarrez RustFS : ```bash docker compose config docker compose up -d rustfs ``` -Validate the Caddyfile with the same image used by the deployment: +Validez le Caddyfile avec la même image que celle utilisée par le déploiement : ```bash docker compose run --rm --no-deps caddy caddy validate --config /etc/caddy/Caddyfile ``` -Start Caddy and check both services: +Démarrez Caddy et vérifiez les deux services : ```bash docker compose up -d caddy @@ -161,22 +161,22 @@ docker compose ps docker compose logs --follow caddy ``` -Caddy obtains certificates in the background and redirects HTTP requests to HTTPS. If issuance fails, confirm that both DNS records resolve to this host, ports `80` and `443` are reachable, and the `caddy-data` volume is writable. +Caddy obtient les certificats en arrière-plan et redirige les requêtes HTTP vers HTTPS. Si l’émission échoue, vérifiez que les deux enregistrements DNS pointent vers cet hôte, que les ports `80` et `443` sont accessibles et que le volume `caddy-data` est accessible en écriture. -## 6. Verify both endpoints +## 6. Vérifier les deux points de terminaison -Verify the API and Console through their public HTTPS hostnames: +Vérifiez l’API et la Console au moyen de leurs noms d’hôte HTTPS publics : ```bash curl --fail https://s3.example.com/health/ready curl --fail https://console.example.com/rustfs/console/health ``` -Configure S3 clients with `https://s3.example.com` as the endpoint and enable path-style addressing. Open `https://console.example.com/rustfs/console/` to sign in to the Console. +Configurez les clients S3 avec `https://s3.example.com` comme point de terminaison et activez l’adressage de type chemin (path-style). Ouvrez `https://console.example.com/rustfs/console/` pour vous connecter à la Console. -## Multi-node upstreams +## Upstreams multi-nœuds -For a distributed RustFS deployment, list every node in the corresponding site block: +Pour un déploiement RustFS distribué, listez chaque nœud dans le bloc de site correspondant : ```text title="Caddyfile" {$S3_HOSTNAME} { @@ -200,10 +200,10 @@ For a distributed RustFS deployment, list every node in the corresponding site b } ``` -Replace `` with a random secret shared by all Caddy instances. Console affinity keeps an in-progress OpenID Connect login on the RustFS node that created its `state`. Keep port `9000` open directly between RustFS nodes because internal node RPC uses the same listener. +Remplacez `` par un secret aléatoire partagé par toutes les instances Caddy. L’affinité de la Console maintient une connexion OpenID Connect en cours sur le nœud RustFS qui a créé son `state`. Laissez le port `9000` ouvert directement entre les nœuds RustFS, car le RPC interne des nœuds utilise le même écouteur. -## Next steps +## Étapes suivantes -- [Configure an S3 client](/developer/examples/aws-cli) -- [Enable virtual-hosted-style bucket URLs](/integration/virtual) -- [Review health and readiness endpoints](/operations/status-check) \ No newline at end of file +- [Configurer un client S3](/fr/developer/examples/aws-cli) +- [Activer les URL de compartiment (bucket) en adressage de type hôte virtuel](/fr/integration/virtual) +- [Consulter les points de terminaison de contrôle d’intégrité et d’état de préparation](/fr/operations/status-check) \ No newline at end of file diff --git a/content/fr/developer/integration/reverse-proxy/envoy.md b/content/fr/developer/integration/reverse-proxy/envoy.md index dc635a48d..660d37bea 100644 --- a/content/fr/developer/integration/reverse-proxy/envoy.md +++ b/content/fr/developer/integration/reverse-proxy/envoy.md @@ -1,33 +1,33 @@ --- title: "Envoy" -description: "Deploy RustFS behind Envoy with TLS-terminated routes for the S3 API and Console." +description: "Déployez RustFS derrière Envoy avec des routes qui terminent le TLS pour l’API S3 et la Console." --- -Use **Envoy** to terminate TLS and route separate hostnames to the RustFS S3 API and Console. This deployment runs Envoy and a single-node RustFS instance on one Docker network. You need Docker Engine, two DNS records, and a TLS certificate that covers both hostnames (the guide uses a self-signed certificate for testing). +Utilisez **Envoy** pour terminer le TLS et acheminer des noms d’hôte distincts vers l’API S3 et la Console de RustFS. Ce déploiement exécute Envoy et une instance RustFS à nœud unique sur un même réseau Docker. Vous avez besoin de Docker Engine, de deux enregistrements DNS et d’un certificat TLS qui couvre les deux noms d’hôte (ce guide utilise un certificat auto-signé pour les tests). -This guide uses these example hostnames: +Ce guide utilise ces noms d’hôte d’exemple : -- `s3.example.com` for the S3 API -- `console.example.com` for the Console +- `s3.example.com` pour l’API S3 +- `console.example.com` pour la Console -Replace them with hostnames that resolve to the Docker host. +Remplacez-les par des noms d’hôte qui pointent vers l’hôte Docker. -:::warning[Serve S3 from the root path] +:::warning[Servir l’API S3 depuis le chemin racine] -Do not publish the S3 API under a path such as `/s3/`. AWS Signature Version 4 includes the request path and host, so rewriting either value can invalidate signed requests. Envoy forwards the incoming `Host` header unchanged, which keeps signatures valid. +Ne publiez pas l’API S3 sous un chemin tel que `/s3/`. AWS Signature Version 4 inclut le chemin et l’hôte de la requête, de sorte que la réécriture de l’une ou l’autre de ces valeurs peut invalider les requêtes signées. Envoy transmet l’en-tête `Host` entrant sans le modifier, ce qui conserve la validité des signatures. ::: -## 1. Create the deployment directories +## 1. Créer les répertoires de déploiement -Create directories for the Envoy configuration and TLS certificate: +Créez les répertoires de la configuration Envoy et du certificat TLS : ```bash mkdir -p rustfs-envoy/certs cd rustfs-envoy ``` -For local testing, generate a self-signed certificate covering both hostnames: +Pour les tests locaux, générez un certificat auto-signé qui couvre les deux noms d’hôte : ```bash openssl req -x509 -newkey rsa:2048 -nodes \ @@ -37,11 +37,11 @@ openssl req -x509 -newkey rsa:2048 -nodes \ chmod 644 certs/privkey.pem ``` -Make the certificate readable by the non-root user the Envoy image runs as — a `600` private key produces a misleading `Failed to load incomplete private key` error. +Rendez le certificat lisible par l’utilisateur non root sous lequel s’exécute l’image Envoy — une clé privée en `600` produit une erreur trompeuse `Failed to load incomplete private key`. -## 2. Configure Envoy +## 2. Configurer Envoy -Create the configuration with an HTTPS listener and two virtual hosts. Route timeouts are disabled (`timeout: 0s`) so long streaming S3 uploads are not cut off: +Créez la configuration avec un écouteur HTTPS et deux hôtes virtuels. Les délais d’expiration des routes sont désactivés (`timeout: 0s`) afin que les longs chargements S3 en flux ne soient pas interrompus : ```yaml title="envoy.yaml" static_resources: @@ -99,11 +99,11 @@ static_resources: - endpoint: {address: {socket_address: {address: rustfs, port_value: 9001}}} ``` -The `host:*` domain entries matter: clients send `Host: s3.example.com:8443` on non-standard ports, and Envoy matches the authority including the port. +Les entrées de domaine `host:*` sont importantes : sur les ports non standard, les clients envoient `Host: s3.example.com:8443`, et Envoy fait correspondre l’autorité en incluant le port. -## 3. Start Envoy +## 3. Démarrer Envoy -Run Envoy on the same Docker network as RustFS, publishing only the proxy port: +Exécutez Envoy sur le même réseau Docker que RustFS, en ne publiant que le port du proxy : ```bash docker run -d --name envoy --network oo-rustfs_default -p 8443:8443 \ @@ -112,9 +112,9 @@ docker run -d --name envoy --network oo-rustfs_default -p 8443:8443 \ envoyproxy/envoy:v1.34-latest -c /envoy.yaml ``` -## 4. Verify both endpoints +## 4. Vérifier les deux points de terminaison -Point the example hostnames at the proxy with `curl --resolve` (in production, DNS does this): +Faites pointer les noms d’hôte d’exemple vers le proxy avec `curl --resolve` (en production, le DNS s’en charge) : ```bash curl -sk --resolve s3.example.com:8443:127.0.0.1 \ @@ -129,11 +129,11 @@ s3 api: 200 console: 200 ``` -`-k` skips certificate validation because the certificate is self-signed; with a trusted certificate, drop it. +`-k` omet la validation du certificat, car le certificat est auto-signé ; avec un certificat de confiance, omettez cette option. -## 5. Send signed S3 requests through Envoy +## 5. Envoyer des requêtes S3 signées via Envoy -Point any S3 client at the proxy as if it were RustFS. Configure the client with `https://s3.example.com:8443` as the endpoint and path-style addressing; when the proxy certificate is trusted, signed AWS Signature Version 4 requests pass through unchanged. For a quick test over plain HTTP, add an HTTP listener on port 8080 with the same virtual-host routing as the HTTPS listener, then use the endpoint `http://s3.example.com:8080`: +Dirigez n’importe quel client S3 vers le proxy comme s’il s’agissait de RustFS. Configurez le client avec `https://s3.example.com:8443` comme point de terminaison et l’adressage de type chemin (path-style) ; lorsque le certificat du proxy est de confiance, les requêtes signées AWS Signature Version 4 passent sans modification. Pour un essai rapide en HTTP en clair, ajoutez un écouteur HTTP sur le port 8080 avec le même routage d’hôtes virtuels que l’écouteur HTTPS, puis utilisez le point de terminaison `http://s3.example.com:8080` : ```bash rc alias set rustfs-envoy http://s3.example.com:8080 @@ -145,11 +145,11 @@ rc ls rustfs-envoy/rclone-demo/ [2026-09-29 11:12:41] 5 B write-test.txt ``` -The signatures validate because Envoy forwards the original `Host` header to RustFS. +Les signatures sont validées, car Envoy transmet l’en-tête `Host` d’origine à RustFS. -## Multi-node backends +## Backends multi-nœuds -For a distributed RustFS deployment, add every node to the S3 cluster: +Pour un déploiement RustFS distribué, ajoutez chaque nœud au cluster S3 : ```yaml title="envoy.yaml" - name: rustfs_s3 @@ -169,24 +169,24 @@ For a distributed RustFS deployment, add every node to the S3 cluster: - endpoint: {address: {socket_address: {address: node4, port_value: 9000}}} ``` -The Console cluster follows the same pattern on port `9001`. +Le cluster de la Console suit le même schéma sur le port `9001`. -## Troubleshooting +## Dépannage ### `Failed to load incomplete private key from path` -The Envoy container runs as a non-root user and cannot read a `600` root-owned key. `chmod 644` the key files (or chown them to the container user, UID `1001` in the official image). +Le conteneur Envoy s’exécute sous un utilisateur non root et ne peut pas lire une clé en `600` qui appartient à root. Appliquez `chmod 644` aux fichiers de clé (ou attribuez-en la propriété à l’utilisateur du conteneur, UID `1001` dans l’image officielle). -### Routes return `404` with the correct hostnames +### Les routes renvoient `404` avec les noms d’hôte corrects -Envoy matches the authority including the port. Add the `host:*` variants to each virtual host's `domains` list, as in the configuration above. +Envoy fait correspondre l’autorité en incluant le port. Ajoutez les variantes `host:*` à la liste `domains` de chaque hôte virtuel, comme dans la configuration ci-dessus. -### `Access Denied` from RustFS on proxied requests +### `Access Denied` renvoyé par RustFS pour les requêtes transmises -Confirm the proxy is not rewriting the path or the `Host` header. Signed requests must reach RustFS with the host the client signed for. +Vérifiez que le proxy ne réécrit ni le chemin ni l’en-tête `Host`. Les requêtes signées doivent atteindre RustFS avec l’hôte pour lequel le client a signé. -## Next steps +## Étapes suivantes -- [Configure an S3 client](/developer/examples/aws-cli) -- [Enable virtual-hosted-style bucket URLs](/integration/virtual) -- [Review health and readiness endpoints](/operations/status-check) +- [Configurer un client S3](/fr/developer/examples/aws-cli) +- [Activer les URL de compartiment (bucket) en adressage de type hôte virtuel](/fr/integration/virtual) +- [Consulter les points de terminaison de contrôle d’intégrité et d’état de préparation](/fr/operations/status-check) diff --git a/content/fr/developer/integration/reverse-proxy/haproxy.md b/content/fr/developer/integration/reverse-proxy/haproxy.md index 87bf2a760..9b689dac5 100644 --- a/content/fr/developer/integration/reverse-proxy/haproxy.md +++ b/content/fr/developer/integration/reverse-proxy/haproxy.md @@ -1,55 +1,55 @@ --- title: "HAProxy" -description: "Deploy RustFS behind HAProxy with separate HTTPS routes for the S3 API and Console." +description: "Déployez RustFS derrière HAProxy avec des routes HTTPS distinctes pour l’API S3 et la Console." --- -Use **HAProxy** to terminate TLS and route separate hostnames to the RustFS S3 API and Console. This deployment runs HAProxy and a single-node RustFS instance with Docker Compose. You need Docker Engine, Docker Compose, two DNS records, and a TLS certificate that covers both hostnames. +Utilisez **HAProxy** pour terminer le TLS et acheminer des noms d’hôte distincts vers l’API S3 et la Console de RustFS. Ce déploiement exécute HAProxy et une instance RustFS à nœud unique avec Docker Compose. Vous avez besoin de Docker Engine, de Docker Compose, de deux enregistrements DNS et d’un certificat TLS qui couvre les deux noms d’hôte. -This guide uses these example hostnames: +Ce guide utilise ces noms d’hôte d’exemple : -- `s3.example.com` for the S3 API -- `console.example.com` for the Console +- `s3.example.com` pour l’API S3 +- `console.example.com` pour la Console -Replace them with hostnames that resolve to the Docker host. +Remplacez-les par des noms d’hôte qui pointent vers l’hôte Docker. -:::warning[Serve S3 from the root path] +:::warning[Servir l’API S3 depuis le chemin racine] -Do not publish the S3 API under a path such as `/s3/`. AWS Signature Version 4 includes the request path and host, so rewriting either value can invalidate signed requests. +Ne publiez pas l’API S3 sous un chemin tel que `/s3/`. AWS Signature Version 4 inclut le chemin et l’hôte de la requête, de sorte que la réécriture de l’une ou l’autre de ces valeurs peut invalider les requêtes signées. ::: -## 1. Create the deployment directories +## 1. Créer les répertoires de déploiement -Create directories for the HAProxy configuration and TLS certificate: +Créez les répertoires de la configuration HAProxy et du certificat TLS : ```bash mkdir -p rustfs-haproxy/config rustfs-haproxy/certs cd rustfs-haproxy ``` -HAProxy expects the certificate chain and private key in one PEM file. Combine them in this order: +HAProxy attend la chaîne de certificats et la clé privée dans un seul fichier PEM. Combinez-les dans cet ordre : ```bash cat fullchain.pem privkey.pem > certs/rustfs.pem chmod 600 certs/rustfs.pem ``` -The certificate must cover both public hostnames. +Le certificat doit couvrir les deux noms d’hôte publics. -## 2. Set RustFS credentials +## 2. Définir les identifiants RustFS -Create an environment file and replace both credential placeholders: +Créez un fichier d’environnement et remplacez les deux valeurs indicatives d’identifiants : ```ini title=".env" RUSTFS_ACCESS_KEY= RUSTFS_SECRET_KEY= ``` -Do not commit this file or the certificate private key to source control. +N’ajoutez pas ce fichier ni la clé privée du certificat au dépôt. -## 3. Configure HAProxy +## 3. Configurer HAProxy -Create the HAProxy configuration: +Créez la configuration HAProxy : ```text title="config/haproxy.cfg" global @@ -96,13 +96,13 @@ backend rustfs_console server rustfs rustfs:9001 check inter 10s fall 3 rise 2 cookie rustfs ``` -HAProxy preserves the incoming host and request path unless you explicitly rewrite them. The long client, server, and tunnel timeouts accommodate streaming S3 operations and Console WebSocket connections. +HAProxy conserve l’hôte entrant et le chemin de la requête, sauf si vous les réécrivez explicitement. Les longs délais d’expiration du client, du serveur et du tunnel permettent les opérations S3 en flux et les connexions WebSocket de la Console. -The Console backend sets an affinity cookie. With one RustFS server it has no routing effect, but keeping it in the base configuration makes the behavior consistent when you add nodes. +Le backend de la Console définit un cookie d’affinité. Avec un seul serveur RustFS, il n’a aucun effet sur le routage, mais le conserver dans la configuration de base rend le comportement cohérent lorsque vous ajoutez des nœuds. -## 4. Create the Compose file +## 4. Créer le fichier Compose -Create the HAProxy and RustFS services: +Créez les services HAProxy et RustFS : ```yaml title="compose.yaml" services: @@ -153,58 +153,58 @@ networks: rustfs: ``` -Only HAProxy publishes host ports. RustFS ports `9000` and `9001` remain reachable inside the Compose network. +Seul HAProxy publie des ports sur l’hôte. Les ports RustFS `9000` et `9001` restent accessibles à l’intérieur du réseau Compose. -## 5. Validate and start the deployment +## 5. Valider et démarrer le déploiement -Render the Compose configuration and start RustFS: +Affichez la configuration Compose résolue et démarrez RustFS : ```bash docker compose config docker compose up -d rustfs ``` -Validate the HAProxy configuration with the same image used by the deployment: +Validez la configuration HAProxy avec la même image que celle utilisée par le déploiement : ```bash docker compose run --rm --no-deps haproxy haproxy -c -f /usr/local/etc/haproxy/haproxy.cfg ``` -Start HAProxy and check both services: +Démarrez HAProxy et vérifiez les deux services : ```bash docker compose up -d haproxy docker compose ps ``` -If a service does not become healthy, inspect its logs: +Si un service n’atteint pas l’état sain, inspectez ses journaux : ```bash docker compose logs haproxy docker compose logs rustfs ``` -## 6. Verify both endpoints +## 6. Vérifier les deux points de terminaison -Verify the API and Console through their public HTTPS hostnames: +Vérifiez l’API et la Console au moyen de leurs noms d’hôte HTTPS publics : ```bash curl --fail https://s3.example.com/health/ready curl --fail https://console.example.com/rustfs/console/health ``` -Configure S3 clients with `https://s3.example.com` as the endpoint and enable path-style addressing. Open `https://console.example.com/rustfs/console/` to sign in to the Console. +Configurez les clients S3 avec `https://s3.example.com` comme point de terminaison et activez l’adressage de type chemin (path-style). Ouvrez `https://console.example.com/rustfs/console/` pour vous connecter à la Console. -When you replace a renewed `certs/rustfs.pem`, validate the configuration and recreate the HAProxy container to load it: +Lorsque vous remplacez un fichier `certs/rustfs.pem` renouvelé, validez la configuration et recréez le conteneur HAProxy pour le charger : ```bash docker compose run --rm --no-deps haproxy haproxy -c -f /usr/local/etc/haproxy/haproxy.cfg docker compose up -d --force-recreate haproxy ``` -## Multi-node backends +## Backends multi-nœuds -For a distributed RustFS deployment, add every RustFS node to both backends: +Pour un déploiement RustFS distribué, ajoutez chaque nœud RustFS aux deux backends : ```text title="config/haproxy.cfg" backend rustfs_s3 @@ -227,10 +227,10 @@ backend rustfs_console server node4 node4.example.net:9001 check inter 10s fall 3 rise 2 cookie node4 ``` -The Console cookie keeps an in-progress OpenID Connect login on the RustFS node that created its `state`. Keep port `9000` open directly between RustFS nodes because internal node RPC uses the same listener. +Le cookie de la Console maintient une connexion OpenID Connect en cours sur le nœud RustFS qui a créé son `state`. Laissez le port `9000` ouvert directement entre les nœuds RustFS, car le RPC interne des nœuds utilise le même écouteur. -## Next steps +## Étapes suivantes -- [Configure an S3 client](/developer/examples/aws-cli) -- [Enable virtual-hosted-style bucket URLs](/integration/virtual) -- [Review health and readiness endpoints](/operations/status-check) \ No newline at end of file +- [Configurer un client S3](/fr/developer/examples/aws-cli) +- [Activer les URL de compartiment (bucket) en adressage de type hôte virtuel](/fr/integration/virtual) +- [Consulter les points de terminaison de contrôle d’intégrité et d’état de préparation](/fr/operations/status-check) \ No newline at end of file diff --git a/content/fr/developer/integration/reverse-proxy/httpd.md b/content/fr/developer/integration/reverse-proxy/httpd.md index d98ce20de..1faa1abfc 100644 --- a/content/fr/developer/integration/reverse-proxy/httpd.md +++ b/content/fr/developer/integration/reverse-proxy/httpd.md @@ -1,33 +1,33 @@ --- title: "Apache HTTP Server" -description: "Deploy RustFS behind Apache HTTP Server with TLS termination for separate S3 API and Console hostnames." +description: "Déployez RustFS derrière Apache HTTP Server avec une terminaison TLS pour des noms d’hôte distincts de l’API S3 et de la Console." --- -Use **Apache HTTP Server** (httpd) to terminate TLS and route separate hostnames to the RustFS S3 API and Console. This deployment runs httpd and a single-node RustFS instance with Docker Compose. You need Docker Engine, Docker Compose, two DNS records, and a TLS certificate that covers both hostnames. +Utilisez **Apache HTTP Server** (httpd) pour terminer le TLS et acheminer des noms d’hôte distincts vers l’API S3 et la Console de RustFS. Ce déploiement exécute httpd et une instance RustFS à nœud unique avec Docker Compose. Vous avez besoin de Docker Engine, de Docker Compose, de deux enregistrements DNS et d’un certificat TLS qui couvre les deux noms d’hôte. -This guide uses these example hostnames: +Ce guide utilise ces noms d’hôte d’exemple : -- `s3.example.com` for the S3 API -- `console.example.com` for the Console +- `s3.example.com` pour l’API S3 +- `console.example.com` pour la Console -Replace them with hostnames that resolve to the Docker host. +Remplacez-les par des noms d’hôte qui pointent vers l’hôte Docker. -:::warning[Serve S3 from the root path] +:::warning[Servir l’API S3 depuis le chemin racine] -Do not publish the S3 API under a path such as `/s3/`. AWS Signature Version 4 includes the request path and host, so rewriting either value can invalidate signed requests. Apache rewrites proxied URLs unless you disable canonicalization, which this configuration does with `nocanon`. +Ne publiez pas l’API S3 sous un chemin tel que `/s3/`. AWS Signature Version 4 inclut le chemin et l’hôte de la requête, de sorte que la réécriture de l’une ou l’autre de ces valeurs peut invalider les requêtes signées. Apache réécrit les URL transmises par le proxy, sauf si vous désactivez la canonicalisation, ce que cette configuration fait avec `nocanon`. ::: -## 1. Create the deployment directories +## 1. Créer les répertoires de déploiement -Create directories for the httpd configuration and TLS certificate: +Créez les répertoires de la configuration httpd et du certificat TLS : ```bash mkdir -p rustfs-httpd/config rustfs-httpd/certs cd rustfs-httpd ``` -Copy your certificate chain and private key into `certs/`: +Copiez votre chaîne de certificats et votre clé privée dans `certs/` : ```text rustfs-httpd/ @@ -37,28 +37,28 @@ rustfs-httpd/ └── config/ ``` -Restrict access to the private key: +Restreignez l’accès à la clé privée : ```bash chmod 600 certs/privkey.pem ``` -The certificate must cover both public hostnames. +Le certificat doit couvrir les deux noms d’hôte publics. -## 2. Set RustFS credentials +## 2. Définir les identifiants RustFS -Create an environment file and replace both credential placeholders: +Créez un fichier d’environnement et remplacez les deux valeurs indicatives d’identifiants : ```ini title=".env" RUSTFS_ACCESS_KEY= RUSTFS_SECRET_KEY= ``` -Do not commit this file to source control. +N’ajoutez pas ce fichier au dépôt. -## 3. Build the httpd image +## 3. Construire l’image httpd -The stock `httpd` image ships with its proxy and TLS modules commented out. Build a small image that enables them and loads the RustFS virtual hosts: +L’image `httpd` d’origine est livrée avec ses modules de proxy et de TLS commentés. Construisez une petite image qui les active et charge les hôtes virtuels RustFS : ```dockerfile title="Dockerfile" FROM httpd:2.4-alpine @@ -79,11 +79,11 @@ RUN sed -i \ && printf '\nInclude conf/rustfs.conf\n' >> /usr/local/apache2/conf/httpd.conf ``` -`proxy_balancer`, `slotmem_shm`, and `lbmethod_byrequests` are only used by the [multi-node](#multi-node-backends) configuration. Loading them on single-node deployments is harmless. +`proxy_balancer`, `slotmem_shm` et `lbmethod_byrequests` ne sont utilisés que par la configuration [multi-nœuds](#backends-multi-nœuds). Les charger sur un déploiement à nœud unique ne pose aucun problème. -## 4. Configure Apache HTTP Server +## 4. Configurer Apache HTTP Server -Create the httpd configuration with one virtual host per RustFS endpoint: +Créez la configuration httpd avec un hôte virtuel par point de terminaison RustFS : ```apache title="config/rustfs.conf" # Global settings shared by the RustFS virtual hosts. @@ -161,11 +161,11 @@ LimitRequestBody 0 ``` -`Listen 443` is required because the stock `httpd.conf` only opens port `80`; virtual hosts alone do not open ports. The two `VirtualHost *:80` blocks redirect all plain-HTTP traffic to HTTPS with explicit target hostnames. +`Listen 443` est obligatoire, car le fichier `httpd.conf` d’origine n’ouvre que le port `80` ; les hôtes virtuels à eux seuls n’ouvrent pas de ports. Les deux blocs `VirtualHost *:80` redirigent tout le trafic HTTP en clair vers HTTPS avec des noms d’hôte cibles explicites. -## 5. Create the Compose file +## 5. Créer le fichier Compose -Create the httpd and RustFS services: +Créez les services httpd et RustFS : ```yaml title="compose.yaml" services: @@ -216,126 +216,126 @@ networks: rustfs: ``` -Only httpd publishes host ports. RustFS ports `9000` and `9001` remain reachable inside the Compose network. +Seul httpd publie des ports sur l’hôte. Les ports RustFS `9000` et `9001` restent accessibles à l’intérieur du réseau Compose. -:::note[RustFS log directory] +:::note[Répertoire de journaux RustFS] -`RUSTFS_OBS_LOG_DIRECTORY` must point to a directory the container can create. The RustFS image runs as a non-root user, so `/logs` works while paths under `/var/log` make the container exit at startup with `Permission denied`. +`RUSTFS_OBS_LOG_DIRECTORY` doit pointer vers un répertoire que le conteneur peut créer. L’image RustFS s’exécute sous un utilisateur non root : le chemin `/logs` fonctionne, alors que les chemins sous `/var/log` font quitter le conteneur au démarrage avec `Permission denied`. ::: -## 6. Validate and start the deployment +## 6. Valider et démarrer le déploiement -Render the Compose configuration and start RustFS: +Affichez la configuration Compose résolue et démarrez RustFS : ```bash docker compose config docker compose up -d rustfs ``` -Validate the httpd configuration with the same image used by the deployment: +Validez la configuration httpd avec la même image que celle utilisée par le déploiement : ```bash docker compose run --rm --no-deps httpd httpd -t ``` -Start httpd and check both services: +Démarrez httpd et vérifiez les deux services : ```bash docker compose up -d httpd docker compose ps ``` -If a service does not become healthy, inspect its logs: +Si un service n’atteint pas l’état sain, inspectez ses journaux : ```bash docker compose logs httpd docker compose logs rustfs ``` -## 7. Verify both endpoints +## 7. Vérifier les deux points de terminaison -Verify the API and Console through their public HTTPS hostnames: +Vérifiez l’API et la Console au moyen de leurs noms d’hôte HTTPS publics : ```bash curl --fail https://s3.example.com/health/ready curl --fail https://console.example.com/rustfs/console/health ``` -Configure S3 clients with `https://s3.example.com` as the endpoint and enable path-style addressing. Open `https://console.example.com/rustfs/console/` to sign in to the Console. +Configurez les clients S3 avec `https://s3.example.com` comme point de terminaison et activez l’adressage de type chemin (path-style). Ouvrez `https://console.example.com/rustfs/console/` pour vous connecter à la Console. -:::note[Console root path] +:::note[Chemin racine de la Console] -In RustFS v2.x the Console is served under the `/rustfs/console/` path prefix. Requesting the root path of the Console hostname returns an S3-style XML access-denied response, which is expected. +Dans RustFS v2.x, la Console est servie sous le préfixe de chemin `/rustfs/console/`. Une requête vers le chemin racine du nom d’hôte de la Console renvoie une réponse XML de refus d’accès de style S3, ce qui est attendu. ::: -When you replace a renewed certificate or key in `certs/`, validate the configuration and reload httpd gracefully without dropping active transfers: +Lorsque vous remplacez un certificat renouvelé ou une clé renouvelée dans `certs/`, validez la configuration et rechargez httpd en douceur, sans interrompre les transferts en cours : ```bash docker compose exec httpd httpd -t docker compose exec httpd httpd -k graceful ``` -## How this configuration preserves S3 signatures +## Comment cette configuration préserve les signatures S3 -AWS Signature Version 4 signs the HTTP method, the `Host` header, and the raw request path. Every directive below keeps one of those values byte-identical between the client and RustFS: +AWS Signature Version 4 signe la méthode HTTP, l’en-tête `Host` et le chemin brut de la requête. Chacune des directives ci-dessous conserve l’une de ces valeurs identique, octet pour octet, entre le client et RustFS : -- **`ProxyPreserveHost On`** keeps the client's `Host` header. With the default (`Off`), Apache rewrites `Host` to the backend host and RustFS answers `SignatureDoesNotMatch`. -- **`nocanon`** on the `ProxyPass` line passes the request path to RustFS without URL canonicalization. Without it, Apache rewrites paths during forwarding (for example collapsing `//`), and any signed path no longer matches. -- **`AllowEncodedSlashes NoDecode`** lets object keys containing `%2F` reach the proxy handlers instead of returning `404`, and keeps the encoding intact. -- **`RequestHeader set X-Forwarded-Proto "https"`** tells RustFS the original scheme. Apache's `ProxyAddHeaders` (default `On`) adds `X-Forwarded-For`, `X-Forwarded-Host`, and `X-Forwarded-Server`, but not `X-Forwarded-Proto`. +- **`ProxyPreserveHost On`** conserve l’en-tête `Host` du client. Avec la valeur par défaut (`Off`), Apache réécrit `Host` vers l’hôte du backend et RustFS répond `SignatureDoesNotMatch`. +- **`nocanon`** sur la ligne `ProxyPass` transmet le chemin de la requête à RustFS sans canonicalisation d’URL. Sans cette option, Apache réécrit les chemins pendant la transmission (par exemple en contractant `//`), et plus aucun chemin signé ne correspond. +- **`AllowEncodedSlashes NoDecode`** permet aux clés d’objet contenant `%2F` d’atteindre les gestionnaires du proxy au lieu de renvoyer `404`, et conserve l’encodage intact. +- **`RequestHeader set X-Forwarded-Proto "https"`** indique à RustFS le schéma d’origine. `ProxyAddHeaders` d’Apache (valeur par défaut `On`) ajoute `X-Forwarded-For`, `X-Forwarded-Host` et `X-Forwarded-Server`, mais pas `X-Forwarded-Proto`. -Presigned URLs, multipart uploads, and browser POST uploads rely on the same path and host preservation and need no extra directives. +Les URL présignées, les chargements partitionnés et les chargements POST du navigateur reposent sur la même conservation du chemin et de l’hôte, et n’exigent aucune directive supplémentaire. -The Console virtual host adds `upgrade=websocket` to its `ProxyPass` line so that WebSocket upgrades are tunneled end to end. Since 2.4.47, `mod_proxy_http` handles the upgrade itself and only tunnels connections the backend accepts with `101 Switching Protocols`; the older `mod_proxy_wstunnel` module is deprecated. +L’hôte virtuel de la Console ajoute `upgrade=websocket` à sa ligne `ProxyPass` afin que les mises à niveau WebSocket soient tunnelisées de bout en bout. Depuis la version 2.4.47, `mod_proxy_http` gère lui-même la mise à niveau et ne tunnelise que les connexions que le backend accepte avec `101 Switching Protocols` ; le module plus ancien `mod_proxy_wstunnel` est obsolète. -## Request bodies, large objects, and timeouts +## Corps de requête, objets volumineux et délais d’expiration -Apache forwards request bodies to RustFS without a size limit and without writing them to the proxy's disk. Bodies that arrive with a `Content-Length` (what AWS CLI, AWS SDKs, and `mc` send) stream through as they arrive. Bodies that arrive with `Transfer-Encoding: chunked` are also forwarded as chunked encoding, which RustFS rejects — see the warnings below. +Apache transmet les corps de requête à RustFS sans limite de taille et sans les écrire sur le disque du proxy. Les corps qui arrivent avec un `Content-Length` (ce qu’envoient l’AWS CLI, les SDK AWS et `mc`) passent en flux à mesure qu’ils arrivent. Les corps qui arrivent avec `Transfer-Encoding: chunked` sont également transmis en encodage fragmenté (chunked), ce que RustFS rejette — voir les avertissements ci-dessous. -The timeout directives trade safety for long transfers: +Les directives de délai d’expiration cèdent une part de sécurité pour permettre les transferts longs : -- **`Timeout 600`** covers connection I/O in both directions, so slow downloads and uploads are not cut mid-transfer. -- **`ProxyTimeout 600`** applies the same budget to the connection with RustFS. -- **`RequestReadTimeout`** bounds slow clients without punishing steady ones: a request is dropped only when headers stall or the body rate falls below `MinRate`. -- **`LimitRequestBody 0`** states the default explicitly: request bodies of any size are accepted. +- **`Timeout 600`** couvre les E/S de la connexion dans les deux sens, de sorte que les téléchargements et les chargements lents ne sont pas coupés en plein transfert. +- **`ProxyTimeout 600`** applique le même budget à la connexion avec RustFS. +- **`RequestReadTimeout`** limite les clients lents sans pénaliser les clients réguliers : une requête n’est abandonnée que lorsque les en-têtes restent bloqués ou que le débit du corps passe sous `MinRate`. +- **`LimitRequestBody 0`** énonce explicitement la valeur par défaut : les corps de requête de toute taille sont acceptés. -:::warning[Uploads must carry a Content-Length] +:::warning[Les chargements doivent comporter un Content-Length] -RustFS rejects request bodies forwarded as `Transfer-Encoding: chunked` with `400 UnexpectedContent` (`This request does not support content.`). Clients must upload with a `Content-Length`. All major S3 clients do this out of the box, so this only affects hand-rolled HTTP scripts that stream from a pipe. Apache's default body handling converts small chunked bodies to `Content-Length` in memory but forwards large ones as chunked, so such a client can appear to work for small files and fail for large ones. `SetEnv proxy-sendcl 1` converts chunked bodies to `Content-Length` as a fallback — at the cost of spooling each body to the proxy's disk first. +RustFS rejette les corps de requête transmis en `Transfer-Encoding: chunked` avec `400 UnexpectedContent` (`This request does not support content.`). Les clients doivent charger avec un `Content-Length`. Tous les principaux clients S3 le font sans réglage supplémentaire, de sorte que cela ne concerne que les scripts HTTP écrits à la main qui envoient un flux depuis un tube (pipe). Le traitement par défaut des corps dans Apache convertit en mémoire les petits corps fragmentés en `Content-Length`, mais transmet les corps volumineux sous forme fragmentée : un tel client peut donc sembler fonctionner pour les petits fichiers et échouer pour les gros. `SetEnv proxy-sendcl 1` convertit les corps fragmentés en `Content-Length` en solution de repli — au prix d’écrire d’abord chaque corps sur le disque du proxy. ::: -:::warning[Presigned URLs and the Content-Type header] +:::warning[URL présignées et en-tête Content-Type] -A presigned URL fixes the headers covered by its signature. If the URL was generated without a `Content-Type`, the upload must not add one — RustFS answers `403 SignatureDoesNotMatch` for the unsigned header. Note that `curl -d` and `curl --data-binary` add `Content-Type: application/x-www-form-urlencoded` on their own. When the upload sends a `Content-Type`, presign the URL with the same value (the `ContentType` parameter in AWS SDKs) and make the request match it exactly. +Une URL présignée fixe les en-têtes couverts par sa signature. Si l’URL a été générée sans `Content-Type`, le chargement ne doit pas en ajouter — RustFS répond `403 SignatureDoesNotMatch` pour l’en-tête non signé. Notez que `curl -d` et `curl --data-binary` ajoutent d’eux-mêmes `Content-Type: application/x-www-form-urlencoded`. Lorsque le chargement envoie un `Content-Type`, présignez l’URL avec la même valeur (le paramètre `ContentType` des SDK AWS) et faites correspondre la requête exactement à cette valeur. ::: -## Settings that do not suit RustFS +## Réglages inadaptés à RustFS -The following Apache defaults and options break S3 semantics or waste resources. This configuration avoids all of them. +Les valeurs par défaut et les options Apache suivantes cassent la sémantique S3 ou gaspillent des ressources. Cette configuration les évite toutes. -| Setting | Effect on RustFS | +| Réglage | Effet sur RustFS | | --- | --- | -| `ProxyPreserveHost Off` (default) | Rewrites `Host`; signed requests fail with `SignatureDoesNotMatch`. | -| `ProxyPass` without `nocanon` | Canonicalizes the request path; signed paths fail to verify. | -| `AllowEncodedSlashes Off` (default) | Returns `404` for object keys containing `%2F`. | -| Path prefixes (`ProxyPass /s3/`, `Alias`, rewrite rules) | Rewrites the request path; keep the S3 API on the root path. | -| `ProxyErrorOverride On` | Replaces RustFS S3 XML errors with Apache error pages; S3 SDKs cannot parse them. | -| `SetEnv proxy-sendcl 1`, `SetEnv force-proxy-request-1.0 1` | Forces a `Content-Length` upstream and spools chunked request bodies to disk before forwarding. It rescues chunked-only clients but adds disk I/O to large uploads. | -| `SetEnv proxy-sendchunked 1` | Forces chunked encoding upstream, which RustFS rejects with `400 UnexpectedContent`. | -| `mod_proxy_wstunnel` (`ProxyPass ... ws://`) | Deprecated since 2.4.47; use `upgrade=websocket` on `mod_proxy_http` instead. | +| `ProxyPreserveHost Off` (valeur par défaut) | Réécrit `Host` ; les requêtes signées échouent avec `SignatureDoesNotMatch`. | +| `ProxyPass` sans `nocanon` | Canonicalise le chemin de la requête ; la vérification des chemins signés échoue. | +| `AllowEncodedSlashes Off` (valeur par défaut) | Renvoie `404` pour les clés d’objet contenant `%2F`. | +| Préfixes de chemin (`ProxyPass /s3/`, `Alias`, règles de réécriture) | Réécrit le chemin de la requête ; conservez l’API S3 sur le chemin racine. | +| `ProxyErrorOverride On` | Remplace les erreurs XML S3 de RustFS par des pages d’erreur Apache ; les SDK S3 ne peuvent pas les analyser. | +| `SetEnv proxy-sendcl 1`, `SetEnv force-proxy-request-1.0 1` | Force un `Content-Length` vers l’amont et écrit sur disque les corps de requête fragmentés avant de les transmettre. Cela sauve les clients qui n’envoient que du contenu fragmenté, mais ajoute des E/S disque aux chargements volumineux. | +| `SetEnv proxy-sendchunked 1` | Force un encodage fragmenté vers l’amont, que RustFS rejette avec `400 UnexpectedContent`. | +| `mod_proxy_wstunnel` (`ProxyPass ... ws://`) | Obsolète depuis la version 2.4.47 ; utilisez `upgrade=websocket` sur `mod_proxy_http` à la place. | -Two RustFS-side limits are worth marking because no proxy setting can remove them: +Deux limites propres à RustFS méritent d’être signalées, car aucun réglage de proxy ne peut les lever : -- Object keys containing empty (`//`) or dot (`.`) path segments are rejected with `InvalidArgument` even without a proxy. -- In RustFS v2.x the Console lives under `/rustfs/console/`; the Console root path answers with S3-style XML. +- Les clés d’objet qui contiennent des segments de chemin vides (`//`) ou constitués d’un point (`.`) sont rejetées avec `InvalidArgument`, même sans proxy. +- Dans RustFS v2.x, la Console est servie sous `/rustfs/console/` ; le chemin racine de la Console répond avec du XML de style S3. -## Multi-node backends +## Backends multi-nœuds -For a distributed RustFS deployment, replace each single `ProxyPass` target with a balancer that lists every RustFS node. Replace the S3 virtual host's proxy block with: +Pour un déploiement RustFS distribué, remplacez chaque cible `ProxyPass` unique par un équilibreur qui liste tous les nœuds RustFS. Remplacez le bloc de proxy de l’hôte virtuel S3 par : ```apache title="config/rustfs.conf" @@ -349,7 +349,7 @@ For a distributed RustFS deployment, replace each single `ProxyPass` target with ProxyPassReverse / balancer://s3/ ``` -Replace the Console virtual host's proxy block with: +Remplacez le bloc de proxy de l’hôte virtuel de la Console par : ```apache title="config/rustfs.conf" # Keep an in-progress login on the node that created its state. @@ -366,10 +366,10 @@ Replace the Console virtual host's proxy block with: ProxyPassReverse / balancer://console/ ``` -The `ROUTEID` cookie keeps an in-progress OpenID Connect login on the RustFS node that created its `state`. Keep `upgrade=websocket` on each `BalancerMember` line; `ProxySet` does not accept that parameter. Keep port `9000` open directly between RustFS nodes because internal node RPC uses the same listener. +Le cookie `ROUTEID` maintient une connexion OpenID Connect en cours sur le nœud RustFS qui a créé son `state`. Conservez `upgrade=websocket` sur chaque ligne `BalancerMember` ; `ProxySet` n’accepte pas ce paramètre. Laissez le port `9000` ouvert directement entre les nœuds RustFS, car le RPC interne des nœuds utilise le même écouteur. -## Next steps +## Étapes suivantes -- [Configure an S3 client](/developer/examples/aws-cli) -- [Enable virtual-hosted-style bucket URLs](/integration/virtual) -- [Review health and readiness endpoints](/operations/status-check) +- [Configurer un client S3](/fr/developer/examples/aws-cli) +- [Activer les URL de compartiment (bucket) en adressage de type hôte virtuel](/fr/integration/virtual) +- [Consulter les points de terminaison de contrôle d’intégrité et d’état de préparation](/fr/operations/status-check) diff --git a/content/fr/developer/integration/reverse-proxy/index.md b/content/fr/developer/integration/reverse-proxy/index.md index 397cdad64..33d718214 100644 --- a/content/fr/developer/integration/reverse-proxy/index.md +++ b/content/fr/developer/integration/reverse-proxy/index.md @@ -1,13 +1,13 @@ --- -title: "Reverse Proxy" -description: "Choose and configure a reverse proxy for the RustFS S3 API and Console." +title: "Proxy inverse" +description: "Choisissez et configurez un proxy inverse pour l’API S3 et la Console de RustFS." --- -Use a reverse proxy to expose the **RustFS** S3 API and Console through managed hostnames and TLS endpoints. +Utilisez un proxy inverse pour exposer l’API S3 et la Console de **RustFS** au moyen de noms d’hôte gérés et de points de terminaison TLS. -We recommend using separate hostnames for the S3 API on port `9000` and the Console on port `9001`. Serve the S3 API from the root of its hostname because S3 clients sign the request path. +Nous recommandons d’utiliser des noms d’hôte distincts pour l’API S3 sur le port `9000` et pour la Console sur le port `9001`. Servez l’API S3 depuis la racine de son nom d’hôte, car les clients S3 signent le chemin de la requête. -## Supported guides +## Guides pris en charge - [Nginx](./nginx.md) - [Traefik](./traefik.md) @@ -16,6 +16,6 @@ We recommend using separate hostnames for the S3 API on port `9000` and the Cons - [Envoy](./envoy.md) - [Apache HTTP Server](./httpd.md) -## Related configuration +## Configuration associée -See [Virtual-Host Access](/integration/virtual) when clients access buckets through virtual-hosted-style URLs. \ No newline at end of file +Consultez [Accès par hôte virtuel](/fr/integration/virtual) lorsque les clients accèdent aux compartiments (buckets) par des URL en adressage de type hôte virtuel. \ No newline at end of file diff --git a/content/fr/developer/integration/reverse-proxy/nginx.md b/content/fr/developer/integration/reverse-proxy/nginx.md index 5246711c6..9175ae5b3 100644 --- a/content/fr/developer/integration/reverse-proxy/nginx.md +++ b/content/fr/developer/integration/reverse-proxy/nginx.md @@ -1,33 +1,33 @@ --- title: "Nginx" -description: "Deploy RustFS behind Nginx with separate HTTPS endpoints for the S3 API and Console." +description: "Déployez RustFS derrière Nginx avec des points de terminaison HTTPS distincts pour l’API S3 et la Console." --- -Use **Nginx** to terminate TLS and route separate hostnames to the RustFS S3 API and Console. This deployment runs Nginx and a single-node RustFS instance with Docker Compose. You need Docker Engine, Docker Compose, two DNS records, and a TLS certificate that covers both hostnames. +Utilisez **Nginx** pour terminer le TLS et acheminer des noms d’hôte distincts vers l’API S3 et la Console de RustFS. Ce déploiement exécute Nginx et une instance RustFS à nœud unique avec Docker Compose. Vous avez besoin de Docker Engine, de Docker Compose, de deux enregistrements DNS et d’un certificat TLS qui couvre les deux noms d’hôte. -This guide uses these example hostnames: +Ce guide utilise ces noms d’hôte d’exemple : -- `s3.example.com` for the S3 API -- `console.example.com` for the Console +- `s3.example.com` pour l’API S3 +- `console.example.com` pour la Console -Replace them with hostnames that resolve to the Docker host. +Remplacez-les par des noms d’hôte qui pointent vers l’hôte Docker. -:::warning[Serve S3 from the root path] +:::warning[Servir l’API S3 depuis le chemin racine] -Do not publish the S3 API under a path such as `/s3/`. AWS Signature Version 4 includes the request path and host, so rewriting either value can invalidate signed requests. +Ne publiez pas l’API S3 sous un chemin tel que `/s3/`. AWS Signature Version 4 inclut le chemin et l’hôte de la requête, de sorte que la réécriture de l’une ou l’autre de ces valeurs peut invalider les requêtes signées. ::: -## 1. Create the deployment directories +## 1. Créer les répertoires de déploiement -Create directories for the Nginx configuration and TLS certificate: +Créez les répertoires de la configuration Nginx et du certificat TLS : ```bash mkdir -p rustfs-nginx/sites rustfs-nginx/certs cd rustfs-nginx ``` -Copy your certificate chain and private key into `certs/`: +Copiez votre chaîne de certificats et votre clé privée dans `certs/` : ```text rustfs-nginx/ @@ -37,26 +37,26 @@ rustfs-nginx/ └── sites/ ``` -Restrict access to the private key: +Restreignez l’accès à la clé privée : ```bash chmod 600 certs/privkey.pem ``` -## 2. Set RustFS credentials +## 2. Définir les identifiants RustFS -Create an environment file and replace both credential placeholders: +Créez un fichier d’environnement et remplacez les deux valeurs indicatives d’identifiants : ```ini title=".env" RUSTFS_ACCESS_KEY= RUSTFS_SECRET_KEY= ``` -Do not commit this file to source control. +N’ajoutez pas ce fichier au dépôt. -## 3. Configure Nginx +## 3. Configurer Nginx -Create the Nginx configuration: +Créez la configuration Nginx : ```nginx title="sites/rustfs.conf" map $http_upgrade $connection_upgrade { @@ -137,11 +137,11 @@ server { } ``` -The S3 server preserves the original host and request path, disables request buffering for streaming uploads, and does not convert signed `HEAD` requests. The Console server also forwards WebSocket upgrade headers. +Le serveur S3 conserve l’hôte et le chemin de la requête d’origine, désactive la mise en tampon des requêtes pour les chargements en flux et ne convertit pas les requêtes `HEAD` signées. Le serveur de la Console transmet aussi les en-têtes de mise à niveau WebSocket. -## 4. Create the Compose file +## 4. Créer le fichier Compose -Create the deployment definition: +Créez la définition du déploiement : ```yaml title="compose.yaml" services: @@ -192,11 +192,11 @@ networks: rustfs: ``` -Only Nginx publishes host ports. RustFS ports `9000` and `9001` remain reachable inside the Compose network. +Seul Nginx publie des ports sur l’hôte. Les ports RustFS `9000` et `9001` restent accessibles à l’intérieur du réseau Compose. -## 5. Validate and start the deployment +## 5. Valider et démarrer le déploiement -Validate both configuration files before starting the services: +Validez les deux fichiers de configuration avant de démarrer les services : ```bash docker compose config @@ -204,41 +204,41 @@ docker compose up -d rustfs docker compose run --rm --no-deps nginx nginx -t ``` -Start Nginx and check both services: +Démarrez Nginx et vérifiez les deux services : ```bash docker compose up -d nginx docker compose ps ``` -If a service does not become healthy, inspect its logs: +Si un service n’atteint pas l’état sain, inspectez ses journaux : ```bash docker compose logs nginx docker compose logs rustfs ``` -## 6. Verify both endpoints +## 6. Vérifier les deux points de terminaison -Verify the API and Console through their public HTTPS hostnames: +Vérifiez l’API et la Console au moyen de leurs noms d’hôte HTTPS publics : ```bash curl --fail https://s3.example.com/health/ready curl --fail https://console.example.com/rustfs/console/health ``` -Configure S3 clients with `https://s3.example.com` as the endpoint and enable path-style addressing. Open `https://console.example.com/rustfs/console/` to sign in to the Console. +Configurez les clients S3 avec `https://s3.example.com` comme point de terminaison et activez l’adressage de type chemin (path-style). Ouvrez `https://console.example.com/rustfs/console/` pour vous connecter à la Console. -When you replace a renewed certificate or key in `certs/`, validate and reload Nginx without interrupting active connections: +Lorsque vous remplacez un certificat renouvelé ou une clé renouvelée dans `certs/`, validez la configuration et rechargez Nginx sans interrompre les connexions actives : ```bash docker compose exec nginx nginx -t docker compose exec nginx nginx -s reload ``` -## Multi-node upstreams +## Upstreams multi-nœuds -For a distributed RustFS deployment, replace the single server in each upstream with all RustFS nodes: +Pour un déploiement RustFS distribué, remplacez le serveur unique de chaque upstream par tous les nœuds RustFS : ```nginx title="sites/rustfs.conf" upstream rustfs_s3 { @@ -260,10 +260,10 @@ upstream rustfs_console { } ``` -The Console upstream uses client affinity because an in-progress OpenID Connect login stores its `state` on one RustFS node. Keep port `9000` open between RustFS nodes because internal node RPC uses the same listener. +L’upstream de la Console utilise l’affinité client, car une connexion OpenID Connect en cours stocke son `state` sur un seul nœud RustFS. Laissez le port `9000` ouvert entre les nœuds RustFS, car le RPC interne des nœuds utilise le même écouteur. -## Next steps +## Étapes suivantes -- [Configure an S3 client](/developer/examples/aws-cli) -- [Enable virtual-hosted-style bucket URLs](/integration/virtual) -- [Review health and readiness endpoints](/operations/status-check) \ No newline at end of file +- [Configurer un client S3](/fr/developer/examples/aws-cli) +- [Activer les URL de compartiment (bucket) en adressage de type hôte virtuel](/fr/integration/virtual) +- [Consulter les points de terminaison de contrôle d’intégrité et d’état de préparation](/fr/operations/status-check) \ No newline at end of file diff --git a/content/fr/developer/integration/reverse-proxy/traefik.md b/content/fr/developer/integration/reverse-proxy/traefik.md index 4d382cbc4..ab7eab822 100644 --- a/content/fr/developer/integration/reverse-proxy/traefik.md +++ b/content/fr/developer/integration/reverse-proxy/traefik.md @@ -1,26 +1,26 @@ --- title: "Traefik" -description: "Deploy RustFS behind Traefik with automatic TLS for separate S3 API and Console hostnames." +description: "Déployez RustFS derrière Traefik avec un TLS automatique pour des noms d’hôte distincts de l’API S3 et de la Console." --- -Use **Traefik** and its Docker provider to discover RustFS, obtain TLS certificates from Let's Encrypt, and route separate hostnames to the S3 API and Console. You need Docker Engine, Docker Compose, a public server, and two DNS records that resolve to that server. +Utilisez **Traefik** et son fournisseur Docker pour découvrir RustFS, obtenir des certificats TLS auprès de Let's Encrypt et acheminer des noms d’hôte distincts vers l’API S3 et la Console. Vous avez besoin de Docker Engine, de Docker Compose, d’un serveur public et de deux enregistrements DNS qui pointent vers ce serveur. -This guide uses these example hostnames: +Ce guide utilise ces noms d’hôte d’exemple : -- `s3.example.com` for the S3 API -- `console.example.com` for the Console +- `s3.example.com` pour l’API S3 +- `console.example.com` pour la Console -Replace them with your public hostnames. The ACME HTTP-01 challenge requires inbound access to ports `80` and `443`. +Remplacez-les par vos noms d’hôte publics. Le défi ACME HTTP-01 exige un accès entrant sur les ports `80` et `443`. -:::warning[Serve S3 from the root path] +:::warning[Servir l’API S3 depuis le chemin racine] -Do not publish the S3 API under a path such as `/s3/`. AWS Signature Version 4 includes the request path and host, so rewriting either value can invalidate signed requests. +Ne publiez pas l’API S3 sous un chemin tel que `/s3/`. AWS Signature Version 4 inclut le chemin et l’hôte de la requête, de sorte que la réécriture de l’une ou l’autre de ces valeurs peut invalider les requêtes signées. ::: -## 1. Create the deployment directory +## 1. Créer le répertoire de déploiement -Create a directory and an empty ACME storage file. Traefik requires restrictive permissions on this file: +Créez un répertoire et un fichier de stockage ACME vide. Traefik exige des permissions restrictives sur ce fichier : ```bash mkdir rustfs-traefik @@ -29,9 +29,9 @@ touch acme.json chmod 600 acme.json ``` -## 2. Set deployment variables +## 2. Définir les variables de déploiement -Create an environment file and replace each value: +Créez un fichier d’environnement et remplacez chaque valeur : ```ini title=".env" S3_HOSTNAME=s3.example.com @@ -41,11 +41,11 @@ RUSTFS_ACCESS_KEY= RUSTFS_SECRET_KEY= ``` -Use an email address that receives certificate expiration notices. Do not commit `.env` or `acme.json` to source control. +Utilisez une adresse e-mail qui reçoit les avis d’expiration de certificat. N’ajoutez pas le fichier `.env` ni `acme.json` au dépôt. -## 3. Create the Compose file +## 3. Créer le fichier Compose -Create the Traefik and RustFS services: +Créez les services Traefik et RustFS : ```yaml title="compose.yaml" services: @@ -126,51 +126,51 @@ networks: name: rustfs ``` -The two routers use different host rules and backend ports. RustFS does not publish ports `9000` or `9001` on the Docker host, and the Traefik Dashboard is not exposed. +Les deux routeurs utilisent des règles d’hôte et des ports de backend différents. RustFS ne publie pas les ports `9000` ou `9001` sur l’hôte Docker, et le tableau de bord Traefik n’est pas exposé. -:::note[Docker socket access] +:::note[Accès au socket Docker] -Traefik reads container labels through the read-only Docker socket mount. Anyone who can modify Docker workloads can influence routes discovered by the Docker provider. Restrict Docker access on the proxy host. +Traefik lit les labels des conteneurs à travers le montage en lecture seule du socket Docker. Toute personne qui peut modifier les charges de travail Docker peut influencer les routes découvertes par le fournisseur Docker. Restreignez l’accès à Docker sur l’hôte du proxy. ::: -## 4. Validate and start the deployment +## 4. Valider et démarrer le déploiement -Render the Compose configuration and check that all variables resolve: +Affichez la configuration Compose résolue et vérifiez que toutes les variables sont substituées : ```bash docker compose config ``` -Start both services: +Démarrez les deux services : ```bash docker compose up -d docker compose ps ``` -Follow the Traefik logs while it completes the ACME challenge and creates both certificates: +Suivez les journaux de Traefik pendant qu’il termine le défi ACME et crée les deux certificats : ```bash docker compose logs --follow traefik ``` -If certificate issuance fails, confirm that both DNS records resolve to this host and that ports `80` and `443` are reachable from the internet. Let's Encrypt rate limits apply, so correct DNS and firewall problems before repeatedly recreating the deployment. +Si l’émission du certificat échoue, vérifiez que les deux enregistrements DNS pointent vers cet hôte et que les ports `80` et `443` sont accessibles depuis Internet. Les limites de débit de Let's Encrypt s’appliquent : corrigez les problèmes de DNS et de pare-feu avant de recréer le déploiement à plusieurs reprises. -## 5. Verify both endpoints +## 5. Vérifier les deux points de terminaison -Verify the S3 API readiness endpoint and Console health endpoint through Traefik: +Vérifiez le point de terminaison d’état de préparation de l’API S3 et le point de terminaison de contrôle d’intégrité de la Console à travers Traefik : ```bash curl --fail https://s3.example.com/health/ready curl --fail https://console.example.com/rustfs/console/health ``` -Configure S3 clients with `https://s3.example.com` as the endpoint and enable path-style addressing. Open `https://console.example.com/rustfs/console/` to sign in to the Console. +Configurez les clients S3 avec `https://s3.example.com` comme point de terminaison et activez l’adressage de type chemin (path-style). Ouvrez `https://console.example.com/rustfs/console/` pour vous connecter à la Console. -## Multi-node services +## Services multi-nœuds -For an external multi-node RustFS cluster, enable Traefik's file provider in the `traefik` service: +Pour un cluster RustFS externe à plusieurs nœuds, activez le fournisseur de fichiers de Traefik dans le service `traefik` : ```yaml title="compose.yaml" services: @@ -182,7 +182,7 @@ services: - ./dynamic.yaml:/etc/traefik/dynamic.yaml:ro ``` -Create the dynamic configuration with every RustFS node: +Créez la configuration dynamique avec chaque nœud RustFS : ```yaml title="dynamic.yaml" http: @@ -234,10 +234,10 @@ http: - url: http://node4.example.net:9001 ``` -Configure sticky sessions for the Console service when you use OpenID Connect. An in-progress login stores its `state` on one RustFS node and the callback must return to that node. Keep port `9000` open directly between RustFS nodes because internal node RPC uses the same listener. +Configurez les sessions persistantes (sticky sessions) du service de la Console lorsque vous utilisez OpenID Connect. Une connexion en cours stocke son `state` sur un seul nœud RustFS, et le rappel (callback) doit revenir vers ce nœud. Laissez le port `9000` ouvert directement entre les nœuds RustFS, car le RPC interne des nœuds utilise le même écouteur. -## Next steps +## Étapes suivantes -- [Configure an S3 client](/developer/examples/aws-cli) -- [Enable virtual-hosted-style bucket URLs](/integration/virtual) -- [Review health and readiness endpoints](/operations/status-check) \ No newline at end of file +- [Configurer un client S3](/fr/developer/examples/aws-cli) +- [Activer les URL de compartiment (bucket) en adressage de type hôte virtuel](/fr/integration/virtual) +- [Consulter les points de terminaison de contrôle d’intégrité et d’état de préparation](/fr/operations/status-check) \ No newline at end of file diff --git a/content/fr/developer/integration/storage/alluxio.md b/content/fr/developer/integration/storage/alluxio.md index df752710f..bf4d86bbc 100644 --- a/content/fr/developer/integration/storage/alluxio.md +++ b/content/fr/developer/integration/storage/alluxio.md @@ -1,13 +1,13 @@ --- title: "Alluxio" -description: "Cache RustFS buckets with Alluxio for faster reads." +description: "Mettez en cache les compartiments (bucket) RustFS avec Alluxio afin d’accélérer les lectures." --- -This guide connects [Alluxio](https://github.com/Alluxio/alluxio) — the distributed data orchestration layer — to **RustFS** as an under filesystem (UFS). You will run a standalone Alluxio cluster in Docker, mount a RustFS bucket, read an object through the cache, and write a file back to the bucket through Alluxio. The workflow was verified with Alluxio 2.9.4 against `rustfs/rustfs-x86-musl:v2.3.1`. +Ce guide connecte [Alluxio](https://github.com/Alluxio/alluxio) — la couche distribuée d’orchestration de données — à **RustFS** comme système de fichiers sous-jacent (under filesystem, UFS). Vous allez exécuter un cluster Alluxio autonome dans Docker, monter un compartiment RustFS, lire un objet via le cache, puis écrire un fichier dans le compartiment via Alluxio. Le flux a été validé avec Alluxio 2.9.4 et `rustfs/rustfs-x86-musl:v2.3.1`. -You need Docker with `--shm-size 2g` capacity (the worker uses a tmpfs ramdisk). +Vous avez besoin de Docker avec une capacité `--shm-size 2g` (le worker utilise un disque mémoire tmpfs). -## Architecture +## Schéma d’architecture ```mermaid flowchart LR @@ -17,11 +17,11 @@ flowchart LR Writer["Alluxio writes"] -->|"persist"| RustFS ``` -Objects read once are cached in the worker's ramdisk; repeated reads are served from memory. Writes through Alluxio land in the bucket as regular objects. +Les objets lus une seule fois sont mis en cache dans le disque mémoire du worker ; les lectures répétées sont servies depuis la mémoire. Les écritures effectuées via Alluxio arrivent dans le compartiment comme des objets ordinaires. -## 1. Run the master and worker +## 1. Exécuter le master et le worker -The standalone image starts one process per invocation. Run the master first, then the worker: +L’image autonome démarre un processus par invocation. Exécutez d’abord le master, puis le worker : ```bash docker run -d --name alluxio-master --hostname alluxio --network oo-rustfs_default \ @@ -37,11 +37,11 @@ Capacity information for all workers: Total Capacity: 1024.00MB ``` -If the worker exits immediately with `tmpfs is smaller than the configured size`, the container was started without `--shm-size`. +Si le worker s’arrête immédiatement avec `tmpfs is smaller than the configured size`, le conteneur a été démarré sans `--shm-size`. -## 2. Mount the RustFS bucket +## 2. Monter le compartiment RustFS -The credential options must use the full `alluxio.underfs.s3.*` key names — short `s3a.*` or `aws.*` keys are accepted by the CLI but ignored by the UFS client: +Les options d’identifiants doivent utiliser les noms de clés complets `alluxio.underfs.s3.*` — les clés courtes `s3a.*` ou `aws.*` sont acceptées par la CLI, mais ignorées par le client UFS : ```bash docker exec alluxio alluxio fs mount \ @@ -57,11 +57,11 @@ docker exec alluxio alluxio fs mount \ Mounted s3://alluxio-demo/ at /rustfs ``` -`disable.dns.buckets` forces path-style addressing, which the IP-style endpoint requires. +`disable.dns.buckets` impose l’adressage de type chemin (path-style), exigé par le point de terminaison de type adresse IP. -## 3. Read through the cache +## 3. Lire via le cache -List the mount and read a seeded object: +Listez le point de montage et lisez un objet préchargé : ```bash docker exec alluxio alluxio fs ls /rustfs @@ -73,11 +73,11 @@ docker exec alluxio alluxio fs cat /rustfs/rustfs-test.txt hello from s3fs ``` -`PERSISTED` means the source of truth is in RustFS; the worker caches blocks after the first read. +`PERSISTED` signifie que la source de vérité est dans RustFS ; le worker met les blocs en cache après la première lecture. -## 4. Write through Alluxio +## 4. Écrire via Alluxio -Copy a local file into the mount: +Copiez un fichier local dans le point de montage : ```bash echo "written via alluxio cache to rustfs" > /tmp/rt.txt @@ -89,7 +89,7 @@ docker exec alluxio alluxio fs copyFromLocal /tmp/rt.txt /rustfs/alluxio-write.t Copied 'file:///tmp/rt.txt' to '/rustfs/alluxio-write.txt' ``` -Verify the object in RustFS: +Vérifiez l’objet dans RustFS : ```bash rc ls rustfs/alluxio-demo/ @@ -102,9 +102,9 @@ rc cat rustfs/alluxio-demo/alluxio-write.txt written via alluxio cache to rustfs ``` -![Alluxio-managed files stored in the RustFS Console](./images/rustfs-alluxio-mount.png) +![Fichiers gérés par Alluxio, stockés dans la Console RustFS](./images/rustfs-alluxio-mount.png) -## 5. Stop or reset +## 5. Arrêter ou réinitialiser ```bash docker exec alluxio alluxio fs unmount /rustfs @@ -112,22 +112,22 @@ docker rm -f alluxio rc rm rustfs/alluxio-demo/ --recursive --force ``` -## Troubleshooting +## Dépannage -### Worker exits with `tmpfs is smaller than the configured size` +### Le worker s’arrête avec `tmpfs is smaller than the configured size` -The worker places its ramdisk in `/dev/shm`, which Docker caps at 64 MB by default. Start the container with `--shm-size 2g` or lower `alluxio.worker.ramdisk.size`. +Le worker place son disque mémoire dans `/dev/shm`, que Docker limite à 64 MB par défaut. Démarrez le conteneur avec `--shm-size 2g`, ou réduisez `alluxio.worker.ramdisk.size`. -### Mount succeeds but `fs ls` returns `InvalidAccessKeyId` +### Le montage réussit, mais `fs ls` renvoie `InvalidAccessKeyId` -The mount options used short key names (`s3a.*`, `aws.*`). Alluxio's UFS client only honors the full `alluxio.underfs.s3.*` keys shown in step 2. +Les options de montage ont utilisé des noms de clés courts (`s3a.*`, `aws.*`). Le client UFS d’Alluxio ne reconnaît que les clés complètes `alluxio.underfs.s3.*` indiquées à l’étape 2. ### `S3 client v2 does not support global bucket access` -Path-style addressing is off. Add `--option alluxio.underfs.s3.disable.dns.buckets=true` — the IP-style RustFS endpoint requires it. +L’adressage de type chemin est désactivé. Ajoutez `--option alluxio.underfs.s3.disable.dns.buckets=true` — le point de terminaison RustFS de type adresse IP l’exige. -## Next steps +## Étapes suivantes -- Review [S3 compatibility notes](/administration/protocols/s3) before adopting additional Alluxio UFS types. -- Create dedicated production credentials with [Access Key Management](/security-compliance/iam/access-token). -- Follow the [Alluxio documentation](https://docs.alluxio.io/os/user/stable/ufs/S3.html) for cache policies, TTLs, and multi-tier storage on top of the same bucket. +- Consultez les [notes de compatibilité S3](/fr/administration/protocols/s3) avant d’adopter d’autres types d’UFS Alluxio. +- Créez des identifiants de production dédiés avec la [gestion des clés d’accès](/fr/security-compliance/iam/access-token). +- Suivez la [documentation Alluxio](https://docs.alluxio.io/os/user/stable/ufs/S3.html) pour les politiques de cache, les TTL et le stockage multi-niveaux sur le même compartiment. diff --git a/content/fr/developer/integration/storage/index.md b/content/fr/developer/integration/storage/index.md index 885c83dbc..8b2561932 100644 --- a/content/fr/developer/integration/storage/index.md +++ b/content/fr/developer/integration/storage/index.md @@ -1,11 +1,11 @@ --- -title: "Storage" -description: "Use RustFS as the S3 backend for storage systems and storage gateways." +title: "Stockage" +description: "Utilisez RustFS comme backend S3 pour les systèmes de stockage et les passerelles de stockage." --- -Use **RustFS** as the backend for storage systems and gateways built on top of object storage. +Utilisez **RustFS** comme backend des systèmes de stockage et des passerelles construits sur le stockage objet. -## Systems +## Systèmes - [lakeFS](./lakefs.md) - [OpenDAL](./opendal.md) @@ -14,4 +14,4 @@ Use **RustFS** as the backend for storage systems and gateways built on top of o - [SFTPGo](./sftpgo.md) - [Alluxio](./alluxio.md) -Use a dedicated bucket and prefix per system, and scope credentials to the required bucket operations. +Utilisez un compartiment (bucket) et un préfixe dédiés pour chaque système, et limitez les identifiants aux opérations nécessaires sur ce compartiment. diff --git a/content/fr/developer/integration/storage/lakefs.md b/content/fr/developer/integration/storage/lakefs.md index ba63ef224..7c9760cf7 100644 --- a/content/fr/developer/integration/storage/lakefs.md +++ b/content/fr/developer/integration/storage/lakefs.md @@ -1,13 +1,13 @@ --- title: "lakeFS" -description: "Run lakeFS with RustFS as its S3 blockstore for versioned data lakes." +description: "Exécutez lakeFS avec RustFS comme magasin de blocs S3 pour des lacs de données versionnés." --- -This guide connects [lakeFS](https://github.com/treeverse/lakeFS) — the Git-like data lake versioning layer — to **RustFS** as its S3 blockstore. You will start lakeFS, create a repository whose storage namespace points at a RustFS bucket, commit an object, and verify that the lakeFS metadata and data files live in RustFS. The workflow was verified with `treeverse/lakefs:1.58.0` and `rustfs/rustfs-x86-musl:v2.3.1`. +Ce guide connecte [lakeFS](https://github.com/treeverse/lakeFS) — la couche de versionnement des lacs de données, sur le modèle de Git — à **RustFS** comme magasin de blocs S3 (blockstore). Vous allez démarrer lakeFS, créer un dépôt dont l’espace de noms de stockage pointe vers un compartiment (bucket) RustFS, créer un commit pour un objet, puis vérifier que les métadonnées lakeFS et les fichiers de données résident dans RustFS. Le flux a été validé avec `treeverse/lakefs:1.58.0` et `rustfs/rustfs-x86-musl:v2.3.1`. -You need Docker. This deployment is intended for local integration testing, not production. +Vous avez besoin de Docker. Ce déploiement est destiné aux tests d’intégration locaux, pas à la production. -## Architecture +## Schéma d’architecture ```mermaid flowchart LR @@ -15,11 +15,11 @@ flowchart LR LakeFS -->|"metadata + data"| RustFS["RustFS :9000"] ``` -lakeFS stores repository metadata and committed data files in the blockstore under the storage namespace. The bucket holds one `repo/` prefix containing `_lakefs/` metadata and `data/` objects; lakeFS reads and writes them through the S3 API. +lakeFS stocke les métadonnées du dépôt et les fichiers de données enregistrés dans un commit, dans le magasin de blocs, sous l’espace de noms de stockage. Le compartiment contient un préfixe `repo/` qui regroupe les métadonnées `_lakefs/` et les objets `data/` ; lakeFS les lit et les écrit via l’API S3. -## 1. Create the project files +## 1. Créer les fichiers du projet -Create the bucket, then the lakeFS configuration: +Créez le compartiment, puis la configuration lakeFS : ```bash rc alias set rustfs http://:9000 @@ -52,9 +52,9 @@ logging: level: info ``` -`force_path_style: true` is required — without it lakeFS builds `lakefs-data.` as a hostname and every request fails with a DNS error. The credentials are supplied through the standard `AWS_ACCESS_KEY_ID` and `AWS_SECRET_ACCESS_KEY` environment variables. +`force_path_style: true` est obligatoire — sans cette option, lakeFS construit `lakefs-data.` comme nom d’hôte et chaque requête échoue avec une erreur DNS. Les identifiants sont fournis par les variables d’environnement standard `AWS_ACCESS_KEY_ID` et `AWS_SECRET_ACCESS_KEY`. -Create the environment file for the service credentials and the initial admin user, replacing the placeholders: +Créez le fichier d’environnement pour les identifiants du service et l’utilisateur administrateur initial, en remplaçant les valeurs indicatives : ```ini title=".env" AWS_ACCESS_KEY_ID= @@ -65,7 +65,7 @@ LAKEFS_INSTALLATION_SECRET_ACCESS_KEY= LAKEFS_STATS_ENABLED=false ``` -## 2. Start lakeFS +## 2. Démarrer lakeFS ```bash docker run -d --name lakefs --network oo-rustfs_default \ @@ -75,7 +75,7 @@ docker run -d --name lakefs --network oo-rustfs_default \ treeverse/lakefs:1.58.0 run ``` -Wait for `http://localhost:8000/api/healthcheck` to return `200`, then create a repository with a storage namespace inside the bucket: +Attendez que `http://localhost:8000/api/healthcheck` renvoie `200`, puis créez un dépôt dont l’espace de noms de stockage se trouve dans le compartiment : ```bash curl -s -u : \ @@ -84,9 +84,9 @@ curl -s -u : \ -d '{"name": "rustfs-demo", "storage_namespace": "s3://lakefs-data/repo"}' ``` -## 3. Commit an object +## 3. Créer un commit pour un objet -Upload a file to the `main` branch and commit it: +Chargez un fichier (upload) sur la branche `main`, puis créez le commit : ```bash echo "hello from lakefs on rustfs" > hello.txt @@ -101,60 +101,60 @@ curl -s -u : \ -d '{"message": "add hello"}' ``` -Read the object back through the branch ref — the response body is the committed content: +Relisez l’objet via la référence de branche — le corps de la réponse est le contenu du commit : ```bash curl -s -u : \ "http://localhost:8000/api/v1/repositories/rustfs-demo/refs/main/objects?path=hello.txt" ``` -## 4. Verify objects in RustFS +## 4. Vérifier les objets dans RustFS -List the bucket: +Listez le compartiment : ```bash rc ls rustfs/lakefs-data/ -r ``` -The output shows the lakeFS metadata objects and the committed data file under the repository prefix: +La sortie montre les objets de métadonnées lakeFS et le fichier de données du commit, sous le préfixe du dépôt : ```text repo/_lakefs/19b2b26e37cb20fc6763c527f88eb5151891b04a2c8c9ddd32870c5c3f353281 repo/data/fueia10jdra000e1c480/daots7ojdra000e1c490 ``` -![lakeFS objects stored in the RustFS Console](./images/rustfs-lakefs-repo.png) +![Objets lakeFS stockés dans la Console RustFS](./images/rustfs-lakefs-repo.png) -## 5. Stop or reset the deployment +## 5. Arrêter ou réinitialiser le déploiement -Stop lakeFS while keeping the data: +Arrêtez lakeFS tout en conservant les données : ```bash docker rm -f lakefs ``` -The repository metadata and data stay in the `lakefs-data` bucket, so restarting lakeFS with the same configuration brings the repository back. To delete everything, remove the bucket: +Les métadonnées et les données du dépôt restent dans le compartiment `lakefs-data`. Un redémarrage de lakeFS avec la même configuration rétablit donc le dépôt. Pour tout supprimer, supprimez le compartiment : ```bash rc rb rustfs/lakefs-data --force ``` -## Troubleshooting +## Dépannage -### `failed to create repository: failed to access storage` with a DNS error +### `failed to create repository: failed to access storage` avec une erreur DNS -lakeFS is using virtual-hosted addressing. Set `force_path_style: true` under `blockstore.s3` — in the 1.x configuration schema the older `path_style` key is rejected at startup. +lakeFS utilise l’adressage de type hôte virtuel. Définissez `force_path_style: true` sous `blockstore.s3` — dans le schéma de configuration 1.x, l’ancienne clé `path_style` est rejetée au démarrage. ### `missing required keys: [auth.encrypt.secret_key]` -lakeFS 1.x requires an encryption key for the local database. Add the `auth.encrypt.secret_key` block as shown in the configuration above. +lakeFS 1.x exige une clé de chiffrement pour la base de données locale. Ajoutez le bloc `auth.encrypt.secret_key`, comme dans la configuration ci-dessus. ### `mkdir /lakefs: permission denied` -The container runs as a non-root user and cannot create the database directory. Run the container with `-u 0` for local testing, or mount a writable directory at the configured path. +Le conteneur s’exécute avec un utilisateur non root et ne peut pas créer le répertoire de la base de données. Pour les tests locaux, exécutez le conteneur avec `-u 0`, ou montez un répertoire accessible en écriture sur le chemin configuré. -## Next steps +## Étapes suivantes -- Review [S3 compatibility notes](/administration/protocols/s3) before adopting additional lakeFS operations. -- Create dedicated production credentials with [Access Key Management](/security-compliance/iam/access-token). -- Follow the [lakeFS S3 blockstore documentation](https://docs.lakefs.io/howto/using-s3.html) to configure the S3 gateway for tools that speak the S3 protocol. +- Consultez les [notes de compatibilité S3](/fr/administration/protocols/s3) avant d’adopter d’autres opérations lakeFS. +- Créez des identifiants de production dédiés avec la [gestion des clés d’accès](/fr/security-compliance/iam/access-token). +- Suivez la [documentation du magasin de blocs S3 de lakeFS](https://docs.lakefs.io/howto/using-s3.html) pour configurer la passerelle S3 destinée aux outils qui parlent le protocole S3. diff --git a/content/fr/developer/integration/storage/meta.json b/content/fr/developer/integration/storage/meta.json index c6861a9e6..300690393 100644 --- a/content/fr/developer/integration/storage/meta.json +++ b/content/fr/developer/integration/storage/meta.json @@ -1,5 +1,5 @@ { - "title": "Storage", + "title": "Stockage", "pages": [ "lakefs", "opendal", diff --git a/content/fr/developer/integration/storage/opendal.md b/content/fr/developer/integration/storage/opendal.md index 074b7475f..28b238729 100644 --- a/content/fr/developer/integration/storage/opendal.md +++ b/content/fr/developer/integration/storage/opendal.md @@ -1,13 +1,13 @@ --- title: "OpenDAL" -description: "Access RustFS objects from applications through the Apache OpenDAL data access layer." +description: "Accédez aux objets RustFS depuis vos applications via la couche d’accès aux données Apache OpenDAL." --- -This guide connects [Apache OpenDAL](https://github.com/apache/opendal) — the unified data access layer — to **RustFS** through its `s3` service. You will run the OpenDAL Python binding against RustFS, write and read an object, list a prefix, and delete it. The workflow was verified with the `opendal` Python package 0.46 on `python:3.12-slim` and `rustfs/rustfs-x86-musl:v2.3.1`. +Ce guide connecte [Apache OpenDAL](https://github.com/apache/opendal) — la couche unifiée d’accès aux données — à **RustFS** via son service `s3`. Vous allez exécuter le binding Python d’OpenDAL face à RustFS, écrire un objet, le lire, lister un préfixe, puis le supprimer. Le flux a été validé avec le paquet Python `opendal` 0.46 sur `python:3.12-slim` et `rustfs/rustfs-x86-musl:v2.3.1`. -You need Docker and Python 3.9 or later. OpenDAL supports the same `s3` service from Rust, Java, Node.js, and Go bindings with equivalent settings. +Vous avez besoin de Docker et de Python 3.9 ou ultérieur. OpenDAL prend en charge le même service `s3` depuis les bindings Rust, Java, Node.js et Go, avec des réglages équivalents. -## Architecture +## Schéma d’architecture ```mermaid flowchart LR @@ -15,17 +15,17 @@ flowchart LR OpenDAL -->|"s3 service"| RustFS["RustFS :9000"] ``` -An OpenDAL `Operator` bound to the `s3` service exposes one uniform API — `write`, `read`, `stat`, `list`, `delete` — over the bucket, so the same code runs against S3, RustFS, or any other supported service by changing the connection settings. +Un `Operator` OpenDAL lié au service `s3` expose une API uniforme — `write`, `read`, `stat`, `list`, `delete` — sur le compartiment (bucket). Le même code fonctionne ainsi face à S3, à RustFS ou à tout autre service pris en charge, en changeant les paramètres de connexion. -## 1. Set up the project +## 1. Préparer le projet -Install the Python binding: +Installez le binding Python : ```bash pip install opendal ``` -Create the script, replacing all connection placeholders: +Créez le script, en remplaçant toutes les valeurs indicatives de connexion : ```python title="opendal_demo.py" import opendal @@ -47,11 +47,11 @@ op.delete("opendal-demo/hello.txt") print("deleted:", not op.exists("opendal-demo/hello.txt")) ``` -The credential option names are `access_key_id` and `secret_access_key` — the shorter `access_key` names do not exist and fail with a signing error. Path-style addressing is the default for non-AWS endpoints. +Les noms des options d’identifiants sont `access_key_id` et `secret_access_key` — les noms plus courts `access_key` n’existent pas et provoquent une erreur de signature. L’adressage de type chemin (path-style) est le comportement par défaut pour les points de terminaison autres qu’AWS. -## 2. Run the demo +## 2. Exécuter la démonstration -Run the script from a machine that can reach RustFS: +Exécutez le script depuis une machine qui peut joindre RustFS : ```bash python opendal_demo.py @@ -64,11 +64,11 @@ listed: opendal-demo/hello.txt deleted: True ``` -The round trip exercises the full object lifecycle: write uploads the bytes, `read` fetches them back, `stat` returns the object size, `list` enumerates the prefix, and `delete` removes the object. +L’aller-retour couvre le cycle complet des opérations sur l’objet : l’écriture charge les octets (upload), `read` les relit, `stat` renvoie la taille de l’objet, `list` énumère le préfixe et `delete` supprime l’objet. -## 3. Verify objects in RustFS +## 3. Vérifier les objets dans RustFS -Comment out the final `op.delete` line, run the script again, and list the prefix in RustFS: +Commentez la dernière ligne `op.delete`, exécutez de nouveau le script, puis listez le préfixe dans RustFS : ```bash rc ls rustfs/my-bucket/opendal-demo/ -r @@ -79,30 +79,30 @@ hello.txt data/rows.csv ``` -![OpenDAL objects stored in the RustFS Console](./images/rustfs-opendal-objects.png) +![Objets OpenDAL stockés dans la Console RustFS](./images/rustfs-opendal-objects.png) -The objects visible in the RustFS Console are exactly the paths the OpenDAL API wrote. +Les objets visibles dans la Console RustFS sont exactement les chemins écrits par l’API OpenDAL. -## 4. Stop or reset +## 4. Arrêter ou réinitialiser -OpenDAL is a library and holds no state of its own. To clean up the demo objects: +OpenDAL est une bibliothèque et ne conserve aucun état propre. Pour supprimer les objets de la démonstration : ```bash rc rm rustfs/my-bucket/opendal-demo/ --recursive --force ``` -## Troubleshooting +## Dépannage ### `failed to load signing credential` -The operator received no usable credentials. Use the exact option names `access_key_id` and `secret_access_key`; other spellings are silently ignored and signing then fails. +L’opérateur n’a reçu aucun identifiant utilisable. Utilisez les noms d’options exacts `access_key_id` et `secret_access_key` ; les autres orthographes sont ignorées en silence, puis la signature échoue. -### Connection or DNS errors on write +### Erreurs de connexion ou DNS à l’écriture -Confirm the endpoint includes the scheme and port and is reachable from the application. Inside a Compose network the hostname is `rustfs`; from the host use `http://localhost:9000`. +Vérifiez que le point de terminaison inclut le schéma et le port, et qu’il est joignable depuis l’application. À l’intérieur d’un réseau Compose, le nom d’hôte est `rustfs` ; depuis l’hôte, utilisez `http://localhost:9000`. -## Next steps +## Étapes suivantes -- Review [S3 compatibility notes](/administration/protocols/s3) before adopting additional OpenDAL operations. -- Create dedicated production credentials with [Access Key Management](/security-compliance/iam/access-token). -- Follow the [OpenDAL documentation](https://opendal.apache.org/docs/) to use the same operator from Rust, Java, or Node.js. +- Consultez les [notes de compatibilité S3](/fr/administration/protocols/s3) avant d’adopter d’autres opérations OpenDAL. +- Créez des identifiants de production dédiés avec la [gestion des clés d’accès](/fr/security-compliance/iam/access-token). +- Suivez la [documentation OpenDAL](https://opendal.apache.org/docs/) pour utiliser le même opérateur depuis Rust, Java ou Node.js. diff --git a/content/fr/developer/integration/storage/s3fs.md b/content/fr/developer/integration/storage/s3fs.md index f1a600d00..5affae34a 100644 --- a/content/fr/developer/integration/storage/s3fs.md +++ b/content/fr/developer/integration/storage/s3fs.md @@ -1,13 +1,13 @@ --- title: "s3fs" -description: "Mount a RustFS bucket as a local filesystem with s3fs-fuse." +description: "Montez un compartiment (bucket) RustFS comme système de fichiers local avec s3fs-fuse." --- -This guide connects [s3fs-fuse](https://github.com/s3fs-fuse/s3fs-fuse) — the FUSE-based S3 filesystem — to **RustFS**. You will mount a bucket as a local directory, write files through the mount, unmount, and confirm the objects persist in the bucket. The workflow was verified with s3fs v1.93 against `rustfs/rustfs-x86-musl:v2.3.1` on Ubuntu 24.04. +Ce guide connecte [s3fs-fuse](https://github.com/s3fs-fuse/s3fs-fuse) — le système de fichiers S3 fondé sur FUSE — à **RustFS**. Vous allez monter un compartiment comme répertoire local, écrire des fichiers via le point de montage, le démonter, puis confirmer que les objets persistent dans le compartiment. Le flux a été validé avec s3fs v1.93 et `rustfs/rustfs-x86-musl:v2.3.1` sur Ubuntu 24.04. -You need a Linux host with FUSE (`fuse3` package) and the `s3fs` binary. +Vous avez besoin d’un hôte Linux avec FUSE (paquet `fuse3`) et le binaire `s3fs`. -## Architecture +## Schéma d’architecture ```mermaid flowchart LR @@ -15,9 +15,9 @@ flowchart LR Mount -->|"S3 API"| RustFS["RustFS :9000"] ``` -Every file created under the mount point becomes an object in the bucket, keyed by its relative path — a plain 1:1 mapping with no caching layer. +Chaque fichier créé sous le point de montage devient un objet du compartiment, dont la clé est son chemin relatif — une correspondance directe 1 pour 1, sans couche de cache. -## 1. Install +## 1. Installer ```bash apt-get install -y s3fs @@ -28,16 +28,16 @@ s3fs --version Amazon Simple Storage Service File System V1.93 ... ``` -## 2. Store the credentials +## 2. Enregistrer les identifiants -Write the access key and secret key to the password file s3fs expects: +Écrivez la clé d’accès et la clé secrète dans le fichier de mots de passe attendu par s3fs : ```bash echo ":" > ~/.passwd-s3fs chmod 600 ~/.passwd-s3fs ``` -## 3. Mount the bucket +## 3. Monter le compartiment ```bash mkdir -p /mnt/s3fs-demo @@ -49,9 +49,9 @@ s3fs s3fs-demo /mnt/s3fs-demo \ -o allow_other -o umask=000 ``` -`use_path_request_style` selects path-style addressing, which is what RustFS serves. `allow_other` lets non-root users read the mount. +`use_path_request_style` sélectionne l’adressage de type chemin (path-style), celui que sert RustFS. `allow_other` permet aux utilisateurs non root de lire le montage. -## 4. Write and read files +## 4. Écrire et lire des fichiers ```bash echo "hello from s3fs" > /mnt/s3fs-demo/s3fs-test.txt @@ -63,9 +63,9 @@ cat /mnt/s3fs-demo/s3fs-test.txt hello from s3fs ``` -## 5. Verify objects and persistence +## 5. Vérifier les objets et la persistance -Unmount and remount — the objects persist in the bucket: +Démontez, puis remontez — les objets persistent dans le compartiment : ```bash fusermount -u /mnt/s3fs-demo @@ -79,7 +79,7 @@ ls /mnt/s3fs-demo/ blob.bin s3fs-test.txt ``` -List the bucket to see the same objects from the S3 side: +Listez le compartiment pour voir les mêmes objets du côté S3 : ```bash rc ls rustfs/s3fs-demo/ @@ -90,31 +90,31 @@ rc ls rustfs/s3fs-demo/ [2026-10-06 12:09:26] 16 B s3fs-test.txt ``` -![s3fs files stored in the RustFS Console](./images/rustfs-s3fs-files.png) +![Fichiers s3fs stockés dans la Console RustFS](./images/rustfs-s3fs-files.png) -## 6. Stop or reset +## 6. Arrêter ou réinitialiser ```bash fusermount -u /mnt/s3fs-demo rc rm rustfs/s3fs-demo/ --recursive --force ``` -## Troubleshooting +## Dépannage -### `fuse: device not found` inside a container +### `fuse: device not found` dans un conteneur -Pass `--device /dev/fuse --cap-add SYS_ADMIN` to `docker run`, or `--privileged` if the mount helper still fails. +Passez `--device /dev/fuse --cap-add SYS_ADMIN` à `docker run`, ou `--privileged` si l’assistant de montage échoue encore. -### `Permission denied` reading the mount as another user +### `Permission denied` lors de la lecture du montage par un autre utilisateur -s3fs mounts are private to the mounting user by default. Add `-o allow_other -o umask=000` (or a tighter umask) at mount time. +Les montages s3fs sont privés pour l’utilisateur qui effectue le montage, par défaut. Ajoutez `-o allow_other -o umask=000` (ou un umask plus restrictif) au moment du montage. -### Mount succeeds but listing is empty on another client +### Le montage réussit, mais le listage est vide sur un autre client -s3fs has no metadata cache shared across mounts, but clients and list operations are eventually consistent. Remount or re-list after a few seconds. +s3fs ne partage aucun cache de métadonnées entre les montages, mais les clients et les opérations de listage sont à cohérence à terme. Remontez, ou relistez après quelques secondes. -## Next steps +## Étapes suivantes -- Review [S3 compatibility notes](/administration/protocols/s3) before adopting additional FUSE options. -- Create dedicated production credentials with [Access Key Management](/security-compliance/iam/access-token). -- Follow the [s3fs-fuse documentation](https://github.com/s3fs-fuse/s3fs-fuse/wiki/Fuse-Over-https) for performance tuning options such as `-o multipart` and `-o parallel_count`. +- Consultez les [notes de compatibilité S3](/fr/administration/protocols/s3) avant d’adopter d’autres options FUSE. +- Créez des identifiants de production dédiés avec la [gestion des clés d’accès](/fr/security-compliance/iam/access-token). +- Suivez la [documentation s3fs-fuse](https://github.com/s3fs-fuse/s3fs-fuse/wiki/Fuse-Over-https) pour les options de réglage des performances, telles que `-o multipart` et `-o parallel_count`. diff --git a/content/fr/developer/integration/storage/sftpgo.md b/content/fr/developer/integration/storage/sftpgo.md index d37db1408..f509e2d35 100644 --- a/content/fr/developer/integration/storage/sftpgo.md +++ b/content/fr/developer/integration/storage/sftpgo.md @@ -1,13 +1,13 @@ --- title: "SFTPGo" -description: "Serve RustFS buckets over SFTP with SFTPGo." +description: "Servez les compartiments (bucket) RustFS en SFTP avec SFTPGo." --- -This guide connects [SFTPGo](https://github.com/drakkan/sftpgo) — the full-featured SFTP/WebDAV/FTP server — to **RustFS** as a per-user S3 backend. You will create an SFTP user whose home directory is a RustFS bucket prefix, upload files over SFTP, and verify the objects in the bucket. The workflow was verified with SFTPGo 2.7.6 against `rustfs/rustfs-x86-musl:v2.3.1`. +Ce guide connecte [SFTPGo](https://github.com/drakkan/sftpgo) — le serveur SFTP, WebDAV et FTP complet — à **RustFS** comme backend S3 par utilisateur. Vous allez créer un utilisateur SFTP dont le répertoire personnel est un préfixe de compartiment RustFS, charger (upload) des fichiers en SFTP, puis vérifier les objets dans le compartiment. Le flux a été validé avec SFTPGo 2.7.6 et `rustfs/rustfs-x86-musl:v2.3.1`. -You need Docker and an SFTP client (`sftp` ships with OpenSSH). +Vous avez besoin de Docker et d’un client SFTP (`sftp` est fourni avec OpenSSH). -## Architecture +## Schéma d’architecture ```mermaid flowchart LR @@ -15,9 +15,9 @@ flowchart LR SFTPGo -->|"S3 API"| RustFS["RustFS :9000"] ``` -SFTPGo maps the user's virtual paths onto bucket prefixes. Files uploaded over SFTP become objects under the configured `key_prefix` — nothing is stored on the SFTPGo host itself. +SFTPGo projette les chemins virtuels de l’utilisateur sur des préfixes de compartiment. Les fichiers chargés en SFTP deviennent des objets sous le `key_prefix` configuré — rien n’est stocké sur l’hôte SFTPGo lui-même. -## 1. Run SFTPGo +## 1. Exécuter SFTPGo ```bash docker run -d --name sftpgo --hostname sftpgo --network oo-rustfs_default \ @@ -26,11 +26,11 @@ docker run -d --name sftpgo --hostname sftpgo --network oo-rustfs_default \ drakkan/sftpgo:latest ``` -`SFTPGO_COMMON__TEMP_PATH` matters: for S3 backends SFTPGo streams uploads through a local pipe file, and the default temp path may not exist or be writable. +`SFTPGO_COMMON__TEMP_PATH` est important : pour les backends S3, SFTPGo fait transiter les chargements par un fichier tube local, et le chemin temporaire par défaut peut ne pas exister ou ne pas être accessible en écriture. -## 2. Create the admin user +## 2. Créer l’utilisateur administrateur -The image does not create the admin automatically. Open `http://localhost:8080/web/admin/setup` once and submit the form, or drive it with curl: +L’image ne crée pas l’administrateur automatiquement. Ouvrez une fois `http://localhost:8080/web/admin/setup` et envoyez le formulaire, ou pilotez-le avec curl : ```bash FORM=$(curl -s -c /tmp/sg-cookie.txt http://localhost:8080/web/admin/setup) @@ -47,9 +47,9 @@ curl -s -b /tmp/sg-cookie.txt -X POST http://localhost:8080/web/admin/setup \ setup: 302 ``` -## 3. Create an S3-backed user +## 3. Créer un utilisateur adossé à S3 -Get an API token and create the user. Three details matter: `home_dir` must be an existing writable directory inside the container (`/tmp` works), `force_path_style` must be `true` for RustFS, and `access_secret` is a KMS object — pass the secret inside `{"status": "Plain", "payload": ...}`: +Obtenez un jeton d’API et créez l’utilisateur. Trois détails comptent : `home_dir` doit être un répertoire existant et accessible en écriture dans le conteneur (`/tmp` convient), `force_path_style` doit valoir `true` pour RustFS, et `access_secret` est un objet KMS — passez le secret dans `{"status": "Plain", "payload": ...}` : ```json title="sftpgo-user.json" { @@ -85,7 +85,7 @@ curl -s -X POST http://localhost:8080/api/v2/users \ create-user: 201 ``` -## 4. Upload and read files over SFTP +## 4. Charger et lire des fichiers en SFTP ```bash printf "uploaded via sftpgo to rustfs\n" > /tmp/sftp-test.txt @@ -105,7 +105,7 @@ sftp> ls sftp-big.bin sftp-test.txt ``` -## 5. Verify objects in RustFS +## 5. Vérifier les objets dans RustFS ```bash rc ls rustfs/sftpgo-demo/home/demo/ -r @@ -118,33 +118,33 @@ rc cat rustfs/sftpgo-demo/home/demo/sftp-test.txt uploaded via sftpgo to rustfs ``` -The object key is the user's virtual path under `key_prefix` — a plain mapping. +La clé d’objet est le chemin virtuel de l’utilisateur sous `key_prefix` — une correspondance directe. -![SFTPGo files stored in the RustFS Console](./images/rustfs-sftpgo-home.png) +![Fichiers SFTPGo stockés dans la Console RustFS](./images/rustfs-sftpgo-home.png) -## 6. Stop or reset +## 6. Arrêter ou réinitialiser ```bash docker rm -f sftpgo rc rm rustfs/sftpgo-demo/ --recursive --force ``` -## Troubleshooting +## Dépannage -### `create resource error` / `InvalidAccessKeyId` on upload +### `create resource error` / `InvalidAccessKeyId` au chargement -Check three things in order: `force_path_style` must be `true` (SFTPGo's AWS SDK defaults to virtual-host addressing, which breaks IP endpoints), `access_secret` must use the KMS-object form, and `home_dir` must point at a writable directory (SFTPGo pipes S3 uploads through it). +Vérifiez trois points, dans l’ordre : `force_path_style` doit valoir `true` (le SDK AWS de SFTPGo utilise par défaut l’adressage de type hôte virtuel, qui ne fonctionne pas avec les points de terminaison IP), `access_secret` doit utiliser la forme d’objet KMS, et `home_dir` doit pointer vers un répertoire accessible en écriture (SFTPGo y fait transiter les chargements S3). -### `unknown command init` / admin login rejected +### `unknown command init` / connexion administrateur refusée -The admin account only exists after the web setup form is submitted once. Repeat step 2; do not reuse an old browser cookie jar. +Le compte administrateur n’existe qu’après l’envoi unique du formulaire de configuration web. Reprenez l’étape 2 ; ne réutilisez pas un ancien fichier de cookies du navigateur. -### API returns `405 Method Not allowed` for the token +### L’API renvoie `405 Method Not allowed` pour le jeton -The token endpoint only accepts `GET` with basic auth: `GET /api/v2/token`. +Le point de terminaison du jeton n’accepte que `GET` avec une authentification de base : `GET /api/v2/token`. -## Next steps +## Étapes suivantes -- Review [S3 compatibility notes](/administration/protocols/s3) before adopting additional SFTPGo backends. -- Create dedicated production credentials with [Access Key Management](/security-compliance/iam/access-token). -- Follow the [SFTPGo documentation](https://github.com/drakkan/sftpgo/blob/main/README.md) to add WebDAV/FTP listeners, per-user quotas, and two-factor auth on top of the same bucket. +- Consultez les [notes de compatibilité S3](/fr/administration/protocols/s3) avant d’adopter d’autres backends SFTPGo. +- Créez des identifiants de production dédiés avec la [gestion des clés d’accès](/fr/security-compliance/iam/access-token). +- Suivez la [documentation SFTPGo](https://github.com/drakkan/sftpgo/blob/main/README.md) pour ajouter des écouteurs WebDAV et FTP, des quotas par utilisateur et une authentification à deux facteurs sur le même compartiment. diff --git a/content/fr/developer/integration/storage/zerofs.md b/content/fr/developer/integration/storage/zerofs.md index 2dd1640b6..027955e02 100644 --- a/content/fr/developer/integration/storage/zerofs.md +++ b/content/fr/developer/integration/storage/zerofs.md @@ -1,13 +1,13 @@ --- title: "ZeroFS" -description: "Serve a RustFS bucket as a POSIX filesystem over NFS with ZeroFS." +description: "Servez un compartiment (bucket) RustFS comme système de fichiers POSIX via NFS avec ZeroFS." --- -This guide connects [ZeroFS](https://github.com/Barre/ZeroFS) — the log-structured filesystem that serves S3 buckets as POSIX filesystems — to **RustFS** as its object storage backend. You will run ZeroFS with its LSM tree rooted in a RustFS bucket, mount the filesystem over NFS on a Linux host, write files through the mount, and verify they survive a ZeroFS restart as objects in the bucket. The workflow was verified with ZeroFS v2.3.5 (ghcr.io/barre/zerofs) against `rustfs/rustfs-x86-musl:v2.3.1`. +Ce guide connecte [ZeroFS](https://github.com/Barre/ZeroFS) — le système de fichiers structuré en journal qui sert les compartiments S3 comme systèmes de fichiers POSIX — à **RustFS** comme backend de stockage objet. Vous allez exécuter ZeroFS avec son arbre LSM enraciné dans un compartiment RustFS, monter le système de fichiers via NFS sur un hôte Linux, écrire des fichiers via le point de montage, puis vérifier qu’ils survivent à un redémarrage de ZeroFS sous forme d’objets dans le compartiment. Le flux a été validé avec ZeroFS v2.3.5 (ghcr.io/barre/zerofs) et `rustfs/rustfs-x86-musl:v2.3.1`. -You need Docker and a Linux host with an NFS client (`nfs-common`). This deployment is intended for local integration testing, not production. +Vous avez besoin de Docker et d’un hôte Linux doté d’un client NFS (`nfs-common`). Ce déploiement est destiné aux tests d’intégration locaux, pas à la production. -## Architecture +## Schéma d’architecture ```mermaid flowchart LR @@ -15,11 +15,11 @@ flowchart LR ZeroFS -->|"LSM SSTs, WAL, manifests"| RustFS["RustFS :9000"] ``` -ZeroFS translates filesystem operations into an LSM key-value tree stored in the bucket: writes land in a write-ahead log, flush into SST segments, and compaction runs in the background. Clients see an ordinary directory tree over NFS (or 9P/NBD). +ZeroFS traduit les opérations du système de fichiers en un arbre clé-valeur LSM stocké dans le compartiment : les écritures arrivent dans un journal d’écriture anticipée, sont vidées dans des segments SST, et la compaction s’exécute en arrière-plan. Les clients voient une arborescence de répertoires ordinaire via NFS (ou 9P/NBD). -## 1. Generate the configuration +## 1. Générer la configuration -Create the bucket and the config file, replacing all connection placeholders: +Créez le compartiment et le fichier de configuration, en remplaçant toutes les valeurs indicatives de connexion : ```bash rc mb rustfs/zerofs-demo @@ -28,7 +28,7 @@ docker run --rm -u root:root -v /opt/zerofs:/cfg -w /cfg \ --entrypoint /bin/sh ghcr.io/barre/zerofs:latest -c "zerofs init" ``` -Then edit `zerofs.toml` so the storage and AWS sections point at RustFS: +Modifiez ensuite `zerofs.toml` pour que les sections storage et AWS pointent vers RustFS : ```toml title="zerofs.toml" [cache] @@ -53,11 +53,11 @@ default_region = "us-east-1" allow_http = "true" ``` -The `endpoint` plus `allow_http` pair is what redirects ZeroFS from AWS to RustFS. Custom endpoints use path-style addressing, so no extra option is needed. +C’est le couple `endpoint` et `allow_http` qui redirige ZeroFS d’AWS vers RustFS. Les points de terminaison personnalisés utilisent l’adressage de type chemin (path-style) ; aucune option supplémentaire n’est donc nécessaire. -## 2. Run ZeroFS +## 2. Exécuter ZeroFS -Run the server with the config file, credentials, and a writable cache directory (the image runs as UID 1001): +Exécutez le serveur avec le fichier de configuration, les identifiants et un répertoire de cache accessible en écriture (l’image s’exécute sous l’UID 1001) : ```bash mkdir -p /opt/zerofs/cache && chown -R 1001:1001 /opt/zerofs/cache @@ -75,9 +75,9 @@ docker run -d --name zerofs --network oo-rustfs_default -p 2049:2049 \ INFO zerofs::nfs: NFS server listening on 0.0.0.0:2049 ``` -## 3. Mount over NFS +## 3. Monter via NFS -On the host, mount the export with the options ZeroFS recommends: +Sur l’hôte, montez l’export avec les options recommandées par ZeroFS : ```bash apt-get install -y nfs-common @@ -87,16 +87,16 @@ mount -t nfs -o async,nolock,rsize=1048576,wsize=1048576,tcp,port=2049,mountport 127.0.0.1:/ /mnt/zerofs ``` -The mount is an ordinary POSIX filesystem: +Le montage est un système de fichiers POSIX ordinaire : ```bash echo "written via zerofs nfs mount on rustfs" > /mnt/zerofs/hello.txt dd if=/dev/urandom of=/mnt/zerofs/data/inner/blob.bin bs=1M count=8 ``` -## 4. Verify persistence and objects in RustFS +## 4. Vérifier la persistance et les objets dans RustFS -Force pending writes to the bucket, then restart ZeroFS and remount: +Forcez l’envoi des écritures en attente vers le compartiment, puis redémarrez ZeroFS et remontez : ```bash docker exec zerofs zerofs flush -c /zerofs.toml @@ -106,7 +106,7 @@ mount -t nfs -o async,nolock,rsize=1048576,wsize=1048576,tcp,port=2049,mountport 127.0.0.1:/ /mnt/zerofs ``` -Everything written before the restart is still there: +Tout ce qui a été écrit avant le redémarrage est encore présent : ```bash cat /mnt/zerofs/hello.txt @@ -118,7 +118,7 @@ written via zerofs nfs mount on rustfs 645faaefe499f9ebda8edceeeb1a6261999aece7 /mnt/zerofs/data/inner/blob.bin ``` -List the bucket to see where the files actually live: +Listez le compartiment pour voir où les fichiers résident réellement : ```bash rc ls rustfs/zerofs-demo/ -r | head -4 @@ -130,45 +130,45 @@ zerofs-data/manifest/0000000000000000.json zerofs-data/wal/00000000000000000001.sst ``` -Files are not stored 1:1 — they are keys and values inside the LSM tree, which is what lets ZeroFS serve a bucket as a filesystem. +Les fichiers ne sont pas stockés selon une correspondance 1 pour 1 — ce sont des clés et des valeurs dans l’arbre LSM, ce qui permet à ZeroFS de servir un compartiment comme système de fichiers. -![ZeroFS LSM data stored in the RustFS Console](./images/rustfs-zerofs-data.png) +![Données LSM de ZeroFS stockées dans la Console RustFS](./images/rustfs-zerofs-data.png) -## 5. Stop or reset +## 5. Arrêter ou réinitialiser -To tear down the demo while keeping the bucket objects: +Pour arrêter la démonstration tout en conservant les objets du compartiment : ```bash umount /mnt/zerofs docker rm -f zerofs ``` -To delete the stored data (this erases the filesystem itself): +Pour supprimer les données stockées (cela efface le système de fichiers lui-même) : ```bash rc rm rustfs/zerofs-demo/ --recursive --force ``` -## Troubleshooting +## Dépannage -### `Failed to parse config file: missing field uid` at `[servers.webui]` +### `Failed to parse config file: missing field uid` dans `[servers.webui]` -ZeroFS v2.3.5 requires `uid` and `gid` in the `[servers.webui]` section when it is present. Either add `uid = 1000` and `gid = 1000` or delete the section entirely if you do not need the Web UI. +ZeroFS v2.3.5 exige `uid` et `gid` dans la section `[servers.webui]` lorsqu’elle est présente. Ajoutez `uid = 1000` et `gid = 1000`, ou supprimez entièrement la section si vous n’avez pas besoin de l’interface web. -### `Permission denied` creating the cache directory +### `Permission denied` à la création du répertoire de cache -The container runs as UID 1001. After mounting the cache volume, run `chown -R 1001:1001 ` before starting the container. +Le conteneur s’exécute sous l’UID 1001. Après avoir monté le volume de cache, exécutez `chown -R 1001:1001 ` avant de démarrer le conteneur. -### Mount fails or hangs +### Le montage échoue ou reste bloqué -Confirm the NFS client package is installed (`nfs-common`) and that ZeroFS is listening on `0.0.0.0:2049` inside a network your client can reach. The `port=2049,mountport=2049` options matter because ZeroFS serves the mountd traffic on the same port. +Vérifiez que le paquet client NFS est installé (`nfs-common`) et que ZeroFS écoute sur `0.0.0.0:2049` dans un réseau que votre client peut joindre. Les options `port=2049,mountport=2049` comptent, car ZeroFS sert le trafic mountd sur le même port. -### Writes vanish after a container crash +### Les écritures disparaissent après un plantage du conteneur -ZeroFS buffers writes and flushes periodically. For the demo, run `docker exec zerofs zerofs flush -c /zerofs.toml`; in production, clients that need strict durability should fsync (or use the 9P mount, whose fsync waits for stable storage). +ZeroFS met les écritures en mémoire tampon et les vide périodiquement. Pour la démonstration, exécutez `docker exec zerofs zerofs flush -c /zerofs.toml` ; en production, les clients qui exigent une durabilité stricte devraient appeler fsync (ou utiliser le montage 9P, dont le fsync attend un stockage stable). -## Next steps +## Étapes suivantes -- Review [S3 compatibility notes](/administration/protocols/s3) before adopting additional ZeroFS backends. -- Create dedicated production credentials with [Access Key Management](/security-compliance/iam/access-token). -- Follow the [ZeroFS configuration guide](https://www.zerofs.net/configuration) for cache sizing, 9P/NBD serving, and high-availability replication over the same bucket. +- Consultez les [notes de compatibilité S3](/fr/administration/protocols/s3) avant d’adopter d’autres backends ZeroFS. +- Créez des identifiants de production dédiés avec la [gestion des clés d’accès](/fr/security-compliance/iam/access-token). +- Suivez le [guide de configuration ZeroFS](https://www.zerofs.net/configuration) pour le dimensionnement du cache, le service 9P/NBD et la réplication à haute disponibilité sur le même compartiment. diff --git a/content/fr/developer/license.md b/content/fr/developer/license.md index f2910342b..1d9db0467 100644 --- a/content/fr/developer/license.md +++ b/content/fr/developer/license.md @@ -1,192 +1,86 @@ --- -title: RustFS Open Source License -description: RustFS is released under the Apache 2.0 license. +title: Licence open source de RustFS +description: RustFS est publié sous la licence Apache 2.0. --- -## Open Source License +## Licence open source -- RustFS is released under the Apache 2.0 license. +- RustFS est publié sous la licence Apache 2.0. - [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0) -## License Terms +## Conditions de licence -_Version 2.0, January 2004_ +_Version 2.0, janvier 2004_ http://www.apache.org/licenses/ -### Terms and Conditions for use, reproduction, and distribution - -#### Definitions - -"License" shall mean the terms and conditions for use, reproduction, and -distribution as defined by Sections 1 through 9 of this document. - -"Licensor" shall mean the copyright owner or entity authorized by the copyright -owner that is granting the License. - -"Legal Entity" shall mean the union of the acting entity and all other entities -that control, are controlled by, or are under common control with that entity. -For the purposes of this definition, "control" means **(i)** the power, direct or -indirect, to cause the direction or management of such entity, whether by -contract or otherwise, or **(ii)** ownership of fifty percent (50%) or more of the -outstanding shares, or **(iii)** beneficial ownership of such entity. - -"You" (or "Your") shall mean an individual or Legal Entity exercising -permissions granted by this License. - -"Source" form shall mean the preferred form for making modifications, including -but not limited to software source code, documentation source, and configuration -files. - -"Object" form shall mean any form resulting from mechanical transformation or -translation of a Source form, including but not limited to compiled object code, -generated documentation, and conversions to other media types. - -"Work" shall mean the work of authorship, whether in Source or Object form, made -available under the License, as indicated by a copyright notice that is included -in or attached to the work (an example is provided in the Appendix below). - -"Derivative Works" shall mean any work, whether in Source or Object form, that -is based on (or derived from) the Work and for which the editorial revisions, -annotations, elaborations, or other modifications represent, as a whole, an -original work of authorship. For the purposes of this License, Derivative Works -shall not include works that remain separable from, or merely link (or bind by -name) to the interfaces of, the Work and Derivative Works thereof. - -"Contribution" shall mean any work of authorship, including the original version -of the Work and any modifications or additions to that Work or Derivative Works -thereof, that is intentionally submitted to Licensor for inclusion in the Work -by the copyright owner or by an individual or Legal Entity authorized to submit -on behalf of the copyright owner. For the purposes of this definition, -"submitted" means any form of electronic, verbal, or written communication sent -to the Licensor or its representatives, including but not limited to -communication on electronic mailing lists, source code control systems, and -issue tracking systems that are managed by, or on behalf of, the Licensor for -the purpose of discussing and improving the Work, but excluding communication -that is conspicuously marked or otherwise designated in writing by the copyright -owner as "Not a Contribution." - -"Contributor" shall mean Licensor and any individual or Legal Entity on behalf -of whom a Contribution has been received by Licensor and subsequently -incorporated within the Work. - -#### Grant of Copyright License - -Subject to the terms and conditions of this License, each Contributor hereby -grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, -irrevocable copyright license to reproduce, prepare Derivative Works of, -publicly display, publicly perform, sublicense, and distribute the Work and such -Derivative Works in Source or Object form. - -#### Grant of Patent License - -Subject to the terms and conditions of this License, each Contributor hereby -grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, -irrevocable (except as stated in this section) patent license to make, have -made, use, offer to sell, sell, import, and otherwise transfer the Work, where -such license applies only to those patent claims licensable by such Contributor -that are necessarily infringed by their Contribution(s) alone or by combination -of their Contribution(s) with the Work to which such Contribution(s) was -submitted. If You institute patent litigation against any entity (including a -cross-claim or counterclaim in a lawsuit) alleging that the Work or a -Contribution incorporated within the Work constitutes direct or contributory -patent infringement, then any patent licenses granted to You under this License -for that Work shall terminate as of the date such litigation is filed. +### Conditions d’utilisation, de reproduction et de distribution + +#### Définitions + +« Licence » désigne les conditions d’utilisation, de reproduction et de distribution définies par les sections 1 à 9 du présent document. + +« Concédant » désigne le titulaire du droit d’auteur, ou l’entité autorisée par le titulaire du droit d’auteur, qui accorde la Licence. + +« Entité juridique » désigne l’union de l’entité agissante et de toutes les autres entités qui la contrôlent, qui sont contrôlées par elle, ou qui sont placées sous un contrôle commun avec elle. Aux fins de la présente définition, « contrôle » signifie **(i)** le pouvoir, direct ou indirect, d’orienter ou de gérer cette entité, que ce soit par contrat ou autrement, ou **(ii)** la propriété de cinquante pour cent (50 %) ou plus des actions en circulation, ou **(iii)** la propriété effective de cette entité. + +« Vous » (ou « Votre ») désigne une personne physique ou une Entité juridique qui exerce les autorisations accordées par la présente Licence. + +La forme « Source » désigne la forme privilégiée pour apporter des modifications, y compris, sans s’y limiter, le code source du logiciel, la source de la documentation et les fichiers de configuration. + +La forme « Objet » désigne toute forme résultant d’une transformation mécanique ou d’une traduction d’une forme Source, y compris, sans s’y limiter, le code objet compilé, la documentation générée et les conversions vers d’autres types de supports. + +« Œuvre » désigne l’œuvre de l’esprit, sous forme Source ou Objet, mise à disposition sous la Licence, comme l’indique un avis de droit d’auteur inclus dans l’œuvre ou joint à celle-ci (un exemple figure dans l’annexe ci-dessous). + +« Œuvres dérivées » désigne toute œuvre, sous forme Source ou Objet, fondée sur l’Œuvre (ou dérivée de celle-ci) et dont les révisions rédactionnelles, annotations, élaborations ou autres modifications représentent, dans leur ensemble, une œuvre originale. Aux fins de la présente Licence, les Œuvres dérivées n’incluent pas les œuvres qui restent séparables de l’Œuvre et de ses Œuvres dérivées, ou qui se contentent d’y créer un lien (ou de s’y lier par le nom) au niveau de leurs interfaces. + +« Contribution » désigne toute œuvre de l’esprit, y compris la version originale de l’Œuvre et toute modification ou tout ajout à cette Œuvre ou à ses Œuvres dérivées, soumise intentionnellement au Concédant pour inclusion dans l’Œuvre par le titulaire du droit d’auteur, ou par une personne physique ou une Entité juridique autorisée à la soumettre au nom du titulaire du droit d’auteur. Aux fins de la présente définition, « soumise » désigne toute forme de communication électronique, verbale ou écrite envoyée au Concédant ou à ses représentants, y compris, sans s’y limiter, les communications sur les listes de diffusion électroniques, les systèmes de contrôle du code source et les systèmes de suivi des problèmes gérés par le Concédant, ou pour son compte, afin de discuter de l’Œuvre et de l’améliorer. En sont exclues les communications que le titulaire du droit d’auteur a marquées de façon visible, ou autrement désignées par écrit, comme « Not a Contribution ». + +« Contributeur » désigne le Concédant et toute personne physique ou Entité juridique pour le compte de laquelle une Contribution a été reçue par le Concédant, puis incorporée dans l’Œuvre. + +#### Concession de la licence de droit d’auteur + +Sous réserve des conditions de la présente Licence, chaque Contributeur vous accorde par les présentes une licence de droit d’auteur perpétuelle, mondiale, non exclusive, sans frais, libre de redevance et irrévocable, pour reproduire l’Œuvre, en préparer des Œuvres dérivées, l’afficher publiquement, l’exécuter publiquement, la concéder en sous-licence et la distribuer, ainsi que ces Œuvres dérivées, sous forme Source ou Objet. + +#### Concession de la licence de brevet + +Sous réserve des conditions de la présente Licence, chaque Contributeur vous accorde par les présentes une licence de brevet perpétuelle, mondiale, non exclusive, sans frais, libre de redevance et irrévocable (sauf disposition contraire de la présente section) pour fabriquer, faire fabriquer, utiliser, proposer à la vente, vendre, importer et autrement transférer l’Œuvre. Cette licence ne s’applique qu’aux revendications de brevet que ce Contributeur peut concéder et qui sont nécessairement contrefaites par sa ou ses seules Contributions, ou par la combinaison de sa ou ses Contributions avec l’Œuvre à laquelle cette ou ces Contributions ont été soumises. Si vous engagez un litige en matière de brevet contre une entité (y compris une demande reconventionnelle ou une demande incidente dans une action) en alléguant que l’Œuvre, ou une Contribution incorporée dans l’Œuvre, constitue une contrefaçon directe ou contributive de brevet, alors toute licence de brevet qui vous a été accordée en vertu de la présente Licence pour cette Œuvre prend fin à la date de l’introduction de ce litige. #### Redistribution -You may reproduce and distribute copies of the Work or Derivative Works thereof -in any medium, with or without modifications, and in Source or Object form, -provided that You meet the following conditions: - -* **(a)** You must give any other recipients of the Work or Derivative Works a copy of -this License; and -* **(b)** You must cause any modified files to carry prominent notices stating that You -changed the files; and -* **(c)** You must retain, in the Source form of any Derivative Works that You distribute, -all copyright, patent, trademark, and attribution notices from the Source form -of the Work, excluding those notices that do not pertain to any part of the -Derivative Works; and -* **(d)** If the Work includes a "NOTICE" text file as part of its distribution, then any -Derivative Works that You distribute must include a readable copy of the -attribution notices contained within such NOTICE file, excluding those notices -that do not pertain to any part of the Derivative Works, in at least one of the -following places: within a NOTICE text file distributed as part of the -Derivative Works; within the Source form or documentation, if provided along -with the Derivative Works; or, within a display generated by the Derivative -Works, if and wherever such third-party notices normally appear. The contents of -the NOTICE file are for informational purposes only and do not modify the -License. You may add Your own attribution notices within Derivative Works that -You distribute, alongside or as an addendum to the NOTICE text from the Work, -provided that such additional attribution notices cannot be construed as -modifying the License. - -You may add Your own copyright statement to Your modifications and may provide -additional or different license terms and conditions for use, reproduction, or -distribution of Your modifications, or for any such Derivative Works as a whole, -provided Your use, reproduction, and distribution of the Work otherwise complies -with the conditions stated in this License. - -#### Submission of Contributions - -Unless You explicitly state otherwise, any Contribution intentionally submitted -for inclusion in the Work by You to the Licensor shall be under the terms and -conditions of this License, without any additional terms or conditions. -Notwithstanding the above, nothing herein shall supersede or modify the terms of -any separate license agreement you may have executed with Licensor regarding -such Contributions. - -#### Trademarks - -This License does not grant permission to use the trade names, trademarks, -service marks, or product names of the Licensor, except as required for -reasonable and customary use in describing the origin of the Work and -reproducing the content of the NOTICE file. - -#### Disclaimer of Warranty - -Unless required by applicable law or agreed to in writing, Licensor provides the -Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, -including, without limitation, any warranties or conditions of TITLE, -NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are -solely responsible for determining the appropriateness of using or -redistributing the Work and assume any risks associated with Your exercise of -permissions under this License. - -#### Limitation of Liability - -In no event and under no legal theory, whether in tort (including negligence), -contract, or otherwise, unless required by applicable law (such as deliberate -and grossly negligent acts) or agreed to in writing, shall any Contributor be -liable to You for damages, including any direct, indirect, special, incidental, -or consequential damages of any character arising as a result of this License or -out of the use or inability to use the Work (including but not limited to -damages for loss of goodwill, work stoppage, computer failure or malfunction, or -any and all other commercial damages or losses), even if such Contributor has -been advised of the possibility of such damages. - -#### Accepting Warranty or Additional Liability - -While redistributing the Work or Derivative Works thereof, You may choose to -offer, and charge a fee for, acceptance of support, warranty, indemnity, or -other liability obligations and/or rights consistent with this License. However, -in accepting such obligations, You may act only on Your own behalf and on Your -sole responsibility, not on behalf of any other Contributor, and only if You -agree to indemnify, defend, and hold each Contributor harmless for any liability -incurred by, or claims asserted against, such Contributor by reason of your -accepting any such warranty or additional liability. - -_END OF TERMS AND CONDITIONS_ - -### APPENDIX: How to apply the Apache License to your work - -To apply the Apache License to your work, attach the following boilerplate -notice, with the fields enclosed by brackets `[]` replaced with your own -identifying information. (Don't include the brackets!) The text should be -enclosed in the appropriate comment syntax for the file format. We also -recommend that a file or class name and description of purpose be included on -the same "printed page" as the copyright notice for easier identification within -third-party archives. +Vous pouvez reproduire et distribuer des copies de l’Œuvre ou de ses Œuvres dérivées sur tout support, avec ou sans modification, et sous forme Source ou Objet, à condition de respecter les conditions suivantes : + +* **(a)** Vous devez remettre à tout autre destinataire de l’Œuvre ou des Œuvres dérivées une copie de la présente Licence ; et +* **(b)** Vous devez faire en sorte que tout fichier modifié porte des mentions bien visibles indiquant que vous avez modifié les fichiers ; et +* **(c)** Vous devez conserver, dans la forme Source de toute Œuvre dérivée que vous distribuez, tous les avis de droit d’auteur, de brevet, de marque et d’attribution issus de la forme Source de l’Œuvre, à l’exclusion des avis qui ne concernent aucune partie des Œuvres dérivées ; et +* **(d)** Si l’Œuvre comprend un fichier texte « NOTICE » dans le cadre de sa distribution, toute Œuvre dérivée que vous distribuez doit inclure une copie lisible des avis d’attribution contenus dans ce fichier NOTICE, à l’exclusion des avis qui ne concernent aucune partie des Œuvres dérivées, à au moins l’un des emplacements suivants : dans un fichier texte NOTICE distribué avec les Œuvres dérivées ; dans la forme Source ou dans la documentation, si elle est fournie avec les Œuvres dérivées ; ou dans un affichage généré par les Œuvres dérivées, partout où de tels avis de tiers apparaissent normalement. Le contenu du fichier NOTICE est fourni à titre informatif uniquement et ne modifie pas la Licence. Vous pouvez ajouter vos propres avis d’attribution dans les Œuvres dérivées que vous distribuez, à côté du texte NOTICE de l’Œuvre ou en annexe de celui-ci, à condition que ces avis d’attribution supplémentaires ne puissent pas être interprétés comme une modification de la Licence. + +Vous pouvez ajouter votre propre mention de droit d’auteur à vos modifications et prévoir des conditions de licence supplémentaires ou différentes pour l’utilisation, la reproduction ou la distribution de vos modifications, ou pour l’ensemble de telles Œuvres dérivées, à condition que votre utilisation, votre reproduction et votre distribution de l’Œuvre respectent par ailleurs les conditions énoncées dans la présente Licence. + +#### Soumission des contributions + +Sauf indication explicite de votre part, toute Contribution que vous soumettez intentionnellement au Concédant pour inclusion dans l’Œuvre est régie par les conditions de la présente Licence, sans condition supplémentaire. Nonobstant ce qui précède, rien dans les présentes ne remplace ni ne modifie les conditions de tout accord de licence distinct que vous auriez conclu avec le Concédant au sujet de ces Contributions. + +#### Marques + +La présente Licence n’autorise pas l’utilisation des noms commerciaux, marques, marques de service ou noms de produits du Concédant, sauf dans la mesure nécessaire à un usage raisonnable et habituel pour décrire l’origine de l’Œuvre et reproduire le contenu du fichier NOTICE. + +#### Exclusion de garantie + +Sauf exigence de la loi applicable ou accord écrit, le Concédant fournit l’Œuvre (et chaque Contributeur fournit ses Contributions) « EN L’ÉTAT », SANS GARANTIE NI CONDITION D’AUCUNE SORTE, expresse ou implicite, y compris, sans limitation, toute garantie ou condition de TITRE, d’ABSENCE DE CONTREFAÇON, de QUALITÉ MARCHANDE ou d’ADÉQUATION À UN USAGE PARTICULIER. Il vous appartient seul de déterminer si l’utilisation ou la redistribution de l’Œuvre est appropriée, et vous assumez tout risque lié à l’exercice des autorisations accordées par la présente Licence. + +#### Limitation de responsabilité + +En aucun cas et selon aucune théorie juridique, qu’il s’agisse de responsabilité délictuelle (y compris la négligence), contractuelle ou autre, et sauf exigence de la loi applicable (notamment en cas d’actes délibérés et de négligence grave) ou d’un accord écrit, un Contributeur ne saurait être tenu responsable envers vous de dommages, y compris tout dommage direct, indirect, spécial, accessoire ou consécutif de quelque nature que ce soit résultant de la présente Licence, ou de l’utilisation ou de l’impossibilité d’utiliser l’Œuvre (y compris, sans s’y limiter, les dommages pour perte de clientèle, interruption de travail, panne ou dysfonctionnement informatique, ou tout autre dommage ou perte commerciale), même si ce Contributeur a été informé de la possibilité de tels dommages. + +#### Acceptation d’une garantie ou d’une responsabilité supplémentaire + +Lors de la redistribution de l’Œuvre ou de ses Œuvres dérivées, vous pouvez choisir d’offrir, moyennant rémunération, une assistance, une garantie, une indemnisation ou d’autres obligations et/ou droits de responsabilité compatibles avec la présente Licence. Toutefois, en acceptant de telles obligations, vous ne pouvez agir qu’en votre propre nom et sous votre seule responsabilité, et non au nom d’un autre Contributeur, et seulement si vous acceptez d’indemniser et de défendre chaque Contributeur, et de le dégager de toute responsabilité encourue ou de toute réclamation formulée contre lui en raison de votre acceptation d’une telle garantie ou responsabilité supplémentaire. + +_FIN DES CONDITIONS_ + +### ANNEXE : comment appliquer la licence Apache à votre œuvre + +Pour appliquer la licence Apache à votre œuvre, joignez l’avis type suivant, en remplaçant les champs entre crochets `[]` par vos propres informations d’identification. (N’incluez pas les crochets !) Le texte doit être placé dans la syntaxe de commentaire adaptée au format du fichier. Nous recommandons aussi d’indiquer, sur la même « page imprimée » que l’avis de droit d’auteur, le nom du fichier ou de la classe ainsi qu’une description de l’objet, afin d’en faciliter l’identification dans les archives de tiers. Copyright 2024-2026 RustFS, Inc. diff --git a/content/fr/developer/mcp.md b/content/fr/developer/mcp.md index fd997b019..67436ed7e 100644 --- a/content/fr/developer/mcp.md +++ b/content/fr/developer/mcp.md @@ -1,38 +1,38 @@ --- title: "RustFS MCP" -description: "RustFS MCP Usage Guide" +description: "Connectez des assistants d’IA au stockage objet RustFS avec le serveur MCP RustFS." --- -**RustFS MCP Server** is a high-performance [Model Context Protocol (MCP)](https://www.anthropic.com/news/model-context-protocol) server that provides AI/LLM tools with seamless access to S3-compatible object storage operations. Built with Rust for performance and security, it enables AI assistants like Claude Desktop to interact with cloud storage through standardized protocols. +Le **RustFS MCP Server** est un serveur [Model Context Protocol (MCP)](https://www.anthropic.com/news/model-context-protocol) qui donne aux assistants d’IA, tels que Claude Desktop, un accès à un stockage objet compatible avec S3. -### What is MCP? +### Qu’est-ce que MCP ? -The Model Context Protocol is an open standard that enables AI applications to establish secure, controlled connections with external systems. This server acts as a bridge between AI tools and S3-compatible storage services, providing structured access to file operations while maintaining security and observability. +Le Model Context Protocol est une norme ouverte qui permet aux applications d’IA d’établir des connexions sécurisées et contrôlées avec des systèmes externes. Ce serveur fait le lien entre les outils d’IA et les services de stockage compatibles avec S3 : il offre un accès structuré aux opérations sur les fichiers, tout en conservant la sécurité et l’observabilité. -## ✨ Features +## Fonctionnalités -### Supported S3 Operations +### Opérations S3 prises en charge -- **List Buckets**: Lists all accessible S3 buckets. -- **List Objects**: Browses bucket contents with optional prefix filtering. -- **Upload Files**: Uploads local files with automatic MIME type detection and cache control. -- **Get Objects**: Retrieves objects from S3 storage, supporting read or download modes. +- **Lister les compartiments** : liste tous les compartiments (buckets) S3 accessibles. +- **Lister les objets** : parcourt le contenu d’un compartiment, avec un filtrage facultatif par préfixe. +- **Charger des fichiers** : charge (upload) des fichiers locaux, avec détection automatique du type MIME et contrôle de cache. +- **Obtenir des objets** : récupère des objets du stockage S3, en lecture ou en téléchargement. -## 🔧 Installation +## Installation -:::warning[Build instructions may be outdated] +:::warning[Les instructions de compilation peuvent être obsolètes] -The `rustfs-mcp` crate is no longer part of the current `rustfs/rustfs` main branch, so the build commands below may fail against a fresh clone. Check the [RustFS GitHub organization](https://github.com/rustfs) for the MCP server's current location before building from source. +La crate `rustfs-mcp` ne fait plus partie de la branche principale actuelle de `rustfs/rustfs`. Les commandes de compilation ci-dessous peuvent donc échouer sur un clone récent. Consultez l’[organisation GitHub RustFS](https://github.com/rustfs) pour connaître l’emplacement actuel du serveur MCP avant de compiler depuis les sources. ::: -### Prerequisites +### Prérequis -- Rust 1.75+ (for building from source) -- Configured AWS credentials (via environment variables, AWS CLI, or IAM roles) -- Access to S3-compatible storage services +- Rust 1.75+ (pour une compilation depuis les sources) +- Identifiants AWS configurés (via des variables d’environnement, l’AWS CLI ou des rôles IAM) +- Accès à des services de stockage compatibles avec S3 -### Building from Source +### Compilation depuis les sources ```bash # Clone the repository @@ -46,9 +46,9 @@ cargo build --release -p rustfs-mcp ./target/release/rustfs-mcp ``` -## ⚙️ Configuration +## Configuration -### Environment Variables +### Variables d’environnement ```bash # AWS credentials (required) @@ -63,23 +63,23 @@ export AWS_ENDPOINT_URL=http://localhost:9000 export RUST_LOG=info ``` -### Command Line Options +### Options de ligne de commande ```bash rustfs-mcp --help ``` -The server supports various command line options to customize behavior: +Le serveur propose plusieurs options de ligne de commande pour adapter son comportement : -- `--access-key-id`: AWS access key ID for S3 authentication -- `--secret-access-key`: AWS secret key for S3 authentication -- `--region`: AWS region for S3 operations (default: us-east-1) -- `--endpoint-url`: Custom S3 endpoint URL (for MinIO, LocalStack, etc.) -- `--log-level`: Log level configuration (default: rustfs_mcp_server=info) +- `--access-key-id` : ID de clé d’accès AWS pour l’authentification S3 +- `--secret-access-key` : clé secrète AWS pour l’authentification S3 +- `--region` : région AWS pour les opérations S3 (valeur par défaut : us-east-1) +- `--endpoint-url` : URL de point de terminaison S3 personnalisée (pour MinIO, LocalStack, etc.) +- `--log-level` : niveau de journalisation (valeur par défaut : rustfs_mcp_server=info) -## 🚀 Usage +## Utilisation -### Starting the Server +### Démarrage du serveur ```bash # Start the MCP server @@ -89,9 +89,9 @@ rustfs-mcp rustfs-mcp --log-level debug --region us-west-2 ``` -### Integration with Chat Clients +### Intégration avec les clients de discussion -#### Option 1: Using Command Line Arguments +#### Option 1 : arguments de ligne de commande ```json { @@ -109,7 +109,7 @@ rustfs-mcp --log-level debug --region us-west-2 } ``` -#### Option 2: Using Environment Variables +#### Option 2 : variables d’environnement ```json { @@ -126,9 +126,9 @@ rustfs-mcp --log-level debug --region us-west-2 } ``` -### Using with Docker +### Utilisation avec Docker -[RustFS MCP officially provides a Dockerfile](https://github.com/rustfs/rustfs/tree/main/crates/mcp) that can be used to build container images for using RustFS MCP. +RustFS MCP fournit un [Dockerfile officiel](https://github.com/rustfs/rustfs/tree/main/crates/mcp) que vous pouvez utiliser pour construire une image de conteneur. ```bash # Clone RustFS repository code @@ -138,11 +138,11 @@ git clone https://github.com/rustfs/rustfs.git docker build -f crates/mcp/Dockerfile -t rustfs/rustfs-mcp . ``` -After successful build, you can configure it in the MCP configuration of AI IDEs. +Une fois la construction réussie, ajoutez le serveur à la configuration MCP de votre IDE. -#### Configuring MCP in AI IDEs +#### Configuration de MCP dans les IDE d’IA -Currently, mainstream AI IDEs such as Cursor, Windsurf, Trae, etc. all support MCP. For example, in Trae, add the following content to the MCP configuration (**MCP --> Add**): +De nombreux IDE d’IA, tels que Cursor, Windsurf et Trae, prennent en charge MCP. Dans Trae, par exemple, ajoutez le contenu suivant à la configuration MCP (**MCP --> Add**) : ```json { @@ -174,88 +174,88 @@ Currently, mainstream AI IDEs such as Cursor, Windsurf, Trae, etc. all support M } ``` -> `AWS_ACCESS_KEY_ID` and `AWS_SECRET_ACCESS_KEY` are RustFS access keys. You can refer to the [Access Key Management chapter](../security-compliance/iam/access-token.md) for creation. +> `AWS_ACCESS_KEY_ID` et `AWS_SECRET_ACCESS_KEY` sont des clés d’accès RustFS. Pour les créer, consultez la [gestion des clés d’accès](../security-compliance/iam/access-token.md). -If added successfully, you can list the [available tools](#️-available-tools) on the MCP configuration page. +Si le serveur est ajouté avec succès, la page de configuration MCP liste ses [outils disponibles](#outils-disponibles). -![add rustfs mcp in trae mcp configuration successfully](images/add-rustfs-mcp-succ.png) +![Serveur MCP RustFS ajouté à la configuration MCP dans Trae](images/add-rustfs-mcp-succ.png) -In Trae, you can use the corresponding tools by entering the corresponding prompts. For example, in Trae's chat dialog, enter: +Pour invoquer un outil MCP dans Trae, saisissez une invite dans la discussion. Par exemple : ```text Please help me list the buckets in the current rustfs instance, thank you! ``` -Returns the following response: +Trae renvoie la réponse suivante : -![list rustfs bucket with rustfs mcp](images/list-rustfs-bucket-with-mcp.png) +![Liste des compartiments RustFS avec RustFS MCP](images/list-rustfs-bucket-with-mcp.png) -Trae uses **Builder with MCP** mode, calling the `list_buckets` tool to list all buckets in the configured RustFS instance. The same applies to calls to other tools. +Trae utilise le mode **Builder with MCP** (générateur avec MCP) et appelle l’outil `list_buckets` pour lister tous les compartiments de l’instance RustFS configurée. Les autres outils fonctionnent de la même manière. -## 🛠️ Available Tools +## Outils disponibles -The MCP server exposes the following tools that AI assistants can use: +Le serveur MCP expose les outils suivants, que les assistants d’IA peuvent utiliser : ### `list_buckets` -Lists all S3 buckets accessible with the configured credentials. +Liste tous les compartiments S3 accessibles avec les identifiants configurés. -**Parameters**: None +**Paramètres** : aucun ### `list_objects` -Lists objects in an S3 bucket with optional prefix filtering. +Liste les objets d’un compartiment S3, avec un filtrage facultatif par préfixe. -**Parameters**: +**Paramètres** : -- `bucket_name` (string): Name of the S3 bucket -- `prefix` (string, optional): Prefix for filtering objects +- `bucket_name` (chaîne) : nom du compartiment S3 +- `prefix` (chaîne, facultatif) : préfixe pour filtrer les objets ### `upload_file` -Uploads a local file to S3 with automatic MIME type detection. +Charge un fichier local vers S3, avec détection automatique du type MIME. -**Parameters**: +**Paramètres** : -- `local_file_path` (string): Local file path -- `bucket_name` (string): Target S3 bucket -- `object_key` (string): S3 object key (target path) -- `content_type` (string, optional): Content type (auto-detected if not provided) -- `storage_class` (string, optional): S3 storage class -- `cache_control` (string, optional): Cache control header +- `local_file_path` (chaîne) : chemin du fichier local +- `bucket_name` (chaîne) : compartiment S3 cible +- `object_key` (chaîne) : clé d’objet S3 (chemin cible) +- `content_type` (chaîne, facultatif) : type de contenu (détecté automatiquement s’il n’est pas fourni) +- `storage_class` (chaîne, facultatif) : classe de stockage S3 +- `cache_control` (chaîne, facultatif) : en-tête de contrôle de cache ### `get_object` -Retrieves objects from S3 with two operation modes: direct content reading or download to file. +Récupère des objets depuis S3 selon deux modes : lecture directe du contenu, ou téléchargement vers un fichier. -**Parameters**: +**Paramètres** : -- `bucket_name` (string): Source S3 bucket -- `object_key` (string): S3 object key -- `version_id` (string, optional): Version ID for versioned objects -- `mode` (string, optional): Operation mode - "read" (default) returns content directly, "download" saves to local file -- `local_path` (string, optional): Local file path (required when mode is "download") -- `max_content_size` (number, optional): Maximum content size for read mode in bytes (default: 1MB) +- `bucket_name` (chaîne) : compartiment S3 source +- `object_key` (chaîne) : clé d’objet S3 +- `version_id` (chaîne, facultatif) : ID de version pour les objets versionnés +- `mode` (chaîne, facultatif) : mode d’opération. « read » (valeur par défaut) renvoie le contenu directement ; « download » l’enregistre dans un fichier local +- `local_path` (chaîne, facultatif) : chemin du fichier local (obligatoire lorsque le mode est « download ») +- `max_content_size` (nombre, facultatif) : taille maximale du contenu en mode lecture, en octets (valeur par défaut : 1MB) ### `create_bucket` -Creates a new RustFS bucket. +Crée un nouveau compartiment RustFS. -**Parameters**: +**Paramètres** : -- `bucket_name` (string): Name of the bucket to create. +- `bucket_name` (chaîne) : nom du compartiment à créer. ### `delete_bucket` -Deletes the specified RustFS bucket. +Supprime le compartiment RustFS indiqué. -**Parameters**: +**Paramètres** : -- `bucket_name` (string): Name of the bucket to delete. +- `bucket_name` (chaîne) : nom du compartiment à supprimer. ## Architecture -The MCP server is built with a modular architecture: +Le serveur MCP repose sur une architecture modulaire : ```text rustfs-mcp/ diff --git a/content/fr/developer/sdk/go.md b/content/fr/developer/sdk/go.md index b40cab279..ca042722b 100644 --- a/content/fr/developer/sdk/go.md +++ b/content/fr/developer/sdk/go.md @@ -1,23 +1,23 @@ --- -title: "Golang SDK Guide" -description: "Use the AWS SDK for Go v2 to operate on RustFS instances, including creating and deleting buckets and objects." +title: "Guide du SDK Go" +description: "Utilisez le SDK AWS pour Go v2 afin d’agir sur des instances RustFS, notamment pour créer et supprimer des compartiments et des objets." --- -RustFS ships no first-party Go SDK — it is fully S3-compatible, so you use the official AWS SDK for Go v2 configured to point at your RustFS server. Through the SDK, you can operate on RustFS, including creating and deleting buckets/objects, uploading and downloading files, etc. +RustFS ne fournit pas de SDK Go propre. Il est compatible avec S3 : vous utilisez donc le SDK AWS officiel pour Go v2, configuré pour pointer vers votre serveur RustFS. Avec ce SDK, vous pouvez créer et supprimer des compartiments (buckets), charger (upload) et télécharger des objets, ainsi que les supprimer. -## Prerequisites +## Prérequis -- Go 1.21 or later -- A working RustFS instance (refer to [Installation Guide](../../installation/index.md)) — the S3 API listens on port `9000`, the Console on port `9001` -- Access keys, set at install time via the `RUSTFS_ACCESS_KEY` / `RUSTFS_SECRET_KEY` environment variables (refer to [Access Key Management](../../security-compliance/iam/access-token.md)) +- Go 1.21 ou ultérieur +- Une instance RustFS opérationnelle (reportez-vous au [guide d’installation](../../installation/index.md)) : l’API S3 écoute sur le port `9000`, la Console sur le port `9001` +- Des clés d’accès, définies à l’installation par les variables d’environnement `RUSTFS_ACCESS_KEY` / `RUSTFS_SECRET_KEY` (reportez-vous à la [gestion des clés d’accès](../../security-compliance/iam/access-token.md)) -:::tip[Local test] +:::tip[Essai local] -If you did not set credentials at install time, the server defaults to `rustfsadmin` / `rustfsadmin` — fine for a throwaway local trial, never for anything reachable by others. +Si vous n’avez pas défini d’identifiants à l’installation, le serveur utilise par défaut `rustfsadmin` / `rustfsadmin`. Cela convient à un essai local jetable, jamais à une instance accessible à d’autres personnes. ::: -Install the SDK modules: +Installez les modules du SDK : ```bash go mod init rustfs-go-demo @@ -26,9 +26,9 @@ go get github.com/aws/aws-sdk-go-v2/credentials go get github.com/aws/aws-sdk-go-v2/service/s3 ``` -## Initializing the Client +## Initialiser le client -The following is a complete, runnable program. It reads its configuration from environment variables and initializes the client from an `aws.Config`: +Le programme suivant est complet et exécutable. Il lit sa configuration dans les variables d’environnement et initialise le client à partir d’un `aws.Config` : ```go title="main.go" package main @@ -83,11 +83,11 @@ func main() { :::note -These environment variable names (`RUSTFS_ENDPOINT_URL`, `RUSTFS_REGION`, `RUSTFS_ACCESS_KEY_ID`, `RUSTFS_SECRET_ACCESS_KEY`) are just this example's client-side conventions — they are read by your Go program, not by RustFS. They are distinct from the server-side `RUSTFS_ACCESS_KEY` / `RUSTFS_SECRET_KEY` variables used when installing RustFS. +Ces noms de variables d’environnement (`RUSTFS_ENDPOINT_URL`, `RUSTFS_REGION`, `RUSTFS_ACCESS_KEY_ID`, `RUSTFS_SECRET_ACCESS_KEY`) ne sont que des conventions côté client propres à cet exemple : c’est votre programme Go qui les lit, et non RustFS. Ces noms sont distincts des variables côté serveur `RUSTFS_ACCESS_KEY` / `RUSTFS_SECRET_KEY`, utilisées lors de l’installation de RustFS. ::: -Run it (replace `localhost` with your server's IP address if RustFS runs on another machine): +Exécutez-le (remplacez `localhost` par l’adresse IP de votre serveur si RustFS s’exécute sur une autre machine) : ```bash export RUSTFS_ENDPOINT_URL="http://localhost:9000" @@ -102,9 +102,9 @@ Buckets: - my-bucket ``` -You can now perform bucket and object operations. The snippets below run inside the `main` function above, reusing `client` and `ctx`. +Vous pouvez maintenant effectuer des opérations sur les compartiments et les objets. Les extraits ci-dessous s’exécutent dans la fonction `main` ci-dessus et réutilisent `client` et `ctx`. -## Create Bucket +## Créer un compartiment ```go _, err = client.CreateBucket(ctx, &s3.CreateBucketInput{ @@ -120,7 +120,7 @@ fmt.Println("bucket created") bucket created ``` -## List Buckets +## Lister les compartiments ```go resp, err := client.ListBuckets(ctx, &s3.ListBucketsInput{}) @@ -139,7 +139,7 @@ Buckets: - my-bucket ``` -## Delete Bucket +## Supprimer un compartiment ```go _, err = client.DeleteBucket(ctx, &s3.DeleteBucketInput{ @@ -155,7 +155,7 @@ fmt.Println("bucket deleted") bucket deleted ``` -## List Objects +## Lister les objets ```go resp, err := client.ListObjectsV2(ctx, &s3.ListObjectsV2Input{ @@ -173,9 +173,9 @@ for _, obj := range resp.Contents { - hello.txt ``` -## Upload Object +## Charger un objet -Uploading a string body (add `"strings"` to your imports): +Chargement d’un corps sous forme de chaîne (ajoutez `"strings"` à vos importations) : ```go _, err = client.PutObject(ctx, &s3.PutObjectInput{ @@ -193,9 +193,9 @@ fmt.Println("object uploaded") object uploaded ``` -## Download Object +## Télécharger un objet -Reading the object body (add `"io"` to your imports): +Lecture du corps de l’objet (ajoutez `"io"` à vos importations) : ```go resp, err := client.GetObject(ctx, &s3.GetObjectInput{ @@ -219,4 +219,4 @@ fmt.Println("content is :", string(data)) content is : hello rustfs ``` -For other operations (presigned URLs, multipart uploads, and more), see the [AWS SDK for Go v2 documentation](https://aws.github.io/aws-sdk-go-v2/docs/) — every S3-compatible call works against RustFS the same way. +Pour les autres opérations (URL présignées, chargements partitionnés, etc.), consultez la [documentation de l’AWS SDK pour Go v2](https://aws.github.io/aws-sdk-go-v2/docs/). La plupart des opérations S3 fonctionnent de la même manière avec RustFS ; les exceptions sont décrites dans la [compatibilité S3](/fr/reference/s3-compatibility). diff --git a/content/fr/developer/sdk/index.md b/content/fr/developer/sdk/index.md index f57b4164b..f5c75fbbb 100644 --- a/content/fr/developer/sdk/index.md +++ b/content/fr/developer/sdk/index.md @@ -1,43 +1,41 @@ --- -title: "RustFS SDK Overview" -description: "Overview of supported S3 SDKs for RustFS." +title: "SDK" +description: "Cette page présente les SDK S3 pris en charge pour RustFS." --- -RustFS is a distributed object storage system fully compatible with the S3 protocol. Users can: +RustFS est un système de stockage objet distribué doté d’une API compatible avec S3. Vous pouvez : -- Manage RustFS through the Console management interface. -- Manage RustFS through S3 clients. -- Implement object storage operations and management on the business side through SDKs. +- Gérer RustFS dans la Console. +- Gérer RustFS par l’intermédiaire de clients S3. +- Utiliser un SDK S3 pour gérer les compartiments (bucket) et les objets depuis votre application. -Currently, the SDKs provided by RustFS include: +Les guides suivants expliquent comment utiliser les SDK S3 avec RustFS : - [Java SDK](./java.md) - [JavaScript SDK](./javascript.md) - [Python SDK](./python.md) - [Rust SDK](./rust.md) - [TypeScript SDK](./typescript.md) -- [Golang SDK](./go.md) +- [Go SDK](./go.md) -## Terminology +## Terminologie -Amazon S3 (Simple Storage Service) was the first widely adopted object storage service. Its API has become the de facto standard for object storage. In this documentation, "S3" refers to the protocol. +Amazon Simple Storage Service (Amazon S3) a été le premier service de stockage objet largement adopté. Son API est devenue la norme de fait du stockage objet. Dans cette documentation, « S3 » désigne le protocole. -## SDK Recommendations +## Recommandations relatives aux SDK -We recommend using the official AWS S3 SDKs. These SDKs are mature, well-maintained, and highly optimized. +Nous recommandons d’utiliser les SDK S3 officiels d’AWS. Ces SDK sont matures, bien maintenus et fortement optimisés. -If you have a familiar and trusted SDK from a vendor, you can use it. +Vous pouvez aussi utiliser un SDK d’éditeur que vous connaissez et auquel vous faites confiance, à condition qu’il prenne en charge les opérations S3 dont vous avez besoin. -Some third-party SDKs may have non-standard implementations. We recommend avoiding SDKs that are not strictly S3-compliant. +Certains SDK tiers peuvent avoir des implémentations non standard. Nous recommandons d’éviter les SDK qui ne sont pas strictement conformes à S3. -## Compatibility with MinIO SDKs +## Compatibilité avec les SDK MinIO -Yes, RustFS is fully compatible with MinIO SDKs. +RustFS fonctionne avec les SDK MinIO. -If you are using MinIO SDKs, you can modify the Endpoint, AK, and SK to be directly compatible with RustFS. +Pour connecter un SDK MinIO à RustFS, définissez le point de terminaison, la clé d’accès et la clé secrète avec vos valeurs RustFS. -## Handling Incompatible SDKs +## Traitement des SDK incompatibles -If you encounter an SDK that does not support standard S3, MinIO, or RustFS: - -We recommend switching to a standard AWS S3 SDK. +Si un SDK ne fonctionne ni avec S3 standard, ni avec MinIO, ni avec RustFS, nous recommandons de passer à un SDK AWS officiel pour S3. diff --git a/content/fr/developer/sdk/java.md b/content/fr/developer/sdk/java.md index 938a7f166..9564e4ea9 100644 --- a/content/fr/developer/sdk/java.md +++ b/content/fr/developer/sdk/java.md @@ -1,25 +1,25 @@ --- -title: "Java SDK Guide" -description: "Use the official AWS SDK for Java v2 with RustFS." +title: "Guide du SDK Java" +description: "Utilisez le SDK AWS officiel pour Java v2 avec RustFS." --- -RustFS ships no first-party Java SDK — it is S3-compatible, so you use the official AWS SDK for Java v2 configured to point at your RustFS server. +RustFS ne fournit pas de SDK Java propre. Il est compatible avec S3 : vous utilisez donc le SDK AWS officiel pour Java v2, configuré pour pointer vers votre serveur RustFS. -## 1. Prerequisites +## 1. Prérequis -* Java 8 or later and Maven (or Gradle) -* A running RustFS instance (see the [Installation Guide](../../installation/index.md)) — the S3 API listens on port `9000`, the Console on port `9001` -* Access keys, set at install time via the `RUSTFS_ACCESS_KEY` / `RUSTFS_SECRET_KEY` environment variables (see [Access Key Management](../../security-compliance/iam/access-token.md)) +* Java 8 ou ultérieur et Maven (ou Gradle) +* Une instance RustFS en cours d’exécution (consultez le [guide d’installation](../../installation/index.md)) : l’API S3 écoute sur le port `9000`, la Console sur le port `9001` +* Des clés d’accès, définies à l’installation par les variables d’environnement `RUSTFS_ACCESS_KEY` / `RUSTFS_SECRET_KEY` (consultez la [gestion des clés d’accès](../../security-compliance/iam/access-token.md)) -:::tip[Local test] +:::tip[Essai local] -If you did not set credentials at install time, the server defaults to `rustfsadmin` / `rustfsadmin` — fine for a throwaway local trial, never for anything reachable by others. +Si vous n’avez pas défini d’identifiants à l’installation, le serveur utilise par défaut `rustfsadmin` / `rustfsadmin`. Cela convient à un essai local jetable, jamais à une instance accessible à d’autres personnes. ::: -### 1.1 Maven Project Setup +### 1.1 Mise en place du projet Maven -Create a new Maven project: +Créez un projet Maven : ```text rustfs-java-s3-demo/ @@ -32,9 +32,9 @@ rustfs-java-s3-demo/ └── RustfsS3Example.java ``` -### 1.2 Add Dependencies +### 1.2 Ajouter les dépendances -Add AWS SDK dependencies in `pom.xml`: +Ajoutez les dépendances du SDK AWS dans `pom.xml` : ```xml title="pom.xml" @@ -46,15 +46,15 @@ Add AWS SDK dependencies in `pom.xml`: ``` -> Recommend using AWS SDK v2, which has more complete features and supports async, reactive, and other patterns. +Nous recommandons le SDK AWS pour Java v2, plus complet, qui prend en charge la programmation asynchrone et réactive. --- -## 2. Connecting to RustFS +## 2. Connexion à RustFS -### 2.1 Complete Example +### 2.1 Exemple complet -The following class compiles and runs as-is. Replace `localhost` with your server's IP address if RustFS runs on another machine, and fill in your own access keys: +La classe suivante se compile et s’exécute telle quelle. Remplacez `localhost` par l’adresse IP de votre serveur si RustFS s’exécute sur une autre machine, et renseignez vos propres clés d’accès : ```java title="RustfsS3Example.java" package com.example; @@ -121,7 +121,7 @@ public class RustfsS3Example { } ``` -Expected output: +Sortie attendue : ```text Bucket created: my-bucket @@ -133,55 +133,55 @@ Deleted hello.txt --- -## 3. Common Issues and Troubleshooting +## 3. Dépannage -| Issue | Cause | Solution | +| Problème | Cause | Solution | | -------------------------------------- | ------------------------------------ | ----------------------------------------- | -| `S3Exception: 301 Moved Permanently` | Path-style not enabled or region error | Set `.forcePathStyle(true)` and use region `us-east-1` | -| `ConnectException: Connection refused` | RustFS not started or incorrect port | Check RustFS status and port | -| `403 Forbidden` | AccessKey / SecretKey error | Check authentication configuration | -| Upload fails with no response | SDK defaults to HTTPS, RustFS only supports HTTP (or needs certificates) | Use `http://` address and configure `endpointOverride` | +| `S3Exception: 301 Moved Permanently` | Adressage de type chemin (path-style) non activé, ou erreur de région | Définissez `.forcePathStyle(true)` et utilisez la région `us-east-1` | +| `ConnectException: Connection refused` | RustFS n’est pas démarré, ou le port est incorrect | Vérifiez l’état de RustFS et le port | +| `403 Forbidden` | Clé d’accès ou clé secrète incorrecte | Vérifiez vos identifiants | +| Le chargement (upload) échoue sans réponse | Le SDK utilise HTTPS par défaut, et RustFS ne prend en charge que HTTP (ou nécessite des certificats) | Utilisez une adresse `http://` et définissez `endpointOverride` | --- -## 4. Appendix +## 4. Annexe -### 4.1 Maven Package and Run +### 4.1 Empaqueter et exécuter avec Maven -Package project: +Empaquetez le projet : ```bash mvn clean package ``` -Execute: +Exécutez-le : ```bash java -cp target/rustfs-java-s3-demo-1.0-SNAPSHOT.jar com.example.RustfsS3Example ``` -### 4.2 RustFS Configuration Recommendations +### 4.2 Réglages RustFS recommandés -* Ensure SSL validation is disabled when service uses HTTP protocol. -* Enable CORS support (if used for web frontend). -* Recommend setting limits like `max_object_size` and `max_part_size` to prevent large file transfer failures. +* Si RustFS sert du HTTP non chiffré, désactivez la validation des certificats TLS dans le SDK. +* Activez la prise en charge CORS si vous l’utilisez pour un frontal web. +* Nous recommandons de définir des limites telles que `max_object_size` et `max_part_size` afin d’éviter les échecs de transfert des fichiers volumineux. --- -The following advanced examples cover: +Les exemples avancés suivants portent sur : -* Presigned URL generation and usage -* Multipart Upload complete process +* La génération et l’utilisation d’URL présignées +* Le flux complet de chargement partitionné --- -## 5. Java Advanced Features Examples +## 5. Exemples avancés -### 5.1 Generate and Use Presigned URLs +### 5.1 Générer et utiliser des URL présignées -> Presigned URLs allow clients to temporarily access private objects without exposing credentials, widely used for browser direct upload or download file scenarios. +Les URL présignées donnent aux clients un accès temporaire à des objets privés sans exposer les identifiants. Elles servent couramment aux chargements et aux téléchargements directs depuis un navigateur. -#### 5.1.1 Generate Download Link (GET) +#### 5.1.1 Générer un lien de téléchargement (GET) ```java import software.amazon.awssdk.auth.credentials.AwsBasicCredentials; @@ -229,11 +229,11 @@ System.out.println("Presigned URL: " + presignedRequest.url()); Presigned URL: http://localhost:9000/my-bucket/hello.txt?X-Amz-Algorithm=AWS4-HMAC-SHA256&... ``` -> 🔗 Open the link in browser to access the object. +Ouvrez l’URL dans un navigateur pour accéder à l’objet. -#### 5.1.2 Upload Presigned URL (PUT) +#### 5.1.2 URL présignée de chargement (PUT) -Similarly, you can also generate upload URLs: +Vous pouvez aussi générer des URL de chargement : ```java import software.amazon.awssdk.services.s3.model.PutObjectRequest; @@ -257,11 +257,11 @@ System.out.println("Upload URL: " + presignedPut.url()); --- -### 5.2 Implement Multipart Upload +### 5.2 Mettre en œuvre le chargement partitionné -> Multipart Upload is the recommended way for large file uploads, enabling resume from breakpoint during network fluctuations. +Le chargement partitionné est la méthode recommandée pour charger des fichiers volumineux. Si le réseau est interrompu, vous pouvez réessayer les parties en échec au lieu de recommencer tout le chargement. -The examples below reuse the `s3` client from section 2 and need these additional imports: +Les exemples ci-dessous réutilisent le client `s3` de la section 2 et nécessitent ces importations supplémentaires : ```java import software.amazon.awssdk.services.s3.model.*; @@ -271,7 +271,7 @@ import java.util.ArrayList; import java.util.List; ``` -#### 5.2.1 Start Multipart Upload +#### 5.2.1 Démarrer le chargement partitionné ```java CreateMultipartUploadRequest createRequest = CreateMultipartUploadRequest.builder() @@ -283,7 +283,7 @@ CreateMultipartUploadResponse createResponse = s3.createMultipartUpload(createRe String uploadId = createResponse.uploadId(); ``` -#### 5.2.2 Upload Each Part +#### 5.2.2 Charger chaque partie ```java List completedParts = new ArrayList<>(); @@ -306,7 +306,7 @@ for (int i = 1; i <= 3; i++) { } ``` -#### 5.2.3 Complete Multipart Upload +#### 5.2.3 Terminer le chargement partitionné ```java CompletedMultipartUpload completedUpload = CompletedMultipartUpload.builder() @@ -328,7 +328,7 @@ System.out.println("Multipart upload completed."); Multipart upload completed. ``` -#### 5.2.4 Abort Upload on Exception (Optional) +#### 5.2.4 Abandonner le chargement en cas d’exception (facultatif) ```java AbortMultipartUploadRequest abortRequest = AbortMultipartUploadRequest.builder() @@ -342,4 +342,4 @@ s3.abortMultipartUpload(abortRequest); --- -For other operations (object tagging, bucket policies, and more), see the [AWS SDK for Java v2 documentation](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/) — every S3-compatible call works against RustFS the same way. +Pour les autres opérations (étiquetage d’objets, politiques de compartiment, etc.), consultez la [documentation de l’AWS SDK pour Java v2](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/). La plupart des opérations S3 fonctionnent de la même manière avec RustFS ; les exceptions sont décrites dans la [compatibilité S3](/fr/reference/s3-compatibility). diff --git a/content/fr/developer/sdk/javascript.md b/content/fr/developer/sdk/javascript.md index f010b46fa..48ae28499 100644 --- a/content/fr/developer/sdk/javascript.md +++ b/content/fr/developer/sdk/javascript.md @@ -1,39 +1,39 @@ --- -title: "JavaScript SDK Guide" -description: "Use the official AWS SDK for JavaScript v3 with RustFS." +title: "Guide du SDK JavaScript" +description: "Utilisez le SDK AWS officiel pour JavaScript v3 avec RustFS." --- -## I. Overview +## Présentation -RustFS ships no first-party JavaScript SDK — it is S3-compatible, so you use the official AWS SDK for JavaScript (v3) configured to point at your RustFS server. This guide shows how to connect to RustFS and perform common object storage operations. +RustFS ne fournit pas de SDK JavaScript propre. Il est compatible avec S3 : vous utilisez donc le SDK AWS officiel pour JavaScript (v3), configuré pour pointer vers votre serveur RustFS. Ce guide montre comment se connecter à RustFS et effectuer les opérations courantes de stockage objet. -## II. Prerequisites +## Prérequis -* Node.js 18 or later -* A running RustFS instance (see the [Installation Guide](../../installation/index.md)) — the S3 API listens on port `9000`, the Console on port `9001` -* Access keys, set at install time via the `RUSTFS_ACCESS_KEY` / `RUSTFS_SECRET_KEY` environment variables (see [Access Key Management](../../security-compliance/iam/access-token.md)) +* Node.js 18 ou ultérieur +* Une instance RustFS en cours d’exécution (consultez le [guide d’installation](../../installation/index.md)) : l’API S3 écoute sur le port `9000`, la Console sur le port `9001` +* Des clés d’accès, définies à l’installation par les variables d’environnement `RUSTFS_ACCESS_KEY` / `RUSTFS_SECRET_KEY` (consultez la [gestion des clés d’accès](../../security-compliance/iam/access-token.md)) -:::tip[Local test] +:::tip[Essai local] -If you did not set credentials at install time, the server defaults to `rustfsadmin` / `rustfsadmin` — fine for a throwaway local trial, never for anything reachable by others. +Si vous n’avez pas défini d’identifiants à l’installation, le serveur utilise par défaut `rustfsadmin` / `rustfsadmin`. Cela convient à un essai local jetable, jamais à une instance accessible à d’autres personnes. ::: -### 2.1 SDK Installation +### Installer le SDK -Install the required AWS SDK v3 modules with NPM: +Installez les modules requis du SDK AWS v3 avec npm : ```bash npm install @aws-sdk/client-s3 @aws-sdk/s3-request-presigner ``` -The examples below use ES modules (`import`). Set `"type": "module"` in your `package.json`, or save the files with the `.mjs` extension. +Les exemples ci-dessous utilisent les modules ES (`import`). Définissez `"type": "module"` dans votre `package.json`, ou enregistrez les fichiers avec l’extension `.mjs`. --- -## III. Initializing the Client +## Initialiser le client -The following is a complete, runnable script. Replace `localhost` with your server's IP address if RustFS runs on another machine, and fill in your own access keys: +Le script suivant est complet et exécutable. Remplacez `localhost` par l’adresse IP de votre serveur si RustFS s’exécute sur une autre machine, et renseignez vos propres clés d’accès : ```js title="main.mjs" import { S3Client, ListBucketsCommand } from "@aws-sdk/client-s3"; @@ -53,7 +53,7 @@ const { Buckets } = await s3.send(new ListBucketsCommand({})); console.log(Buckets?.map((b) => b.Name) ?? []); ``` -Run it: +Exécutez-le : ```bash node main.mjs @@ -63,13 +63,13 @@ node main.mjs [ 'my-bucket' ] ``` -All snippets below reuse this `s3` client. +Tous les extraits ci-dessous réutilisent ce client `s3`. --- -## IV. Basic Operations +## Opérations de base -### 4.1 Create Bucket +### 4.1 Créer un compartiment ```js import { CreateBucketCommand } from "@aws-sdk/client-s3"; @@ -84,7 +84,7 @@ Bucket created --- -### 4.2 Upload Object +### 4.2 Charger un objet ```js import { PutObjectCommand } from "@aws-sdk/client-s3"; @@ -109,7 +109,7 @@ File uploaded --- -### 4.3 Download Object +### 4.3 Télécharger un objet ```js import { GetObjectCommand } from "@aws-sdk/client-s3"; @@ -137,7 +137,7 @@ File downloaded --- -### 4.4 List Objects +### 4.4 Lister les objets ```js import { ListObjectsV2Command } from "@aws-sdk/client-s3"; @@ -152,7 +152,7 @@ hello.txt (12 bytes) --- -### 4.5 Delete Object +### 4.5 Supprimer un objet ```js import { DeleteObjectCommand } from "@aws-sdk/client-s3"; @@ -167,13 +167,13 @@ File deleted --- -## V. Advanced Features +## Fonctionnalités avancées -### 5.1 Generate Presigned URLs +### 5.1 Générer des URL présignées -> Allows frontend or third parties to use temporary links for uploading/downloading files +Les URL présignées permettent à des clients navigateur ou à des tiers de charger ou de télécharger des objets au moyen de liens temporaires. -#### Download (GET) +#### Téléchargement (GET) ```js import { GetObjectCommand } from "@aws-sdk/client-s3"; @@ -192,7 +192,7 @@ console.log("Presigned GET URL:", url); Presigned GET URL: http://localhost:9000/my-bucket/hello.txt?X-Amz-Algorithm=AWS4-HMAC-SHA256&... ``` -#### Upload (PUT) +#### Chargement (PUT) ```js import { PutObjectCommand } from "@aws-sdk/client-s3"; @@ -209,7 +209,7 @@ console.log("Presigned PUT URL:", url); --- -### 5.2 Multipart Upload +### 5.2 Chargement partitionné ```js import { @@ -275,23 +275,23 @@ Multipart upload completed --- -## VI. Common Issues and Notes +## Dépannage -| Problem | Cause | Solution | +| Problème | Cause | Solution | | --------------------------- | -------------------- | --------------------------------------- | -| SignatureDoesNotMatch | Wrong signature version | JS SDK v3 uses v4 by default, ensure RustFS supports v4 | -| EndpointConnectionError | Endpoint address misconfigured or not started | Check if RustFS address is accessible | -| NoSuchKey | File does not exist | Check if `Key` is spelled correctly | -| InvalidAccessKeyId / Secret | Credentials misconfigured | Check `accessKeyId` / `secretAccessKey` configuration | -| Upload failure (path issue) | Path-style not enabled | Set `forcePathStyle: true` | +| SignatureDoesNotMatch | Incohérence de signature | Le SDK v3 signe par défaut avec SigV4 ; vérifiez les identifiants, la région et le point de terminaison | +| EndpointConnectionError | Adresse du point de terminaison mal configurée, ou service non démarré | Vérifiez que l’adresse RustFS est accessible | +| NoSuchKey | L’objet n’existe pas | Vérifiez l’orthographe de `Key` | +| InvalidAccessKeyId / Secret | Identifiants mal configurés | Vérifiez la configuration de `accessKeyId` et de `secretAccessKey` | +| Échec de chargement (problème de chemin) | Adressage de type chemin (path-style) non activé | Définissez `forcePathStyle: true` | --- -## VII. Appendix: Frontend Upload Adaptation +## Annexe : chargements depuis le navigateur -Using presigned URLs allows browsers to upload files directly without passing AccessKey. +Avec les URL présignées, les navigateurs peuvent charger des objets directement, sans accès à vos identifiants. -Frontend (HTML+JS) upload example: +Exemple de chargement côté frontal (HTML+JS) : ```html @@ -312,4 +312,4 @@ Frontend (HTML+JS) upload example: ``` -For other operations (object tagging, bucket policies, and more), see the [AWS SDK for JavaScript v3 documentation](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/) — every S3-compatible call works against RustFS the same way. +Pour les autres opérations (étiquetage d’objets, politiques de compartiment, etc.), consultez la [documentation de l’AWS SDK pour JavaScript v3](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/). La plupart des opérations S3 fonctionnent de la même manière avec RustFS ; les exceptions sont décrites dans la [compatibilité S3](/fr/reference/s3-compatibility). diff --git a/content/fr/developer/sdk/other.md b/content/fr/developer/sdk/other.md index 4b4380965..1eb56cfd6 100644 --- a/content/fr/developer/sdk/other.md +++ b/content/fr/developer/sdk/other.md @@ -1,43 +1,43 @@ --- -title: "Other SDKs" -description: "This article mainly explains the usage of various other language SDKs in RustFS." +title: "Autres SDK" +description: "Découvrez comment vous connecter à RustFS depuis un langage sans SDK AWS officiel." --- -If AWS S3 doesn't officially support your language, you can adopt the following strategies to integrate with RustFS: +Si AWS ne fournit pas de SDK officiel pour votre langage, vous pouvez utiliser l’une des approches suivantes pour intégrer RustFS : -## 1. Use HTTP Interface Direct Requests (Based on S3 API Protocol) +## 1. Envoyez des requêtes HTTP directement à l’API S3 -The S3 protocol is a standard RESTful API. You can encapsulate access logic yourself using any language that supports HTTP requests (such as C, Rust, Lua, Erlang). +Le protocole S3 est une API REST standard. Vous pouvez implémenter vous-même la logique du client dans tout langage capable d’envoyer des requêtes HTTP (comme C, Rust, Lua ou Erlang). -### Key points include: +### Étapes clés -* **Signature Algorithm**: Implement AWS Signature Version 4 signature (more complex) -* **Construct correct Headers and Canonical Request** -* **Use HTTPS/HTTP client to send requests** +* **Signature des requêtes** : implémentez AWS Signature Version 4 (la partie la plus complexe). +* **En-têtes et requête canonique** : construisez la requête canonique et les en-têtes requis. +* **Client HTTP** : envoyez la requête signée avec un client HTTP ou HTTPS. -👉 Recommended to reference open-source project signature implementations, for example: +Nous recommandons de consulter les implémentations open source existantes de la signature des requêtes, par exemple : * [https://docs.aws.amazon.com/general/latest/gr/sigv4-signed-request-examples.html](https://docs.aws.amazon.com/general/latest/gr/sigv4-signed-request-examples.html) --- -## 2. Call CLI Tools or Middleware Services of Existing SDKs +## 2. Utilisez l’AWS CLI ou un service construit sur un SDK existant -If you don't want to implement signatures yourself, you can: +Si vous ne souhaitez pas implémenter les signatures vous-même, vous pouvez : -### 2.1. Use AWS CLI tools with existing language support: +### 2.1. Appelez l’AWS CLI -For example, call through Shell: +Par exemple, exécutez la commande suivante depuis votre application, à l’aide d’un shell : ```bash aws s3 cp local.txt s3://mybucket/myfile.txt --endpoint-url http://rustfs.local:9000 ``` -Or write a simple relay service using Node.js/Python SDK, and your language uploads/downloads by calling this service. +Vous pouvez aussi construire un petit service relais avec un SDK Node.js ou Python, puis l’appeler depuis votre application pour charger (upload) ou télécharger des objets. -### 2.2. Set up a Proxy (such as Flask, FastAPI, Express) +### 2.2. Exécutez un service proxy (par exemple Flask, FastAPI ou Express) -Let clients that don't support S3 call your encapsulated HTTP API: +Exposez une API HTTP que les clients sans prise en charge de S3 peuvent appeler : ```http POST /upload -> Service internally calls SDK to upload objects to RustFS @@ -46,33 +46,33 @@ GET /presigned-url -> Generate presigned URL for frontend/client use --- -## 3. Find Third-Party Community SDKs +## 3. Recherchez des SDK communautaires tiers -Although AWS doesn't have official SDKs, some language communities have developed unofficial S3 clients. For example: +Pour les langages sans SDK AWS officiel, recherchez des clients S3 maintenus par la communauté. Par exemple : -* Haskell: `amazonka-s3` -* Rust: `rusoto` (deprecated) or `aws-sdk-rust` -* OCaml: May implement through `cohttp` yourself -* Delphi: Has commercial libraries supporting S3 protocol +* Haskell : `amazonka-s3` +* Rust : `rusoto` (obsolète) ou `aws-sdk-rust` +* OCaml : construisez votre propre client au-dessus de `cohttp` +* Delphi : des bibliothèques commerciales avec prise en charge de S3 sont disponibles -Community SDKs vary greatly in stability, so you should evaluate activity, documentation, and compatibility before use. +Les SDK communautaires varient fortement en stabilité. Vous devriez donc évaluer l’activité, la documentation et la compatibilité avant de les utiliser. --- -## 4. Delegate Core Upload Logic to Platform Hosting +## 4. Chargez directement depuis les clients avec des URL présignées -For example: +Par exemple : -* Delegate frontend (Web/Mobile) upload tasks to browser or App side execution (using presigned URLs) -* Backend uses Node.js/Python/Go and other proxies to implement upload logic +* Utilisez des URL présignées pour charger directement depuis un navigateur ou une application mobile. +* Implémentez la logique de chargement dans un service côté serveur (par exemple Node.js, Python ou Go) --- -## Summary Recommendations +## Choisissez une approche -| Scenario | Recommended Solution | +| Situation | Approche recommandée | | ------------- | ---------------------------------- | -| Need complete control/embedded environment | Implement Signature V4 self-signing | -| Weak language support but has Shell | Call upload through AWS CLI | -| Can deploy relay service | Use Python/Node to build S3 API gateway | -| Frontend upload | Use presigned URLs | +| Vous avez besoin d’un contrôle total, ou vous visez un environnement embarqué | Implémentez vous-même la signature SigV4 | +| Prise en charge limitée des SDK, mais un shell est disponible | Chargez avec l’AWS CLI | +| Vous pouvez déployer un service relais | Construisez une petite passerelle S3 avec Python ou Node.js | +| Chargement côté client | Utilisez des URL présignées | diff --git a/content/fr/developer/sdk/python.md b/content/fr/developer/sdk/python.md index 672504524..40b856c72 100644 --- a/content/fr/developer/sdk/python.md +++ b/content/fr/developer/sdk/python.md @@ -1,37 +1,37 @@ --- -title: "Python SDK Guide" -description: "Use the official AWS SDK for Python (Boto3) with RustFS." +title: "Guide du SDK Python" +description: "Utilisez le SDK AWS officiel pour Python (Boto3) avec RustFS." --- -## 1. Overview +## 1. Présentation -RustFS ships no first-party SDKs — it is S3-compatible, so you use the official AWS SDK for Python, [Boto3](https://boto3.amazonaws.com/v1/documentation/api/latest/index.html), configured to point at your RustFS server. +RustFS ne fournit pas de SDK propres. Il est compatible avec S3 : vous utilisez donc le SDK AWS officiel pour Python, [Boto3](https://boto3.amazonaws.com/v1/documentation/api/latest/index.html), configuré pour pointer vers votre serveur RustFS. -This guide covers: +Ce guide couvre : -* Bucket creation/deletion -* Object upload/download/deletion -* Listing objects -* Generating presigned URLs -* Multipart upload for large files +* La création et la suppression de compartiments (buckets) +* Le chargement (upload), le téléchargement et la suppression d’objets +* Le listage des objets +* La génération d’URL présignées +* Le chargement partitionné des fichiers volumineux --- -## 2. Prerequisites +## 2. Prérequis -* Python 3.8 or later -* A running RustFS instance (see the [Installation Guide](../../installation/index.md)) — the S3 API listens on port `9000`, the Console on port `9001` -* Access keys, set at install time via the `RUSTFS_ACCESS_KEY` / `RUSTFS_SECRET_KEY` environment variables (see [Access Key Management](../../security-compliance/iam/access-token.md)) +* Python 3.8 ou ultérieur +* Une instance RustFS en cours d’exécution (consultez le [guide d’installation](../../installation/index.md)) : l’API S3 écoute sur le port `9000`, la Console sur le port `9001` +* Des clés d’accès, définies à l’installation par les variables d’environnement `RUSTFS_ACCESS_KEY` / `RUSTFS_SECRET_KEY` (consultez la [gestion des clés d’accès](../../security-compliance/iam/access-token.md)) -:::tip[Local test] +:::tip[Essai local] -If you did not set credentials at install time, the server defaults to `rustfsadmin` / `rustfsadmin` — fine for a throwaway local trial, never for anything reachable by others. +Si vous n’avez pas défini d’identifiants à l’installation, le serveur utilise par défaut `rustfsadmin` / `rustfsadmin`. Cela convient à un essai local jetable, jamais à une instance accessible à d’autres personnes. ::: -### 2.1 Install Boto3 +### 2.1 Installer Boto3 -We recommend using a virtual environment: +Nous recommandons d’utiliser un environnement virtuel : ```bash python3 -m venv venv @@ -39,13 +39,13 @@ source venv/bin/activate pip install boto3 ``` -> Boto3 depends on `botocore`, which will be installed automatically. +> Boto3 dépend de `botocore`, qui sera installé automatiquement. --- -## 3. Connecting to RustFS +## 3. Connexion à RustFS -The following is a complete, runnable script. Replace `localhost` with your server's IP address if RustFS runs on another machine, and fill in your own access keys: +Le script suivant est complet et exécutable. Remplacez `localhost` par l’adresse IP de votre serveur si RustFS s’exécute sur une autre machine, et renseignez vos propres clés d’accès : ```python title="main.py" import boto3 @@ -68,26 +68,26 @@ for bucket in response['Buckets']: print(bucket['Name']) ``` -Run it: +Exécutez-le : ```bash python main.py ``` -:::note[Client parameters explained] +:::note[Paramètres du client] -- `endpoint_url` — points to your RustFS S3 API (port `9000`, not the Console port `9001`) -- `signature_version='s3v4'` — RustFS supports v4 signatures -- `region_name='us-east-1'` — RustFS's default region -- `addressing_style='path'` — RustFS uses path-style URLs by default; virtual-host style requires `RUSTFS_SERVER_DOMAINS` +- `endpoint_url` : pointe vers votre API S3 RustFS (port `9000`, et non le port de la Console `9001`) +- `signature_version='s3v4'` : RustFS prend en charge les signatures v4 +- `region_name='us-east-1'` : région par défaut de RustFS +- `addressing_style='path'` : RustFS utilise par défaut des URL en adressage de type chemin (path-style) ; l’adressage de type hôte virtuel exige `RUSTFS_SERVER_DOMAINS` ::: --- -## 4. Basic Operations +## 4. Opérations de base -### 4.1 Create Bucket +### 4.1 Créer un compartiment ```python bucket_name = 'my-bucket' @@ -105,7 +105,7 @@ Bucket my-bucket created. --- -### 4.2 Upload File +### 4.2 Charger un fichier ```python s3.upload_file('/path/to/hello.txt', bucket_name, 'hello.txt') @@ -118,7 +118,7 @@ File uploaded. --- -### 4.3 Download File +### 4.3 Télécharger un fichier ```python s3.download_file(bucket_name, 'hello.txt', 'hello-downloaded.txt') @@ -131,7 +131,7 @@ File downloaded. --- -### 4.4 List Objects +### 4.4 Lister les objets ```python response = s3.list_objects_v2(Bucket=bucket_name) @@ -145,7 +145,7 @@ for obj in response.get('Contents', []): --- -### 4.5 Delete Object and Bucket +### 4.5 Supprimer un objet et un compartiment ```python s3.delete_object(Bucket=bucket_name, Key='hello.txt') @@ -162,11 +162,11 @@ Bucket deleted. --- -## 5. Advanced Features +## 5. Fonctionnalités avancées -### 5.1 Generate Presigned URLs +### 5.1 Générer des URL présignées -#### 5.1.1 Download Link (GET) +#### 5.1.1 Lien de téléchargement (GET) ```python url = s3.generate_presigned_url( @@ -182,7 +182,7 @@ print('Presigned GET URL:', url) Presigned GET URL: http://localhost:9000/my-bucket/hello.txt?X-Amz-Algorithm=AWS4-HMAC-SHA256&... ``` -#### 5.1.2 Upload Link (PUT) +#### 5.1.2 Lien de chargement (PUT) ```python url = s3.generate_presigned_url( @@ -194,7 +194,7 @@ url = s3.generate_presigned_url( print('Presigned PUT URL:', url) ``` -You can use the `curl` tool to upload: +Vous pouvez utiliser l’outil `curl` pour charger un fichier : ```bash curl -X PUT --upload-file /path/to/hello.txt "http://localhost:9000/my-bucket/upload-by-url.txt?X-Amz-Algorithm=..." @@ -202,9 +202,9 @@ curl -X PUT --upload-file /path/to/hello.txt "http://localhost:9000/my-bucket/up --- -### 5.2 Multipart Upload +### 5.2 Chargement partitionné -Suitable for files larger than 10 MB, allows manual control of each part. +Utilisez le chargement partitionné pour les fichiers de plus de 10 MB lorsque vous devez contrôler chaque partie. ```python file_path = 'largefile.bin' @@ -260,18 +260,18 @@ Multipart upload complete. --- -## 6. Common Issue Troubleshooting +## 6. Dépannage -| Issue | Cause | Solution | +| Problème | Cause | Solution | | ------------------------- | ----------------- | -------------------------------------------------------------- | -| `SignatureDoesNotMatch` | Not using v4 signature | Set `signature_version='s3v4'` | -| `EndpointConnectionError` | Wrong RustFS address or service not started | Check endpoint and RustFS service status | -| `AccessDenied` | Wrong credentials or insufficient permissions | Check AccessKey/SecretKey or bucket policies | -| `PermanentRedirect` / wrong bucket URL | Path-style not enabled | Set `s3={'addressing_style': 'path'}` in the `Config` | +| `SignatureDoesNotMatch` | Signature v4 non utilisée | Définissez `signature_version='s3v4'` | +| `EndpointConnectionError` | Adresse RustFS incorrecte, ou service non démarré | Vérifiez le point de terminaison et l’état du service RustFS | +| `AccessDenied` | Identifiants incorrects ou autorisations insuffisantes | Vérifiez la clé d’accès, la clé secrète et les politiques de compartiment | +| `PermanentRedirect` / URL de compartiment incorrecte | Adressage de type chemin non activé | Définissez `s3={'addressing_style': 'path'}` dans le `Config` | --- -## 7. Appendix: Quick Upload/Download Script Template +## 7. Annexe : modèle de script rapide de chargement et de téléchargement ```python def upload_file(local_path, bucket, object_key): @@ -284,6 +284,6 @@ def download_file(bucket, object_key, local_path): print(f"Downloaded s3://{bucket}/{object_key} to {local_path}") ``` -For other operations (object tagging, bucket policies, and more), see the [Boto3 S3 documentation](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/s3.html) — every S3-compatible call works against RustFS the same way. +Pour les autres opérations (étiquetage d’objets, politiques de compartiment, etc.), consultez la [documentation S3 de Boto3](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/s3.html). La plupart des opérations S3 fonctionnent de la même manière avec RustFS ; les exceptions sont décrites dans la [compatibilité S3](/fr/reference/s3-compatibility). -If you prefer native async support and full type hints, the community-driven [capo](https://github.com/kap-sh/capo) SDK also works with RustFS — see the [capo (Python) integration guide](../integration/others/capo.md). +Si vous préférez une prise en charge asynchrone native et des indications de type complètes, le SDK communautaire [capo](https://github.com/kap-sh/capo) fonctionne aussi avec RustFS. Consultez le [guide d’intégration capo (Python)](../integration/others/capo.md). diff --git a/content/fr/developer/sdk/rust.md b/content/fr/developer/sdk/rust.md index 9d8181348..b1097b6ab 100644 --- a/content/fr/developer/sdk/rust.md +++ b/content/fr/developer/sdk/rust.md @@ -1,23 +1,23 @@ --- -title: "Rust SDK Guide" -description: "Operate RustFS instances through the AWS SDK for Rust, including creation and deletion of buckets and objects." +title: "Guide du SDK Rust" +description: "Utilisez le SDK AWS pour Rust afin de créer et de supprimer des compartiments et des objets dans RustFS." --- -RustFS ships no first-party Rust client crate — it is fully S3-compatible, so you use the official AWS SDK for Rust (`aws-sdk-s3`) configured to point at your RustFS server. Through the SDK, you can operate RustFS, including creation and deletion of buckets/objects, file upload and download, etc. +RustFS ne fournit pas de crate client Rust propre. Il est compatible avec S3 : vous utilisez donc le SDK AWS officiel pour Rust (`aws-sdk-s3`), configuré pour pointer vers votre serveur RustFS. Avec ce SDK, vous pouvez créer et supprimer des compartiments (buckets), charger (upload) et télécharger des objets, ainsi que les supprimer. -## Prerequisites +## Prérequis -- Rust 1.78 or later (install via [rustup](https://rustup.rs/)) -- An available RustFS instance (refer to [Installation Guide](../../installation/index.md)) — the S3 API listens on port `9000`, the Console on port `9001` -- Access keys, set at install time via the `RUSTFS_ACCESS_KEY` / `RUSTFS_SECRET_KEY` environment variables (refer to [Access Key Management](../../security-compliance/iam/access-token.md)) +- Rust 1.78 ou ultérieur (installation via [rustup](https://rustup.rs/)) +- Une instance RustFS disponible (reportez-vous au [guide d’installation](../../installation/index.md)) : l’API S3 écoute sur le port `9000`, la Console sur le port `9001` +- Des clés d’accès, définies à l’installation par les variables d’environnement `RUSTFS_ACCESS_KEY` / `RUSTFS_SECRET_KEY` (reportez-vous à la [gestion des clés d’accès](../../security-compliance/iam/access-token.md)) -:::tip[Local test] +:::tip[Essai local] -If you did not set credentials at install time, the server defaults to `rustfsadmin` / `rustfsadmin` — fine for a throwaway local trial, never for anything reachable by others. +Si vous n’avez pas défini d’identifiants à l’installation, le serveur utilise par défaut `rustfsadmin` / `rustfsadmin`. Cela convient à un essai local jetable, jamais à une instance accessible à d’autres personnes. ::: -Create a project and add the dependencies: +Créez un projet et ajoutez les dépendances : ```bash cargo new rustfs-rust-demo && cd rustfs-rust-demo @@ -25,7 +25,7 @@ cargo add aws-config aws-sdk-s3 anyhow cargo add tokio --features full ``` -Your `Cargo.toml` should contain: +Votre `Cargo.toml` devrait contenir : ```toml title="Cargo.toml" [dependencies] @@ -35,9 +35,9 @@ aws-sdk-s3 = "1" tokio = { version = "1", features = ["full"] } ``` -## Initializing the Client +## Initialisation du client -The following is a complete, runnable program. It loads the connection settings from environment variables, initializes the S3 client, and lists your buckets: +Le programme suivant est complet et exécutable. Il charge les paramètres de connexion depuis les variables d’environnement, initialise le client S3 et liste vos compartiments : ```rust title="src/main.rs" use anyhow::Result; @@ -108,11 +108,11 @@ async fn main() -> Result<()> { :::note -These environment variable names (`RUSTFS_ENDPOINT_URL`, `RUSTFS_REGION`, `RUSTFS_ACCESS_KEY_ID`, `RUSTFS_SECRET_ACCESS_KEY`) are just this example's client-side conventions — they are read by your program, not by RustFS. They are distinct from the server-side `RUSTFS_ACCESS_KEY` / `RUSTFS_SECRET_KEY` variables used when installing RustFS. +Ces noms de variables d’environnement (`RUSTFS_ENDPOINT_URL`, `RUSTFS_REGION`, `RUSTFS_ACCESS_KEY_ID`, `RUSTFS_SECRET_ACCESS_KEY`) ne sont que des conventions côté client propres à cet exemple : c’est votre programme qui les lit, et non RustFS. Ces noms sont distincts des variables côté serveur `RUSTFS_ACCESS_KEY` / `RUSTFS_SECRET_KEY`, utilisées lors de l’installation de RustFS. ::: -Run it (replace `localhost` with your server's IP address if RustFS runs on another machine): +Exécutez-le (remplacez `localhost` par l’adresse IP de votre serveur si RustFS s’exécute sur une autre machine) : ```bash export RUSTFS_ENDPOINT_URL="http://localhost:9000" @@ -126,9 +126,9 @@ cargo run Bucket: Some("my-bucket") ``` -You can now use the client for the operations below. Each snippet runs inside `main`, reusing `rustfs_client`. +Vous pouvez maintenant utiliser le client pour les opérations ci-dessous. Chaque extrait s’exécute dans `main` et réutilise `rustfs_client`. -## Create Bucket +## Créer un compartiment ```rust match rustfs_client @@ -151,7 +151,7 @@ match rustfs_client Bucket created successfully ``` -## Delete Bucket +## Supprimer un compartiment ```rust match rustfs_client @@ -174,7 +174,7 @@ match rustfs_client Bucket deleted successfully ``` -## List Buckets +## Lister les compartiments ```rust match rustfs_client.list_buckets().send().await { @@ -196,7 +196,7 @@ Total buckets number is 1 Bucket: Some("my-bucket") ``` -## List Objects +## Lister les objets ```rust match rustfs_client @@ -223,16 +223,16 @@ Total objects number is 1 Object: Some("hello.txt") ``` -## Upload File +## Charger un fichier -Add these imports at the top of `src/main.rs`: +Ajoutez ces importations en tête de `src/main.rs` : ```rust use aws_sdk_s3::primitives::ByteStream; use tokio::fs; ``` -Then upload a local file: +Chargez ensuite un fichier local : ```rust let data = fs::read("/path/to/hello.txt").await.expect("can not open the file"); @@ -259,7 +259,7 @@ match rustfs_client Object uploaded successfully, res: PutObjectOutput { e_tag: Some("\"...\""), ... } ``` -## Download Object +## Télécharger un objet ```rust match rustfs_client @@ -284,4 +284,4 @@ match rustfs_client Object content: hello rustfs ``` -For other operations (presigned URLs, multipart uploads, and more), see the [AWS SDK for Rust documentation](https://docs.aws.amazon.com/sdk-for-rust/latest/dg/) — every S3-compatible call works against RustFS the same way. +Pour les autres opérations (URL présignées, chargements partitionnés, etc.), consultez la [documentation de l’AWS SDK pour Rust](https://docs.aws.amazon.com/sdk-for-rust/latest/dg/). La plupart des opérations S3 fonctionnent de la même manière avec RustFS ; les exceptions sont décrites dans la [compatibilité S3](/fr/reference/s3-compatibility). diff --git a/content/fr/developer/sdk/typescript.md b/content/fr/developer/sdk/typescript.md index d26b7a938..59e5c7c3d 100644 --- a/content/fr/developer/sdk/typescript.md +++ b/content/fr/developer/sdk/typescript.md @@ -1,32 +1,32 @@ --- -title: "RustFS TypeScript SDK Usage Guide" -description: "Operate RustFS from TypeScript with the AWS SDK for JavaScript v3, including creation and deletion of buckets and objects." +title: "Guide du SDK TypeScript" +description: "Pilotez RustFS depuis TypeScript avec le SDK AWS pour JavaScript v3, y compris la création et la suppression de compartiments et d’objets." --- -RustFS ships no first-party TypeScript SDK — it is fully S3-compatible, so you use the official AWS SDK for JavaScript v3 (which ships its own TypeScript type definitions) configured to point at your RustFS server. Through the SDK, you can operate RustFS, including creation and deletion of buckets/objects, file upload and download, etc. +RustFS ne fournit pas de SDK TypeScript propre. Il est compatible avec S3 : vous utilisez donc le SDK AWS officiel pour JavaScript v3 (qui inclut les définitions de types TypeScript), configuré pour pointer vers votre serveur RustFS. Avec ce SDK, vous pouvez créer et supprimer des compartiments (buckets), charger (upload) et télécharger des objets, ainsi que les supprimer. -## Prerequisites +## Prérequis -- Node.js 18 or later (the examples use ES modules — set `"type": "module"` in your `package.json`) -- An available RustFS instance (refer to [Installation Guide](../../installation/index.md) for installation) — the S3 API listens on port `9000`, the Console on port `9001` -- Access keys, set at install time via the `RUSTFS_ACCESS_KEY` / `RUSTFS_SECRET_KEY` environment variables (refer to [Access Key Management](../../security-compliance/iam/access-token.md) for creation) +- Node.js 18 ou ultérieur (les exemples utilisent les modules ES : définissez `"type": "module"` dans votre `package.json`) +- Une instance RustFS en cours d’exécution (consultez le [guide d’installation](../../installation/index.md)) : l’API S3 écoute sur le port `9000`, la Console sur le port `9001` +- Des clés d’accès, définies à l’installation par les variables d’environnement `RUSTFS_ACCESS_KEY` / `RUSTFS_SECRET_KEY` (reportez-vous à la [gestion des clés d’accès](../../security-compliance/iam/access-token.md) pour les créer) -:::tip[Local test] +:::tip[Essai local] -If you did not set credentials at install time, the server defaults to `rustfsadmin` / `rustfsadmin` — fine for a throwaway local trial, never for anything reachable by others. +Si vous n’avez pas défini d’identifiants à l’installation, le serveur utilise par défaut `rustfsadmin` / `rustfsadmin`. Cela convient à un essai local jetable, jamais à une instance accessible à d’autres personnes. ::: -Install the dependencies: +Installez les dépendances : ```bash npm install @aws-sdk/client-s3 npm install --save-dev typescript tsx @types/node ``` -## Initializing the Client +## Initialisation du client -The following is a complete, runnable example. Replace `localhost` with your server's IP address if RustFS runs on another machine, and fill in your own access keys: +L’exemple suivant est complet et exécutable. Remplacez `localhost` par l’adresse IP de votre serveur si RustFS s’exécute sur une autre machine, et renseignez vos propres clés d’accès : ```typescript title="main.ts" import { @@ -55,7 +55,7 @@ const response = await rustfs_client.send(new ListBucketsCommand({})); console.log(response.Buckets?.map((bucket) => bucket.Name) ?? []); ``` -Run it: +Exécutez-le : ```bash npx tsx main.ts @@ -65,9 +65,9 @@ npx tsx main.ts [ 'my-bucket' ] ``` -Then use the constructed `rustfs_client` for the operations below. +Utilisez ensuite le `rustfs_client` construit pour les opérations ci-dessous. -## Create Bucket +## Créer un compartiment ```typescript async function createBucket() { @@ -88,7 +88,7 @@ async function createBucket() { Bucket created: /my-bucket ``` -## Delete Bucket +## Supprimer un compartiment ```typescript async function deleteBucket() { @@ -109,7 +109,7 @@ async function deleteBucket() { Bucket deleted ``` -## List Buckets +## Lister les compartiments ```typescript async function listBuckets() { @@ -126,7 +126,7 @@ async function listBuckets() { my-bucket ``` -## List Objects +## Lister les objets ```typescript async function listObjects() { @@ -147,7 +147,7 @@ async function listObjects() { test/hello.txt (12 bytes) ``` -## Upload File +## Charger un fichier ```typescript async function uploadFile() { @@ -170,7 +170,7 @@ async function uploadFile() { Object uploaded ``` -## Download Object +## Télécharger un objet ```typescript async function getObject() { @@ -201,4 +201,4 @@ async function getObject() { Object content: hello rustfs ``` -For other operations (presigned URLs, multipart uploads, and more), see the [AWS SDK for JavaScript v3 documentation](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/) — every S3-compatible call works against RustFS the same way. +Pour les autres opérations (URL présignées, chargements partitionnés, etc.), consultez la [documentation de l’AWS SDK pour JavaScript v3](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/). La plupart des opérations S3 fonctionnent de la même manière avec RustFS ; les exceptions sont décrites dans la [compatibilité S3](/fr/reference/s3-compatibility). diff --git a/content/fr/installation/cloud-native/helm-chart/cert-manager.md b/content/fr/installation/cloud-native/helm-chart/cert-manager.md index 5386eaf38..9f3f5564e 100644 --- a/content/fr/installation/cloud-native/helm-chart/cert-manager.md +++ b/content/fr/installation/cloud-native/helm-chart/cert-manager.md @@ -1,26 +1,26 @@ --- title: cert-manager -description: Use cert-manager to issue and renew TLS certificates for a RustFS Helm deployment. +description: Utilisez cert-manager pour émettre et renouveler les certificats TLS d’un déploiement Helm de RustFS. --- -Use **cert-manager** to issue the certificate referenced by the RustFS Ingress. This provides HTTPS for the public S3 API and Console endpoint and allows cert-manager to renew the certificate. +Utilisez **cert-manager** pour émettre le certificat référencé par l’Ingress RustFS. Cela fournit le HTTPS du point de terminaison public de l’API S3 et de la Console, et permet à cert-manager de renouveler le certificat. -## Requirements +## Prérequis -- cert-manager is installed and its controller Pods are ready. -- An `Issuer` or `ClusterIssuer` is ready. -- The RustFS hostname resolves to the Ingress controller. +- cert-manager est installé et les pods de son contrôleur sont prêts. +- Un `Issuer` ou un `ClusterIssuer` est prêt. +- Le nom d’hôte RustFS se résout vers le contrôleur Ingress. -Verify the issuer before installing RustFS: +Vérifiez l’émetteur avant d’installer RustFS : ```bash kubectl get clusterissuer letsencrypt-prod kubectl -n cert-manager get pods ``` -## 1. Configure Ingress TLS +## 1. Configurer le TLS de l’Ingress -Add the Ingress and certificate settings to your standalone or distributed values file: +Ajoutez les réglages d’Ingress et de certificat à votre fichier de valeurs, en mode autonome ou distribué : ```yaml title="values.yaml" ingress: @@ -42,9 +42,9 @@ ingress: name: "" ``` -Replace the Ingress class, issuer, and hostname for your cluster. For a namespace-scoped Issuer, use the `cert-manager.io/issuer` annotation instead. +Remplacez la classe d’Ingress, l’émetteur et le nom d’hôte en fonction de votre cluster. Pour un Issuer limité à un espace de noms, utilisez plutôt l’annotation `cert-manager.io/issuer`. -## 2. Apply the configuration +## 2. Appliquer la configuration ```bash helm upgrade rustfs ./helm/rustfs \ @@ -52,9 +52,9 @@ helm upgrade rustfs ./helm/rustfs \ -f values.yaml ``` -The Ingress references the `rustfs-tls` Secret for a release named `rustfs`. cert-manager ingress-shim reads the issuer annotation and creates a Certificate that writes to this Secret. +L’Ingress référence le Secret `rustfs-tls` pour une release nommée `rustfs`. Le composant ingress-shim de cert-manager lit l’annotation de l’émetteur et crée un Certificate qui écrit dans ce Secret. -## 3. Verify the certificate +## 3. Vérifier le certificat ```bash kubectl -n rustfs get ingress,certificate,certificaterequest @@ -62,8 +62,8 @@ kubectl -n rustfs describe certificate rustfs-tls kubectl -n rustfs get secret rustfs-tls ``` -Wait for the Certificate to report `Ready=True`, then open `https://s3.example.com`. +Attendez que le Certificate indique `Ready=True`, puis ouvrez `https://s3.example.com`. -## Use cert-manager with mTLS +## Utiliser cert-manager avec mTLS -The chart also uses cert-manager to issue server and client certificates when `mtls.enabled=true`. See [mTLS](./mtls.md) to use the chart-managed CA or reference an existing issuer. \ No newline at end of file +Le chart utilise aussi cert-manager pour émettre les certificats serveur et client lorsque `mtls.enabled=true`. Consultez [mTLS](./mtls.md) pour utiliser l’autorité de certification gérée par le chart ou pour référencer un émetteur existant. diff --git a/content/fr/installation/cloud-native/helm-chart/index.md b/content/fr/installation/cloud-native/helm-chart/index.md index 26652e5be..c2d5b6ace 100644 --- a/content/fr/installation/cloud-native/helm-chart/index.md +++ b/content/fr/installation/cloud-native/helm-chart/index.md @@ -1,21 +1,21 @@ --- -title: Overview -description: Understand how the RustFS Helm chart deploys standalone and distributed clusters on Kubernetes. +title: Vue d’ensemble +description: Comprenez comment le chart Helm RustFS déploie des clusters autonomes et distribués sur Kubernetes. --- -The official **RustFS Helm chart** deploys one RustFS cluster directly into Kubernetes. Helm renders the workload, Services, credentials, configuration, PersistentVolumeClaims (PVCs), Ingress, and optional certificate resources from a single values file. +Le **chart Helm RustFS** officiel déploie directement un cluster RustFS dans Kubernetes. Helm génère la charge de travail, les Services, les identifiants, la configuration, les PersistentVolumeClaims (PVC), l’Ingress et les ressources de certificats facultatives à partir d’un seul fichier de valeurs. -The chart supports two deployment modes: +Le chart prend en charge deux modes de déploiement : -- **Standalone** creates one Pod with one data PVC. Use it for evaluation and development. -- **Distributed** creates a StatefulSet with multiple Pods and data PVCs. `replicaCount` controls the number of Pods and `drivesPerNode` controls the number of data PVCs mounted by each Pod. +- **Autonome** crée un pod avec un PVC de données. Utilisez-le pour l’évaluation et le développement. +- **Distribué** crée un StatefulSet avec plusieurs pods et plusieurs PVC de données. `replicaCount` contrôle le nombre de pods et `drivesPerNode` contrôle le nombre de PVC de données montés par chaque pod. -Distributed mode is enabled by default. The chart also supports multiple append-only server pools, but a single explicit topology is easier to operate for an initial deployment. Credentials must be supplied through chart values or an existing Secret; the chart rejects empty and well-known default credentials unless insecure development defaults are explicitly enabled. +Le mode distribué est activé par défaut. Le chart prend aussi en charge plusieurs pools de serveurs que l’on ne peut qu’ajouter, mais une topologie explicite unique est plus simple à exploiter pour un premier déploiement. Les identifiants doivent être fournis par les valeurs du chart ou par un Secret existant ; le chart rejette les identifiants vides et les identifiants par défaut bien connus, sauf si les valeurs par défaut non sécurisées de développement sont explicitement activées. -Use the Helm chart when you want Helm to manage one RustFS cluster. Use the [RustFS Operator](../operator/index.md) when you need Kubernetes custom resources, multiple Tenants, or Operator-driven pool management. +Utilisez le chart Helm lorsque vous voulez que Helm gère un seul cluster RustFS. Utilisez l’[Operator RustFS](../operator/index.md) lorsque vous avez besoin de ressources personnalisées Kubernetes, de plusieurs Tenants ou d’une gestion des pools pilotée par l’Operator. -## Helm chart workflows +## Flux de travail du chart Helm -- [Install](./installation.mdx) covers requirements and standalone or distributed deployment. -- [mTLS](./mtls.md) encrypts and authenticates traffic between RustFS Pods. -- [cert-manager](./cert-manager.md) issues and renews certificates for RustFS Ingress and mTLS. \ No newline at end of file +- [Installation](./installation.mdx) couvre les prérequis et le déploiement autonome ou distribué. +- [mTLS](./mtls.md) chiffre et authentifie le trafic entre les pods RustFS. +- [cert-manager](./cert-manager.md) émet et renouvelle les certificats de l’Ingress RustFS et du mTLS. diff --git a/content/fr/installation/cloud-native/helm-chart/installation.mdx b/content/fr/installation/cloud-native/helm-chart/installation.mdx index 5523fffb9..28e6d03c9 100644 --- a/content/fr/installation/cloud-native/helm-chart/installation.mdx +++ b/content/fr/installation/cloud-native/helm-chart/installation.mdx @@ -1,22 +1,22 @@ --- -title: Install -description: Install standalone or distributed RustFS on Kubernetes with the official Helm chart. +title: Installation +description: Installez RustFS en mode autonome ou distribué sur Kubernetes avec le chart Helm officiel. --- -This guide gets the official RustFS chart from source or the Helm repository, installs it, and verifies access to the S3 API and Console. +Ce guide récupère le chart RustFS officiel depuis les sources ou le dépôt Helm, l’installe et vérifie l’accès à l’API S3 et à la Console. -## Requirements +## Prérequis -| Component | Requirement | +| Composant | Exigence | |-----------|-------------| | Helm | Version 3 | -| Kubernetes | A cluster reachable with `kubectl` | -| StorageClass | Dynamic PVC provisioning for RustFS data | -| RustFS | `1.0.0-alpha.69` or later | +| Kubernetes | Un cluster accessible avec `kubectl` | +| StorageClass | Provisionnement dynamique de PVC pour les données RustFS | +| RustFS | `1.0.0-alpha.69` ou ultérieur | -An Ingress controller is optional. If you enable Ingress, set `ingress.className` to the controller in your cluster, such as `nginx` or `traefik`. +Un contrôleur Ingress est facultatif. Si vous activez l’Ingress, définissez `ingress.className` sur le contrôleur présent dans votre cluster, par exemple `nginx` ou `traefik`. -Check the active cluster and available StorageClasses: +Vérifiez le cluster actif et les StorageClasses disponibles : ```bash kubectl config current-context @@ -24,14 +24,14 @@ kubectl get storageclass helm version --short ``` -## 1. Get the chart +## 1. Obtenir le chart -Choose how Helm should access the chart. Both options set `RUSTFS_CHART`, which the installation commands below use. +Choisissez comment Helm doit accéder au chart. Les deux options définissent `RUSTFS_CHART`, que les commandes d’installation ci-dessous utilisent. - - + + -Clone the RustFS source repository to use the chart at `helm/rustfs`: +Clonez le dépôt source de RustFS afin d’utiliser le chart situé dans `helm/rustfs` : ```bash git clone https://github.com/rustfs/rustfs.git @@ -40,9 +40,9 @@ export RUSTFS_CHART=./helm/rustfs ``` - + -Add the RustFS repository listed on [Artifact Hub](https://artifacthub.io/packages/helm/rustfs/rustfs), then update the local repository index: +Ajoutez le dépôt RustFS indiqué sur [Artifact Hub](https://artifacthub.io/packages/helm/rustfs/rustfs), puis mettez à jour l’index du dépôt local : ```bash helm repo add rustfs https://charts.rustfs.com @@ -53,9 +53,9 @@ export RUSTFS_CHART=rustfs/rustfs -## 2. Install standalone mode +## 2. Installer le mode autonome -Create a values file for a one-Pod development deployment: +Créez un fichier de valeurs pour un déploiement de développement à un seul pod : ```yaml title="standalone-values.yaml" mode: @@ -78,7 +78,7 @@ ingress: enabled: false ``` -Replace `standard` with a StorageClass in your cluster, then install: +Remplacez `standard` par une StorageClass de votre cluster, puis installez : ```bash helm upgrade --install rustfs "$RUSTFS_CHART" \ @@ -87,9 +87,9 @@ helm upgrade --install rustfs "$RUSTFS_CHART" \ -f standalone-values.yaml ``` -## 3. Install distributed mode +## 3. Installer le mode distribué -For a distributed cluster, set the Pod and drive counts explicitly. Total data drives equal `replicaCount * drivesPerNode`. +Pour un cluster distribué, définissez explicitement le nombre de pods et le nombre de disques. Le nombre total de disques de données est égal à `replicaCount * drivesPerNode`. ```yaml title="distributed-values.yaml" mode: @@ -115,7 +115,7 @@ ingress: enabled: false ``` -The example creates four Pods and eight data PVCs. Ensure the cluster can schedule all Pods and provision all PVCs, then install: +L’exemple crée quatre pods et huit PVC de données. Assurez-vous que le cluster peut planifier tous les pods et provisionner tous les PVC, puis installez : ```bash helm upgrade --install rustfs "$RUSTFS_CHART" \ @@ -124,45 +124,45 @@ helm upgrade --install rustfs "$RUSTFS_CHART" \ -f distributed-values.yaml ``` -:::warning[Choose the topology before installation] +:::warning[Choisissez la topologie avant l’installation] -Kubernetes does not allow updates to StatefulSet `volumeClaimTemplates`. Changing `drivesPerNode` later requires StatefulSet recreation or a new installation. +Kubernetes n’autorise pas la modification des `volumeClaimTemplates` d’un StatefulSet. Modifier `drivesPerNode` ultérieurement exige de recréer le StatefulSet ou de procéder à une nouvelle installation. ::: -## 4. Verify and access RustFS +## 4. Vérifier RustFS et y accéder ```bash kubectl -n rustfs get pods,pvc,services kubectl -n rustfs rollout status statefulset/rustfs ``` -Standalone mode creates a Deployment instead of a StatefulSet. Check it with: +Le mode autonome crée un Deployment à la place d’un StatefulSet. Vérifiez-le avec : ```bash kubectl -n rustfs rollout status deployment/rustfs ``` -Forward the S3 API and Console to your workstation: +Redirigez l’API S3 et la Console vers votre poste de travail : ```bash kubectl -n rustfs port-forward svc/rustfs 9000:9000 9001:9001 ``` -Use `http://localhost:9000` as the S3 endpoint and open `http://localhost:9001` for the Console. +Utilisez `http://localhost:9000` comme point de terminaison S3 et ouvrez `http://localhost:9001` pour la Console. -## Key values +## Valeurs principales -| Value | Purpose | Chart default | +| Valeur | Rôle | Valeur par défaut du chart | |-------|---------|---------------| -| `mode.standalone.enabled` | Enable one-Pod standalone mode | `false` | -| `mode.distributed.enabled` | Enable distributed mode | `true` | -| `replicaCount` | Distributed Pod count | `4` | -| `drivesPerNode` | Data PVCs per Pod | Inferred from `replicaCount` | -| `storageclass.name` | StorageClass for PVCs | `local-path` | -| `storageclass.dataStorageSize` | Size of each data PVC | `256Mi` | -| `storageclass.logStorageSize` | Size of each log PVC | `256Mi` | -| `service.endpoint.port` | S3 API port | `9000` | -| `service.console.port` | Console port | `9001` | - -We recommend setting storage sizes explicitly; the chart defaults are intended only for basic evaluation. \ No newline at end of file +| `mode.standalone.enabled` | Active le mode autonome à un seul pod | `false` | +| `mode.distributed.enabled` | Active le mode distribué | `true` | +| `replicaCount` | Nombre de pods en mode distribué | `4` | +| `drivesPerNode` | PVC de données par pod | Déduit de `replicaCount` | +| `storageclass.name` | StorageClass des PVC | `local-path` | +| `storageclass.dataStorageSize` | Taille de chaque PVC de données | `256Mi` | +| `storageclass.logStorageSize` | Taille de chaque PVC de journaux | `256Mi` | +| `service.endpoint.port` | Port de l’API S3 | `9000` | +| `service.console.port` | Port de la Console | `9001` | + +Nous recommandons de définir explicitement les tailles de stockage ; les valeurs par défaut du chart sont destinées uniquement à une évaluation de base. diff --git a/content/fr/installation/cloud-native/helm-chart/mtls.md b/content/fr/installation/cloud-native/helm-chart/mtls.md index 5144b472e..7447f721f 100644 --- a/content/fr/installation/cloud-native/helm-chart/mtls.md +++ b/content/fr/installation/cloud-native/helm-chart/mtls.md @@ -1,28 +1,28 @@ --- title: mTLS -description: Configure mutual TLS between RustFS Pods deployed by the Helm chart. +description: Configurez le TLS mutuel entre les pods RustFS déployés par le chart Helm. --- -The chart can enable mutual Transport Layer Security (mTLS) for RustFS Pod communication. When enabled, RustFS requires client certificates, uses HTTPS for generated peer URLs, and mounts server, client, and CA material into every Pod. +Le chart peut activer le TLS mutuel (mTLS) pour la communication entre les pods RustFS. Lorsque le mTLS est activé, RustFS exige des certificats client, utilise HTTPS pour les URL de pairs générées et monte dans chaque pod le matériel du serveur, du client et de l’autorité de certification. -## Requirements +## Prérequis -mTLS uses cert-manager `Issuer` and `Certificate` resources. Install cert-manager before enabling it and confirm that its CRDs are available: +Le mTLS utilise les ressources cert-manager `Issuer` et `Certificate`. Installez cert-manager avant de l’activer et confirmez que ses CRD sont disponibles : ```bash kubectl get crd certificates.cert-manager.io issuers.cert-manager.io ``` -## 1. Use the chart-managed CA +## 1. Utiliser l’autorité de certification gérée par le chart -Add the following setting to your existing values file: +Ajoutez le réglage suivant à votre fichier de valeurs existant : ```yaml title="values.yaml" mtls: enabled: true ``` -Upgrade the release: +Mettez à niveau la release : ```bash helm upgrade rustfs ./helm/rustfs \ @@ -30,11 +30,11 @@ helm upgrade rustfs ./helm/rustfs \ -f values.yaml ``` -The chart creates a self-signed root CA, a namespace Issuer, and server and client Certificates. It mounts the resulting Secrets and configures RustFS with `RUSTFS_SERVER_MTLS_ENABLE=1` and `RUSTFS_TLS_PATH=/opt/tls`. Health probes also use the generated client certificate. +Le chart crée une autorité de certification racine auto-signée, un Issuer d’espace de noms, ainsi que des Certificates serveur et client. Il monte les Secrets obtenus et configure RustFS avec `RUSTFS_SERVER_MTLS_ENABLE=1` et `RUSTFS_TLS_PATH=/opt/tls`. Les sondes d’intégrité utilisent aussi le certificat client généré. -## 2. Use an existing Issuer +## 2. Utiliser un Issuer existant -To use an Issuer or ClusterIssuer already managed by your platform, configure its reference: +Pour utiliser un Issuer ou un ClusterIssuer déjà géré par votre plateforme, configurez sa référence : ```yaml title="values.yaml" mtls: @@ -46,9 +46,9 @@ mtls: group: cert-manager.io ``` -The issuer must be ready and able to issue both server and client certificates in the `rustfs` namespace. Use `kind: Issuer` for a namespace-scoped issuer. +L’émetteur doit être prêt et en mesure d’émettre à la fois des certificats serveur et des certificats client dans l’espace de noms `rustfs`. Utilisez `kind: Issuer` pour un émetteur limité à un espace de noms. -## 3. Verify mTLS +## 3. Vérifier le mTLS ```bash kubectl -n rustfs get issuer,certificate,secret @@ -57,10 +57,10 @@ kubectl -n rustfs describe certificate rustfs-client-tls kubectl -n rustfs get pods ``` -For a release named `rustfs`, the generated certificate Secrets are `rustfs-server-tls` and `rustfs-client-tls`. +Pour une release nommée `rustfs`, les Secrets de certificats générés sont `rustfs-server-tls` et `rustfs-client-tls`. -:::warning[Plan external access] +:::warning[Planifiez l’accès externe] -mTLS requires clients to present a trusted certificate. Validate how your Ingress controller or other external client presents that certificate before enabling mTLS on an existing deployment. +Le mTLS exige que les clients présentent un certificat de confiance. Validez la manière dont votre contrôleur Ingress ou un autre client externe présente ce certificat avant d’activer le mTLS sur un déploiement existant. -::: \ No newline at end of file +::: diff --git a/content/fr/installation/cloud-native/index.md b/content/fr/installation/cloud-native/index.md index 19175a9ec..9e4490fe5 100644 --- a/content/fr/installation/cloud-native/index.md +++ b/content/fr/installation/cloud-native/index.md @@ -1,28 +1,28 @@ --- -title: "Kubernetes Installation (Helm)" -description: "Deploy RustFS on Kubernetes with the official Helm chart: standalone or distributed mode, storage sizing, probes, production hardening, and server-pool expansion." +title: "Installation Kubernetes (Helm)" +description: "Déployez RustFS sur Kubernetes avec le chart Helm officiel : mode autonome ou distribué, dimensionnement du stockage, sondes, durcissement pour la production et extension des pools de serveurs." --- -RustFS ships an official Helm chart that deploys either a single-node instance (a `Deployment` with one PVC) or a distributed cluster (a `StatefulSet` with multiple pods and PVCs). This guide walks through installing the chart, choosing a deployment mode, sizing storage correctly, and the production options the chart provides. +RustFS est livré avec un chart Helm officiel qui déploie soit une instance à un seul nœud (un `Deployment` avec un PVC), soit un cluster distribué (un `StatefulSet` avec plusieurs pods et plusieurs PVC). Ce guide décrit l’installation du chart, le choix du mode de déploiement, le dimensionnement correct du stockage et les options de production fournies par le chart. -**Prerequisites** +**Prérequis** -- A Kubernetes cluster and `kubectl` access +- Un cluster Kubernetes et un accès à `kubectl` - Helm 3 -- RustFS image version `>= 1.0.0-alpha.69` (the chart requirement) -- A StorageClass with a working provisioner — the chart defaults to [`local-path`](https://github.com/rancher/local-path-provisioner); set `storageclass.name` to use your own -- [`rc`](/operations/rc) installed on the administration host before using the server-pool commands in this guide +- Une image RustFS en version `>= 1.0.0-alpha.69` (exigence du chart) +- Une StorageClass dotée d’un provisionneur opérationnel — le chart utilise par défaut [`local-path`](https://github.com/rancher/local-path-provisioner) ; définissez `storageclass.name` pour utiliser la vôtre +- [`rc`](/fr/operations/rc), installé sur l’hôte d’administration, avant d’utiliser les commandes de pools de serveurs de ce guide -The chart lives in the RustFS source repository under `helm/rustfs`: +Le chart se trouve dans le dépôt source de RustFS, sous `helm/rustfs` : ```bash git clone https://github.com/rustfs/rustfs.git cd rustfs/helm/rustfs ``` -## 1. Quick install +## 1. Installation rapide -Install into a dedicated namespace, setting your own credentials and a realistic data size: +Installez le chart dans un espace de noms dédié, en définissant vos propres identifiants et une taille de données réaliste : ```bash helm install rustfs . \ @@ -33,19 +33,19 @@ helm install rustfs . \ --set storageclass.logStorageSize=1Gi ``` -:::note[The chart refuses default credentials] +:::note[Le chart refuse les identifiants par défaut] -Rendering fails by default unless one of the following is true: +Le rendu échoue par défaut, sauf si l’une des conditions suivantes est vraie : -1. `secret.existingSecret` names a Kubernetes Secret you control, or -2. `secret.rustfs.access_key` and `secret.rustfs.secret_key` are **both** set to non-empty, non-default values, or -3. `secret.allowInsecureDefaults: true` is set (only for local development). +1. `secret.existingSecret` désigne un Secret Kubernetes que vous contrôlez, ou +2. `secret.rustfs.access_key` et `secret.rustfs.secret_key` sont **tous les deux** définis avec des valeurs non vides et différentes des valeurs par défaut, ou +3. `secret.allowInsecureDefaults: true` est défini (uniquement pour le développement local). -This prevents accidental deployment with the well-known default `rustfsadmin`/`rustfsadmin` credentials. Setting only one of the two keys is also rejected, so the chart never silently falls back to a default for the missing key. +Cela empêche un déploiement accidentel avec les identifiants par défaut bien connus `rustfsadmin`/`rustfsadmin`. La définition d’une seule des deux clés est également rejetée : le chart ne retombe donc jamais silencieusement sur une valeur par défaut pour la clé manquante. ::: -Watch the pods come up: +Observez le démarrage des pods : ```bash kubectl -n rustfs get pods -w @@ -59,17 +59,17 @@ rustfs-2 1/1 Running 0 2m27s rustfs-3 1/1 Running 0 2m27s ``` -## 2. Choose a deployment mode +## 2. Choisir un mode de déploiement -The chart supports two modes, selected via the `mode` values: +Le chart prend en charge deux modes, sélectionnés par les valeurs `mode` : -| Mode | Values | Workload | Layout | +| Mode | Valeurs | Charge de travail | Disposition | | --- | --- | --- | --- | -| Distributed (**default**) | `mode.distributed.enabled=true` | StatefulSet | `replicaCount` pods (`>= 2`, default `4`) × `drivesPerNode` data PVCs per pod (`>= 1`, inferred as `4` when `replicaCount: 4` or `1` otherwise; 16 drives by default) | -| Standalone | `mode.standalone.enabled=true`, `mode.distributed.enabled=false` | Deployment | 1 pod, 1 data PVC (single node single disk) | +| Distribué (**par défaut**) | `mode.distributed.enabled=true` | StatefulSet | `replicaCount` pods (`>= 2`, `4` par défaut) × `drivesPerNode` PVC de données par pod (`>= 1`, interprété comme `4` lorsque `replicaCount: 4`, ou comme `1` sinon ; 16 disques par défaut) | +| Autonome | `mode.standalone.enabled=true`, `mode.distributed.enabled=false` | Deployment | 1 pod, 1 PVC de données (un nœud, un seul disque) | -- **Standalone** matches single-node single-disk: no erasure-coding redundancy across nodes. Use it for development, testing, or small setups where the underlying storage provides its own durability. It can reuse existing PVCs via `mode.standalone.existingClaim.dataClaim` / `mode.standalone.existingClaim.logsClaim`. -- **Distributed** behaves like [multiple node multiple disk](../linux/multiple-node-multiple-disk.md): objects are erasure-coded across pods and PVCs. `replicaCount` sets the number of pods (`>= 2`) and `drivesPerNode` sets the number of data PVCs per pod (`>= 1`), giving `replicaCount * drivesPerNode` total drives. When `drivesPerNode` is left unset (`null`), the chart infers `4` data PVCs per pod when `replicaCount` is `4` (16 drives total) and `1` data PVC per pod for any other `replicaCount` (such as `replicaCount: 16` for 16 pods with 1 PVC each). Set both `replicaCount` and `drivesPerNode` explicitly (for example, `replicaCount: 4` and `drivesPerNode: 2` for 8 drives) to choose another layout. +- **Autonome** correspond au mode un nœud, un seul disque : aucune redondance par codage d’effacement entre les nœuds. Utilisez-le pour le développement, les tests ou les petits déploiements dans lesquels le stockage sous-jacent assure sa propre durabilité. Il peut réutiliser des PVC existants via `mode.standalone.existingClaim.dataClaim` / `mode.standalone.existingClaim.logsClaim`. +- **Distribué** se comporte comme [plusieurs nœuds, plusieurs disques](../linux/multiple-node-multiple-disk.md) : les objets sont répartis par codage d’effacement entre les pods et les PVC. `replicaCount` définit le nombre de pods (`>= 2`) et `drivesPerNode` définit le nombre de PVC de données par pod (`>= 1`), soit `replicaCount * drivesPerNode` disques au total. Lorsque `drivesPerNode` n’est pas défini (`null`), le chart déduit `4` PVC de données par pod lorsque `replicaCount` vaut `4` (16 disques au total) et `1` PVC de données par pod pour toute autre valeur de `replicaCount` (par exemple, `replicaCount: 16` pour 16 pods avec 1 PVC chacun). Définissez explicitement à la fois `replicaCount` et `drivesPerNode` (par exemple, `replicaCount: 4` et `drivesPerNode: 2` pour 8 disques) afin de choisir une autre disposition. ```bash # Standalone mode @@ -80,9 +80,9 @@ helm install rustfs . -n rustfs --create-namespace \ --set secret.rustfs.secret_key= ``` -## 3. Storage sizing +## 3. Dimensionnement du stockage -PVC sizes come from the `storageclass` block: +Les tailles de PVC proviennent du bloc `storageclass` : ```yaml title="values-prod.yaml" storageclass: @@ -91,65 +91,65 @@ storageclass: logStorageSize: 256Mi # per logs PVC ``` -:::warning[The default PVC size is 256Mi — change it] +:::warning[La taille de PVC par défaut est 256Mi — modifiez-la] -The chart's default size for the data and logs volumes is **256Mi**, which is only enough to verify the chart works. For any real workload set `storageclass.dataStorageSize` (for example `1Ti`) and `storageclass.logStorageSize` (for example `1Gi`) at install time. In distributed mode the data size applies to **each** data PVC (`replicaCount * drivesPerNode`, 16 PVCs by default). +La taille par défaut du chart pour les volumes de données et de journaux est de **256Mi**, ce qui suffit uniquement à vérifier que le chart fonctionne. Pour toute charge de travail réelle, définissez `storageclass.dataStorageSize` (par exemple `1Ti`) et `storageclass.logStorageSize` (par exemple `1Gi`) au moment de l’installation. En mode distribué, la taille des données s’applique à **chaque** PVC de données (`replicaCount * drivesPerNode`, 16 PVC par défaut). ::: -Setting `config.rustfs.obs_log_directory` to `""` disables the log PVCs and mounts entirely. Custom PVC annotations go under `storageclass.pvcAnnotations.data` / `storageclass.pvcAnnotations.logs`. +Définir `config.rustfs.obs_log_directory` sur `""` désactive entièrement les PVC de journaux et leurs montages. Les annotations de PVC personnalisées se placent sous `storageclass.pvcAnnotations.data` / `storageclass.pvcAnnotations.logs`. -## 4. Health probes +## 4. Sondes d’intégrité -The chart templates HTTP probes on the S3 port (9000) out of the box, matching the server's health endpoints: +Le chart génère par défaut des sondes HTTP sur le port S3 (9000), alignées sur les points de terminaison d’intégrité du serveur : -- **Liveness**: `GET /health` (`livenessProbe.httpGet.path`), initial delay 30s, period 5s -- **Readiness**: `GET /health/ready` (`readinessProbe.httpGet.path`), initial delay 10s, period 5s +- **Vivacité** : `GET /health` (`livenessProbe.httpGet.path`), délai initial de 30 s, période de 5 s +- **État de préparation** : `GET /health/ready` (`readinessProbe.httpGet.path`), délai initial de 10 s, période de 5 s -A pod is only added to the Service endpoints once `/health/ready` returns `200`, which in distributed mode requires the storage quorum to be met. Thresholds and timings are tunable via the `livenessProbe.*` and `readinessProbe.*` values. +Un pod n’est ajouté aux points de terminaison du Service qu’une fois que `/health/ready` renvoie `200`, ce qui, en mode distribué, exige que le quorum de stockage soit atteint. Les seuils et les temporisations se règlent au moyen des valeurs `livenessProbe.*` et `readinessProbe.*`. -## 5. Production hardening +## 5. Durcissement pour la production -### Pod Disruption Budget +### Budget de perturbation des pods -Disabled by default. Enable it so voluntary evictions (node drains, cluster upgrades) never take more than one pod down at a time: +Désactivé par défaut. Activez-le afin que les évictions volontaires (drainage de nœuds, mises à niveau du cluster) ne mettent jamais hors service plus d’un pod à la fois : ```bash --set pdb.create=true # pdb.maxUnavailable defaults to 1 ``` -### Anti-affinity and topology spread +### Anti-affinité et répartition topologique -`affinity.podAntiAffinity.enabled` defaults to `true` with `topologyKey: kubernetes.io/hostname`, spreading pods across distinct nodes. For zone-level spreading, enable `topologySpreadConstraints.enabled` and supply raw constraint entries under `topologySpreadConstraints.constraints` (applied to the distributed StatefulSet). +`affinity.podAntiAffinity.enabled` vaut `true` par défaut, avec `topologyKey: kubernetes.io/hostname`, ce qui répartit les pods sur des nœuds distincts. Pour une répartition au niveau des zones, activez `topologySpreadConstraints.enabled` et fournissez des entrées de contrainte brutes sous `topologySpreadConstraints.constraints` (appliquées au StatefulSet distribué). -### Inter-pod mTLS (cert-manager) +### mTLS entre pods (cert-manager) -Set `mtls.enabled=true` to encrypt traffic between pods; the chart renders cert-manager `Issuer`/`Certificate` resources for a CA, server, and client certificates. To use an issuer you already operate, set `mtls.existingIssuerRef.enabled=true` with its `name`, `kind` (`Issuer` or `ClusterIssuer`), and `group`. +Définissez `mtls.enabled=true` pour chiffrer le trafic entre les pods ; le chart génère des ressources cert-manager `Issuer`/`Certificate` pour une autorité de certification, ainsi que des certificats serveur et client. Pour utiliser un émetteur que vous exploitez déjà, définissez `mtls.existingIssuerRef.enabled=true` avec son `name`, son `kind` (`Issuer` ou `ClusterIssuer`) et son `group`. -### Ingress and Gateway API +### Ingress et Gateway API -Ingress is enabled by default (`ingress.enabled=true`) with `ingress.className: nginx`; set it to `traefik` if that is your controller — the chart applies the matching session-stickiness annotations for each. Set your domain via `ingress.hosts[0].host` (default `example.rustfs.com`). For HTTPS, enable `ingress.tls.enabled` and either pass the certificate with `--set-file ingress.tls.crt=./tls.crt --set-file ingress.tls.key=./tls.key`, point at an existing secret (`ingress.tls.existingSecret`), or let cert-manager issue one (`ingress.tls.certManager.enabled=true`). +L’Ingress est activé par défaut (`ingress.enabled=true`) avec `ingress.className: nginx` ; définissez cette valeur sur `traefik` si c’est votre contrôleur — le chart applique, pour chacun, les annotations d’affinité de session correspondantes. Définissez votre domaine via `ingress.hosts[0].host` (par défaut `example.rustfs.com`). Pour HTTPS, activez `ingress.tls.enabled`, puis transmettez le certificat avec `--set-file ingress.tls.crt=./tls.crt --set-file ingress.tls.key=./tls.key`, pointez vers un secret existant (`ingress.tls.existingSecret`), ou laissez cert-manager en émettre un (`ingress.tls.certManager.enabled=true`). -The chart also has alpha [Gateway API](https://gateway-api.sigs.k8s.io/) support (`gatewayApi.enabled=true` together with `ingress.enabled=false`, Traefik gateway class), rendering `Gateway` and `HTTPRoute` resources. +Le chart prend également en charge, en version alpha, la [Gateway API](https://gateway-api.sigs.k8s.io/) (`gatewayApi.enabled=true` conjointement avec `ingress.enabled=false`, classe de passerelle Traefik) et génère des ressources `Gateway` et `HTTPRoute`. -## 6. Access RustFS +## 6. Accéder à RustFS -Without an ingress, port-forward the Service: +Sans Ingress, redirigez les ports du Service : ```bash kubectl -n rustfs port-forward svc/rustfs 9000:9000 9001:9001 ``` -- S3 API: `http://localhost:9000` -- Console: `http://localhost:9001` +- API S3 : `http://localhost:9000` +- Console : `http://localhost:9001` -Log in to the Console with the access key and secret key you set at install time. With ingress enabled, use your configured host instead (check `kubectl -n rustfs get ing`). The Service defaults to `ClusterIP`; `service.type` can be switched to `NodePort` (S3 on `service.endpoint.nodePort: 32000`, Console on `service.console.nodePort: 32001`) or `LoadBalancer`. +Connectez-vous à la Console avec la clé d’accès et la clé secrète définies lors de l’installation. Lorsque l’Ingress est activé, utilisez plutôt l’hôte que vous avez configuré (vérifiez avec `kubectl -n rustfs get ing`). Le Service utilise `ClusterIP` par défaut ; `service.type` peut être basculé vers `NodePort` (S3 sur `service.endpoint.nodePort: 32000`, Console sur `service.console.nodePort: 32001`) ou `LoadBalancer`. -## 7. Scaling out with server pools +## 7. Monter en charge avec des pools de serveurs -In distributed mode the chart can run multiple **server pools** — independent StatefulSets whose drives together form one cluster. This is the chart-level equivalent of adding a Server Pool as described in [Pool Expansion](../../operations/scaling/storage-pool-expansion.md). +En mode distribué, le chart peut exécuter plusieurs **pools de serveurs** — des StatefulSets indépendants dont les disques forment ensemble un seul cluster. Cela correspond, au niveau du chart, à l’ajout d’un pool de serveurs décrit dans [Extension de pool](../../operations/scaling/storage-pool-expansion.md). -To expand an existing deployment, enable pools and describe the current layout as pool 0 plus your new capacity: +Pour étendre un déploiement existant, activez les pools et décrivez la disposition actuelle comme le pool 0, plus la nouvelle capacité : ```yaml title="values-prod.yaml (pools)" pools: @@ -162,27 +162,27 @@ pools: dataStorageSize: 10Gi ``` -Then apply with `helm upgrade`. Each entry may set `replicaCount` (`>= 2`) and/or a `storageclass` block; omitted fields inherit the top-level values. When top-level `drivesPerNode` is set explicitly, that drive count applies to every pool; when `drivesPerNode` is left unset (`null`), the chart infers the drive count per pool from that pool's `replicaCount` (`4` drives per pod when `replicaCount` is `4`, or `1` drive per pod otherwise). Additional pools render as `-pool` StatefulSets; all pools share the headless service, the main service, the configuration, and the credentials. +Appliquez ensuite la configuration avec `helm upgrade`. Chaque entrée peut définir `replicaCount` (`>= 2`) et/ou un bloc `storageclass` ; les champs omis héritent des valeurs de premier niveau. Lorsque le `drivesPerNode` de premier niveau est défini explicitement, ce nombre de disques s’applique à chaque pool ; lorsque `drivesPerNode` n’est pas défini (`null`), le chart déduit le nombre de disques de chaque pool à partir du `replicaCount` de ce pool (`4` disques par pod lorsque `replicaCount` vaut `4`, ou `1` disque par pod sinon). Les pools supplémentaires sont générés comme des StatefulSets `-pool` ; tous les pools partagent le service headless, le service principal, la configuration et les identifiants. -:::warning[Pools are append-only] +:::warning[Les pools ne s’ajoutent qu’en fin de liste] -The list index determines the StatefulSet name — never remove or reorder entries. Retire a pool with `rc admin decommission` before removing it from the list. +L’index de la liste détermine le nom du StatefulSet — ne supprimez ni ne réordonnez jamais les entrées. Mettez un pool hors service avec `rc admin decommission` avant de le retirer de la liste. ::: -What to expect during the rollout, per the chart's documentation: +À quoi vous attendre pendant le déploiement, d’après la documentation du chart : -- **Crash/restart cycles are normal.** Pods restart until every pod of every pool is resolvable — the server refuses to start with unresolvable peers, so expect a few crash loops before the cluster converges. This is harmless. -- **Rebalance afterwards.** After the cluster converges, run `rc admin rebalance start ` to spread existing objects across the new pool. -- The PodDisruptionBudget spans all pools: with the default `pdb.maxUnavailable: 1`, at most one pod of the whole cluster may be evicted at a time. +- **Prévoyez des redémarrages.** Les pods redémarrent jusqu’à ce que chaque pod de chaque pool soit résolvable — le serveur refuse de démarrer tant que des pairs ne sont pas résolvables. Attendez-vous donc à quelques boucles de plantage avant la convergence du cluster. Ce comportement est sans gravité. +- **Rééquilibrez ensuite.** Une fois le cluster convergé, exécutez `rc admin rebalance start ` pour répartir les objets existants sur le nouveau pool. +- Le PodDisruptionBudget couvre tous les pools : avec la valeur par défaut `pdb.maxUnavailable: 1`, au plus un pod de l’ensemble du cluster peut être évincé à la fois. :::note -`rc` is the RustFS command-line client. Use `rc admin pool list`, `expand`, `rebalance`, and `decommission` for the server-pool workflows described by the chart. +`rc` est le client en ligne de commande de RustFS. Utilisez `rc admin pool list`, `expand`, `rebalance` et `decommission` pour les procédures de pools de serveurs décrites par le chart. ::: -## 8. Uninstall +## 8. Désinstaller ```bash helm uninstall rustfs -n rustfs @@ -190,12 +190,12 @@ helm uninstall rustfs -n rustfs :::note -Helm does not delete PVCs created by StatefulSet volume claim templates. If you intend to discard the data, remove the PVCs explicitly (`kubectl -n rustfs delete pvc -l app.kubernetes.io/name=rustfs`) — otherwise a later reinstall with the same release name reattaches them. +Helm ne supprime pas les PVC créés par les modèles de revendication de volume d’un StatefulSet. Si vous souhaitez supprimer les données, retirez explicitement les PVC (`kubectl -n rustfs delete pvc -l app.kubernetes.io/name=rustfs`) — sinon, une réinstallation ultérieure avec le même nom de release les rattache de nouveau. ::: -## Next steps +## Étapes suivantes -- [Pool Expansion](../../operations/scaling/storage-pool-expansion.md) — how Server Pool expansion works at the cluster level -- [Kubernetes Upgrade](../../operations/upgrade/kubernetes/index.md) — upgrade Helm- and Operator-managed deployments -- [TLS configuration](../../integration/tls-configured.md) — end-to-end TLS options +- [Extension de pool](../../operations/scaling/storage-pool-expansion.md) — fonctionnement de l’extension d’un pool de serveurs au niveau du cluster +- [Mise à niveau Kubernetes](../../operations/upgrade/kubernetes/index.md) — mettre à niveau les déploiements gérés par Helm et par l’Operator +- [Configuration TLS](../../integration/tls-configured.md) — options TLS de bout en bout diff --git a/content/fr/installation/cloud-native/operator/index.md b/content/fr/installation/cloud-native/operator/index.md index 68777f69c..0373a91e2 100644 --- a/content/fr/installation/cloud-native/operator/index.md +++ b/content/fr/installation/cloud-native/operator/index.md @@ -1,28 +1,28 @@ --- -title: Overview -description: Understand how RustFS Operator manages RustFS clusters on Kubernetes. +title: Vue d’ensemble +description: Comprenez comment l’Operator RustFS gère les clusters RustFS sur Kubernetes. --- -**RustFS Operator** applies the Kubernetes Operator pattern to RustFS clusters. Instead of creating StatefulSets, Services, PersistentVolumeClaims (PVCs), and configuration by hand, you declare the required storage cluster as a Kubernetes custom resource. The controller watches that resource and continuously reconciles the running cluster with the declared state. +L’**Operator RustFS** applique le modèle Operator de Kubernetes aux clusters RustFS. Au lieu de créer à la main les StatefulSets, les Services, les PersistentVolumeClaims (PVC) et la configuration, vous déclarez le cluster de stockage requis sous la forme d’une ressource personnalisée Kubernetes. Le contrôleur surveille cette ressource et réconcilie en continu le cluster en cours d’exécution avec l’état déclaré. -The Operator installs two Custom Resource Definitions (CRDs): +L’Operator installe deux définitions de ressources personnalisées (CRD) : -- `Tenant` (`rustfs.com/v1alpha1`) represents one RustFS cluster. It defines storage pools, credentials, scheduling, Transport Layer Security (TLS), and Key Management Service (KMS) settings. -- `PolicyBinding` (`sts.rustfs.com/v1alpha1`) maps a Kubernetes ServiceAccount to RustFS policies when workloads request temporary credentials from the Operator Security Token Service (STS). +- `Tenant` (`rustfs.com/v1alpha1`) représente un cluster RustFS. Il définit les pools de stockage, les identifiants, l’ordonnancement, la sécurité de la couche de transport (TLS) et les réglages du service de gestion des clés (KMS). +- `PolicyBinding` (`sts.rustfs.com/v1alpha1`) associe un ServiceAccount Kubernetes à des politiques RustFS lorsque les charges de travail demandent des identifiants temporaires au service de jetons de sécurité (STS) de l’Operator. -One Operator can manage multiple Tenants across namespaces. Each Tenant has independent storage, credentials, S3 and Console services, and lifecycle. The Operator creates one StatefulSet for each pool, so you can add capacity by appending a pool without rebuilding the cluster. It also reports `Ready`, `Progressing`, or `Degraded` conditions and Kubernetes Events, and exposes health and metrics endpoints for cluster monitoring. +Un même Operator peut gérer plusieurs Tenants répartis dans plusieurs espaces de noms. Chaque Tenant dispose de son propre stockage, de ses propres identifiants, de ses propres services S3 et Console, et de son propre cycle de vie. L’Operator crée un StatefulSet pour chaque pool : vous pouvez donc ajouter de la capacité en ajoutant un pool, sans reconstruire le cluster. Il signale aussi les conditions `Ready`, `Progressing` ou `Degraded`, ainsi que des événements Kubernetes, et expose des points de terminaison d’intégrité et de métriques pour la supervision du cluster. -The same API covers small test clusters and distributed deployments. Sensitive credentials and KMS material stay in Kubernetes Secrets, while version-controlled Tenant manifests hold only Secret references. This makes deployments repeatable, supports GitOps workflows, and keeps routine operations such as multi-tenant management, pool expansion, TLS, and encryption within Kubernetes-native tools. +La même API couvre les petits clusters de test et les déploiements distribués. Les identifiants sensibles et le matériel KMS restent dans des Secrets Kubernetes, tandis que les manifestes Tenant suivis en contrôle de versions ne contiennent que des références à des Secrets. Les déploiements sont ainsi reproductibles, les flux GitOps sont pris en charge, et les opérations courantes — gestion multi-tenant, extension de pool, TLS et chiffrement — restent dans des outils natifs de Kubernetes. -## Operator workflows +## Flux de travail de l’Operator -- [Install](./installation.md) covers requirements, Helm installation, Console access, and TLS configuration. -- [Multi-Tenant](./tenant.md) creates isolated RustFS clusters for different teams or workloads. -- [Pool Expansion](./pool-expansion.md) adds storage capacity by appending a pool to an existing Tenant. -- [KMS Integration](./kms.md) configures local or HashiCorp Vault key management for encrypted data. +- [Installation](./installation.md) couvre les prérequis, l’installation Helm, l’accès à la Console et la configuration TLS. +- [Multi-tenant](./tenant.md) crée des clusters RustFS isolés pour différentes équipes ou charges de travail. +- [Extension de pool](./pool-expansion.md) ajoute de la capacité de stockage en ajoutant un pool à un Tenant existant. +- [Intégration KMS](./kms.md) configure la gestion de clés locale ou HashiCorp Vault pour les données chiffrées. -:::warning[Pre-release software] +:::warning[Logiciel en préversion] -RustFS Operator is currently `v0.1.0` pre-release software under active development. Validate upgrades and Tenant changes in a non-production cluster first. +L’Operator RustFS est actuellement un logiciel en préversion (preview), en version `v0.1.0`, et son développement se poursuit. Validez d’abord les mises à niveau et les modifications de Tenant dans un cluster hors production. -::: \ No newline at end of file +::: diff --git a/content/fr/installation/cloud-native/operator/installation.md b/content/fr/installation/cloud-native/operator/installation.md index 778625e77..219b9ccd3 100644 --- a/content/fr/installation/cloud-native/operator/installation.md +++ b/content/fr/installation/cloud-native/operator/installation.md @@ -1,29 +1,29 @@ --- -title: Install -description: Prepare Kubernetes, install RustFS Operator, and access its Console securely. +title: Installation +description: Préparez Kubernetes, installez l’Operator RustFS et accédez à sa Console de façon sécurisée. --- -This guide installs the Operator with Helm, verifies the deployment, and exposes the Operator Console locally or through HTTPS. +Ce guide installe l’Operator avec Helm, vérifie le déploiement et expose la Console de l’Operator en local ou en HTTPS. -## Requirements +## Prérequis -| Component | Requirement | +| Composant | Exigence | |-----------|-------------| -| Kubernetes | `v1.30` or later | -| Helm | `v3.0` or later | -| kubectl | Compatible with the Kubernetes cluster | -| StorageClass | Dynamic PVC provisioning for Tenant storage | +| Kubernetes | `v1.30` ou ultérieur | +| Helm | `v3.0` ou ultérieur | +| kubectl | Compatible avec le cluster Kubernetes | +| StorageClass | Provisionnement dynamique de PVC pour le stockage des Tenants | -Your account must be able to create CRDs, cluster RBAC, Deployments, and Services. Confirm the target cluster before installation: +Votre compte doit pouvoir créer des CRD, le RBAC de cluster, des Deployments et des Services. Confirmez le cluster cible avant l’installation : ```bash kubectl config current-context kubectl get storageclass ``` -## 1. Install the Operator +## 1. Installer l’Operator -The Helm chart is stored in the Operator repository: +Le chart Helm est stocké dans le dépôt de l’Operator : ```bash git clone https://github.com/rustfs/operator.git @@ -34,7 +34,7 @@ helm upgrade --install rustfs-operator deploy/rustfs-operator/ \ --create-namespace ``` -Common settings belong in a values file: +Les réglages courants se placent dans un fichier de valeurs : ```yaml title="values.yaml" operator: @@ -50,9 +50,9 @@ console: type: ClusterIP ``` -Apply the file with `-f values.yaml`. The chart generates `OPERATOR_*` variables from these values; do not duplicate them under `operator.env`. +Appliquez le fichier avec `-f values.yaml`. Le chart génère les variables `OPERATOR_*` à partir de ces valeurs ; ne les dupliquez pas sous `operator.env`. -## 2. Verify the installation +## 2. Vérifier l’installation ```bash kubectl -n rustfs-system get pods,services @@ -61,32 +61,32 @@ kubectl -n rustfs-system rollout status deployment/rustfs-operator kubectl -n rustfs-system rollout status deployment/rustfs-operator-console ``` -## 3. Access the Operator Console +## 3. Accéder à la Console de l’Operator -The Console listens on port `9090`. Generate a short-lived login token: +La Console écoute sur le port `9090`. Générez un jeton de connexion de courte durée : ```bash kubectl -n rustfs-system create token rustfs-operator-console --duration=24h ``` -Forward the Console service to your workstation: +Redirigez le service de la Console vers votre poste de travail : ```bash kubectl -n rustfs-system port-forward \ svc/rustfs-operator-console 19090:9090 ``` -Open `http://127.0.0.1:19090` and paste the token into the login form. The Helm installation notes print the exact ServiceAccount and Service names when release names or namespaces differ. +Ouvrez `http://127.0.0.1:19090` et collez le jeton dans le formulaire de connexion. Les notes d’installation Helm affichent les noms exacts du ServiceAccount et du Service lorsque le nom de la release ou l’espace de noms diffère. -:::note[Local HTTP access] +:::note[Accès HTTP local] -If your browser does not retain the login over HTTP, set `CONSOLE_COOKIE_SECURE=false` under `console.env` for local testing only. Keep secure cookies enabled for HTTPS. +Si votre navigateur ne conserve pas la session en HTTP, définissez `CONSOLE_COOKIE_SECURE=false` sous `console.env`, uniquement pour les tests locaux. Laissez les cookies sécurisés activés pour HTTPS. ::: -## 4. Configure Console TLS +## 4. Configurer le TLS de la Console -Use one HTTPS hostname for both the Console UI and `/api/v1`. Create a TLS Secret, or let cert-manager create it, then enable Ingress: +Utilisez un seul nom d’hôte HTTPS à la fois pour l’interface de la Console et pour `/api/v1`. Créez un Secret TLS, ou laissez cert-manager le créer, puis activez l’Ingress : ```yaml title="values.yaml" console: @@ -106,7 +106,7 @@ console: - console.example.com ``` -Upgrade the release with the values file: +Mettez à niveau la release avec le fichier de valeurs : ```bash helm upgrade rustfs-operator deploy/rustfs-operator/ \ @@ -114,6 +114,6 @@ helm upgrade rustfs-operator deploy/rustfs-operator/ \ -f values.yaml ``` -Replace the Ingress class, issuer, and hostname for your environment. If cert-manager is not installed, create the `console-tls` Secret with your certificate and private key before the upgrade. +Remplacez la classe d’Ingress, l’émetteur et le nom d’hôte en fonction de votre environnement. Si cert-manager n’est pas installé, créez le Secret `console-tls` avec votre certificat et votre clé privée avant la mise à niveau. -Next, [create a Tenant](./tenant.md). \ No newline at end of file +Ensuite, [créez un Tenant](./tenant.md). diff --git a/content/fr/installation/cloud-native/operator/kms.md b/content/fr/installation/cloud-native/operator/kms.md index 60c89950f..afb49c913 100644 --- a/content/fr/installation/cloud-native/operator/kms.md +++ b/content/fr/installation/cloud-native/operator/kms.md @@ -1,17 +1,17 @@ --- -title: KMS Integration -description: Configure local or HashiCorp Vault key management for a RustFS Tenant through the Operator encryption API. +title: Intégration KMS +description: Configurez la gestion de clés locale ou HashiCorp Vault pour un Tenant RustFS via l’API de chiffrement de l’Operator. --- -Configure Key Management Service (KMS) integration through `spec.encryption`. Do not add `RUSTFS_KMS_*` variables to `spec.env`; the Operator generates them from the structured Tenant configuration and Secret references. +Configurez l’intégration du service de gestion des clés (KMS) via `spec.encryption`. N’ajoutez pas de variables `RUSTFS_KMS_*` à `spec.env` ; l’Operator les génère à partir de la configuration structurée du Tenant et des références de Secrets. -## Choose a backend +## Choisir un backend -Use `local` only for a single-server Tenant. Use `vault` for distributed deployments where every Tenant Pod can reach HashiCorp Vault. +Utilisez `local` uniquement pour un Tenant à un seul serveur. Utilisez `vault` pour les déploiements distribués dans lesquels chaque pod du Tenant peut joindre HashiCorp Vault. -## Local KMS +## KMS local -Create a master key Secret: +Créez un Secret de clé principale : ```yaml title="local-kms-secret.yaml" apiVersion: v1 @@ -24,7 +24,7 @@ stringData: local-master-key: "replace-with-a-random-master-key" ``` -Add the encryption block to the existing Tenant manifest: +Ajoutez le bloc de chiffrement au manifeste Tenant existant : ```yaml title="tenant.yaml" spec: @@ -39,11 +39,11 @@ spec: defaultKeyId: tenant-default ``` -The key directory must be inside a mounted data path so it survives Pod replacement. +Le répertoire de clés doit se trouver à l’intérieur d’un chemin de données monté, afin de survivre au remplacement du pod. -## HashiCorp Vault KMS +## KMS HashiCorp Vault -Create a Secret containing a Vault token: +Créez un Secret contenant un jeton Vault : ```yaml title="vault-kms-secret.yaml" apiVersion: v1 @@ -56,7 +56,7 @@ stringData: vault-token: "replace-with-vault-token" ``` -Add the Vault configuration to the existing Tenant manifest: +Ajoutez la configuration Vault au manifeste Tenant existant : ```yaml title="tenant.yaml" spec: @@ -70,9 +70,9 @@ spec: defaultKeyId: tenant-default ``` -Every Tenant Pod must be able to resolve and connect to the Vault endpoint and trust its certificate. +Chaque pod du Tenant doit pouvoir résoudre le point de terminaison Vault, s’y connecter et faire confiance à son certificat. -## Apply the configuration +## Appliquer la configuration ```bash kubectl apply -f local-kms-secret.yaml @@ -80,10 +80,10 @@ kubectl apply -f tenant.yaml kubectl -n storage-a describe tenant tenant-a ``` -For Vault, apply `vault-kms-secret.yaml` before `tenant.yaml`. Changing encryption settings rolls the affected StatefulSets. +Pour Vault, appliquez `vault-kms-secret.yaml` avant `tenant.yaml`. La modification des réglages de chiffrement déclenche un redémarrage progressif des StatefulSets concernés. -:::warning[Protect encryption keys] +:::warning[Protégez les clés de chiffrement] -Back up key material and test recovery before storing production data. Losing the local master key or Vault keys can make encrypted objects unrecoverable. +Sauvegardez le matériel de clés et testez la récupération avant de stocker des données de production. La perte de la clé principale locale ou des clés Vault peut rendre les objets chiffrés irrécupérables. -::: \ No newline at end of file +::: diff --git a/content/fr/installation/cloud-native/operator/pool-expansion.md b/content/fr/installation/cloud-native/operator/pool-expansion.md index 482c99b54..0c8b18a3b 100644 --- a/content/fr/installation/cloud-native/operator/pool-expansion.md +++ b/content/fr/installation/cloud-native/operator/pool-expansion.md @@ -1,28 +1,28 @@ --- -title: Pool Expansion -description: Add storage capacity to a RustFS Tenant by appending a storage pool. +title: Extension de pool +description: Ajoutez de la capacité de stockage à un Tenant RustFS en ajoutant un pool de stockage. --- -All pools in a Tenant form one RustFS cluster. Add capacity by appending a new pool to `spec.pools`; do not change the shape of an existing pool. +Tous les pools d’un Tenant forment un seul cluster RustFS. Ajoutez de la capacité en ajoutant un nouveau pool à `spec.pools` ; ne modifiez pas les dimensions d’un pool existant. -:::warning[Existing pools are immutable] +:::warning[Les pools existants sont immuables] -Do not change `servers` or `persistence.volumesPerServer` on an existing pool. The Operator creates an immutable StatefulSet for each pool. +Ne modifiez pas `servers` ni `persistence.volumesPerServer` sur un pool existant. L’Operator crée un StatefulSet immuable pour chaque pool. ::: -## 1. Check the Tenant +## 1. Vérifier le Tenant ```bash kubectl -n storage-a get tenant tenant-a kubectl -n storage-a get pods,pvc -l rustfs.tenant=tenant-a ``` -Confirm that the Tenant is `Ready` and the cluster has enough compute and storage capacity. +Confirmez que le Tenant est `Ready` et que le cluster dispose d’assez de capacité de calcul et de stockage. -## 2. Add a pool +## 2. Ajouter un pool -Append the following entry to the existing `spec.pools` list in `tenant.yaml`. Keep all existing entries unchanged. +Ajoutez l’entrée suivante à la liste `spec.pools` existante dans `tenant.yaml`. Conservez toutes les entrées existantes inchangées. ```yaml title="tenant.yaml" - name: pool-1 @@ -38,13 +38,13 @@ Append the following entry to the existing `spec.pools` list in `tenant.yaml`. K storage: 100Gi ``` -This pool creates four PVCs: two servers multiplied by two volumes per server. Apply the complete Tenant manifest: +Ce pool crée quatre PVC : deux serveurs multipliés par deux volumes par serveur. Appliquez le manifeste Tenant complet : ```bash kubectl apply -f tenant.yaml ``` -## 3. Watch the expansion +## 3. Observer l’extension ```bash kubectl -n storage-a get tenant tenant-a -w @@ -52,4 +52,4 @@ kubectl -n storage-a get pods,pvc \ -l rustfs.pool=pool-1 ``` -Wait for the Tenant to return to `Ready` before making another topology change. Increasing an existing PVC size is a separate Kubernetes storage operation and depends on the StorageClass. \ No newline at end of file +Attendez que le Tenant revienne à `Ready` avant d’apporter une autre modification de topologie. Augmenter la taille d’un PVC existant est une opération de stockage Kubernetes distincte, qui dépend de la StorageClass. diff --git a/content/fr/installation/cloud-native/operator/tenant.md b/content/fr/installation/cloud-native/operator/tenant.md index 08bec042f..2b412d94d 100644 --- a/content/fr/installation/cloud-native/operator/tenant.md +++ b/content/fr/installation/cloud-native/operator/tenant.md @@ -1,13 +1,13 @@ --- -title: Multi-Tenant -description: Create isolated RustFS Tenants and access their S3 API and Console services. +title: Multi-tenant +description: Créez des Tenants RustFS isolés et accédez à leurs services d’API S3 et de Console. --- -A `Tenant` represents one independent RustFS cluster. Use a separate namespace, credentials Secret, and Tenant resource for each team or workload. +Un `Tenant` représente un cluster RustFS indépendant. Utilisez un espace de noms, un Secret d’identifiants et une ressource Tenant distincts pour chaque équipe ou charge de travail. -## 1. Create a namespace and credentials +## 1. Créer un espace de noms et des identifiants -Create the Secret directly so credentials are not stored in a manifest: +Créez le Secret directement afin que les identifiants ne soient pas stockés dans un manifeste : ```bash kubectl create namespace storage-a @@ -16,9 +16,9 @@ kubectl -n storage-a create secret generic rustfs-tenant-creds \ --from-literal=secretkey='' ``` -## 2. Define the Tenant +## 2. Définir le Tenant -This development example creates one RustFS Pod and one `10Gi` PVC. Replace `standard` with a StorageClass in your cluster. +Cet exemple de développement crée un pod RustFS et un PVC de `10Gi`. Remplacez `standard` par une StorageClass de votre cluster. ```yaml title="tenant.yaml" apiVersion: rustfs.com/v1alpha1 @@ -44,7 +44,7 @@ spec: storage: 10Gi ``` -## 3. Apply and verify +## 3. Appliquer et vérifier ```bash kubectl apply -f tenant.yaml @@ -52,23 +52,23 @@ kubectl -n storage-a get tenant,pods,pvc,svc kubectl -n storage-a describe tenant tenant-a ``` -## 4. Access RustFS +## 4. Accéder à RustFS ```bash kubectl -n storage-a port-forward svc/tenant-a-io 9000:9000 kubectl -n storage-a port-forward svc/tenant-a-console 9001:9001 ``` -Run the commands in separate terminals. Use `http://localhost:9000` as the S3 endpoint and open `http://localhost:9001` for the Tenant Console. +Exécutez les commandes dans des terminaux distincts. Utilisez `http://localhost:9000` comme point de terminaison S3 et ouvrez `http://localhost:9001` pour la Console du Tenant. -To add another Tenant, repeat the process with a different namespace, Secret, and Tenant name. List all managed Tenants with: +Pour ajouter un autre Tenant, répétez le processus avec un espace de noms, un Secret et un nom de Tenant différents. Répertoriez tous les Tenants gérés avec : ```bash kubectl get tenants --all-namespaces ``` -:::warning[Production topology] +:::warning[Topologie de production] -The one-server example is for evaluation. Production Tenants need a distributed pool layout, resource requests, scheduling constraints, and an immutable image reference. +L’exemple à un seul serveur est destiné à l’évaluation. Les Tenants de production ont besoin d’une disposition de pool distribuée, de demandes de ressources, de contraintes d’ordonnancement et d’une référence d’image immuable. -::: \ No newline at end of file +::: diff --git a/content/fr/installation/container/docker.md b/content/fr/installation/container/docker.md index c88d61007..d68cf9aec 100644 --- a/content/fr/installation/container/docker.md +++ b/content/fr/installation/container/docker.md @@ -1,33 +1,33 @@ --- title: "Docker" -description: "Run RustFS with Docker: single-node setup, host-directory permissions, Docker Compose, TLS, and multi-node deployment." +description: "Exécutez RustFS avec Docker : instance à nœud unique, droits des répertoires de l’hôte, Docker Compose, TLS et déploiement multi-nœuds." --- -This page covers running the official RustFS image with Docker: a single-node instance with persistent storage, host-directory permissions for the non-root container user, Docker Compose with optional observability services, TLS, and a multi-node deployment. You need a working Docker Engine and permission to run containers. +Cette page décrit l’exécution de l’image officielle de RustFS avec Docker : une instance à nœud unique avec stockage persistant, les droits des répertoires de l’hôte pour l’utilisateur non root du conteneur, Docker Compose avec des services d’observabilité facultatifs, TLS et un déploiement multi-nœuds. Vous avez besoin d’un moteur Docker opérationnel et du droit d’exécuter des conteneurs. -## 1. Prerequisites +## 1. Prérequis -* Docker Engine (≥ 20.10) installed and able to pull images and run containers normally -* Host ports 9000 (S3 API) and 9001 (Console) available, or consistent with your custom ports -* If you bind-mount a host directory, the directory owner must match the container user — see [Bind-mount a host directory](#bind-mount-a-host-directory) +* Moteur Docker (≥ 20.10) installé, avec la possibilité de tirer des images et d’exécuter des conteneurs +* Ports de l’hôte 9000 (API S3) et 9001 (Console) disponibles, ou les ports personnalisés que vous prévoyez d’utiliser +* Si vous montez un répertoire de l’hôte en bind mount, son propriétaire doit correspondre à l’utilisateur du conteneur — voir [Monter un répertoire de l’hôte](#5-monter-un-répertoire-de-lhôte) -## 2. Pull the image +## 2. Récupérer l’image ```bash docker pull rustfs/rustfs:latest ``` -## 3. Create persistent storage +## 3. Créer un stockage persistant -Create a named volume so object data remains available when you replace the container: +Créez un volume nommé pour que les données d’objets restent disponibles lorsque vous remplacez le conteneur : ```bash docker volume create rustfs-data ``` -## 4. Start RustFS +## 4. Démarrer RustFS -Replace the credential placeholders before running the container: +Remplacez les identifiants indicatifs avant d’exécuter le conteneur : ```bash docker run -d \ @@ -47,15 +47,15 @@ docker run -d \ /data ``` -:::warning[Set credentials when creating the container] +:::warning[Définir les identifiants à la création du conteneur] -Set unique `RUSTFS_ACCESS_KEY` and `RUSTFS_SECRET_KEY` environment variables before exposing RustFS to a network. Do not use the well-known `rustfsadmin` value for either credential. If the container was started without custom credentials, stop and recreate it with both `-e` options shown above; the `rustfs-data` volume remains intact. +Définissez des variables d’environnement `RUSTFS_ACCESS_KEY` et `RUSTFS_SECRET_KEY` uniques avant d’exposer RustFS sur un réseau. N’utilisez pas la valeur bien connue `rustfsadmin` pour l’un ou l’autre des identifiants. Si le conteneur a été démarré sans identifiants personnalisés, arrêtez-le et recréez-le avec les deux options `-e` indiquées ci-dessus. Le volume `rustfs-data` reste intact. ::: -### Environment variables or command-line flags +### Variables d’environnement ou indicateurs de ligne de commande -The example above configures RustFS with environment variables. You can pass the same settings as command-line flags instead; when both are present, command-line flags win: +L’exemple ci-dessus configure RustFS avec des variables d’environnement. Vous pouvez transmettre les mêmes réglages sous forme d’indicateurs de ligne de commande. Lorsque les deux sont présents, les indicateurs de ligne de commande l’emportent : ```bash docker run -d \ @@ -71,40 +71,40 @@ docker run -d \ /data ``` -## 5. Bind-mount a host directory +## 5. Monter un répertoire de l’hôte -The named volume above needs no extra setup. If you mount a host directory instead (`-v /path/on/host:/data`), keep in mind that the container runs as non-root user `rustfs` with id `10001`. Make the host directory owned by `10001`, otherwise you will encounter permission denied errors: +Le volume nommé ci-dessus ne demande aucune préparation supplémentaire. Si vous montez plutôt un répertoire de l’hôte (`-v /path/on/host:/data`), gardez à l’esprit que le conteneur s’exécute sous l’utilisateur non root `rustfs`, d’identifiant `10001`. Le répertoire de l’hôte doit appartenir à `10001`, sinon vous rencontrerez des erreurs « permission denied » : ```bash chown -R 10001:10001 /path/to/host_directory ``` -## 6. Verify the deployment +## 6. Vérifier le déploiement -Check the container and the S3 API health endpoint: +Vérifiez le conteneur et le point de terminaison de contrôle d’intégrité de l’API S3 : ```bash docker ps --filter name=rustfs curl --fail http://localhost:9000/health ``` -The S3 API is available at `http://localhost:9000`, and the Console is available at `http://localhost:9001`. +L’API S3 est disponible à l’adresse `http://localhost:9000`, et la Console à l’adresse `http://localhost:9001`. ## Docker Compose -The RustFS repository ships a [`docker-compose.yml`](https://github.com/rustfs/rustfs/blob/main/docker-compose.yml) that includes `grafana`, `prometheus`, `otel-collector`, and `jaeger` services, mainly for observability. To deploy RustFS together with these services, clone the [RustFS code repository](https://github.com/rustfs/rustfs) locally: +Le dépôt RustFS fournit un fichier [`docker-compose.yml`](https://github.com/rustfs/rustfs/blob/main/docker-compose.yml) qui inclut les services `grafana`, `prometheus`, `otel-collector` et `jaeger`, principalement pour l’observabilité. Pour déployer RustFS avec ces services, clonez le [dépôt de code RustFS](https://github.com/rustfs/rustfs) en local : ```bash git clone https://github.com/rustfs/rustfs.git ``` -Run the command from the repository root: +Exécutez la commande depuis la racine du dépôt : ```bash docker compose --profile observability up -d ``` -The compose file uses an initialization container to grant the correct access rights to `rustfs`: the `rustfs_perms` service below changes the ownership of the mounted volumes to `10001` before `rustfs` starts, using `depends_on` to wait for it to complete. To keep logs persistent and accessible, the host log directory is mapped to the container's `/var/log/rustfs/` path: +Le fichier Compose utilise un conteneur d’initialisation pour accorder les droits d’accès corrects à `rustfs` : le service `rustfs_perms` ci-dessous attribue la propriété des volumes montés à `10001` avant le démarrage de `rustfs`, et `depends_on` attend la fin de cette opération. Pour conserver des journaux persistants et accessibles, le répertoire de journaux de l’hôte est mappé sur le chemin `/var/log/rustfs/` du conteneur : ```yaml title="docker-compose.yml" services: @@ -134,21 +134,21 @@ The compose file uses an initialization container to grant the correct access ri # ... other configurations ``` -If you only want RustFS without Grafana, Prometheus, and the other observability services, start just the `rustfs` service (the compose file marks the collector dependency as optional): +Si vous ne voulez que RustFS, sans Grafana, Prometheus ni les autres services d’observabilité, démarrez uniquement le service `rustfs` (le fichier Compose marque la dépendance au collecteur comme facultative) : ```bash docker compose -f docker-compose.yml up -d rustfs ``` -This starts only the `rustfs-server` container. Whether you start only `rustfs-server` or the full stack, the S3 API is served at `http://localhost:9000`, and the RustFS Console is at `http://localhost:9001`. Open the Console in a browser and log in with the access key and secret key you configured above. Generate a strong secret with, for example, `openssl rand -base64 24`, and never ship the placeholder values to production. +Cela ne démarre que le conteneur `rustfs-server`. Que vous démarriez uniquement `rustfs-server` ou la pile complète, l’API S3 est servie à l’adresse `http://localhost:9000` et la Console RustFS à l’adresse `http://localhost:9001`. Ouvrez la Console dans un navigateur et connectez-vous avec la clé d’accès et la clé secrète configurées ci-dessus. Générez une clé secrète robuste, par exemple avec `openssl rand -base64 24`, et n’utilisez jamais les valeurs indicatives en production. -For Docker Compose, define unique `RUSTFS_ACCESS_KEY` and `RUSTFS_SECRET_KEY` values in the `rustfs` service environment or in the environment file used for variable substitution, then recreate the service with `docker compose up -d rustfs`. +Pour Docker Compose, définissez des valeurs uniques de `RUSTFS_ACCESS_KEY` et `RUSTFS_SECRET_KEY` dans l’environnement du service `rustfs`, ou dans le fichier d’environnement utilisé pour la substitution de variables, puis recréez le service avec `docker compose up -d rustfs`. -## Multi-node deployment +## Déploiement multi-nœuds -Docker's default bridge networking does not support multi-node deployments. Use `--network host` so each container can communicate directly with other nodes. +Le réseau bridge par défaut de Docker ne prend pas en charge les déploiements multi-nœuds. Utilisez `--network host` pour que chaque conteneur puisse communiquer directement avec les autres nœuds. -Run the following on **each node**: +Exécutez ce qui suit sur **chaque nœud** : ```bash docker run -d \ @@ -166,7 +166,7 @@ docker run -d \ rustfs/rustfs:latest ``` -Add the entries to `/etc/hosts` on **every** node: +Ajoutez les entrées à `/etc/hosts` sur **chaque** nœud : ```ini title="/etc/hosts" 192.168.1.1 node1 @@ -175,21 +175,21 @@ Add the entries to `/etc/hosts` on **every** node: 192.168.1.4 node4 ``` -## TLS configuration +## Configuration TLS -If [using TLS](../../integration/tls-configured.md), mount the certificate directory and point RustFS at it: +Si vous [utilisez TLS](../../integration/tls-configured.md), montez le répertoire des certificats et indiquez-le à RustFS : ```bash -v /path/to/certs:/certs \ -e RUSTFS_TLS_PATH=/certs \ ``` -## Before production +## Avant la production -Work through the [Pre-Installation Checklists](../requirement/checklists/index.md) — hardware, network, software, and security — before deploying to production. Use a multi-node deployment architecture, [enable TLS encrypted communication](../../integration/tls-configured.md), configure a log rotation strategy, and set up a regular backup strategy. +Parcourez les [listes de contrôle préalables à l’installation](../requirement/checklists/index.md) — matériel, réseau, logiciels et sécurité — avant de déployer en production. Utilisez un déploiement multi-nœuds, [activez TLS](../../integration/tls-configured.md), configurez la rotation des journaux et planifiez des sauvegardes régulières. -## Next steps +## Étapes suivantes -- [RustFS Console](/administration/console) -- [Configure an S3 client](../../developer/examples/aws-cli.md) -- [TLS configuration](../../integration/tls-configured.md) +- [Console RustFS](/fr/administration/console) +- [Configurer un client S3](../../developer/examples/aws-cli.md) +- [Configuration TLS](../../integration/tls-configured.md) diff --git a/content/fr/installation/container/index.md b/content/fr/installation/container/index.md index 4ee47b47d..2c42a24ed 100644 --- a/content/fr/installation/container/index.md +++ b/content/fr/installation/container/index.md @@ -1,20 +1,20 @@ --- -title: "Container" -description: "Run the official RustFS container image with Docker or Podman." +title: "Conteneur" +description: "Exécutez l’image de conteneur officielle de RustFS avec Docker ou Podman." --- -RustFS is a high-performance, S3-compatible open-source distributed object storage system. In single-node single-disk (SNSD) deployment mode, the backend uses zero erasure coding without additional data redundancy, which makes it suitable for local testing and small-scale scenarios. The official RustFS image packages the RustFS binary and its runtime environment into a container, so you can start a service with a single command and persistent storage. +RustFS est un système de stockage objet distribué, à code source ouvert et compatible avec S3. En mode nœud unique, disque unique (SNSD), RustFS n’utilise pas le codage d’effacement et ne stocke aucune donnée redondante. Ce mode ne convient donc qu’aux tests locaux et aux petites charges. L’image officielle de RustFS regroupe le binaire RustFS et son environnement d’exécution dans un conteneur : vous pouvez démarrer RustFS avec un stockage persistant en une seule commande. -The container runs as non-root user `rustfs` with id `10001`, so a bind-mounted host directory must be owned by `10001` to avoid permission denied errors. +Le conteneur s’exécute sous l’utilisateur non root `rustfs`, d’identifiant `10001`. Un répertoire de l’hôte monté en bind mount doit donc appartenir à `10001`, afin d’éviter les erreurs « permission denied ». -## Container runtimes +## Environnements d’exécution de conteneurs -- [Docker](./docker.md): run a single-node instance with persistent storage, then extend it with Docker Compose, TLS, and multi-node networking. -- [Podman](./podman.md): run the same image in a daemonless workflow. +- [Docker](./docker.md) : exécutez une instance à nœud unique avec un stockage persistant, puis étendez-la avec Docker Compose, TLS et un réseau multi-nœuds. +- [Podman](./podman.md) : exécutez la même image dans un flux de travail sans démon. -:::note[Directory permissions] +:::note[Droits des répertoires] -If you mount a host directory into the container with `-v`, make sure the owner of the host directory is `10001`: +Si vous montez un répertoire de l’hôte dans le conteneur avec `-v`, assurez-vous que le propriétaire du répertoire de l’hôte est `10001` : ```bash chown -R 10001:10001 /path/to/host_directory @@ -22,4 +22,4 @@ chown -R 10001:10001 /path/to/host_directory ::: -For Kubernetes deployments, see the [Helm chart](/installation/cloud-native/helm-chart) or the [Operator](/installation/cloud-native/operator) instead. +Pour les déploiements Kubernetes, consultez plutôt le [chart Helm](/fr/installation/cloud-native/helm-chart) ou l’[Operator](/fr/installation/cloud-native/operator). diff --git a/content/fr/installation/container/podman.md b/content/fr/installation/container/podman.md index 9ce2a6fcd..d0ae79baf 100644 --- a/content/fr/installation/container/podman.md +++ b/content/fr/installation/container/podman.md @@ -1,27 +1,27 @@ --- title: "Podman" -description: "Run a single-node RustFS instance with Podman and persistent container storage." +description: "Exécutez une instance RustFS à nœud unique avec Podman et un stockage de conteneur persistant." --- -Podman can run the official RustFS Open Container Initiative (OCI) image without a daemon. You need a working Podman installation and permission to create containers. +Podman peut exécuter l’image OCI (Open Container Initiative) officielle de RustFS sans démon. Vous avez besoin d’une installation Podman opérationnelle et du droit de créer des conteneurs. -## 1. Pull the image +## 1. Récupérer l’image ```bash podman pull docker.io/rustfs/rustfs:latest ``` -## 2. Create persistent storage +## 2. Créer un stockage persistant -Create a named volume so object data remains available when you replace the container: +Créez un volume nommé pour que les données d’objets restent disponibles lorsque vous remplacez le conteneur : ```bash podman volume create rustfs-data ``` -:::note[Bind-mounting a host directory] +:::note[Montage en bind mount d’un répertoire de l’hôte] -The named volume above needs no extra setup. If you bind-mount a host directory instead, keep in mind that the container runs as non-root user `rustfs` with id `10001`. Make the host directory owned by `10001`, otherwise you will encounter permission denied errors: +Le volume nommé ci-dessus ne demande aucune préparation supplémentaire. Si vous montez plutôt un répertoire de l’hôte en bind mount, gardez à l’esprit que le conteneur s’exécute sous l’utilisateur non root `rustfs`, d’identifiant `10001`. Le répertoire de l’hôte doit appartenir à `10001`, sinon vous rencontrerez des erreurs « permission denied » : ```bash chown -R 10001:10001 /path/to/host_directory @@ -29,9 +29,9 @@ chown -R 10001:10001 /path/to/host_directory ::: -## 3. Start RustFS +## 3. Démarrer RustFS -Replace the credential placeholders before running the container: +Remplacez les identifiants indicatifs avant d’exécuter le conteneur : ```bash podman run -d \ @@ -50,25 +50,25 @@ podman run -d \ /data ``` -:::warning[Set credentials when creating the container] +:::warning[Définir les identifiants à la création du conteneur] -Set unique `RUSTFS_ACCESS_KEY` and `RUSTFS_SECRET_KEY` environment variables before exposing RustFS to a network. Do not use the well-known `rustfsadmin` value for either credential. If the container was started without custom credentials, stop and recreate it with both `-e` options shown above; the `rustfs-data` volume remains intact. +Définissez des variables d’environnement `RUSTFS_ACCESS_KEY` et `RUSTFS_SECRET_KEY` uniques avant d’exposer RustFS sur un réseau. N’utilisez pas la valeur bien connue `rustfsadmin` pour l’un ou l’autre des identifiants. Si le conteneur a été démarré sans identifiants personnalisés, arrêtez-le et recréez-le avec les deux options `-e` indiquées ci-dessus. Le volume `rustfs-data` reste intact. ::: -## 4. Verify the deployment +## 4. Vérifier le déploiement -Check the container and the S3 API health endpoint: +Vérifiez le conteneur et le point de terminaison de contrôle d’intégrité de l’API S3 : ```bash podman ps --filter name=rustfs curl --fail http://localhost:9000/health ``` -The S3 API is available at `http://localhost:9000`, and the Console is available at `http://localhost:9001`. +L’API S3 est disponible à l’adresse `http://localhost:9000`, et la Console à l’adresse `http://localhost:9001`. -## Next steps +## Étapes suivantes -- [RustFS Console](/administration/console) -- [Configure an S3 client](../../developer/examples/aws-cli.md) -- [TLS configuration](../../integration/tls-configured.md) +- [Console RustFS](/fr/administration/console) +- [Configurer un client S3](../../developer/examples/aws-cli.md) +- [Configuration TLS](../../integration/tls-configured.md) diff --git a/content/fr/installation/index.md b/content/fr/installation/index.md index e6cf9ec5c..4475ca913 100644 --- a/content/fr/installation/index.md +++ b/content/fr/installation/index.md @@ -1,43 +1,43 @@ --- title: "Installation" -description: "Choose the right RustFS deployment path: local trial, single-node or multi-node production, containers, and Kubernetes." +description: "Choisissez le mode de déploiement RustFS adapté : essai local, production sur un ou plusieurs nœuds, conteneurs et Kubernetes." --- -RustFS is a distributed object storage system written in Rust and released under the Apache 2.0 license. It runs on Linux, Windows, macOS, FreeBSD, and containers, across x86, ARM, RISC-V, and other CPU architectures. +RustFS est un système de stockage objet distribué, écrit en Rust et publié sous la licence Apache 2.0. Il s’exécute sous Linux, Windows, macOS et FreeBSD, ainsi que dans des conteneurs, sur les architectures x86, ARM, RISC-V et d’autres architectures de processeur. :::warning[Développement et débogage uniquement] -La version Windows de RustFS est destinée uniquement au développement et au débogage et **n’est pas recommandée pour les déploiements en production**. Pour la production, nous recommandons [Linux](/fr/installation/linux). +La version Windows de RustFS est destinée uniquement au développement et au débogage. Elle **n’est pas recommandée pour les déploiements en production**. Nous recommandons [Linux](/fr/installation/linux) pour les charges de production. ::: -:::warning[Change the default credentials immediately] +:::warning[Changez immédiatement les identifiants par défaut] -After installation, set unique values for `RUSTFS_ACCESS_KEY` and `RUSTFS_SECRET_KEY` before exposing RustFS to a network. Do not use the well-known `rustfsadmin` value for either credential. +Après l’installation, définissez des valeurs uniques pour `RUSTFS_ACCESS_KEY` et `RUSTFS_SECRET_KEY` avant d’exposer RustFS sur un réseau. N’utilisez pas la valeur bien connue `rustfsadmin` pour l’un ou l’autre des identifiants. -- For a Linux binary or systemd installation, set both values in `/etc/default/rustfs`, then restart the `rustfs` service. -- For Docker, Podman, or Docker Compose, pass both values as container environment variables when creating the container. Recreate an existing container if it was started without them. +- Pour une installation par binaire Linux ou par systemd, définissez les deux valeurs dans `/etc/default/rustfs`, puis redémarrez le service `rustfs`. +- Pour Docker, Podman ou Docker Compose, transmettez les deux valeurs comme variables d’environnement du conteneur au moment de sa création. Recréez un conteneur existant s’il a été démarré sans elles. ::: -## Choose Your Path +## Choisissez votre parcours -| Your goal | Recommended path | Guide | +| Votre objectif | Parcours recommandé | Guide | | - | - | - | -| Try RustFS on a local machine | One-command install script, or a container | [Linux Quick Start](./linux/quick-start.md) · [Container](./container/index.md) | -| Single-server production | SNSD (one disk) or SNMD (multiple disks) | [Installing RustFS on Linux](./linux/index.md) | -| Multi-server production cluster | MNMD, after completing the production checklists | [Multiple Node Multiple Disk](./linux/multiple-node-multiple-disk.md) · [Checklists](./requirement/checklists/index.md) | -| Kubernetes / cloud-native | Container orchestration deployment | [Cloud Native](./cloud-native/index.md) | -| Windows or macOS host | Native installation | [Windows](./windows/index.md) · [macOS](./macos/index.md) | +| Essayer RustFS sur une machine locale | Script d’installation en une commande, ou un conteneur | [Démarrage rapide Linux](./linux/quick-start.md) · [Conteneur](./container/index.md) | +| Production sur un seul serveur | SNSD (un disque) ou SNMD (plusieurs disques) | [Installer RustFS sur Linux](./linux/index.md) | +| Cluster de production multi-serveurs | MNMD, après les listes de contrôle de production | [Nœuds multiples, disques multiples](./linux/multiple-node-multiple-disk.md) · [Listes de contrôle](./requirement/checklists/index.md) | +| Kubernetes / cloud natif | Déploiement avec le chart Helm ou l’Operator | [Cloud natif](./cloud-native/index.md) | +| Hôte Windows ou macOS | Installation native | [Windows](./windows/index.md) · [macOS](./macos/index.md) | -## Deployment Mode Comparison +## Comparaison des modes de déploiement -| Mode | Nodes | Disks | Fault Tolerance | Typical Use | +| Mode | Nœuds | Disques | Tolérance aux pannes | Usage typique | | - | - | - | - | - | -| [SNSD](./linux/single-node-single-disk.md) | 1 | 1 | None — rely on backups | Development, testing, low-density non-critical business | -| [SNMD](./linux/single-node-multiple-disk.md) | 1 | Multiple | Up to M parity disks within the node | Medium, non-critical business on a single server | -| [MNMD](./linux/multiple-node-multiple-disk.md) | 4+ | Multiple per node | Disk- and node-level via erasure coding across servers | Production workloads | +| [SNSD](./linux/single-node-single-disk.md) | 1 | 1 | Aucune — appuyez-vous sur les sauvegardes | Développement, tests et petites charges non critiques | +| [SNMD](./linux/single-node-multiple-disk.md) | 1 | Plusieurs | Jusqu’à M disques de parité dans le nœud | Charges moyennes et non critiques sur un seul serveur | +| [MNMD](./linux/multiple-node-multiple-disk.md) | 4+ | Plusieurs par nœud | Niveau disque et nœud, par codage d’effacement entre les serveurs | Charges de production | -## Checklist +## Liste de contrôle -Before any production deployment, work through the [Pre-Installation Checklists](./requirement/checklists/index.md) — hardware, network, software, and security — to make sure your environment meets production guidance. +Avant tout déploiement en production, parcourez les [listes de contrôle préalables à l’installation](./requirement/checklists/index.md) — matériel, réseau, logiciels et sécurité — afin de vérifier que votre environnement répond aux exigences de production. diff --git a/content/fr/installation/linux/index.md b/content/fr/installation/linux/index.md index 8f9f4f1be..4819debd0 100644 --- a/content/fr/installation/linux/index.md +++ b/content/fr/installation/linux/index.md @@ -1,34 +1,34 @@ --- -title: "Installing RustFS on Linux" -description: "Choose a Linux deployment mode — SNSD, SNMD, or MNMD — and install RustFS on one or more servers." +title: "Installer RustFS sur Linux" +description: "Choisissez un mode de déploiement Linux — SNSD, SNMD ou MNMD — et installez RustFS sur un ou plusieurs serveurs." --- -This section covers installing RustFS on Linux servers. For a one-command trial installation, use the [Quick Start](./quick-start.md). For a manual installation, pick one of the three deployment modes below — all three share the same [prerequisites and service setup](./prerequisites-and-service.md), and differ only in topology and volume configuration. +Cette section décrit l’installation de RustFS sur des serveurs Linux. Pour une installation d’essai en une commande, utilisez le [démarrage rapide](./quick-start.md). Pour une installation manuelle, choisissez l’un des trois modes de déploiement ci-dessous. Les trois partagent les mêmes [prérequis et la même configuration du service](./prerequisites-and-service.md), et ne diffèrent que par la topologie et la configuration des volumes. -:::warning[Change the default credentials immediately] +:::warning[Changez immédiatement les identifiants par défaut] -After installation, set unique `RUSTFS_ACCESS_KEY` and `RUSTFS_SECRET_KEY` values in `/etc/default/rustfs`. Do not use the well-known `rustfsadmin` value for either credential. Restart the service with `sudo systemctl restart rustfs` after changing the file. +Après l’installation, définissez des valeurs uniques pour `RUSTFS_ACCESS_KEY` et `RUSTFS_SECRET_KEY` dans `/etc/default/rustfs`. N’utilisez pas la valeur bien connue `rustfsadmin` pour l’un ou l’autre des identifiants. Après avoir modifié le fichier, redémarrez le service avec `sudo systemctl restart rustfs`. ::: -## Single Node Single Disk (SNSD) +## Nœud unique, disque unique (SNSD) -One server, one data disk. The simplest mode, with no redundancy — a disk failure means data loss, so rely on backups. Suitable for development, testing, and low-density non-critical business. +Un serveur, un disque de données. C’est le mode le plus simple, sans redondance : une panne de disque entraîne une perte de données. Appuyez-vous donc sur des sauvegardes. Il convient au développement, aux tests et aux petites charges non critiques. -→ [Single Node Single Disk installation](./single-node-single-disk.md) +→ [Installation en mode nœud unique, disque unique](./single-node-single-disk.md) -## Single Node Multiple Disk (SNMD) +## Nœud unique, disques multiples (SNMD) -One server, multiple data disks. Erasure coding shards data across the disks, so the node tolerates a limited number of disk failures, but a whole-server failure still means data loss. Suitable for medium, non-critical business on a single machine. +Un serveur, plusieurs disques de données. Le codage d’effacement répartit les données entre les disques : le nœud tolère un nombre limité de pannes de disque, mais la panne du serveur entier entraîne toujours une perte de données. Ce mode convient aux charges moyennes et non critiques sur une seule machine. -→ [Single Node Multiple Disk installation](./single-node-multiple-disk.md) +→ [Installation en mode nœud unique, disques multiples](./single-node-multiple-disk.md) -## Multiple Node Multiple Disk (MNMD) +## Nœuds multiples, disques multiples (MNMD) -Four or more servers, each with one or more disks. Erasure coding spans servers, providing disk- and node-level fault tolerance plus horizontal scalability. This is the mode for production workloads. +Quatre serveurs ou plus, chacun avec un ou plusieurs disques. Le codage d’effacement s’étend sur plusieurs serveurs et offre une tolérance aux pannes au niveau du disque et du nœud, ainsi qu’une évolutivité horizontale. C’est le mode adapté aux charges de production. -→ [Multiple Node Multiple Disk installation](./multiple-node-multiple-disk.md) +→ [Installation en mode nœuds multiples, disques multiples](./multiple-node-multiple-disk.md) -## Before Production +## Avant la production -Work through the [Pre-Installation Checklists](../requirement/checklists/index.md) — hardware, network, software, and security — before deploying to production. If you don't need production standards, you can skip them. +Parcourez les [listes de contrôle préalables à l’installation](../requirement/checklists/index.md) — matériel, réseau, logiciels et sécurité — avant un déploiement en production. Vous pouvez les ignorer pour les déploiements hors production. diff --git a/content/fr/installation/linux/multiple-node-multiple-disk.md b/content/fr/installation/linux/multiple-node-multiple-disk.md index 797c9cd9e..d96505e78 100644 --- a/content/fr/installation/linux/multiple-node-multiple-disk.md +++ b/content/fr/installation/linux/multiple-node-multiple-disk.md @@ -1,16 +1,16 @@ --- -title: "RustFS Multiple Node Multiple Disk Installation" -description: "Install RustFS on multiple servers with multiple disks, data will be stored on multiple disks across multiple servers." +title: "Installation de RustFS en mode nœuds multiples, disques multiples" +description: "Installez un cluster RustFS distribué sur plusieurs serveurs, chacun avec plusieurs disques." --- -Multiple Node Multiple Disk (MNMD) mode is the deployment mode for production workloads, providing enterprise-grade performance, security, and scalability. A minimum of **4 servers** is required, each with at least 1 disk, to safely start a distributed object storage cluster. +Le mode nœuds multiples, disques multiples (MNMD) est le déploiement de production pour les clusters qui s’étendent sur plusieurs serveurs. Il faut au minimum **4 serveurs**, chacun avec au moins 1 disque, pour démarrer de façon fiable un cluster de stockage objet distribué. -## Topology and Planning +## Topologie et planification -In the following architecture, requests are distributed to the servers through load balancing. With the default 12 + 4 erasure coding layout, each object is split into 12 data shards and 4 parity shards stored on different disks across different servers: +Dans l’architecture suivante, les requêtes sont réparties entre les serveurs par équilibrage de charge. Avec la disposition de codage d’effacement par défaut 12 + 4, chaque objet est découpé en 12 fragments de données et 4 fragments de parité, stockés sur des disques différents de serveurs différents : -- Any single server failure or maintenance does not affect data security. -- Corruption of up to 4 disks does not affect data security. +- Le cluster reste disponible et ne perd aucune donnée si un seul serveur tombe en panne ou est arrêté pour maintenance. +- Le cluster peut tolérer la perte de 4 disques au maximum sans perte de données. ```mermaid flowchart TD @@ -29,19 +29,19 @@ flowchart TD class N1D1,N1D2,N1D3,N1D4,N2D1,N2D2,N2D3,N2D4,N3D1,N3D2,N3D3,N3D4,N4D1,N4D2,N4D3,N4D4 disk ``` -Before installation, review the [Pre-Installation Checklists](../requirement/checklists/index.md) and ensure all items meet production guidance. +Avant l’installation, consultez les [listes de contrôle préalables à l’installation](../requirement/checklists/index.md) et assurez-vous que chaque élément répond aux exigences de production. -## Hostnames +## Noms d’hôte -Creating a RustFS cluster requires **identical, sequential** hostnames. There are two ways to achieve sequential hostnames: +Un cluster RustFS exige des noms d’hôte qui suivent un schéma cohérent et numéroté en séquence (par exemple de `node1` à `node4`). Deux méthodes permettent d’obtenir des noms d’hôte séquentiels : -**1. DNS Configuration:** +**1. Configuration DNS :** -Configure your DNS resolution server to ensure name continuity. +Créez des enregistrements DNS pour que chaque nom d’hôte séquentiel soit résolu vers le nœud correspondant. -**2. HOSTS Configuration:** +**2. Configuration de `/etc/hosts` :** -Modify the local alias settings in `/etc/hosts` as follows: +Ajoutez les entrées suivantes à `/etc/hosts` sur chaque nœud : ```bash title="/etc/hosts" vim /etc/hosts @@ -53,13 +53,13 @@ vim /etc/hosts 192.168.1.4 node4 ``` -## Prerequisites and Service Setup +## Prérequis et configuration du service -On **every node**, complete the [common prerequisites and service setup](./prerequisites-and-service.md) — operating system, firewall, time synchronization, disk formatting, service user, binary download, and systemd unit — then continue below. Remember that all nodes must use the same listening port and must have synchronized clocks. +Sur **chaque nœud**, terminez les [prérequis communs et la configuration du service](./prerequisites-and-service.md) — système d’exploitation, pare-feu, synchronisation de l’heure, formatage des disques, utilisateur du service, téléchargement du binaire et unité systemd — puis poursuivez ci-dessous. Tous les nœuds doivent utiliser le même port d’écoute et avoir des horloges synchronisées. -## Configure Environment Variables +## Configurer les variables d’environnement -1. Create the same configuration file on every node. `RUSTFS_VOLUMES` uses brace expansion to enumerate all nodes and all disk mount points (this example: 4 nodes × 4 disks): +1. Créez le même fichier de configuration sur chaque nœud. `RUSTFS_VOLUMES` utilise l’expansion d’accolades pour énumérer tous les nœuds et tous les points de montage (cet exemple : 4 nœuds × 4 disques) : ```ini title="/etc/default/rustfs" # Use a unique access key and a strong, random secret (e.g. openssl rand -base64 24) @@ -75,49 +75,49 @@ RUSTFS_OBS_LOG_DIRECTORY="/var/log/rustfs/" :::note -The access key, secret key, and `RUSTFS_VOLUMES` value must be identical on all nodes. The hostnames (`node1` – `node4`) must match the DNS or `/etc/hosts` configuration above. +La clé d’accès, la clé secrète et la valeur de `RUSTFS_VOLUMES` doivent être identiques sur tous les nœuds. Les noms d’hôte (`node1` – `node4`) doivent correspondre à la configuration DNS ou `/etc/hosts` ci-dessus. ::: -2. Create the storage and log directories on every node: +2. Créez les répertoires de stockage et de journaux sur chaque nœud : ```bash sudo mkdir -p /data/rustfs{0..3} /var/log/rustfs /opt/tls sudo chmod -R 750 /data/rustfs* /var/log/rustfs ``` -## Start Service and Verification +## Démarrer et vérifier le service -1. Start the service on every node and enable auto-start on boot: +1. Démarrez le service sur chaque nœud et activez le démarrage automatique au lancement du système : ```bash sudo systemctl enable --now rustfs ``` -2. Verify the service status: +2. Vérifiez l’état du service : ```bash systemctl status rustfs ``` -3. Check the service port: +3. Vérifiez le port du service : ```bash netstat -ntpl ``` -4. View log files: +4. Consultez les fichiers journaux : ```bash tail -f /var/log/rustfs/rustfs*.log ``` -5. Access the console: enter any node's IP address (or the load balancer address) and the console port (default 9001) in a browser. You should see: +5. Accédez à la Console : saisissez l’adresse IP de n’importe quel nœud (ou l’adresse de l’équilibreur de charge) et le port de la Console (9001 par défaut) dans un navigateur. Vous devriez voir : ![Console](./images/console.jpg) -## Next Steps +## Étapes suivantes -- Put a load balancer in front of the cluster — see the [Nginx integration guide](/developer/integration/reverse-proxy/nginx). -- Enable TLS for production traffic — see [TLS configuration](../../integration/tls-configured.md). -- Review [Pool Expansion](../../operations/scaling/storage-pool-expansion.md) before scaling. +- Placez un équilibreur de charge devant le cluster — consultez le [guide d’intégration Nginx](/fr/developer/integration/reverse-proxy/nginx). +- Activez TLS pour le trafic de production — consultez la [configuration TLS](../../integration/tls-configured.md). +- Consultez l’[extension du pool de stockage](../../operations/scaling/storage-pool-expansion.md) avant d’étendre le cluster. diff --git a/content/fr/installation/linux/prerequisites-and-service.md b/content/fr/installation/linux/prerequisites-and-service.md index 3b0c104fb..3e517c9fa 100644 --- a/content/fr/installation/linux/prerequisites-and-service.md +++ b/content/fr/installation/linux/prerequisites-and-service.md @@ -51,7 +51,7 @@ Tous les nœuds d’un déploiement distribué RustFS **doivent** maintenir des La dérive d’horloge entre deux nœuds ne doit pas dépasser **15 minutes**. Pour les environnements de production, nous recommandons de maintenir la dérive en dessous d'**1 seconde**. -:: : +::: ### Outils NTP recommandés @@ -225,7 +225,7 @@ XFS convient à la charge de RustFS pour trois raisons : - **Fichiers très nombreux et très volumineux.** XFS est un système de fichiers 64 bits qui prend en charge des fichiers extrêmement volumineux (jusqu’à 8 Eo). Sa gestion des métadonnées reste efficace même avec des millions de fichiers dans un seul répertoire, ce qui compte parce que RustFS stocke chaque objet (ou version d’objet) comme un fichier indépendant sur le disque. - **Réservation d’espace.** XFS fournit une API `fallocate` efficace. RustFS l’utilise pour réserver un espace disque contigu avant d’écrire les objets, ce qui évite le coût de l’extension dynamique et des mises à jour de métadonnées pendant l’écriture, et limite la fragmentation. -Pour faciliter la découverte des disques, nous recommandons d’utiliser des étiquettes **Label** lors du formatage des systèmes de fichiers XFS. +Pour faciliter l’identification et le montage des disques, nous recommandons d’attribuer une étiquette de système de fichiers (`-L`) lors du formatage de chaque disque. Vérifiez d’abord la disposition des disques : @@ -283,10 +283,10 @@ chown rustfs-user:rustfs-user /data/rustfs* :::note -- Si vous avez créé l’utilisateur et le groupe `rustfs-user`, remplacez `User` et `Group` dans `/etc/systemd/system/rustfs.service` par `rustfs-user`. +- Si vous avez créé l’utilisateur et le groupe rustfs-user, remplacez `User` et `Group` dans `/etc/systemd/system/rustfs.service` par `rustfs-user`. - Adaptez `/data/rustfs*` à vos répertoires de montage réels. -:: : +::: ## Télécharger le paquet d’installation diff --git a/content/fr/installation/linux/quick-start.md b/content/fr/installation/linux/quick-start.md index b3afc15eb..a004b9f12 100644 --- a/content/fr/installation/linux/quick-start.md +++ b/content/fr/installation/linux/quick-start.md @@ -1,26 +1,26 @@ --- -title: "Quick Start" -description: "Install RustFS with the one-click script, log in to the Console, and store your first object — in about ten minutes." +title: "Démarrage rapide" +description: "Installez RustFS avec le script d’installation, connectez-vous à la Console et stockez votre premier objet, en une dizaine de minutes." --- -This guide takes you from an empty Linux server to a working RustFS instance: install, log in to the Console, create a bucket, and upload your first object. Production planning (multi-node layout, hardware sizing) is deliberately left for [the next step](#next-steps). +Ce guide vous mène d’un serveur Linux vide à une instance RustFS opérationnelle : installez, connectez-vous à la Console, créez un compartiment (bucket) et chargez (upload) votre premier objet. La planification de production (topologie multi-nœuds, dimensionnement matériel) est volontairement renvoyée à [l’étape suivante](#étapes-suivantes). -**Prerequisites** +**Prérequis** -- A Linux server (x86_64 or aarch64) with `systemd`, and root or sudo access -- `unzip` installed, and outbound network access to download the package -- Ports `9000` (S3 API) and `9001` (Console) reachable from your machine -- [`rc`](/operations/rc) installed on your workstation for the command-line verification workflow +- Un serveur Linux (x86_64 ou aarch64) avec `systemd`, et un accès root ou sudo +- `unzip` installé, et un accès réseau sortant pour télécharger le paquet +- Les ports `9000` (API S3) et `9001` (Console) joignables depuis votre machine +- [`rc`](/fr/operations/rc) installé sur votre poste de travail pour le flux de vérification en ligne de commande -## 1. Install and start RustFS +## 1. Installer et démarrer RustFS -Run the official installation script: +Exécutez le script d’installation officiel : ```bash curl -O https://rustfs.com/install_rustfs.sh && bash install_rustfs.sh ``` -The script installs the binary to `/usr/local/bin/rustfs`, registers a `rustfs` systemd service, and starts it. By default it stores data in `/data/rustfs0` and listens on port `9000` (S3 API) and `9001` (Console); the data path and ports can be adjusted during installation. On success it prints a summary like: +Le script installe le binaire dans `/usr/local/bin/rustfs`, enregistre un service systemd `rustfs` et le démarre. Par défaut, il stocke les données dans `/data/rustfs0` et écoute sur le port `9000` (API S3) et `9001` (Console). Le chemin des données et les ports peuvent être ajustés pendant l’installation. En cas de succès, il affiche un résumé de ce type : ```text RustFS has been installed and started successfully! @@ -30,41 +30,41 @@ Service port: 9000, Console port: 9001, Data directory: /data/rustfs0 Config file: /etc/default/rustfs ``` -## 2. Set your credentials +## 2. Définir vos identifiants -The generated config file ships placeholder credentials. Set your own access key and secret key, then restart the service: +Le fichier de configuration généré contient des identifiants indicatifs. Définissez votre propre clé d’accès et votre propre clé secrète, puis redémarrez le service : ```ini title="/etc/default/rustfs" {1,2} RUSTFS_ACCESS_KEY= RUSTFS_SECRET_KEY= ; e.g. output of: openssl rand -base64 24 ``` -Use an uppercase alphanumeric access key. Do not use unmodified Base64 output for `RUSTFS_ACCESS_KEY`, because Base64 can contain `/`, which conflicts with the AWS Signature Version 4 credential scope. See [Credential Management](/operations/credentials) for details. +Utilisez une clé d’accès alphanumérique en majuscules. N’utilisez pas une sortie Base64 non modifiée pour `RUSTFS_ACCESS_KEY`, car Base64 peut contenir `/`, ce qui entre en conflit avec le périmètre d’identifiants d’AWS Signature Version 4. Pour le détail, consultez la [gestion des identifiants](/fr/operations/credentials). ```bash sudo systemctl restart rustfs sudo systemctl status rustfs --no-pager # should report: active (running) ``` -:::warning[Do not keep default credentials] +:::warning[Ne conservez pas les identifiants par défaut] -If `RUSTFS_ACCESS_KEY` / `RUSTFS_SECRET_KEY` are not set, the server falls back to the built-in default `rustfsadmin` / `rustfsadmin` — acceptable for a throwaway local test, never for anything reachable by others. +Si `RUSTFS_ACCESS_KEY` et `RUSTFS_SECRET_KEY` ne sont pas définis, le serveur revient à la valeur intégrée par défaut `rustfsadmin` / `rustfsadmin`. C’est acceptable pour un test local éphémère, jamais pour une instance accessible à d’autres personnes. ::: -## 3. Log in to the Console +## 3. Se connecter à la Console -Open `http://:9001` in your browser and sign in with the access key and secret key from step 2. +Ouvrez `http://:9001` dans votre navigateur et connectez-vous avec la clé d’accès et la clé secrète de l’étape 2. -![RustFS Console login](./images/console.jpg) +![Connexion à la Console RustFS](./images/console.jpg) -## 4. Create a bucket and upload a file +## 4. Créer un compartiment et charger un fichier -1. In the Console home page, select **Create Bucket**, name it (for example `my-bucket`), and confirm. -2. Open the bucket and use the upload action to add any local file. -3. Click the uploaded object to view its details — you have a working object store. +1. Sur la page d’accueil de la Console, sélectionnez **Create Bucket** (créer un compartiment), nommez-le (par exemple `my-bucket`), puis confirmez. +2. Ouvrez le compartiment et utilisez l’action de chargement pour ajouter un fichier local quelconque. +3. Cliquez sur l’objet chargé pour afficher ses détails : vous disposez d’un stockage objet opérationnel. -Prefer the command line? Configure [`rc`](/operations/rc), then perform the same operations: +Vous préférez la ligne de commande ? Configurez [`rc`](/fr/operations/rc), puis effectuez les mêmes opérations : ```bash rc alias set rustfs http://:9000 @@ -80,13 +80,13 @@ rc object list rustfs/my-bucket -## Next steps +## Étapes suivantes -The quick install runs RustFS in **Single Node Single Disk (SNSD)** mode — zero redundancy, right for evaluation and development. Where to go from here: +L’installation rapide exécute RustFS en mode **nœud unique, disque unique (SNSD)**, sans aucune redondance, adapté à l’évaluation et au développement. La suite dépend de votre objectif : -- **Plan a production deployment** — choose a topology, then follow its guide: - - [Single Node Single Disk (SNSD)](./single-node-single-disk.md) — dev and small workloads - - [Single Node Multiple Disk (SNMD)](./single-node-multiple-disk.md) — disk-level fault tolerance on one machine - - [Multiple Node Multiple Disk (MNMD)](./multiple-node-multiple-disk.md) — production-grade availability and scale, with the [pre-installation checklists](../requirement/checklists/index.md) -- **Prefer containers?** — [Install with a container](../container/index.md) -- **Connect your application** — [SDKs and examples](../../developer/sdk/index.md) +- **Planifier un déploiement de production** — choisissez une topologie, puis suivez le guide correspondant : + - [Nœud unique, disque unique (SNSD)](./single-node-single-disk.md) — développement et petites charges + - [Nœud unique, disques multiples (SNMD)](./single-node-multiple-disk.md) — tolérance aux pannes de disque sur une seule machine + - [Nœuds multiples, disques multiples (MNMD)](./multiple-node-multiple-disk.md) — disponibilité et montée en charge de niveau production, avec les [listes de contrôle préalables à l’installation](../requirement/checklists/index.md) +- **Vous préférez les conteneurs ?** — [Installer avec un conteneur](../container/index.md) +- **Connecter votre application** — [SDK et exemples](../../developer/sdk/index.md) diff --git a/content/fr/installation/linux/single-node-multiple-disk.md b/content/fr/installation/linux/single-node-multiple-disk.md index 4f4c26906..54724ef1c 100644 --- a/content/fr/installation/linux/single-node-multiple-disk.md +++ b/content/fr/installation/linux/single-node-multiple-disk.md @@ -1,17 +1,17 @@ --- -title: "RustFS Single Node Multiple Disk Installation" -description: "Install RustFS on a single server with multiple disks, data will be stored on multiple disks." +title: "Installation de RustFS en mode nœud unique, disques multiples" +description: "Installez RustFS sur un seul serveur et répartissez les données sur plusieurs disques." --- -In Single Node Multiple Disk (SNMD) mode, one server stores data in sharded form across multiple data disks. Each object is split into K data shards and M parity shards (erasure coding), so the loss of up to M disks does not cause data loss. +En mode nœud unique, disques multiples (SNMD), un serveur répartit les données en fragments sur plusieurs disques de données. Chaque objet est découpé en K fragments de données et M fragments de parité (codage d’effacement) : la perte d’au plus M disques n’entraîne pas de perte de données. :::warning -SNMD is suitable for medium, non-critical business. Damage to at most M disks does not pose a data risk, but if the entire server fails or more than M disks are damaged, data will be lost. Keep backups of important data. For node-level fault tolerance, use [MNMD](./multiple-node-multiple-disk.md). +Le mode SNMD convient aux charges moyennes et non critiques. Le déploiement peut perdre jusqu’à M disques sans perte de données, mais si le serveur entier tombe en panne, ou si plus de M disques sont endommagés, les données seront perdues. Conservez des sauvegardes des données importantes. Pour une tolérance aux pannes au niveau du nœud, utilisez le mode [MNMD](./multiple-node-multiple-disk.md). ::: -## Topology and Planning +## Topologie et planification ```mermaid flowchart TD @@ -23,18 +23,18 @@ flowchart TD class D1,D2,D3,D4 disk ``` -- 1 server with multiple data disks (this example uses 4 disks mounted at `/data/rustfs0` through `/data/rustfs3`). -- Erasure coding spreads data and parity shards across the disks; fault tolerance is limited to disk failures within the single node. -- Format each disk with XFS and mount it separately (e.g., labels `RUSTFS0` – `RUSTFS3`), as described in the prerequisites page. -- For production deployments, also review the [Pre-Installation Checklists](../requirement/checklists/index.md). +- 1 serveur avec plusieurs disques de données (cet exemple utilise 4 disques montés de `/data/rustfs0` à `/data/rustfs3`). +- Le codage d’effacement répartit les fragments de données et de parité sur les disques. La tolérance aux pannes se limite aux pannes de disque du nœud unique. +- Formatez chaque disque en XFS et montez-le séparément (par exemple avec les étiquettes `RUSTFS0` – `RUSTFS3`), comme décrit sur la page des prérequis. +- Pour les déploiements de production, consultez aussi les [listes de contrôle préalables à l’installation](../requirement/checklists/index.md). -## Prerequisites and Service Setup +## Prérequis et configuration du service -Complete the [common prerequisites and service setup](./prerequisites-and-service.md) — operating system, firewall, time synchronization, disk formatting, service user, binary download, and systemd unit — then continue below. +Terminez les [prérequis communs et la configuration du service](./prerequisites-and-service.md) — système d’exploitation, pare-feu, synchronisation de l’heure, formatage des disques, utilisateur du service, téléchargement du binaire et unité systemd — puis poursuivez ci-dessous. -## Configure Environment Variables +## Configurer les variables d’environnement -1. Create the configuration file. `RUSTFS_VOLUMES` uses brace expansion to enumerate the four disk mount points: +1. Créez le fichier de configuration. `RUSTFS_VOLUMES` utilise l’expansion d’accolades pour énumérer les quatre points de montage : ```ini title="/etc/default/rustfs" # Use a unique access key and a strong, random secret (e.g. openssl rand -base64 24) @@ -48,44 +48,44 @@ RUSTFS_OBS_LOGGER_LEVEL=error RUSTFS_OBS_LOG_DIRECTORY="/var/log/rustfs/" ``` -2. Create the storage and log directories: +2. Créez les répertoires de stockage et de journaux : ```bash sudo mkdir -p /data/rustfs{0..3} /var/log/rustfs /opt/tls sudo chmod -R 750 /data/rustfs* /var/log/rustfs ``` -## Start Service and Verification +## Démarrer et vérifier le service -1. Start the service and enable auto-start on boot: +1. Démarrez le service et activez son lancement au démarrage du système : ```bash sudo systemctl enable --now rustfs ``` -2. Verify the service status: +2. Vérifiez l’état du service : ```bash systemctl status rustfs ``` -3. Check the service port: +3. Vérifiez le port du service : ```bash netstat -ntpl ``` -4. View log files: +4. Consultez les fichiers journaux : ```bash tail -f /var/log/rustfs/rustfs*.log ``` -5. Access the console: enter the server's IP address and the console port (default 9001) in a browser. You should see: +5. Accédez à la Console : saisissez l’adresse IP du serveur et le port de la Console (9001 par défaut) dans un navigateur. Vous devriez voir : ![Console](./images/console.jpg) -## Next Steps +## Étapes suivantes -- Need node-level fault tolerance and horizontal scalability? See [Multiple Node Multiple Disk Mode (MNMD)](./multiple-node-multiple-disk.md). -- Just experimenting? [Single Node Single Disk Mode (SNSD)](./single-node-single-disk.md) is simpler to set up. +- Vous avez besoin d’une tolérance aux pannes au niveau du nœud et d’une évolutivité horizontale ? Consultez le [mode nœuds multiples, disques multiples (MNMD)](./multiple-node-multiple-disk.md). +- Vous ne faites qu’expérimenter ? Le [mode nœud unique, disque unique (SNSD)](./single-node-single-disk.md) est plus simple à mettre en place. diff --git a/content/fr/installation/linux/single-node-single-disk.md b/content/fr/installation/linux/single-node-single-disk.md index b6c96e62f..5a16fa4f2 100644 --- a/content/fr/installation/linux/single-node-single-disk.md +++ b/content/fr/installation/linux/single-node-single-disk.md @@ -1,17 +1,17 @@ --- -title: RustFS Single Node Single Disk Installation -description: Install RustFS on a single disk of a single server, data will be stored on this one disk. +title: Installation de RustFS en mode nœud unique, disque unique +description: Installez RustFS sur un seul serveur qui stocke toutes les données sur un seul disque. --- -In Single Node Single Disk (SNSD) mode, one server stores all data on a single data disk. It is the simplest deployment mode and the same topology that the [Linux Quick Start](./quick-start.md) script sets up. +En mode nœud unique, disque unique (SNSD), un serveur stocke toutes les données sur un seul disque de données. C’est le mode de déploiement le plus simple, et la même topologie que celle mise en place par le script du [démarrage rapide Linux](./quick-start.md). :::warning -A single disk offers no redundancy: if the disk fails, data is lost. SNSD is suitable for development, testing, and low-density non-critical business. For production use, maintain regular data backups or choose [SNMD](./single-node-multiple-disk.md) / [MNMD](./multiple-node-multiple-disk.md). +Un seul disque n’offre aucune redondance : si le disque tombe en panne, les données sont perdues. Le mode SNSD convient au développement, aux tests et aux petites charges non critiques. Pour un usage en production, effectuez des sauvegardes régulières, ou choisissez le mode [SNMD](./single-node-multiple-disk.md) ou [MNMD](./multiple-node-multiple-disk.md). ::: -## Topology and Planning +## Topologie et planification ```mermaid flowchart TD @@ -23,17 +23,17 @@ flowchart TD class D1 disk ``` -- 1 server, 1 data disk (e.g., an XFS-formatted disk mounted at `/data/rustfs0`). -- No erasure coding across disks — fault tolerance depends entirely on backups. -- For production deployments, also review the [Pre-Installation Checklists](../requirement/checklists/index.md). +- 1 serveur, 1 disque de données (par exemple un disque formaté en XFS monté sur `/data/rustfs0`). +- Pas de codage d’effacement entre les disques : la tolérance aux pannes repose entièrement sur les sauvegardes. +- Pour les déploiements de production, consultez aussi les [listes de contrôle préalables à l’installation](../requirement/checklists/index.md). -## Prerequisites and Service Setup +## Prérequis et configuration du service -Complete the [common prerequisites and service setup](./prerequisites-and-service.md) — operating system, firewall, time synchronization, disk formatting, service user, binary download, and systemd unit — then continue below. +Terminez les [prérequis communs et la configuration du service](./prerequisites-and-service.md) — système d’exploitation, pare-feu, synchronisation de l’heure, formatage des disques, utilisateur du service, téléchargement du binaire et unité systemd — puis poursuivez ci-dessous. -## Configure Environment Variables +## Configurer les variables d’environnement -1. Create the configuration file with the single-disk volume path: +1. Créez le fichier de configuration avec le chemin du volume à disque unique : ```ini title="/etc/default/rustfs" # Use a unique access key and a strong, random secret (e.g. openssl rand -base64 24) @@ -47,44 +47,44 @@ RUSTFS_OBS_LOGGER_LEVEL=error RUSTFS_OBS_LOG_DIRECTORY="/var/log/rustfs/" ``` -2. Create the storage and log directories: +2. Créez les répertoires de stockage et de journaux : ```bash sudo mkdir -p /data/rustfs0 /var/log/rustfs /opt/tls sudo chmod -R 750 /data/rustfs* /var/log/rustfs ``` -## Start Service and Verification +## Démarrer et vérifier le service -1. Start the service and enable auto-start on boot: +1. Démarrez le service et activez son lancement au démarrage du système : ```bash sudo systemctl enable --now rustfs ``` -2. Verify the service status: +2. Vérifiez l’état du service : ```bash systemctl status rustfs ``` -3. Check the service port: +3. Vérifiez le port du service : ```bash netstat -ntpl ``` -4. View log files: +4. Consultez les fichiers journaux : ```bash tail -f /var/log/rustfs/rustfs*.log ``` -5. Access the console: enter the server's IP address and the console port (default 9001) in a browser. You should see: +5. Ouvrez la Console : dans un navigateur, accédez à `http://:9001`. Vous devriez voir : ![Console](./images/console.jpg) -## Next Steps +## Étapes suivantes -- Need disk-level redundancy on one server? See [Single Node Multiple Disk Mode (SNMD)](./single-node-multiple-disk.md). -- Need a production cluster? See [Multiple Node Multiple Disk Mode (MNMD)](./multiple-node-multiple-disk.md). +- Vous avez besoin de redondance au niveau du disque sur un seul serveur ? Consultez le [mode nœud unique, disques multiples (SNMD)](./single-node-multiple-disk.md). +- Vous avez besoin d’un cluster de production ? Consultez le [mode nœuds multiples, disques multiples (MNMD)](./multiple-node-multiple-disk.md). diff --git a/content/fr/installation/macos/index.md b/content/fr/installation/macos/index.md index 2cb290a79..106f99baa 100644 --- a/content/fr/installation/macos/index.md +++ b/content/fr/installation/macos/index.md @@ -1,124 +1,124 @@ --- -title: "Install RustFS on macOS" -description: "Install a local RustFS instance on macOS with RustFS Launcher or the standalone server binary." +title: "Installer RustFS sur macOS" +description: "Installez une instance RustFS locale sur macOS avec RustFS Launcher ou le binaire serveur autonome." --- -This guide provides two ways to run **RustFS** on macOS: use the graphical **RustFS Launcher**, or run the standalone server binary from Terminal. Both methods create a local, single-node instance suitable for evaluation, development, and testing. +Ce guide présente deux façons d’exécuter **RustFS** sur macOS : utiliser **RustFS Launcher** graphique, ou exécuter le binaire serveur autonome depuis Terminal. Les deux méthodes créent une instance locale à nœud unique, adaptée à l’évaluation, au développement et aux tests. -:::note[Deployment scope] +:::note[Périmètre du déploiement] -These procedures run RustFS as a desktop process, not as a macOS background service. For a production or distributed deployment, use the [Linux installation guides](/installation/linux). +Ces procédures exécutent RustFS comme un processus de bureau, et non comme un service d’arrière-plan macOS. Pour un déploiement de production ou distribué, utilisez les [guides d’installation Linux](/fr/installation/linux). ::: -## 1. Check your Mac architecture +## 1. Vérifier l’architecture du Mac -RustFS distinguishes between Apple Silicon (`arm64`) and Intel (`x86_64`) Macs. Open Terminal and run: +RustFS fournit des binaires distincts pour les Mac Apple silicon (`arm64`) et Intel (`x86_64`). Ouvrez Terminal et exécutez : ```bash uname -m ``` -Use the result to choose the correct package: +Utilisez le résultat pour choisir le paquet approprié : -| Result | Mac type | Current standalone binary availability | +| Résultat | Type de Mac | Disponibilité actuelle du binaire autonome | | --- | --- | --- | -| `arm64` | Apple Silicon | Download the macOS AArch64 package from current RustFS releases. | -| `x86_64` | Intel | RustFS releases after `v1.0.0-beta.9` do not provide a prebuilt Intel macOS package. Build the current version from source. | +| `arm64` | Apple Silicon | Téléchargez le paquet macOS AArch64 depuis les versions actuelles de RustFS. | +| `x86_64` | Intel | Les versions de RustFS postérieures à `v1.0.0-beta.9` ne fournissent pas de paquet macOS Intel précompilé. Compilez la version actuelle à partir du code source. | -:::warning[Intel Mac release boundary] +:::warning[Limite de publication pour les Mac Intel] -Do not run the Apple Silicon binary on an Intel Mac. If you need a RustFS version newer than `v1.0.0-beta.9` on Intel macOS, follow the source-build procedure in this guide. An older beta.9 binary does not contain fixes and features from later releases. +N’exécutez pas le binaire Apple Silicon sur un Mac Intel. Si vous avez besoin d’une version de RustFS plus récente que `v1.0.0-beta.9` sur macOS Intel, suivez la procédure de compilation depuis les sources de ce guide. Un binaire beta.9 plus ancien ne contient ni les correctifs ni les fonctionnalités des versions ultérieures. ::: -Before continuing, also make sure that: +Avant de continuer, vérifiez également que : -- You have permission to install or run applications and write to the selected data directory. -- TCP ports `9000` and `9001` are available, or you have selected two other unused ports. -- You have created a dedicated data directory, such as `$HOME/rustfs/data`. +- Vous avez le droit d’installer ou d’exécuter des applications et d’écrire dans le répertoire de données choisi. +- Les ports TCP `9000` et `9001` sont disponibles, ou vous avez choisi deux autres ports libres. +- Vous avez créé un répertoire de données dédié, par exemple `$HOME/rustfs/data`. ```bash mkdir -p "$HOME/rustfs/data" ``` -:::warning[Protect the data directory] +:::warning[Protégez le répertoire de données] -Use an empty directory on a disk with enough free space. Do not store unrelated files in this directory, and do not edit RustFS data files while the server is running. +Utilisez un répertoire vide sur un disque disposant de suffisamment d’espace libre. Ne stockez pas de fichiers sans rapport dans ce répertoire, et ne modifiez pas les fichiers de données RustFS pendant que le serveur est en cours d’exécution. ::: -## 2. Choose an installation method +## 2. Choisir une méthode d’installation -| Method | Use it when | Architecture note | +| Méthode | Utilisez-la lorsque | Remarque sur l’architecture | | --- | --- | --- | -| RustFS Launcher | You want a graphical setup and built-in log viewer. | Download a Launcher package that matches Apple Silicon or Intel. | -| Standalone binary | You want explicit Terminal commands or scripting. | Current releases provide Apple Silicon binaries; Intel users build releases after beta.9 from source. | +| RustFS Launcher | Vous souhaitez une configuration graphique et une visionneuse de journaux intégrée. | Téléchargez un paquet Launcher correspondant à Apple Silicon ou à Intel. | +| Binaire autonome | Vous souhaitez des commandes Terminal explicites ou des scripts. | Les versions actuelles fournissent des binaires Apple Silicon. Les utilisateurs Intel compilent les versions postérieures à beta.9 à partir du code source. | -## Install with RustFS Launcher +## Installer avec RustFS Launcher -### 3. Download and install Launcher +### 3. Télécharger et installer Launcher -1. Open the [RustFS Launcher Releases page](https://github.com/rustfs/launcher/releases). -2. Select the latest release and expand **Assets**. -3. Download the macOS installer that matches your architecture: AArch64 for Apple Silicon or x86-64 for Intel. Do not download **Source code** unless you intend to build Launcher yourself. -4. Open the downloaded disk image and move **RustFS Launcher** to **Applications**. -5. Open **RustFS Launcher** from **Applications**. +1. Ouvrez la [page des versions de RustFS Launcher](https://github.com/rustfs/launcher/releases). +2. Sélectionnez la dernière version et développez **Assets** (fichiers de la version). +3. Téléchargez l’installateur macOS correspondant à votre architecture : AArch64 pour Apple Silicon, ou x86-64 pour Intel. Ne téléchargez **Source code** (code source) que si vous comptez compiler Launcher vous-même. +4. Ouvrez l’image disque téléchargée et déplacez **RustFS Launcher** vers **Applications** (dossier Applications). +5. Ouvrez **RustFS Launcher** depuis **Applications**. -If macOS blocks the first launch, confirm that the package came from the official `rustfs/launcher` Releases page. Then open **System Settings > Privacy & Security** and allow that specific application. Do not disable Gatekeeper globally. +Si macOS bloque le premier lancement, confirmez que le paquet provient de la page officielle des versions de `rustfs/launcher`. Ouvrez ensuite **System Settings > Privacy & Security** (Réglages Système > Confidentialité et sécurité) et autorisez cette application précise. Ne désactivez pas Gatekeeper globalement. -### 4. Configure Launcher +### 4. Configurer Launcher -Configure the fields in the Launcher window: +Configurez les champs de la fenêtre Launcher : -| Section | Field | Recommended value | Description | +| Section | Champ | Valeur recommandée | Description | | --- | --- | --- | --- | -| Dataset Mount | Data Path | `$HOME/rustfs/data` | Existing directory where RustFS stores object data. | -| Ports & Access | API Port | `9000` | S3-compatible API port. | -| Ports & Access | Host | `127.0.0.1` | Restricts access to this Mac. | -| Ports & Access | Console Endpoint | Enabled | Enables the web Console; Launcher disables it by default. | -| Ports & Access | Console Port | `9001` | Console port, which must differ from the API port. | -| Credentials | Access Key | `` | Administrator access key for this instance. | -| Credentials | Secret Key | `` | Administrator secret key for this instance. | +| Dataset Mount | Data Path | `$HOME/rustfs/data` | Répertoire existant dans lequel RustFS stocke les données d’objets. | +| Ports & Access | API Port | `9000` | Port de l’API compatible avec S3. | +| Ports & Access | Host | `127.0.0.1` | Limite l’accès à ce Mac. | +| Ports & Access | Console Endpoint | Enabled | Active la Console web. Launcher la désactive par défaut. | +| Ports & Access | Console Port | `9001` | Port de la Console, qui doit être différent du port de l’API. | +| Credentials | Access Key | `` | Clé d’accès d’administrateur pour cette instance. | +| Credentials | Secret Key | `` | Clé secrète d’administrateur pour cette instance. | -Use **Browse** to select the data directory or drag it into Launcher. Launcher requires the directory to exist before startup. The macOS file picker displays the expanded path instead of the literal `$HOME` variable. +Utilisez **Browse** (Parcourir) pour sélectionner le répertoire de données, ou faites-le glisser dans Launcher. Launcher exige que le répertoire existe avant le démarrage. Le sélecteur de fichiers macOS affiche le chemin développé, et non la variable littérale `$HOME`. -Replace the credential placeholders with your own values. Launcher initially displays default local-test credentials; do not retain them on a Mac accessible by other users. +Remplacez les identifiants indicatifs par vos propres valeurs. Launcher affiche d’abord les identifiants par défaut d’un test local. Ne les conservez pas sur un Mac accessible à d’autres utilisateurs. -:::warning[Network exposure] +:::warning[Exposition réseau] -Keep **Host** set to `127.0.0.1` unless another computer must connect to RustFS. A non-loopback address exposes the API and Console on the corresponding network interfaces. Configure the macOS firewall and strong credentials before allowing remote access. +Laissez **Host** défini sur `127.0.0.1`, sauf si un autre ordinateur doit se connecter à RustFS. Une adresse autre que l’adresse de bouclage expose l’API et la Console sur les interfaces réseau correspondantes. Configurez le pare-feu macOS et des identifiants robustes avant d’autoriser un accès distant. ::: -### 5. Start and verify RustFS +### 5. Démarrer et vérifier RustFS -1. Select **Launch RustFS**. -2. Wait for Launcher to report that the configured endpoint is online. -3. Open `http://localhost:9001` and sign in with the access key and secret key that you configured. -4. Use `http://localhost:9000` as the endpoint for S3-compatible clients. +1. Sélectionnez **Launch RustFS** (démarrer RustFS). +2. Attendez que Launcher indique que le point de terminaison configuré est en ligne. +3. Ouvrez `http://localhost:9001` et connectez-vous avec la clé d’accès et la clé secrète que vous avez configurées. +4. Utilisez `http://localhost:9000` comme point de terminaison pour les clients compatibles avec S3. -![RustFS Launcher showing the service online with API port 9000, Console port 9001, and successful startup logs](../windows/images/windows-rustfs-launcher.jpg) +![RustFS Launcher indiquant le service en ligne, avec le port API 9000, le port Console 9001 et des journaux de démarrage réussis](../windows/images/windows-rustfs-launcher.jpg) -If you changed the host or ports, use those values instead. The Console URL is available only when **Console Endpoint** is enabled. +Si vous avez modifié l’hôte ou les ports, utilisez ces valeurs. L’URL de la Console n’est disponible que lorsque **Console Endpoint** est activé. -Launcher locks its configuration while it manages a running process. It also creates a `logs` directory next to the data directory. For example, selecting `$HOME/rustfs/data` places server log files under `$HOME/rustfs/logs`. +Launcher verrouille sa configuration tant qu’il gère un processus en cours d’exécution. Il crée aussi un répertoire `logs` à côté du répertoire de données. Par exemple, si vous sélectionnez `$HOME/rustfs/data`, les fichiers journaux du serveur se trouvent sous `$HOME/rustfs/logs`. -### 6. Stop or exit Launcher +### 6. Arrêter ou quitter Launcher -Select **Stop RustFS** before changing configuration, disconnecting an external data disk, or shutting down macOS. +Sélectionnez **Stop RustFS** (arrêter RustFS) avant de modifier la configuration, de déconnecter un disque de données externe ou d’éteindre macOS. -Closing the Launcher window hides it in the menu bar; it does not stop RustFS. To stop the managed process and exit Launcher, open the Launcher menu bar icon and select **Quit**. Select **Show**, or select the icon, to restore the window. +Fermer la fenêtre de Launcher la masque dans la barre de menus. Cela n’arrête pas RustFS. Pour arrêter le processus géré et quitter Launcher, ouvrez l’icône de la barre de menus de Launcher et sélectionnez **Quit** (quitter). Sélectionnez **Show** (afficher), ou sélectionnez l’icône, pour restaurer la fenêtre. -## Install the standalone binary +## Installer le binaire autonome -### 7. Download the Apple Silicon binary +### 7. Télécharger le binaire Apple Silicon -Use this procedure when `uname -m` returns `arm64`: +Utilisez cette procédure lorsque `uname -m` renvoie `arm64` : -1. Open the [RustFS Releases page](https://github.com/rustfs/rustfs/releases). -2. Select the required release and download the macOS AArch64 ZIP archive from **Assets**. The asset name begins with `rustfs-macos-aarch64`. -3. Create a program directory and extract the archive. Replace `` with the version in the downloaded filename: +1. Ouvrez la [page des versions de RustFS](https://github.com/rustfs/rustfs/releases). +2. Sélectionnez la version requise et téléchargez l’archive ZIP macOS AArch64 depuis **Assets**. Le nom du fichier commence par `rustfs-macos-aarch64`. +3. Créez un répertoire de programme et extrayez l’archive. Remplacez `` par la version figurant dans le nom du fichier téléchargé : ```bash mkdir -p "$HOME/rustfs/bin" @@ -127,20 +127,20 @@ chmod +x "$HOME/rustfs/bin/rustfs" "$HOME/rustfs/bin/rustfs" --help ``` -If the archive contains a platform-specific binary name instead of `rustfs`, use that filename in the remaining commands or rename it to `$HOME/rustfs/bin/rustfs`. +Si l’archive contient un nom de binaire propre à la plateforme plutôt que `rustfs`, utilisez ce nom de fichier dans les commandes suivantes, ou renommez-le en `$HOME/rustfs/bin/rustfs`. -### 8. Build the Intel binary from source +### 8. Compiler le binaire Intel à partir du code source -Use this procedure when `uname -m` returns `x86_64` and you need a release newer than `v1.0.0-beta.9`. +Utilisez cette procédure lorsque `uname -m` renvoie `x86_64` et que vous avez besoin d’une version plus récente que `v1.0.0-beta.9`. -1. Install the Xcode command-line tools: +1. Installez les outils de ligne de commande Xcode : ```bash xcode-select --install ``` -2. Install the current stable Rust toolchain from [rustup.rs](https://rustup.rs/), then open a new Terminal session. -3. Clone RustFS and check out the release that you need: +2. Installez la chaîne d’outils Rust stable actuelle depuis [rustup.rs](https://rustup.rs/), puis ouvrez une nouvelle session Terminal. +3. Clonez RustFS et extrayez la version dont vous avez besoin : ```bash git clone https://github.com/rustfs/rustfs.git @@ -148,23 +148,23 @@ cd rustfs git checkout ``` -4. Build the Intel macOS target with the repository build script: +4. Compilez la cible macOS Intel avec le script de compilation du dépôt : ```bash ./build-rustfs.sh --platform x86_64-apple-darwin ``` -The build script includes Console assets by default and verifies the resulting binary. Use the binary reported at the end of the build output in the next step. +Le script de compilation inclut les ressources de la Console par défaut et vérifie le binaire produit. Utilisez le binaire indiqué à la fin de la sortie de compilation à l’étape suivante. -:::note[Source-build dependencies] +:::note[Dépendances de la compilation depuis les sources] -Building from source requires the tools used by the selected RustFS release in addition to Rust and the Xcode command-line tools. If the build reports a missing dependency, follow the requirements in that release's repository README rather than substituting a binary built for Apple Silicon. +Compiler depuis les sources exige les outils utilisés par la version RustFS choisie, en plus de Rust et des outils de ligne de commande Xcode. Si la compilation signale une dépendance manquante, suivez les exigences du fichier README du dépôt de cette version, plutôt que de substituer un binaire compilé pour Apple Silicon. ::: -### 9. Start the standalone server +### 9. Démarrer le serveur autonome -Set credentials for the current Terminal session and assign the path to your downloaded or compiled binary: +Définissez les identifiants pour la session Terminal en cours et affectez le chemin de votre binaire téléchargé ou compilé : ```bash export RUSTFS_ACCESS_KEY="" @@ -178,72 +178,72 @@ export RUSTFS_BIN="$HOME/rustfs/bin/rustfs" "$HOME/rustfs/data" ``` -For an Intel source build, replace `RUSTFS_BIN` with the binary path printed by `build-rustfs.sh`. Keep the Terminal window open while RustFS is running. Press `Control+C` to stop the server. +Pour une compilation Intel depuis les sources, remplacez `RUSTFS_BIN` par le chemin du binaire affiché par `build-rustfs.sh`. Laissez la fenêtre Terminal ouverte pendant l’exécution de RustFS. Appuyez sur `Control+C` pour arrêter le serveur. -:::tip[Credential handling] +:::tip[Gestion des identifiants] -Session environment variables avoid placing credentials directly in the command line. For repeated or automated use, prefer the `RUSTFS_ACCESS_KEY_FILE` and `RUSTFS_SECRET_KEY_FILE` environment variables and protect those files with macOS permissions. +Les variables d’environnement de session évitent de placer les identifiants directement sur la ligne de commande. Pour un usage répété ou automatisé, préférez les variables d’environnement `RUSTFS_ACCESS_KEY_FILE` et `RUSTFS_SECRET_KEY_FILE`, et protégez ces fichiers avec les droits macOS. ::: -### 10. Verify the standalone server +### 10. Vérifier le serveur autonome -Open `http://localhost:9001` and sign in with the configured credentials. Use `http://localhost:9000` as the endpoint for S3-compatible clients. RustFS defaults to path-style addressing, so configure clients accordingly. +Ouvrez `http://localhost:9001` et connectez-vous avec les identifiants configurés. Utilisez `http://localhost:9000` comme point de terminaison pour les clients compatibles avec S3. RustFS utilise par défaut l’adressage de type chemin (path-style) : configurez les clients en conséquence. -To perform an end-to-end check, create a bucket named `my-bucket`, upload `hello.txt`, and confirm that the object appears in the bucket. +Pour une vérification de bout en bout, créez un compartiment (bucket) nommé `my-bucket`, chargez (upload) `hello.txt`, puis confirmez que l’objet apparaît dans le compartiment. -## Confirm a successful installation +## Confirmer une installation réussie -Whether you used Launcher, an Apple Silicon binary, or an Intel source build, a successful Console sign-in opens the **Buckets** page. +Que vous ayez utilisé Launcher, un binaire Apple Silicon ou une compilation Intel depuis les sources, une connexion réussie à la Console ouvre la page **Buckets** (compartiments). -![RustFS Console Buckets page after a successful sign-in](../windows/images/rustfs-console-login.png) +![Page Buckets de la Console RustFS après une connexion réussie](../windows/images/rustfs-console-login.png) -## Troubleshooting +## Dépannage -### macOS blocks the application or binary +### macOS bloque l’application ou le binaire -Verify that the file came from the official RustFS GitHub organization. For Launcher, allow the specific application under **System Settings > Privacy & Security**. For a standalone binary that macOS has quarantined, inspect the warning and verify the download source before changing its security attributes. +Vérifiez que le fichier provient de l’organisation GitHub officielle de RustFS. Pour Launcher, autorisez l’application précise sous **System Settings > Privacy & Security**. Pour un binaire autonome que macOS a mis en quarantaine, examinez l’avertissement et vérifiez la source du téléchargement avant de modifier ses attributs de sécurité. -### The binary architecture does not match +### L’architecture du binaire ne correspond pas -Run `uname -m` and inspect the binary: +Exécutez `uname -m` et inspectez le binaire : ```bash uname -m file "$RUSTFS_BIN" ``` -Use an AArch64 binary on Apple Silicon. On an Intel Mac, build releases after `v1.0.0-beta.9` from source for `x86_64-apple-darwin`. +Utilisez un binaire AArch64 sur Apple Silicon. Sur un Mac Intel, compilez les versions postérieures à `v1.0.0-beta.9` à partir du code source pour `x86_64-apple-darwin`. -### The data path is rejected +### Le chemin de données est rejeté -Confirm that the directory exists and that your macOS account has read and write access. Launcher does not create the selected data directory for you. +Confirmez que le répertoire existe et que votre compte macOS dispose d’un accès en lecture et en écriture. Launcher ne crée pas pour vous le répertoire de données sélectionné. -### The API or Console port is unavailable +### Le port de l’API ou de la Console est indisponible -The ports must be numbers from `1` to `65535`, must differ from each other, and must not already be in use. Inspect the default ports: +Les ports doivent être des nombres de `1` à `65535`, doivent être différents l’un de l’autre et ne doivent pas être déjà utilisés. Inspectez les ports par défaut : ```bash lsof -nP -iTCP:9000 -iTCP:9001 -sTCP:LISTEN ``` -Stop the conflicting application or select unused ports, then start RustFS again. +Arrêtez l’application en conflit ou choisissez des ports libres, puis redémarrez RustFS. -### The Console does not open +### La Console ne s’ouvre pas -For Launcher, confirm that **Console Endpoint** is enabled. For the standalone binary, confirm that the process is still running and that `--console-enable true` is present. +Pour Launcher, confirmez que **Console Endpoint** est activé. Pour le binaire autonome, confirmez que le processus est toujours en cours d’exécution et que `--console-enable true` est présent. -### Launcher reports an external RustFS process +### Launcher signale un processus RustFS externe -Another process is listening on the configured API address, but Launcher did not start it. Stop that process or choose another API port. Launcher cannot stop a process it does not manage. +Un autre processus écoute sur l’adresse API configurée, mais Launcher ne l’a pas démarré. Arrêtez ce processus ou choisissez un autre port d’API. Launcher ne peut pas arrêter un processus qu’il ne gère pas. -### RustFS exits after launch +### RustFS s’arrête après le lancement -In Launcher, inspect both the application and RustFS tabs in the built-in log viewer. For a standalone installation, inspect the Terminal output. Common causes include a missing data directory, insufficient permissions, an architecture mismatch, or a port conflict. +Dans Launcher, examinez les onglets de l’application et de RustFS dans la visionneuse de journaux intégrée. Pour une installation autonome, examinez la sortie du Terminal. Les causes courantes sont un répertoire de données manquant, des droits insuffisants, une architecture qui ne correspond pas ou un conflit de port. -## Next steps +## Étapes suivantes -- Review the [S3 API guide](/administration/protocols/s3) before connecting a client. -- Learn how to [create a bucket](/administration/data/bucket/creation). -- See [status checks](/operations/status-check) for additional verification methods. -- Use the [Linux installation guides](/installation/linux) for a production-oriented deployment. +- Consultez le [guide de l’API S3](/fr/administration/protocols/s3) avant de connecter un client. +- Apprenez à [créer un compartiment](/fr/administration/data/bucket/creation). +- Consultez les [vérifications d’état](/fr/operations/status-check) pour d’autres méthodes de vérification. +- Utilisez les [guides d’installation Linux](/fr/installation/linux) pour un déploiement orienté production. diff --git a/content/fr/installation/requirement/checklists/hardware-checklists.md b/content/fr/installation/requirement/checklists/hardware-checklists.md index 8250d5512..1c638a93d 100644 --- a/content/fr/installation/requirement/checklists/hardware-checklists.md +++ b/content/fr/installation/requirement/checklists/hardware-checklists.md @@ -1,93 +1,93 @@ --- -title: "Production Environment Hardware Configuration Guide" -description: "RustFS is a high-performance distributed object storage system developed in Rust, suitable for massive unstructured data storage scenarios. This document provides comprehensive hardware selection and configuration guidance for production environment deployment." +title: "Guide matériel de production" +description: "Cette page fournit des indications de dimensionnement et de configuration matérielle pour les déploiements RustFS en production." --- -## Deployment Planning Factor Analysis +## Considérations de planification -Before formally deploying RustFS, it's recommended to conduct 2-3 weeks of business research, focusing on evaluating the following dimensions: +Avant de déployer RustFS en production, évaluez la charge de travail et les besoins en capacité sur une période de deux à trois semaines. Concentrez-vous sur les facteurs suivants : -1. **Data Scale Analysis** +1. **Volume de données** -- **Initial Data Volume**: Accurately calculate effective data volume at production startup (recommended in TiB units), considering hot/cold data ratios -- **Growth Trend Prediction**: Estimate data increments for the next 24 months based on business development plans (recommended quarterly growth rate model) -- **Object Scale**: Calculate total object count based on average object size (recommended 128 KB-1 MB range), note special optimization needed when exceeding 100 million objects + - **Volume initial** : estimez le volume de données utile à la mise en service (en TiB), y compris le ratio entre données chaudes et données froides. + - **Prévision de croissance** : estimez la croissance des données pour les 24 prochains mois à partir des plans d’activité. Nous recommandons de modéliser la croissance chaque trimestre. + - **Nombre d’objets** : estimez le nombre total d’objets à partir de la taille moyenne d’objet (idéalement de 128 KB à 1 MB). Les déploiements de plus de 100 millions d’objets nécessitent un réglage supplémentaire. -2. **Business Characteristic Assessment** +2. **Caractéristiques de la charge** -- **Access Patterns**: Distinguish read-intensive (such as content distribution) from write-intensive (such as log collection) scenarios -- **Compliance Requirements**: Data retention cycles must comply with industry regulatory requirements (e.g., financial industry must retain for at least 5 years) -- **Multi-site Deployment**: Cross-regional deployment requires network latency assessment (recommended controlled within 50ms) and bandwidth cost evaluation + - **Schémas d’accès** : distinguez les charges intensives en lecture (comme la distribution de contenu) des charges intensives en écriture (comme la collecte de journaux). + - **Exigences de conformité** : les durées de conservation doivent respecter les réglementations du secteur (par exemple, certaines réglementations financières exigent au moins cinq ans de conservation). + - **Déploiement multisite** : pour les déploiements interrégionaux, évaluez la latence réseau (idéalement inférieure à 50 ms) et les coûts de bande passante. -3. **Storage Architecture Design** +3. **Architecture de stockage** -- **Bucket Planning**: Divide storage buckets by business units, single cluster recommended not exceeding 500 active buckets -- **Disaster Recovery Strategy**: Choose dual-active architecture (recommended) or asynchronous replication based on data importance + - **Planification des compartiments** : organisez les compartiments (bucket) par unité métier. Nous recommandons de ne pas dépasser 500 compartiments actifs par cluster. + - **Reprise après sinistre** : choisissez la réplication actif-actif (recommandée) ou la réplication asynchrone selon la criticité des données. -## Hardware Configuration Matrix +## Matrice de configuration matérielle -Baseline configuration solutions based on stress test results: +Configurations de référence fondées sur les résultats des tests de charge : -| Component | Basic Environment | Production Standard Configuration | High-Performance Configuration | +| Composant | Entrée de gamme | Production standard | Hautes performances | |--------------|---------------------------|--------------------------|--------------------------| -| Node Count | 4 nodes | 8 nodes | 16+ nodes | -| Storage Media | 4× NVMe SSD | 8×NVMe SSD | 12×NVMe SSD | -| Network Architecture | Dual 25GbE (link aggregation) | Dual 100GbE | 200GbE | -| CPU | 2×Intel Silver 4310 (16 cores) | 2×AMD EPYC 7313 (32 cores) | 2×Intel Platinum 8461Y (48 cores) | -| Memory | 64 GB DDR4-3200 ECC | 256 GB DDR5-4800 ECC | 512 GB DDR5-5600 ECC | -| Storage Controller | HBA 9500-8i | HBA 9600-16i | Dual controller redundant architecture | +| Nombre de nœuds | 4 nœuds | 8 nœuds | 16 nœuds ou plus | +| Support de stockage | 4× NVMe SSD | 8×NVMe SSD | 12×NVMe SSD | +| Architecture réseau | Double 25GbE (agrégation de liens) | Double 100GbE | 200GbE | +| CPU | 2×Intel Silver 4310 (16 cœurs) | 2×AMD EPYC 7313 (32 cœurs) | 2×Intel Platinum 8461Y (48 cœurs) | +| Mémoire | 64 GB DDR4-3200 ECC | 256 GB DDR5-4800 ECC | 512 GB DDR5-5600 ECC | +| Contrôleur de stockage | HBA 9500-8i | HBA 9600-16i | Architecture redondante à double contrôleur | -**Important Deployment Principles:** +**Consignes de déploiement :** -1. Adopt "server farm" mode, ensuring all nodes use identical hardware batches and firmware versions -2. Network architecture must meet: leaf-spine topology + physically isolated storage network + dual uplink paths -3. Recommend using 2U server models, single node recommended configuration of 12+ disk bays (based on actual hard disk count) +1. Utilisez des nœuds homogènes : chaque nœud devrait avoir un matériel identique, issu du même lot, et les mêmes versions de micrologiciel. +2. Le réseau doit utiliser une topologie leaf-spine, un réseau de stockage physiquement isolé et des liaisons montantes doubles. +3. Nous recommandons des serveurs 2U avec au moins 12 baies de disques par nœud, selon le nombre de disques requis. -## Performance Critical Path Optimization +## Réglage des performances -### Network Topology Optimization (Highest Priority) +### Optimisation de la topologie réseau (priorité maximale) -- **Bandwidth Calculation**: Reserve 0.5 Gbps bandwidth per TB of effective data (e.g., 100 TB data needs 50 Gbps dedicated bandwidth) -- **Latency Requirements**: -- Inter-node P99 latency ≤ 2ms -- Cross-rack latency ≤ 5ms +- **Dimensionnement de la bande passante** : prévoyez 0.5 Gbps de bande passante par TB de données utiles (par exemple, 100 TB de données nécessitent 50 Gbps de bande passante dédiée). +- **Exigences de latence** : + - Latence P99 entre nœuds ≤ 2ms + - Latence entre racks ≤ 5ms -### Storage Subsystem Tuning +### Réglage du sous-système de stockage -- **Controller Configuration**: -- Enable read-ahead cache (recommended 256 MB+) -- Disable all RAID functions, use pass-through mode -- Regularly check BBU battery health status -- **SSD Parameters**: -- Reserve 20% OP space to improve durability -- Enable atomic write features (requires hardware support) +- **Configuration du contrôleur** : + - Activez le cache de lecture anticipée (256 MB ou plus recommandés). + - Désactivez toutes les fonctions RAID et utilisez le mode transparent (pass-through, HBA/JBOD). + - Contrôlez régulièrement l’état du BBU. +- **Paramètres des SSD** : + - Réservez 20 % d’espace de surprovisionnement (OP) pour améliorer l’endurance. + - Activez les écritures atomiques (nécessite une prise en charge matérielle). -### Memory Management Strategy +### Répartition de la mémoire -- **Allocation Ratios**: -- Metadata cache: 60% of total memory -- Read/write buffers: 30% -- System reserve: 10% +- **Proportions d’allocation** : + - Cache de métadonnées : 60 % de la mémoire totale + - Tampons de lecture et d’écriture : 30 % + - Réserve système : 10 % -## Network Design Reference Model +## Modèle de référence pour la conception réseau -### Bandwidth and Disk Ratio Relationship +### Bande passante réseau et nombre de disques -| Network Type | Theoretical Throughput | Suitable Disk Types | Maximum Disk Support | +| Réseau | Débit théorique | Type de disque | Nombre maximal de disques par nœud | |------------|------------|---------------------|----------------| -| 10GbE | 1.25 GB/s | 7.2K HDD (180 MB/s) | 8 disks | -| 25GbE | 3.125 GB/s | SATA SSD (550 MB/s) | 6 disks | -| 100GbE | 12.5 GB/s | NVMe Gen4 (7 GB/s) | 2 disks full-speed read/write | +| 10GbE | 1.25 GB/s | 7.2K HDD (180 MB/s) | 8 disques | +| 25GbE | 3.125 GB/s | SATA SSD (550 MB/s) | 6 disques | +| 100GbE | 12.5 GB/s | NVMe Gen4 (7 GB/s) | 2 (à pleine vitesse en lecture et en écriture) | -**Best Practice Case**: A video platform uses 16-node cluster, each node configured with: +**Exemple** : une plateforme vidéo exploite un cluster de 16 nœuds. Chaque nœud comporte : - 8×7.68 TB NVMe SSD -- Dual 100GbE CX5 network cards -- Achieves aggregate throughput of 38 GB/s +- Deux cartes réseau NVIDIA ConnectX-5 en 100GbE +- Atteint un débit agrégé de 38 GB/s -## Memory Configuration Calculator +## Dimensionnement de la mémoire -Dynamic algorithm based on disk capacity and business characteristics: +Utilisez la formule suivante pour dimensionner la mémoire selon la capacité des disques et le type de charge : ```python # Memory calculation formula (unit: GB) @@ -101,25 +101,25 @@ def calc_memory(data_tb, access_pattern): return base + data_tb * 1.0 ``` -**Reference Configuration Table**: +**Tailles de référence** : -| Data Scale | Read-Intensive | Write-Intensive | Mixed | +| Volume de données | Lecture intensive | Écriture intensive | Mixte | |-----------|----------|----------|---------| | 10 TB | 40 GB | 44 GB | 42 GB | | 100 TB | 112 GB | 152 GB | 132 GB | | 500 TB | 432 GB | 632 GB | 532 GB | -## Storage Deployment Standards +## Consignes de stockage -### Media Selection Criteria +### Choix des supports de stockage -| Metric | HDD Suitable Scenarios | SSD Suitable Scenarios | NVMe Mandatory Scenarios | +| Indicateur | HDD | SATA SSD | NVMe (requis) | |-------------|------------------|---------------------|----------------------| -| Latency Requirements | >50ms | 1 to 10ms | < 1ms | -| Throughput Requirements | < 500 MB/s | 500 MB-3 GB/s | > 3 GB/s | -| Typical Use Cases | Archive storage | Hot data cache | Real-time analysis | +| Exigences de latence | >50ms | 1 à 10ms | < 1ms | +| Exigences de débit | < 500 MB/s | 500 MB-3 GB/s | > 3 GB/s | +| Cas d’usage typiques | Stockage d’archives | Cache de données chaudes | Analytique en temps réel | -### File System Configuration +### Configuration du système de fichiers ```bash # XFS formatting example @@ -129,30 +129,34 @@ mkfs.xfs -f -L rustfs_disk1 -d su=256k,sw=10 /dev/sdb UUID=xxxx /mnt/disk1 xfs defaults,noatime,nodiratime,logbsize=256k 0 0 ``` -## High Availability Assurance Measures +## Haute disponibilité -1. **Power Supply**: +1. **Alimentation** : -- Adopt dual power supply architecture -- Each PDU connects to different substations -- Equip UPS (at least 30 minutes runtime) + - Utilisez des alimentations doubles (redondantes). + - Raccordez chaque PDU à une alimentation distincte. + - Prévoyez un onduleur (UPS) offrant au moins 30 minutes d’autonomie. -2. **Cooling Requirements**: +2. **Exigences de refroidissement** : -- Cabinet power density ≤ 15kW/cabinet -- Inlet/outlet temperature difference controlled within 8℃ + - Densité de puissance ≤ 15 kW par rack. + - Maintenez l’écart de température entre l’entrée et la sortie (ΔT) dans une limite de 8 °C. -3. **Firmware Management**: +3. **Gestion des micrologiciels** : -- Establish hardware compatibility matrix -- Use unified firmware versions + - Tenez à jour une matrice de compatibilité matérielle. + - Uniformisez les versions de micrologiciel sur l’ensemble des nœuds. -> **Implementation Recommendations**: Recommend conducting 72-hour stress testing before formal deployment, simulating the following scenarios: -> -> 1. Node failover testing -> 2. Network partition drills -> 3. Burst write pressure testing (recommended reaching 120% of theoretical value) +:::tip[Avant la mise en service] + +Nous recommandons d’exécuter un test de charge de 72 heures avant la mise en production, couvrant les scénarios suivants : + +1. Tests de basculement de nœud +2. Tests de partition réseau +3. Tests de charge d’écriture en rafale (nous recommandons de tester à 120 % du maximum théorique) + +::: --- -This guide is based on the latest RustFS development version. For actual deployment, please combine with specific hardware vendor white papers for parameter fine-tuning. Or contact RustFS official recommendations for quarterly hardware health assessments to ensure continuous stable operation of storage clusters. +Ce guide s’appuie sur la dernière version de développement de RustFS. Pour les déploiements en production, affinez ces réglages à l’aide de la documentation de votre fournisseur de matériel. Pour des évaluations trimestrielles de l’état du matériel, contactez RustFS. diff --git a/content/fr/installation/requirement/checklists/hardware-selection.md b/content/fr/installation/requirement/checklists/hardware-selection.md index 268fc211a..9a44db0e5 100644 --- a/content/fr/installation/requirement/checklists/hardware-selection.md +++ b/content/fr/installation/requirement/checklists/hardware-selection.md @@ -1,41 +1,41 @@ --- -title: Hardware Selection -description: Hardware requirements for RustFS. +title: "Choix du matériel" +description: "Cette page indique le matériel minimal et le matériel recommandé pour les environnements de test et de production de RustFS." --- -> RustFS is designed for efficiency with a low memory footprint. +> RustFS est conçu pour l’efficacité, avec une faible empreinte mémoire. -## Test Environment +## Environnement de test -> Minimal requirements for testing: +Configuration minimale pour les tests : -| Component | Requirement | +| Composant | Exigence | | - | - | -| CPU | 1 core+ | +| CPU | 1 cœur ou plus | | Architecture | x86, ARM | -| Memory | 1 GB+ | -| Storage | HDD or SSD | -| Docker | Supported | -| Network | Local or Offline | -| OS | Windows, Linux, macOS | -| Load Balancing | None | -| Nodes | 1 | +| Mémoire | 1 GB ou plus | +| Stockage | HDD ou SSD | +| Docker | Pris en charge | +| Réseau | Local ou hors ligne | +| Système d’exploitation | Windows, Linux, macOS | +| Équilibrage de charge | Aucun | +| Nœuds | 1 | -## Production Environment +## Environnement de production La version Windows de RustFS est destinée uniquement au développement et au débogage et **n’est pas recommandée pour les déploiements en production**. Pour la production, nous recommandons [Linux](/fr/installation/linux). -| Component | Requirement | +| Composant | Exigence | | - | - | -| CPU | 2 x 12 cores+ | +| CPU | 2 × 12 cœurs ou plus | | Architecture | x86, ARM, etc. | -| Memory | 64 GB+ | -| Storage | SSD recommended | -| Network | 10 Gbps+ | -| OS | Linux (Recommended) | -| Load Balancing | Recommended | -| Nodes | 4+ | +| Mémoire | 64 GB ou plus | +| Stockage | SSD recommandé | +| Réseau | 10 Gbps ou plus | +| Système d’exploitation | Linux (recommandé) | +| Équilibrage de charge | Recommandé | +| Nœuds | 4 ou plus | -## Expert Services +## Services professionnels -For complex deployments, contact support at hello@rustfs.com. +Pour les déploiements complexes, contactez l’assistance à hello@rustfs.com. diff --git a/content/fr/installation/requirement/checklists/index.md b/content/fr/installation/requirement/checklists/index.md index 7b1f73a8b..9e9c58626 100644 --- a/content/fr/installation/requirement/checklists/index.md +++ b/content/fr/installation/requirement/checklists/index.md @@ -1,24 +1,24 @@ --- -title: "Checklist" -description: "Pre-installation checklists." +title: "Listes de contrôle avant installation" +description: "Cette page regroupe les listes de contrôle à parcourir avant l’installation." --- -These checklists cover the necessary preparations for a production environment. +Ces listes de contrôle couvrent les préparatifs nécessaires à un environnement de production. :::note -These are general guidelines. Adjust them based on your specific architecture and requirements. +Ce sont des indications générales. Adaptez-les à votre architecture et à vos exigences particulières. ::: -For professional support, contact us at hello@rustfs.com. +Pour une assistance professionnelle, contactez-nous à hello@rustfs.com. -For community support, submit an issue on GitHub. +Pour une assistance communautaire, ouvrez un ticket sur GitHub. -## Checklist +## Liste de contrôle -- [Hardware Checklist](./hardware-checklists.md) -- [Hardware Selection](./hardware-selection.md) -- [Security Checklist](./security-checklists.md) -- [Software Checklist](./software-checklists.md) -- [Network Checklist](./network-checklists.md) +- [Liste de contrôle matérielle](./hardware-checklists.md) +- [Choix du matériel](./hardware-selection.md) +- [Liste de contrôle de sécurité](./security-checklists.md) +- [Liste de contrôle logicielle](./software-checklists.md) +- [Liste de contrôle réseau](./network-checklists.md) diff --git a/content/fr/installation/requirement/checklists/network-checklists.md b/content/fr/installation/requirement/checklists/network-checklists.md index 8f77cd5ad..97785c169 100644 --- a/content/fr/installation/requirement/checklists/network-checklists.md +++ b/content/fr/installation/requirement/checklists/network-checklists.md @@ -1,49 +1,49 @@ --- -title: "Network Checklist" -description: "Network checklist for enterprise deployments." +title: "Liste de contrôle réseau" +description: "Cette page fournit la liste de contrôle réseau pour les déploiements d’entreprise." --- -## Network Architecture +## Architecture réseau -### Planning +### Planification -- **Topology** - Verify the architecture (star/ring/mesh) meets high availability requirements. -- **Redundancy** - Ensure at least two independent physical links between nodes. -- **Bandwidth** - Calculate estimated traffic: object storage read/write bandwidth × node count × replica count + 20% redundancy. +- **Topologie** + Vérifiez que l’architecture en étoile, en anneau ou en maillage satisfait les exigences de haute disponibilité. +- **Redondance** + Prévoyez au moins deux liaisons physiques indépendantes entre les nœuds. +- **Bande passante** + Estimez le trafic ainsi : bande passante de lecture et d’écriture × nombre de nœuds × nombre de répliques, plus 20 % de marge. -### IP Allocation +### Allocation des adresses IP -- [ ] Separate management network from data network. -- [ ] Allocate continuous IP segments for storage nodes (recommend /24 subnet). -- [ ] Reserve at least 15% of IP addresses for expansion. +- [ ] Séparez le réseau d’administration du réseau de données. +- [ ] Attribuez une plage d’adresses IP contiguë aux nœuds de stockage. Nous recommandons un sous-réseau /24. +- [ ] Réservez au moins 15 % des adresses IP pour l’extension. --- -## Hardware Requirements +## Exigences matérielles -### Switches +### Commutateurs -| Check Item | Requirements | +| Élément | Exigence | |--------|---------| -| Backplane Bandwidth | ≥ Full port line rate forwarding capability × 1.2 | -| Port Type | 10G/25G/100G SFP+/QSFP+ fiber ports | -| Flow Table Capacity | ≥ Node count × 5 | -| Spanning Tree | Enable RSTP/MSTP fast convergence | +| Bande passante du fond de panier | ≥ 1.2 × le débit ligne agrégé de tous les ports | +| Type de port | Ports fibre 10G/25G/100G SFP+/QSFP+ | +| Capacité de la table de flux | ≥ nombre de nœuds × 5 | +| Spanning Tree | Activez RSTP ou MSTP pour une convergence rapide | -### Cabling +### Câblage -- [ ] Fiber attenuation test (single mode ≤0.35dB/km). -- [ ] Port misalignment check (Node A eth0 ↔ Node B eth0). -- [ ] Cable labeling (including source/destination IP + port number). +- [ ] Test d’atténuation de la fibre (monomode ≤0.35dB/km). +- [ ] Vérifiez la correspondance des ports (nœud A eth0 ↔ nœud B eth0). +- [ ] Étiquetage des câbles (adresses IP source et destination, plus le numéro de port). --- -## OS Configuration +## Configuration du système d’exploitation -### Kernel Tuning +### Réglage du noyau ```bash # Check the following parameter settings @@ -53,17 +53,17 @@ net.ipv4.tcp_keepalive_time = 600 net.ipv4.tcp_slow_start_after_idle = 0 ``` -### NIC Configuration +### Configuration des cartes réseau -- [ ] Enable jumbo frames (MTU=9000, requires full path support). -- [ ] Verify bonding mode (recommend LACP mode4). -- [ ] Disable IPv6 (if not needed). +- [ ] Activez les trames jumbo (MTU=9000, prise en charge requise sur l’ensemble du chemin). +- [ ] Vérifiez le mode de bonding (LACP mode4 recommandé). +- [ ] Désactivez IPv6 (s’il n’est pas nécessaire). --- -## Security +## Sécurité -### Firewall +### Pare-feu ```text # Necessary open ports @@ -72,43 +72,43 @@ net.ipv4.tcp_slow_start_after_idle = 0 - TCP 443 (only if you terminate HTTPS on a reverse proxy / load balancer) ``` -### Access Control +### Contrôle d’accès -- Switch port security MAC restrictions. -- IPSec tunnel encryption between storage nodes. -- Enable TLS 1.3 for management interfaces. +- Activez la sécurité de port (limitation des adresses MAC) sur les commutateurs. +- Chiffrez le trafic entre les nœuds de stockage avec IPsec. +- Activez TLS 1.3 sur les interfaces d’administration. --- -## Performance Testing +## Tests de performance -### Benchmarks +### Mesures -1. Inter-node latency: `ping -c 20 ` (run `iperf3 -s` on the target first for throughput tests) -2. Cross-rack bandwidth: `iperf3 -c -P 8 -t 30` -3. Failover: Randomly disconnect core links to observe recovery time. +1. Latence entre nœuds : `ping -c 20 ` (exécutez d’abord `iperf3 -s` sur la cible pour les tests de débit) +2. Bande passante entre racks : `iperf3 -c -P 8 -t 30` +3. Basculement : déconnectez de façon aléatoire des liaisons principales pour observer le temps de reprise. -### Criteria +### Critères -| Metric | Requirements | +| Indicateur | Exigences | |------|------| -| Node Latency | ≤1ms (same room) / ≤5ms (cross AZ) | -| Bandwidth Utilization | Peak ≤70% of design capacity | -| Failover | < 500ms BPDU convergence | +| Latence des nœuds | ≤ 1 ms (même centre de données) / ≤ 5 ms (entre zones de disponibilité) | +| Utilisation de la bande passante | Pic ≤ 70 % de la capacité prévue | +| Basculement | Convergence BPDU < 500ms | --- -## Documentation Requirements +## Exigences documentaires -1. Network topology diagram (including physical connections and logical IPs) -2. Switch configuration backup files (with timestamps) -3. Baseline test reports (including raw data) -4. Change record table (including maintenance window information) +1. Schéma de topologie réseau (connexions physiques et adresses IP logiques) +2. Fichiers de sauvegarde de configuration des commutateurs (avec horodatage) +3. Rapports des tests de référence (données brutes incluses) +4. Journal des modifications (fenêtres de maintenance incluses) :::tip -Recommend conducting 72-hour stress testing before formal deployment, simulating 110% peak traffic load scenarios +Nous recommandons d’exécuter un test de charge de 72 heures à 110 % du trafic de pointe attendu avant le déploiement en production. ::: -This checklist covers key checkpoints for enterprise storage system network deployment, specifically optimized parameter requirements for distributed object storage characteristics. You can contact RustFS for official technical support. +Cette liste de contrôle couvre les principales exigences réseau pour déployer un stockage objet distribué en environnement d’entreprise. Pour une assistance technique, contactez RustFS. diff --git a/content/fr/installation/requirement/checklists/security-checklists.md b/content/fr/installation/requirement/checklists/security-checklists.md index 5024450ed..7714770df 100644 --- a/content/fr/installation/requirement/checklists/security-checklists.md +++ b/content/fr/installation/requirement/checklists/security-checklists.md @@ -1,78 +1,78 @@ --- -title: "Security Checklist" -description: "Security checklist for enterprise deployments." +title: "Liste de contrôle de sécurité" +description: "Cette liste de contrôle couvre la sécurité des déploiements d’entreprise." --- -> Security best practices for RustFS. Review this checklist during deployment to ensure system security and reliability. +> Bonnes pratiques de sécurité pour RustFS. Passez cette liste en revue pendant le déploiement afin de garantir la sécurité et la fiabilité du système. -## Authentication & Access Control +## Authentification et contrôle d’accès -- **Use S3-Compatible Key Authentication** - RustFS uses AWS Signature V4. Ensure all requests are authenticated with valid Access Keys and Secret Keys. +- **Authentification par clés compatible avec S3** + RustFS utilise AWS Signature V4. Assurez-vous que toutes les requêtes sont signées avec une clé d’accès et une clé secrète valides. -- **Policy-Based Access Control** - Define access policies based on the principle of least privilege. Explicitly define allowed operations; deny all others by default. +- **Contrôle d’accès fondé sur des politiques** + Définissez les politiques d’accès selon le principe du moindre privilège. Définissez explicitement les opérations autorisées ; refusez toutes les autres par défaut. -## Encryption (TLS/SSL) +## Chiffrement (TLS/SSL) -- **Enable TLS/SSL** - Configure valid SSL certificates. We recommend using different certificates for external and internal access, and enforcing TLS 1.2+. +- **Activez TLS/SSL** + Configurez des certificats TLS valides. Nous recommandons d’utiliser des certificats distincts pour l’accès externe et l’accès interne, et d’imposer TLS 1.2 ou ultérieur. -- **Certificate Management** - Use certificates from trusted CAs. Protect private keys with strict file permissions. +- **Gestion des certificats** + Utilisez des certificats émis par des autorités de certification de confiance. Protégez les clés privées par des permissions de fichiers strictes. -- **Multi-Domain and Cipher Suites** - Configure independent certificates for multiple domains. Use strong encryption algorithms (e.g., 2048-bit RSA or 256-bit ECC). +- **Multi-domaines et suites de chiffrement** + Utilisez un certificat distinct pour chaque domaine. Utilisez des algorithmes de clés robustes (par exemple, RSA 2048 bits ou ECDSA P-256). -## Credential Protection +## Protection des identifiants -- **Change Default Credentials** - Never keep the example placeholders (`` / ``) in production. Set a unique access key and a strong, random secret — e.g. generate one with `openssl rand -base64 24` — immediately after initialization. +- **Changez les identifiants par défaut** + Ne conservez jamais les espaces réservés d’exemple (`` / ``) en production. Définissez une clé d’accès unique et une clé secrète robuste et aléatoire — par exemple, générez-en une avec `openssl rand -base64 24` — immédiatement après l’initialisation. -- **Secure Storage** - Do not hardcode credentials. Use environment variables or secrets management systems (e.g., Kubernetes Secrets). +- **Stockage sécurisé** + Ne codez pas les identifiants en dur. Utilisez des variables d’environnement ou un système de gestion des secrets (par exemple, les Secrets Kubernetes). -## Logging & Auditing +## Journalisation et audit -- **Enable Audit Logs** - Export audit logs to external systems (HTTP Webhook, Kafka, ELK, Splunk). +- **Activez les journaux d’audit** + Exportez les journaux d’audit vers des systèmes externes (webhook HTTP, Kafka, ELK, Splunk). -- **Log Collection** - Collect logs using standard tools (systemd, Docker, K8s) and analyze with ELK or Grafana Loki. +- **Collecte des journaux** + Collectez les journaux avec les outils habituels (journald, Docker, Kubernetes) et analysez-les avec ELK ou Grafana Loki. -- **Monitoring and Alerts** - Set alerts for abnormal behavior (login failures, unusual access patterns, mass deletions). +- **Supervision et alertes** + Définissez des alertes pour les comportements anormaux (échecs de connexion, schémas d’accès inhabituels, suppressions en masse). -- **Observability** - Monitor function execution times to optimize performance. +- **Observabilité** + Surveillez la latence des requêtes afin d’identifier les problèmes de performance. -## API Security +## Sécurité de l’API -- **Restrict Network Access** - Restrict access to the S3 API (port 9000) and Console (port 9001) using firewalls or security groups. +- **Restreignez l’accès réseau** + Restreignez l’accès à l’API S3 (port 9000) et à la Console (port 9001) à l’aide de pare-feu ou de groupes de sécurité. -- **Network Isolation** - Use reverse proxies (e.g., Nginx) instead of exposing storage nodes directly. +- **Isolation réseau** + Utilisez des proxys inverses (par exemple, Nginx) plutôt que d’exposer directement les nœuds de stockage. -- **Close Unnecessary Ports** - Disable unused ports and do not expose management interfaces to the public internet. +- **Fermez les ports inutiles** + Désactivez les ports inutilisés et n’exposez pas les interfaces d’administration à l’Internet public. -## WORM Compliance +## Conformité WORM -- **Version Control and Object Locking** - Enable versioning and object locking to meet regulatory requirements. +- **Gestion des versions et verrouillage d’objet** + Activez la gestion des versions et le verrouillage d’objet afin de répondre aux exigences réglementaires. -## Updates +## Mises à jour -- **Apply Patches** - Regularly check for and apply RustFS updates. +- **Appliquez les correctifs** + Vérifiez régulièrement les mises à jour de RustFS et appliquez-les. -- **Non-Disruptive Upgrades** - Use the rolling restart process for zero-downtime upgrades. +- **Mises à niveau sans interruption** + Utilisez le processus de redémarrage progressif pour les mises à niveau sans temps d’arrêt. -- **OS and Dependencies** - Keep the operating system and dependencies (e.g., OpenSSL) updated. +- **Système d’exploitation et dépendances** + Maintenez à jour le système d’exploitation et les dépendances (par exemple, OpenSSL). --- -Review this checklist regularly to maintain a secure RustFS deployment. +Passez régulièrement cette liste en revue afin de maintenir un déploiement RustFS sécurisé. diff --git a/content/fr/installation/requirement/checklists/software-checklists.md b/content/fr/installation/requirement/checklists/software-checklists.md index d2ed35b81..df3ece9dc 100644 --- a/content/fr/installation/requirement/checklists/software-checklists.md +++ b/content/fr/installation/requirement/checklists/software-checklists.md @@ -1,50 +1,50 @@ --- -title: "Software Checklist" -description: "Software requirements and considerations." +title: "Liste de contrôle logicielle" +description: "Cette page indique les exigences logicielles et les points à vérifier avant le déploiement." --- -Ensure the following requirements are met before deployment. +Vérifiez que les exigences suivantes sont satisfaites avant le déploiement. -## OS Requirements +## Exigences du système d’exploitation -- **Operating System**: Use LTS versions (Ubuntu 20.04+, RHEL 8/9). -- **Kernel**: Linux 5.x+ is recommended. -- **CPU & Memory**: x86_64 or ARM. Minimum 2 GB RAM for testing, 64 GB+ for production. -- **Disable Interfering Services**: Disable file indexing and auditing services (e.g., `mlocate`, `auditd`, antivirus) to prevent I/O interference. +- **Système d’exploitation** : utilisez des versions LTS (Ubuntu 20.04 ou ultérieur, RHEL 8/9). +- **Noyau** : Linux 5.x ou ultérieur est recommandé. +- **Processeur et mémoire** : x86_64 ou ARM. Au minimum 2 Go de RAM pour les tests, et 64 Go ou plus en production. +- **Désactivez les services perturbateurs** : désactivez les services d’indexation de fichiers et d’audit (par exemple, `mlocate`, `auditd`, un antivirus) afin d’éviter les interférences d’E/S. -> **Why Linux 5.x+?** -> Modern LTS kernels bring mature async I/O and filesystem improvements. RustFS also offers an optional `io_uring` read path (`RUSTFS_IO_URING_READ_ENABLE`, disabled by default), which requires Linux 5.10+ to be effective. +> **Pourquoi Linux 5.x ou ultérieur ?** +> Les noyaux LTS modernes apportent des E/S asynchrones éprouvées et des améliorations des systèmes de fichiers. RustFS propose aussi un chemin de lecture `io_uring` facultatif (`RUSTFS_IO_URING_READ_ENABLE`, désactivé par défaut), qui exige Linux 5.10 ou ultérieur pour être effectif. -## Binary Deployment +## Déploiement du binaire -- **Official Download**: Download binaries only from official RustFS channels. -- **Integrity Verification**: Verify SHA256 checksums. -- **Consistency**: Ensure all nodes run the same RustFS version. -- **Installation Location**: Place binaries in `/usr/local/bin` and ensure they are executable (`chmod +x`). +- **Téléchargement officiel** : ne téléchargez les binaires que depuis les canaux officiels de RustFS. +- **Vérification d’intégrité** : vérifiez les sommes de contrôle SHA256. +- **Cohérence** : assurez-vous que tous les nœuds exécutent la même version de RustFS. +- **Emplacement d’installation** : placez les binaires dans `/usr/local/bin` et assurez-vous qu’ils sont exécutables (`chmod +x`). -## File System & Disks +## Système de fichiers et disques -- **Dedicated Data Disks**: Use dedicated disks for RustFS data. Do not share with the OS. -- **File System**: Use XFS or Ext4 with performance options (e.g., `noatime`). -- **Disk Configuration**: Use JBOD (independent volumes). Do not use hardware RAID. -- **Permissions**: Ensure the RustFS user has read/write access to data directories. +- **Disques de données dédiés** : utilisez des disques dédiés pour les données RustFS. Ne les partagez pas avec le système d’exploitation. +- **Système de fichiers** : utilisez XFS ou ext4 avec des options de montage orientées performances, telles que `noatime`. +- **Configuration des disques** : utilisez le JBOD (volumes indépendants). N’utilisez pas le RAID matériel. +- **Permissions** : assurez-vous que l’utilisateur RustFS dispose d’un accès en lecture et en écriture aux répertoires de données. -## Dependencies +## Dépendances -- **Time Synchronization**: Synchronize time across all nodes using `ntp` or `chrony`. -- **Hostname and DNS**: Configure persistent hostnames and ensure proper DNS resolution. -- **Network Connectivity**: Ensure all nodes can communicate on the RustFS port (default 9000). -- **TLS/Certificates**: Install root certificates and prepare server certificates if using HTTPS. -- **Packages**: Ensure standard tools (`bash`, `glibc`, `openssl`) are installed. +- **Synchronisation de l’heure** : synchronisez l’heure de tous les nœuds avec `ntp` ou `chrony`. +- **Nom d’hôte et DNS** : configurez des noms d’hôte persistants et assurez une résolution DNS correcte. +- **Connectivité réseau** : assurez-vous que tous les nœuds peuvent communiquer sur le port RustFS (9000 par défaut). +- **TLS et certificats** : installez les certificats racine et préparez les certificats de serveur si vous utilisez HTTPS. +- **Paquets** : assurez-vous que les outils habituels (`bash`, `glibc`, `openssl`) sont installés. -## User & Security +## Utilisateur et sécurité -- **Dedicated User**: Run RustFS as a dedicated user (e.g., `rustfs-user`). -- **File Permissions**: Restrict access to binaries and configuration files. -- **SELinux/AppArmor**: Configure policies to allow RustFS operations, or disable if appropriate. -- **Systemd**: Configure the systemd service file correctly (`User=`, `ExecStart=`, environment variables). +- **Utilisateur dédié** : exécutez RustFS sous un utilisateur dédié (par exemple, `rustfs-user`). +- **Permissions des fichiers** : restreignez l’accès aux binaires et aux fichiers de configuration. +- **SELinux/AppArmor** : configurez des politiques qui autorisent les opérations RustFS, ou désactivez SELinux ou AppArmor si c’est approprié. +- **systemd** : configurez correctement le fichier de service systemd (`User=`, `ExecStart=`, variables d’environnement). -## Other +## Autres points -- **Monitoring**: Configure Prometheus and Grafana. -- **Rollback Plan**: Prepare configuration backups and a rollback plan. +- **Supervision** : configurez Prometheus et Grafana. +- **Plan de retour arrière** : préparez des sauvegardes de la configuration et un plan de retour arrière. diff --git a/content/fr/installation/requirement/disk-preparation.md b/content/fr/installation/requirement/disk-preparation.md index e8fed45d8..6bcbe5957 100644 --- a/content/fr/installation/requirement/disk-preparation.md +++ b/content/fr/installation/requirement/disk-preparation.md @@ -1,83 +1,83 @@ --- -title: "Disk Preparation" -description: "Identify, format, mount, and verify dedicated data disks before installing RustFS on Linux." +title: "Préparation des disques" +description: "Identifiez, formatez, montez et vérifiez les disques de données dédiés avant d’installer RustFS sur Linux." --- -Prepare each RustFS data disk as an independent XFS file system with a stable label and mount point. Complete these steps on every Linux node before configuring `RUSTFS_VOLUMES`. +Préparez chaque disque de données RustFS comme un système de fichiers XFS indépendant, avec un libellé et un point de montage stables. Effectuez ces étapes sur chaque nœud Linux avant de configurer `RUSTFS_VOLUMES`. -:::warning[Formatting destroys data] +:::warning[Le formatage détruit les données] -The `mkfs.xfs` command erases the selected device. Confirm the device name, back up any required data, and ensure the disk is not used by the operating system before continuing. +La commande `mkfs.xfs` efface le périphérique sélectionné. Confirmez le nom du périphérique, sauvegardez les données nécessaires et assurez-vous que le disque n’est pas utilisé par le système d’exploitation avant de continuer. ::: -## 1. Identify the data disks +## 1. Identifier les disques de données -List block devices, file systems, labels, and current mount points: +Répertoriez les périphériques bloc, les systèmes de fichiers, les libellés et les points de montage actuels : ```bash sudo lsblk -o NAME,SIZE,TYPE,FSTYPE,LABEL,UUID,MOUNTPOINTS ``` -Choose only dedicated data disks. Do not format the operating-system disk or a device that contains data you need to retain. +Ne choisissez que des disques de données dédiés. Ne formatez pas le disque du système d’exploitation, ni un périphérique qui contient des données à conserver. -## 2. Format a disk with XFS +## 2. Formater un disque en XFS -The following example prepares `/dev/sdb` and assigns the label `RUSTFS0`. Replace the device name for your environment and use a unique label for each disk. +L’exemple suivant prépare `/dev/sdb` et lui attribue le libellé `RUSTFS0`. Remplacez le nom de périphérique selon votre environnement et utilisez un libellé unique pour chaque disque. ```bash sudo mkfs.xfs -f -i size=512 -n ftype=1 -L RUSTFS0 /dev/sdb ``` -Repeat the command for additional disks with labels such as `RUSTFS1`, `RUSTFS2`, and `RUSTFS3`. +Répétez la commande pour les disques supplémentaires, avec des libellés tels que `RUSTFS1`, `RUSTFS2` et `RUSTFS3`. -## 3. Create a persistent mount +## 3. Créer un montage persistant -Create the mount point: +Créez le point de montage : ```bash sudo mkdir -p /data/rustfs0 ``` -Add an entry to `/etc/fstab` so the disk is mounted by its stable file-system label after a restart: +Ajoutez une entrée à `/etc/fstab` afin que le disque soit monté, après un redémarrage, par son libellé de système de fichiers stable : ```ini title="/etc/fstab" LABEL=RUSTFS0 /data/rustfs0 xfs defaults,noatime,nodiratime 0 0 ``` -For more reliable device selection, we recommend mounting by file-system UUID. A UUID uniquely identifies the file system and avoids mounting the wrong disk if labels are duplicated or Linux device names change. Retrieve the UUID after formatting: +Pour sélectionner le périphérique de façon plus fiable, nous recommandons le montage par UUID de système de fichiers. Un UUID identifie le système de fichiers de manière unique et évite de monter le mauvais disque si des libellés sont dupliqués ou si les noms de périphériques Linux changent. Récupérez l’UUID après le formatage : ```bash sudo blkid -s UUID -o value /dev/sdb ``` -Replace `` with the returned value, and use this entry instead of the `LABEL` entry above: +Remplacez `` par la valeur renvoyée, et utilisez cette entrée à la place de l’entrée `LABEL` ci-dessus : ```ini title="/etc/fstab" UUID= /data/rustfs0 xfs defaults,noatime,nodiratime 0 0 ``` -Mount all entries and confirm the result: +Montez toutes les entrées et confirmez le résultat : ```bash sudo mount -a findmnt /data/rustfs0 ``` -For multiple disks, create one mount point and one `/etc/fstab` entry per file-system UUID. +Pour plusieurs disques, créez un point de montage et une entrée `/etc/fstab` par UUID de système de fichiers. -## 4. Verify the prepared disks +## 4. Vérifier les disques préparés -Confirm that every expected mount uses XFS and has sufficient free space: +Confirmez que chaque montage attendu utilise XFS et dispose d’un espace libre suffisant : ```bash df -hT /data/rustfs0 sudo xfs_info /data/rustfs0 ``` -Use the verified mount paths when you configure `RUSTFS_VOLUMES`. Keep disk labels and mount paths consistent across nodes in a distributed deployment. +Utilisez les chemins de montage vérifiés lorsque vous configurez `RUSTFS_VOLUMES`. Dans un déploiement distribué, conservez des libellés de disque et des chemins de montage identiques sur tous les nœuds. -## Next steps +## Étapes suivantes -- [Choose a deployment topology](/installation#deployment-mode-comparison) -- [Continue with Linux prerequisites and service setup](/installation/linux/prerequisites-and-service) \ No newline at end of file +- [Choisir une topologie de déploiement](/fr/installation#comparaison-des-modes-de-déploiement) +- [Poursuivre avec les prérequis Linux et la configuration du service](/fr/installation/linux/prerequisites-and-service) diff --git a/content/fr/installation/requirement/ec-configuration.md b/content/fr/installation/requirement/ec-configuration.md index e38e4f7ea..92877d0af 100644 --- a/content/fr/installation/requirement/ec-configuration.md +++ b/content/fr/installation/requirement/ec-configuration.md @@ -1,32 +1,32 @@ --- -title: "EC Configuration" -description: "Plan and configure RustFS erasure-set size and parity before deploying storage pools." +title: "Configuration du codage d’effacement" +description: "Planifiez et configurez la taille des ensembles d’effacement et la parité de RustFS avant de déployer des pools de stockage." --- -RustFS uses Reed-Solomon erasure coding (EC) to distribute each object across the drives in an erasure set. Use this page to estimate usable capacity, understand the automatic defaults, and decide whether your deployment needs an explicit parity setting. +RustFS utilise le codage d’effacement (EC) de Reed-Solomon pour répartir chaque objet sur les disques d’un ensemble d’effacement. Utilisez cette page pour estimer la capacité utile, comprendre les valeurs par défaut automatiques et décider si votre déploiement exige un réglage de parité explicite. -## Understand the layout +## Comprendre la disposition -Each storage pool is divided into one or more erasure sets. For a set with `N` drives and `M` parity shards: +Chaque pool de stockage est divisé en un ou plusieurs ensembles d’effacement. Pour un ensemble comportant `N` disques et `M` shards de parité : -- data shards: `N - M` -- parity shards: `M` -- maximum unavailable shards that can be reconstructed: `M` -- approximate capacity efficiency: `(N - M) / N` +- shards de données : `N - M` +- shards de parité : `M` +- nombre maximal de shards indisponibles pouvant être reconstruits : `M` +- efficacité de capacité approximative : `(N - M) / N` -For example, a 16-drive set with `EC:4` stores 12 data shards and 4 parity shards. Its approximate capacity efficiency is 75% before file-system, metadata, and operational overhead. +Par exemple, un ensemble de 16 disques avec `EC:4` stocke 12 shards de données et 4 shards de parité. Son efficacité de capacité approximative est de 75 % avant la surcharge du système de fichiers, des métadonnées et de l’exploitation. -:::note[Failure domains] +:::note[Domaines de défaillance] -Parity describes unavailable shards within one erasure set. Node-level fault tolerance depends on how the set's drives are distributed across nodes. Do not assume that `EC:4` always tolerates four complete node failures; a node can host multiple drives from the same set. +La parité décrit les shards indisponibles au sein d’un seul ensemble d’effacement. La tolérance aux pannes au niveau du nœud dépend de la façon dont les disques de l’ensemble sont répartis entre les nœuds. Ne supposez pas que `EC:4` tolère toujours quatre pannes complètes de nœuds ; un nœud peut héberger plusieurs disques du même ensemble. ::: -## Automatic parity +## Parité automatique -We recommend leaving `RUSTFS_STORAGE_CLASS_STANDARD` unset unless you have a specific, validated durability or capacity requirement. RustFS derives STANDARD parity independently for each pool from its drives per erasure set: +Nous recommandons de ne pas définir `RUSTFS_STORAGE_CLASS_STANDARD`, sauf si vous avez une exigence de durabilité ou de capacité précise et validée. RustFS déduit la parité STANDARD de chaque pool indépendamment, à partir de son nombre de disques par ensemble d’effacement : -| Drives per erasure set (`N`) | Automatic STANDARD parity | Data shards | Approximate efficiency | +| Disques par ensemble d’effacement (`N`) | Parité STANDARD automatique | Shards de données | Efficacité approximative | | --- | --- | --- | --- | | 1 | `EC:0` | 1 | 100% | | 2–3 | `EC:1` | `N - 1` | 50%–67% | @@ -34,82 +34,82 @@ We recommend leaving `RUSTFS_STORAGE_CLASS_STANDARD` unset unless you have a spe | 6–7 | `EC:3` | `N - 3` | 50%–57% | | 8–16 | `EC:4` | `N - 4` | 50%–75% | -Multi-drive erasure sets contain between 2 and 16 drives. A single-drive deployment is a separate layout with zero parity. +Les ensembles d’effacement à plusieurs disques contiennent entre 2 et 16 disques. Un déploiement à un seul disque est une disposition distincte, avec une parité nulle. -:::warning[Use the set width, not the cluster total] +:::warning[Utilisez la largeur de l’ensemble, pas le total du cluster] -Validate parity against the number of drives in each erasure set, not the total number of drives in the cluster. A cluster can contain multiple sets or pools with different widths. +Validez la parité d’après le nombre de disques de chaque ensemble d’effacement, et non d’après le nombre total de disques du cluster. Un cluster peut contenir plusieurs ensembles ou plusieurs pools de largeurs différentes. ::: -## Estimate usable capacity +## Estimer la capacité utile -For a pool whose sets all use the same width and parity, estimate EC capacity with: +Pour un pool dont tous les ensembles utilisent la même largeur et la même parité, estimez la capacité du codage d’effacement avec : $$ -\text{usable capacity} \approx \text{raw capacity} \times \frac{N-M}{N} +\text{capacité utile} \approx \text{capacité brute} \times \frac{N-M}{N} $$ -For example, 16 equal 10 TiB drives arranged as one 16-drive set with `EC:4` provide approximately: +Par exemple, 16 disques identiques de 10 TiB, disposés en un seul ensemble de 16 disques avec `EC:4`, fournissent environ : $$ 160\ \text{TiB} \times \frac{16-4}{16} = 120\ \text{TiB} $$ -Reserve additional capacity for XFS, object metadata, versioning, incomplete uploads, healing, and normal operational headroom. Treat the result as a planning estimate, not guaranteed available space. +Réservez une capacité supplémentaire pour XFS, les métadonnées d’objets, la gestion des versions, les chargements incomplets, la réparation des données et une marge d’exploitation normale. Considérez le résultat comme une estimation de planification, et non comme un espace disponible garanti. -## Configure parity +## Configurer la parité -Set EC variables in the same environment file used by the RustFS service, such as `/etc/default/rustfs`. +Définissez les variables de codage d’effacement dans le même fichier d’environnement que celui du service RustFS, par exemple `/etc/default/rustfs`. -To use the recommended automatic STANDARD parity, omit `RUSTFS_STORAGE_CLASS_STANDARD` or leave it empty: +Pour utiliser la parité STANDARD automatique recommandée, omettez `RUSTFS_STORAGE_CLASS_STANDARD` ou laissez-la vide : ```ini title="/etc/default/rustfs" RUSTFS_STORAGE_CLASS_STANDARD= ``` -To pin parity explicitly, use the `EC:` format: +Pour fixer la parité de façon explicite, utilisez le format `EC:` : ```ini title="/etc/default/rustfs" RUSTFS_STORAGE_CLASS_STANDARD=EC:4 RUSTFS_STORAGE_CLASS_RRS=EC:1 ``` -`RUSTFS_STORAGE_CLASS_STANDARD` controls writes using the `STANDARD` storage class. `RUSTFS_STORAGE_CLASS_RRS` controls `REDUCED_REDUNDANCY` writes and defaults to one parity shard on multi-drive sets. RustFS accepts these two storage classes for local writes. +`RUSTFS_STORAGE_CLASS_STANDARD` contrôle les écritures qui utilisent la classe de stockage `STANDARD`. `RUSTFS_STORAGE_CLASS_RRS` contrôle les écritures `REDUCED_REDUNDANCY` et vaut par défaut un shard de parité sur les ensembles à plusieurs disques. RustFS accepte ces deux classes de stockage pour les écritures locales. -Explicit settings must satisfy all of these rules: +Les réglages explicites doivent respecter toutes les règles suivantes : -- parity must be no greater than half of the drives in every target set: `M <= N / 2` -- STANDARD parity must be greater than or equal to REDUCED_REDUNDANCY parity when both are non-zero -- the configured parity must be valid for every pool, including the narrowest pool +- la parité ne doit pas dépasser la moitié des disques de chaque ensemble cible : `M <= N / 2` +- la parité STANDARD doit être supérieure ou égale à la parité REDUCED_REDUNDANCY lorsque les deux sont différentes de zéro +- la parité configurée doit être valide pour chaque pool, y compris le pool le plus étroit -RustFS validates explicit storage classes against each pool during startup. An invalid value causes startup to fail instead of silently reducing parity. Remove the explicit STANDARD value to return to per-pool automatic parity, or choose a value every pool can satisfy. +Au démarrage, RustFS valide les classes de stockage explicites pour chaque pool. Une valeur non valide fait échouer le démarrage, au lieu de réduire la parité silencieusement. Retirez la valeur STANDARD explicite pour revenir à la parité automatique par pool, ou choisissez une valeur que chaque pool peut satisfaire. -## Control erasure-set width +## Contrôler la largeur des ensembles d’effacement -RustFS normally selects a valid set width automatically from the volume topology. Multi-drive set widths range from 2 through 16. +RustFS sélectionne normalement, de façon automatique, une largeur d’ensemble valide à partir de la topologie des volumes. Les largeurs des ensembles à plusieurs disques vont de 2 à 16. -`RUSTFS_ERASURE_SET_DRIVE_COUNT` can pin the width when you need a specific symmetric layout: +`RUSTFS_ERASURE_SET_DRIVE_COUNT` peut fixer la largeur lorsque vous avez besoin d’une disposition symétrique précise : ```ini title="/etc/default/rustfs" RUSTFS_ERASURE_SET_DRIVE_COUNT=16 ``` -The value must divide the pool topology symmetrically and be valid for every volume expansion pattern. RustFS rejects a width that cannot evenly partition the configured endpoints. Leave this variable unset unless you have verified the complete pool layout. +La valeur doit diviser la topologie du pool de façon symétrique et rester valide pour chaque schéma d’extension des volumes. RustFS rejette une largeur qui ne peut pas partitionner uniformément les points de terminaison configurés. Laissez cette variable non définie, sauf si vous avez vérifié la disposition complète du pool. -## Validate the configuration +## Valider la configuration -Before starting or restarting RustFS: +Avant de démarrer ou de redémarrer RustFS : -1. Determine the drives per erasure set for every pool. -2. Confirm that explicit parity does not exceed half of the narrowest set width. -3. Estimate usable capacity and reserve operational headroom. -4. Keep the same service environment configuration on every node. +1. Déterminez le nombre de disques par ensemble d’effacement pour chaque pool. +2. Confirmez que la parité explicite ne dépasse pas la moitié de la largeur de l’ensemble le plus étroit. +3. Estimez la capacité utile et réservez une marge d’exploitation. +4. Conservez la même configuration d’environnement du service sur chaque nœud. -After startup, use the Console **Status** page or `rc admin info cluster` to confirm the backend layout, erasure-coding parity, drive availability, and pool membership. See [Status Check](/operations/status-check) for the complete workflow. +Après le démarrage, utilisez la page **Status** de la Console ou `rc admin info cluster` pour confirmer la disposition du backend, la parité du codage d’effacement, la disponibilité des disques et l’appartenance aux pools. Consultez [Vérification de l’état](/fr/operations/status-check) pour la procédure complète. -## Next steps +## Étapes suivantes -- [Prepare data disks](./disk-preparation.md) -- [Choose a deployment topology](/installation#deployment-mode-comparison) -- [Review all storage environment variables](/reference/environment-variables#storage--erasure) \ No newline at end of file +- [Préparer les disques de données](./disk-preparation.md) +- [Choisir une topologie de déploiement](/fr/installation#comparaison-des-modes-de-déploiement) +- [Consulter toutes les variables d’environnement de stockage](/fr/reference/environment-variables#stockage-et-codage-deffacement) diff --git a/content/fr/installation/requirement/meta.json b/content/fr/installation/requirement/meta.json index e4a94d653..0759414d1 100644 --- a/content/fr/installation/requirement/meta.json +++ b/content/fr/installation/requirement/meta.json @@ -1,7 +1,7 @@ { "title": "Prérequis", "pages": [ - "[Choix de la topologie](/fr/installation#deployment-mode-comparison)", + "[Choix de la topologie](/fr/installation#comparaison-des-modes-de-déploiement)", "ec-configuration", "disk-preparation", "checklists" diff --git a/content/fr/installation/windows/index.md b/content/fr/installation/windows/index.md index 9d34fd692..3fb48ac96 100644 --- a/content/fr/installation/windows/index.md +++ b/content/fr/installation/windows/index.md @@ -1,125 +1,125 @@ --- -title: "Install RustFS on Windows" -description: "Install a local RustFS instance on Windows with RustFS Launcher or the standalone server binary." +title: "Installer RustFS sur Windows" +description: "Installez une instance RustFS locale sur Windows avec RustFS Launcher ou le binaire serveur autonome." --- -This guide provides two ways to run **RustFS** on Windows: use the graphical **RustFS Launcher**, or download and run the standalone server binary from PowerShell. Both methods create a local, single-node instance suitable for evaluation, development, and testing. +Ce guide présente deux façons d’exécuter **RustFS** sur Windows : utiliser **RustFS Launcher** graphique, ou télécharger et exécuter le binaire serveur autonome depuis PowerShell. Les deux méthodes créent une instance locale à nœud unique, adaptée à l’évaluation, au développement et aux tests. :::warning[Développement et débogage uniquement] -La version Windows de RustFS est destinée uniquement au développement et au débogage et **n’est pas recommandée pour les déploiements en production**. Pour la production, nous recommandons [Linux](/fr/installation/linux). +La version Windows de RustFS est destinée uniquement au développement et au débogage. Elle **n’est pas recommandée pour les déploiements en production**. Nous recommandons [Linux](/fr/installation/linux) pour les charges de production. -These procedures run RustFS as a desktop process, not as a Windows service. For a production or distributed deployment, use the [Linux installation guides](/installation/linux). +Ces procédures exécutent RustFS comme un processus de bureau, et non comme un service Windows. Pour un déploiement de production ou distribué, utilisez les [guides d’installation Linux](/fr/installation/linux). ::: -## 1. Check the prerequisites +## 1. Vérifier les prérequis -Before you begin, make sure that: +Avant de commencer, vérifiez que : -- You are using 64-bit Windows on an x86-64 processor. Launcher currently bundles the Windows x86-64 RustFS binary. -- You have permission to install or run applications and to write to the selected data directory. -- TCP ports `9000` and `9001` are available, or you have selected two other unused ports. -- You have created a dedicated data directory, such as `D:\rustfs\data`. +- Vous utilisez Windows 64 bits sur un processeur x86-64. Launcher embarque actuellement le binaire RustFS Windows x86-64. +- Vous avez le droit d’installer ou d’exécuter des applications et d’écrire dans le répertoire de données choisi. +- Les ports TCP `9000` et `9001` sont disponibles, ou vous avez choisi deux autres ports libres. +- Vous avez créé un répertoire de données dédié, par exemple `D:\rustfs\data`. -:::warning[Protect the data directory] +:::warning[Protégez le répertoire de données] -Use an empty directory on a disk with enough free space. Do not store unrelated files in this directory, and do not edit RustFS data files while the server is running. +Utilisez un répertoire vide sur un disque disposant de suffisamment d’espace libre. Ne stockez pas de fichiers sans rapport dans ce répertoire, et ne modifiez pas les fichiers de données RustFS pendant que le serveur est en cours d’exécution. ::: -## 2. Choose an installation method +## 2. Choisir une méthode d’installation -| Method | Use it when | Management model | +| Méthode | Utilisez-la lorsque | Modèle de gestion | | --- | --- | --- | -| RustFS Launcher | You want a graphical setup and built-in log viewer. | Launcher starts and stops the bundled RustFS process. | -| Standalone binary | You want explicit PowerShell commands or scripting. | The PowerShell session owns the RustFS process. | +| RustFS Launcher | Vous souhaitez une configuration graphique et une visionneuse de journaux intégrée. | Launcher démarre et arrête le processus RustFS embarqué. | +| Binaire autonome | Vous souhaitez des commandes PowerShell explicites ou des scripts. | La session PowerShell possède le processus RustFS. | -## Install with RustFS Launcher +## Installer avec RustFS Launcher -### 3. Download and install Launcher +### 3. Télécharger et installer Launcher -1. Open the [RustFS Launcher Releases page](https://github.com/rustfs/launcher/releases). -2. Select the latest release and download its Windows x86-64 installer from **Assets**. Do not download **Source code**, which is for building Launcher from source. -3. Double-click the installer and follow the prompts. -4. Open **RustFS Launcher** from the Start menu if it does not open automatically. +1. Ouvrez la [page des versions de RustFS Launcher](https://github.com/rustfs/launcher/releases). +2. Sélectionnez la dernière version et téléchargez son installateur Windows x86-64 depuis **Assets** (fichiers de la version). Ne téléchargez pas **Source code** (code source), qui sert à compiler Launcher à partir du code source. +3. Double-cliquez sur l’installateur et suivez les invites. +4. Ouvrez **RustFS Launcher** depuis le menu Démarrer s’il ne s’ouvre pas automatiquement. -If Microsoft Defender SmartScreen displays a warning, verify that the installer came from the official `rustfs/launcher` Releases page before allowing it to run. Do not disable Windows security features globally. +Si Microsoft Defender SmartScreen affiche un avertissement, vérifiez que l’installateur provient de la page officielle des versions de `rustfs/launcher` avant de l’autoriser à s’exécuter. Ne désactivez pas globalement les fonctions de sécurité de Windows. -### 4. Configure Launcher +### 4. Configurer Launcher -Configure the fields in the Launcher window: +Configurez les champs de la fenêtre Launcher : -| Section | Field | Recommended value | Description | +| Section | Champ | Valeur recommandée | Description | | --- | --- | --- | --- | -| Dataset Mount | Data Path | `D:\rustfs\data` | Existing directory where RustFS stores object data. | -| Ports & Access | API Port | `9000` | S3-compatible API port. | -| Ports & Access | Host | `127.0.0.1` | Restricts access to this computer. | -| Ports & Access | Console Endpoint | Enabled | Enables the web Console; Launcher disables it by default. | -| Ports & Access | Console Port | `9001` | Console port, which must differ from the API port. | -| Credentials | Access Key | `` | Administrator access key for this instance. | -| Credentials | Secret Key | `` | Administrator secret key for this instance. | +| Dataset Mount | Data Path | `D:\rustfs\data` | Répertoire existant dans lequel RustFS stocke les données d’objets. | +| Ports & Access | API Port | `9000` | Port de l’API compatible avec S3. | +| Ports & Access | Host | `127.0.0.1` | Limite l’accès à cet ordinateur. | +| Ports & Access | Console Endpoint | Enabled | Active la Console web. Launcher la désactive par défaut. | +| Ports & Access | Console Port | `9001` | Port de la Console, qui doit être différent du port de l’API. | +| Credentials | Access Key | `` | Clé d’accès d’administrateur pour cette instance. | +| Credentials | Secret Key | `` | Clé secrète d’administrateur pour cette instance. | -Select the data directory with **Browse** or drag it into Launcher. Launcher requires the directory to exist before startup. +Sélectionnez le répertoire de données avec **Browse** (Parcourir), ou faites-le glisser dans Launcher. Launcher exige que le répertoire existe avant le démarrage. -Replace the credential placeholders with your own values. Launcher initially displays default local-test credentials; do not retain them on a computer accessible by other users. +Remplacez les identifiants indicatifs par vos propres valeurs. Launcher affiche d’abord les identifiants par défaut d’un test local. Ne les conservez pas sur un ordinateur accessible à d’autres utilisateurs. -:::warning[Network exposure] +:::warning[Exposition réseau] -Keep **Host** set to `127.0.0.1` unless another computer must connect to RustFS. A non-loopback address exposes the API and Console on the corresponding network interfaces. Configure Windows Defender Firewall and strong credentials before allowing remote access. +Laissez **Host** défini sur `127.0.0.1`, sauf si un autre ordinateur doit se connecter à RustFS. Une adresse autre que l’adresse de bouclage expose l’API et la Console sur les interfaces réseau correspondantes. Configurez Windows Defender Firewall et des identifiants robustes avant d’autoriser un accès distant. ::: -### 5. Start and verify RustFS +### 5. Démarrer et vérifier RustFS -1. Select **Launch RustFS**. -2. Wait for Launcher to report that the configured endpoint is online. -3. Open `http://localhost:9001` and sign in with the access key and secret key that you configured. -4. Use `http://localhost:9000` as the endpoint for S3-compatible clients. +1. Sélectionnez **Launch RustFS** (démarrer RustFS). +2. Attendez que Launcher indique que le point de terminaison configuré est en ligne. +3. Ouvrez `http://localhost:9001` et connectez-vous avec la clé d’accès et la clé secrète que vous avez configurées. +4. Utilisez `http://localhost:9000` comme point de terminaison pour les clients compatibles avec S3. -![RustFS Launcher showing the service online with API port 9000, Console port 9001, and successful startup logs](./images/windows-rustfs-launcher.jpg) +![RustFS Launcher indiquant le service en ligne, avec le port API 9000, le port Console 9001 et des journaux de démarrage réussis](./images/windows-rustfs-launcher.jpg) -If you changed the host or ports, use those values instead. The Console URL is available only when **Console Endpoint** is enabled. +Si vous avez modifié l’hôte ou les ports, utilisez ces valeurs. L’URL de la Console n’est disponible que lorsque **Console Endpoint** est activé. -Launcher locks its configuration while it manages a running process. It also creates a `logs` directory next to the data directory. For example, a data path of `D:\rustfs\data` places server log files under `D:\rustfs\logs`. +Launcher verrouille sa configuration tant qu’il gère un processus en cours d’exécution. Il crée aussi un répertoire `logs` à côté du répertoire de données. Par exemple, un chemin de données `D:\rustfs\data` place les fichiers journaux du serveur sous `D:\rustfs\logs`. -### 6. Stop or exit Launcher +### 6. Arrêter ou quitter Launcher -Select **Stop RustFS** before changing configuration, disconnecting the data disk, or shutting down Windows. +Sélectionnez **Stop RustFS** (arrêter RustFS) avant de modifier la configuration, de déconnecter le disque de données ou d’éteindre Windows. -Closing the Launcher window hides it in the Windows system tray; it does not stop RustFS. To stop the managed process and exit Launcher, right-click the tray icon and select **Quit**. Select **Show**, or left-click the tray icon, to restore the window. +Fermer la fenêtre de Launcher la masque dans la zone de notification de Windows. Cela n’arrête pas RustFS. Pour arrêter le processus géré et quitter Launcher, cliquez avec le bouton droit sur l’icône de la zone de notification et sélectionnez **Quit** (quitter). Sélectionnez **Show** (afficher), ou cliquez avec le bouton gauche sur l’icône, pour restaurer la fenêtre. -## Install the standalone binary +## Installer le binaire autonome -### 7. Download and extract the binary +### 7. Télécharger et extraire le binaire -1. Open the [RustFS Releases page](https://github.com/rustfs/rustfs/releases). -2. Select the required release and download the Windows x86-64 ZIP archive from **Assets**. The asset name begins with `rustfs-windows-x86_64`. -3. Open PowerShell and create directories for the program and its data: +1. Ouvrez la [page des versions de RustFS](https://github.com/rustfs/rustfs/releases). +2. Sélectionnez la version requise et téléchargez l’archive ZIP Windows x86-64 depuis **Assets**. Le nom du fichier commence par `rustfs-windows-x86_64`. +3. Ouvrez PowerShell et créez les répertoires du programme et de ses données : ```powershell New-Item -ItemType Directory -Force -Path C:\rustfs\bin New-Item -ItemType Directory -Force -Path D:\rustfs\data ``` -4. Extract the downloaded archive. Replace `` with the version in the downloaded filename: +4. Extrayez l’archive téléchargée. Remplacez `` par la version figurant dans le nom du fichier téléchargé : ```powershell Expand-Archive -Path "$HOME\Downloads\rustfs-windows-x86_64-.zip" -DestinationPath C:\rustfs\bin -Force ``` -5. Confirm that the extracted binary runs: +5. Confirmez que le binaire extrait s’exécute : ```powershell Set-Location C:\rustfs\bin .\rustfs.exe --help ``` -If the archive extracts `rustfs.exe` into a nested directory, change to that directory or move the executable into `C:\rustfs\bin` before continuing. +Si l’archive extrait `rustfs.exe` dans un répertoire imbriqué, placez-vous dans ce répertoire ou déplacez l’exécutable dans `C:\rustfs\bin` avant de continuer. -### 8. Start the standalone server +### 8. Démarrer le serveur autonome -Set credentials only for the current PowerShell session, then start RustFS with explicit addresses: +Définissez les identifiants uniquement pour la session PowerShell en cours, puis démarrez RustFS avec des adresses explicites : ```powershell $env:RUSTFS_ACCESS_KEY = "" @@ -133,61 +133,61 @@ Set-Location C:\rustfs\bin "D:\rustfs\data" ``` -Keep the PowerShell window open while RustFS is running. Press `Ctrl+C` in that window to stop the server. +Laissez la fenêtre PowerShell ouverte pendant l’exécution de RustFS. Appuyez sur `Ctrl+C` dans cette fenêtre pour arrêter le serveur. -:::tip[Credential handling] +:::tip[Gestion des identifiants] -Session environment variables avoid placing credentials directly in the command line. For repeated or automated use, prefer the `RUSTFS_ACCESS_KEY_FILE` and `RUSTFS_SECRET_KEY_FILE` environment variables and protect those files with Windows access controls. +Les variables d’environnement de session évitent de placer les identifiants directement sur la ligne de commande. Pour un usage répété ou automatisé, préférez les variables d’environnement `RUSTFS_ACCESS_KEY_FILE` et `RUSTFS_SECRET_KEY_FILE`, et protégez ces fichiers avec les contrôles d’accès Windows. ::: -### 9. Verify the standalone server +### 9. Vérifier le serveur autonome -Open `http://localhost:9001` and sign in with the configured credentials. Use `http://localhost:9000` as the endpoint for S3-compatible clients. RustFS defaults to path-style addressing, so configure clients accordingly. +Ouvrez `http://localhost:9001` et connectez-vous avec les identifiants configurés. Utilisez `http://localhost:9000` comme point de terminaison pour les clients compatibles avec S3. RustFS utilise par défaut l’adressage de type chemin (path-style) : configurez les clients en conséquence. -To perform an end-to-end check, create a bucket named `my-bucket`, upload `hello.txt`, and confirm that the object appears in the bucket. +Pour une vérification de bout en bout, créez un compartiment (bucket) nommé `my-bucket`, chargez (upload) `hello.txt`, puis confirmez que l’objet apparaît dans le compartiment. -## Confirm a successful installation +## Confirmer une installation réussie -Whether you used Launcher or the standalone binary, a successful Console sign-in opens the **Buckets** page. From here, you can create `my-bucket` and begin storing objects. +Que vous ayez utilisé Launcher ou le binaire autonome, une connexion réussie à la Console ouvre la page **Buckets** (compartiments). Depuis cette page, vous pouvez créer `my-bucket` et commencer à stocker des objets. -![RustFS Console Buckets page after a successful sign-in](./images/rustfs-console-login.png) +![Page Buckets de la Console RustFS après une connexion réussie](./images/rustfs-console-login.png) -## Troubleshooting +## Dépannage -### Windows blocks the installer or executable +### Windows bloque l’installateur ou l’exécutable -Confirm that the file came from the official RustFS GitHub organization. Inspect the file's **Properties** dialog and, when Windows provides the option, select **Unblock** only after verifying the source. +Confirmez que le fichier provient de l’organisation GitHub officielle de RustFS. Examinez la boîte de dialogue **Properties** (Propriétés) du fichier et, lorsque Windows propose l’option, sélectionnez **Unblock** (débloquer) seulement après avoir vérifié la source. -### The data path is rejected +### Le chemin de données est rejeté -Confirm that the directory exists and that your Windows account has read and write access. Launcher does not create the selected data directory for you. +Confirmez que le répertoire existe et que votre compte Windows dispose d’un accès en lecture et en écriture. Launcher ne crée pas pour vous le répertoire de données sélectionné. -### The API or Console port is unavailable +### Le port de l’API ou de la Console est indisponible -The ports must be numbers from `1` to `65535`, must differ from each other, and must not already be in use. Inspect the default ports in PowerShell: +Les ports doivent être des nombres de `1` à `65535`, doivent être différents l’un de l’autre et ne doivent pas être déjà utilisés. Inspectez les ports par défaut dans PowerShell : ```powershell Get-NetTCPConnection -LocalPort 9000,9001 -ErrorAction SilentlyContinue ``` -Stop the conflicting application or select unused ports, then start RustFS again. +Arrêtez l’application en conflit ou choisissez des ports libres, puis redémarrez RustFS. -### The Console does not open +### La Console ne s’ouvre pas -For Launcher, confirm that **Console Endpoint** is enabled. For the standalone binary, confirm that the process is still running and that `--console-enable true` is present. The current Console default is port `9001`; port `7001` is not used by the current Launcher configuration. +Pour Launcher, confirmez que **Console Endpoint** est activé. Pour le binaire autonome, confirmez que le processus est toujours en cours d’exécution et que `--console-enable true` est présent. Le port par défaut actuel de la Console est `9001`. Le port `7001` n’est pas utilisé par la configuration actuelle de Launcher. -### Launcher reports an external RustFS process +### Launcher signale un processus RustFS externe -Another process is listening on the configured API address, but Launcher did not start it. Stop that process or choose another API port. Launcher cannot stop a process it does not manage. +Un autre processus écoute sur l’adresse API configurée, mais Launcher ne l’a pas démarré. Arrêtez ce processus ou choisissez un autre port d’API. Launcher ne peut pas arrêter un processus qu’il ne gère pas. -### RustFS exits after launch +### RustFS s’arrête après le lancement -In Launcher, inspect both the application and RustFS tabs in the built-in log viewer. For a standalone installation, inspect the PowerShell output. Common causes include a missing data directory, insufficient permissions, or a port conflict. +Dans Launcher, examinez les onglets de l’application et de RustFS dans la visionneuse de journaux intégrée. Pour une installation autonome, examinez la sortie de PowerShell. Les causes courantes sont un répertoire de données manquant, des droits insuffisants ou un conflit de port. -## Next steps +## Étapes suivantes -- Review the [S3 API guide](/administration/protocols/s3) before connecting a client. -- Learn how to [create a bucket](/administration/data/bucket/creation). -- See [status checks](/operations/status-check) for additional verification methods. -- Use the [Linux installation guides](/installation/linux) for a production-oriented deployment. +- Consultez le [guide de l’API S3](/fr/administration/protocols/s3) avant de connecter un client. +- Apprenez à [créer un compartiment](/fr/administration/data/bucket/creation). +- Consultez les [vérifications d’état](/fr/operations/status-check) pour d’autres méthodes de vérification. +- Utilisez les [guides d’installation Linux](/fr/installation/linux) pour un déploiement orienté production. diff --git a/content/fr/integration/tls-configured.md b/content/fr/integration/tls-configured.md index 862913e1d..4b70f1497 100644 --- a/content/fr/integration/tls-configured.md +++ b/content/fr/integration/tls-configured.md @@ -1,22 +1,22 @@ --- -title: "TLS Configuration" -description: "Configure TLS for secure access." +title: "Configuration TLS" +description: "Activez TLS pour l’API S3 et la Console de RustFS sous Linux et Docker." --- -Configure TLS for secure access. Set the `RUSTFS_TLS_PATH` environment variable. +Configurez TLS pour un accès sécurisé. Définissez la variable d’environnement `RUSTFS_TLS_PATH`. ## Configuration -### Prerequisites +### Prérequis -- A running RustFS instance (see [Installation Guide](../installation/index.md)). -- Certificate pair (cert and key). +- Une instance RustFS en cours d’exécution (voir le [guide d’installation](../installation/index.md)). +- Un certificat TLS et la clé privée correspondante. -**Note**: Certificates must be named `rustfs_cert.pem` and `rustfs_key.pem` and placed in the specified path. +**Remarque** : les certificats doivent être nommés `rustfs_cert.pem` et `rustfs_key.pem`, et placés dans le chemin indiqué. ### Linux -1. Edit the RustFS instance configuration file (default `/etc/default/rustfs`) and add the `RUSTFS_TLS_PATH` environment variable. +1. Modifiez le fichier de configuration de l’instance RustFS (par défaut `/etc/default/rustfs`) et ajoutez la variable d’environnement `RUSTFS_TLS_PATH`. ```bash # Edit RustFS instance configuration file @@ -26,19 +26,19 @@ Configure TLS for secure access. Set the `RUSTFS_TLS_PATH` environment variable. RUSTFS_TLS_PATH="/opt/tls" ``` -**Note**: You can specify any path for `RUSTFS_TLS_PATH`, but it must contain both `rustfs_cert.pem` and `rustfs_key.pem`. +**Remarque** : vous pouvez indiquer n’importe quel chemin pour `RUSTFS_TLS_PATH`, mais il doit contenir à la fois `rustfs_cert.pem` et `rustfs_key.pem`. -2. Restart the RustFS instance. +2. Redémarrez l’instance RustFS. ```bash systemctl restart rustfs ``` -TLS now applies to both listeners: the S3 API at `https://rustfs.example.com:9000` and the Console at `https://rustfs.example.com:9001`. +TLS s’applique alors aux deux écouteurs : l’API S3 à l’adresse `https://rustfs.example.com:9000` et la Console à l’adresse `https://rustfs.example.com:9001`. ### Docker -1. Mount the certificate path via `-v` and specify `RUSTFS_TLS_PATH` via `-e`. +1. Montez le chemin des certificats avec `-v` et indiquez `RUSTFS_TLS_PATH` avec `-e`. ```bash docker pull rustfs/rustfs:latest @@ -52,6 +52,10 @@ TLS now applies to both listeners: the S3 API at `https://rustfs.example.com:900 rustfs/rustfs:latest ``` -2. Restart the RustFS instance container, then access the S3 API at `https://rustfs.example.com:9000` and the Console at `https://rustfs.example.com:9001`. +2. Redémarrez le conteneur de l’instance RustFS, puis accédez à l’API S3 à l’adresse `https://rustfs.example.com:9000` et à la Console à l’adresse `https://rustfs.example.com:9001`. -**Note**: Since the RustFS instance container runs as `rustfs` user by default, you need to ensure that the certificate files (`rustfs_key.pem` and `rustfs_cert.pem`) belong to the `rustfs` user, otherwise the RustFS instance will fail to read the certificate files due to permission issues, causing TLS configuration to fail. +:::note[Propriété des fichiers de certificat] + +Le conteneur RustFS s’exécute par défaut sous l’utilisateur `rustfs` (UID `10001`). Assurez-vous que cet utilisateur est propriétaire de `rustfs_key.pem` et de `rustfs_cert.pem`. Sinon, RustFS ne peut pas lire les certificats et le démarrage de TLS échoue. + +::: diff --git a/content/fr/integration/virtual.md b/content/fr/integration/virtual.md index 02a9ac4d5..7d5d2cbc2 100644 --- a/content/fr/integration/virtual.md +++ b/content/fr/integration/virtual.md @@ -1,32 +1,32 @@ --- -title: "Virtual Host Style" -description: "RustFS S3 Virtual Host Style and Path Style configuration." +title: "Requêtes en adressage de type hôte virtuel" +description: "Configurez les URL S3 en adressage de type chemin (path-style) et en adressage de type hôte virtuel pour RustFS." --- -RustFS complies with S3 protocols. S3 supports two request modes: +RustFS prend en charge les deux modes d’adressage des URL S3 : -1. Virtual Host Style -2. Path Style +1. Adressage de type hôte virtuel +2. Adressage de type chemin (path-style) -The difference lies in the bucket name placement. +Les deux modes diffèrent selon l’emplacement du nom du compartiment (bucket) dans l’URL. -## Path Style +## Adressage de type chemin -Path Style is the default. In Path Style, the bucket name follows the endpoint. +L’adressage de type chemin est le mode par défaut. Dans une URL de ce type, le nom du compartiment suit le point de terminaison. -Example (Bucket: `test`, Host: `rustfs.yourdomain.com`): +Exemple (compartiment : `test`, hôte : `rustfs.yourdomain.com`) : ```text http://rustfs.yourdomain.com/test ``` -**Note**: No configuration is required for Path Style. +**Remarque** : aucune configuration n’est requise pour l’adressage de type chemin. -## Virtual Host Style +## Adressage de type hôte virtuel -In Virtual Host Style, the bucket name is part of the domain. +En adressage de type hôte virtuel, le nom du compartiment fait partie du domaine. -Example (Bucket: `test`, Host: `rustfs.yourdomain.com`): +Exemple (compartiment : `test`, hôte : `rustfs.yourdomain.com`) : ```text http://test.rustfs.yourdomain.com/ @@ -34,28 +34,31 @@ http://test.rustfs.yourdomain.com/ ### Configuration -1. **DNS**: Configure wildcard DNS resolution (e.g., `*.rustfs.yourdomain.com` -> Server IP). -2. **Configuration**: Modify the configuration file (Linux: `/etc/default/rustfs`, Docker/K8s: env vars). -3. **Set Domain**: Set `RUSTFS_SERVER_DOMAINS = "rustfs.yourdomain.com"`. -4. **Restart**: Restart the service (`systemctl restart rustfs`). +1. **DNS** : créez un enregistrement DNS générique (par exemple, `*.rustfs.yourdomain.com` → l’adresse IP de votre serveur). +2. **Configuration** : modifiez le fichier de configuration (Linux : `/etc/default/rustfs`, Docker/K8s : variables d’environnement). +3. **Définir le domaine** : définissez `RUSTFS_SERVER_DOMAINS = "rustfs.yourdomain.com"`. +4. **Redémarrage** : redémarrez le service (`systemctl restart rustfs`). -### Port in Domain (Optional) +### Port dans le domaine (facultatif) -Virtual-host routing applies to the S3 API listener (port 9000 by default); RustFS automatically matches `Host` headers that carry the S3 listener's own port. Only when clients reach RustFS through a **different** port (for example via a proxy) do you need to include that port in `RUSTFS_SERVER_DOMAINS`. +Le routage en adressage de type hôte virtuel s’applique à l’écouteur de l’API S3 (port 9000 par défaut) ; RustFS fait automatiquement correspondre les en-têtes `Host` qui portent le port propre à cet écouteur. Vous ne devez inclure ce port dans `RUSTFS_SERVER_DOMAINS` que lorsque les clients joignent RustFS par un port **différent** (par exemple via un proxy). -Example (`rustfs.yourdomain.com:8000`): +Exemple (`rustfs.yourdomain.com:8000`) : ```ini RUSTFS_SERVER_DOMAINS = "rustfs.yourdomain.com:8000" ``` -This ensures that requests like: +Cela garantit que des requêtes comme : ```text http://my-bucket.rustfs.yourdomain.com:8000/ ``` -can be correctly resolved in Virtual Host Style mode. +sont acheminées correctement en adressage de type hôte virtuel. -> ⚠️ Note: The value of `RUSTFS_SERVER_DOMAINS` must exactly match the **Host header** (including the port, if present) used by the client request +:::warning[Faites correspondre l’en-tête Host] +La valeur de `RUSTFS_SERVER_DOMAINS` doit correspondre exactement à l’en-tête `Host` (y compris le port, s’il est présent) envoyé par les clients. + +::: diff --git a/content/fr/operations/cluster-lifecycle.md b/content/fr/operations/cluster-lifecycle.md index 33a8535c6..8c0cc417a 100644 --- a/content/fr/operations/cluster-lifecycle.md +++ b/content/fr/operations/cluster-lifecycle.md @@ -1,40 +1,40 @@ --- -title: "Cluster Lifecycle Operations" -description: "Plan, start, expand, rebalance, decommission, heal, and restart erasure-coded RustFS clusters with verified quorum and storage-class behavior." +title: "Opérations du cycle de vie du cluster" +description: "Planifiez, démarrez, étendez, rééquilibrez, mettez hors service, réparez les données et redémarrez les clusters RustFS à codage d’effacement, avec un quorum et un comportement de classe de stockage vérifiés." --- -This runbook is the operator entry point for erasure-coded RustFS deployments: layout boundaries, storage classes and quorum, zero-parity mode, expansion, rebalancing, decommissioning, healing, drive replacement, and restarts. Every behavior described here was verified against the RustFS source; the upstream runbook in [rustfs/rustfs#7998](https://github.com/rustfs/rustfs/pull/7998) is the change that introduced it. +Ce runbook est le point d’entrée des opérateurs pour les déploiements RustFS avec codage d’effacement : limites de disposition, classes de stockage et quorum, mode à parité nulle, extension, rééquilibrage, mise hors service, réparation des données, remplacement de disque et redémarrages. Chaque comportement décrit ici a été vérifié par rapport au code source de RustFS ; le runbook en amont de [rustfs/rustfs#7998](https://github.com/rustfs/rustfs/pull/7998) est le changement qui l’a introduit. -Related task pages: [Storage Pool Expansion](./scaling/storage-pool-expansion.md), [Data Rebalancing](./scaling/data-rebalancing.md), [Storage Pool Decommission](./scaling/storage-pool-decommission.md), and [Node Healing](./high-availability/node-healing.md). +Pages de tâches associées : [Extension d’un pool de stockage](./scaling/storage-pool-expansion.md), [Rééquilibrage des données](./scaling/data-rebalancing.md), [Mise hors service d’un pool de stockage](./scaling/storage-pool-decommission.md) et [Réparation des données des nœuds](./high-availability/node-healing.md). -## Layout boundaries +## Contraintes de disposition -A pool's endpoint count, set count, drives per set, and position in the pool list are persisted layout. On startup RustFS compares the stored format with the configured drive count and set width and fails permanently with `PoolTopologyMismatch` (or `UnsupportedSnsdExpansion` for a single-drive deployment) instead of migrating. Restore the original endpoints and set width; do not delete `format.json` to get past the error. +Le nombre de points de terminaison d’un pool de stockage (pool), le nombre d’ensembles, le nombre de disques par ensemble et la position dans la liste des pools constituent une disposition persistée. Au démarrage, RustFS compare le format stocké au nombre de disques configuré et à la largeur d’ensemble, puis échoue de façon permanente avec `PoolTopologyMismatch` (ou `UnsupportedSnsdExpansion` pour un déploiement mono-disque) au lieu de migrer. Restaurez les points de terminaison d’origine et la largeur d’ensemble ; ne supprimez pas `format.json` pour passer outre l’erreur. -:::warning[Never do these] +:::warning[Ne faites jamais ceci] -- Overwrite an existing pool with more or fewer endpoints, or change `RUSTFS_ERASURE_SET_DRIVE_COUNT` for an initialized pool. -- Reorder volume arguments or move a drive directory to another slot. -- Delete, copy, or rename object shards, `xl.meta`, or anything under `.rustfs.sys` by hand. -- Treat a manual file copy as data movement. Only rebalance and decommission move objects, under object locks with version re-checks and source cleanup. +- N’écrasez pas un pool existant avec plus ou moins de points de terminaison, et ne modifiez pas `RUSTFS_ERASURE_SET_DRIVE_COUNT` pour un pool initialisé. +- Ne réordonnez pas les arguments de volume et ne déplacez pas un répertoire de disque vers un autre slot. +- Ne supprimez pas, ne copiez pas et ne renommez pas à la main les shards d’objet, `xl.meta`, ni quoi que ce soit sous `.rustfs.sys`. +- Ne considérez pas une copie manuelle de fichiers comme un déplacement de données. Seuls le rééquilibrage et la mise hors service déplacent les objets, sous verrous d’objet, avec revérification des versions et nettoyage de la source. ::: -Runtime roles: +Rôles à l’exécution : -- **Pool** — one endpoint list with persisted layout. Multi-drive sets contain 2 to 16 drives; a single local path is the only single-drive layout. -- **Pool leader** — the first endpoint of a pool. Decommission start, cancel, and clear may be sent to any node; requests are forwarded to the pool leader over authenticated internode RPC. -- **Cluster-wide state** — rebalance and root heal propagate to peers and recover from persisted metadata on restart. +- **Pool** — une liste de points de terminaison avec une disposition persistée. Les ensembles d’effacement multi-disques contiennent de 2 à 16 disques ; un chemin local unique est la seule disposition mono-disque. +- **Leader de pool** — le premier point de terminaison d’un pool. Le démarrage, l’annulation et l’effacement d’une mise hors service peuvent être envoyés à n’importe quel nœud ; les requêtes sont transmises au leader du pool par un RPC authentifié entre nœuds. +- **État à l’échelle du cluster** — le rééquilibrage et la réparation racine des données se propagent aux pairs et se rétablissent depuis les métadonnées persistées au redémarrage. -## Plan and first start +## Planification et premier démarrage -1. Plan endpoints by node, rack, power, and network failure domain. Topology admission is not a high-availability guarantee: a single-node pool loses every shard with its host, and startup logs a `host_failure_data_unavailable` warning for every multi-drive pool. -2. Pick each pool's set width. Pools may differ in width, but each pool must split evenly into sets of one width from 2 to 16 drives; `RUSTFS_ERASURE_SET_DRIVE_COUNT` may pin a width that is already a valid divisor, nothing else. -3. Pick STANDARD and RRS parity per the rules in [Storage classes](#storage-classes-parity-and-quorum), then validate against the narrowest pool, because an explicit parity must fit every pool. -4. Record the full launch command, endpoint order, pool order, set width, and storage-class variables. They must be identical on every node and on every restart. -5. Give RustFS exclusive ownership of every endpoint path. +1. Planifiez les points de terminaison selon les domaines de défaillance de nœud, de baie, d’alimentation et de réseau. L’admission de la topologie n’est pas une garantie de haute disponibilité : un pool mono-nœud perd tous ses shards en même temps que son hôte, et le démarrage journalise un avertissement `host_failure_data_unavailable` pour chaque pool multi-disques. +2. Choisissez la largeur d’ensemble de chaque pool. Les pools peuvent avoir des largeurs différentes, mais chaque pool doit se répartir exactement en ensembles d’une seule largeur, de 2 à 16 disques ; `RUSTFS_ERASURE_SET_DRIVE_COUNT` peut figer une largeur qui est déjà un diviseur valide, et rien d’autre. +3. Choisissez la parité STANDARD et RRS selon les règles de [Classes de stockage, parité et quorum](#classes-de-stockage-parité-et-quorum), puis validez-les sur le pool le plus étroit, car une parité explicite doit tenir dans chaque pool. +4. Notez la commande de lancement complète, l’ordre des points de terminaison, l’ordre des pools, la largeur d’ensemble et les variables de classe de stockage. Elles doivent être identiques sur chaque nœud et à chaque redémarrage. +5. Donnez à RustFS la propriété exclusive de chaque chemin de point de terminaison. -Volumes come from positional arguments or `RUSTFS_VOLUMES`; `rustfs` with no arguments behaves as `rustfs server` with volumes from the environment. Ellipsis expansion follows the MinIO pattern: +Les volumes proviennent des arguments positionnels ou de `RUSTFS_VOLUMES` ; `rustfs` sans argument se comporte comme `rustfs server` avec les volumes issus de l’environnement. L’expansion des ellipses suit le modèle MinIO : ```bash # one pool, four nodes, four drives each: sixteen endpoints @@ -44,35 +44,35 @@ rustfs server http://node{1...4}:9000/data{1...4} rustfs server http://node{1...4}:9000/data{1...4} http://node{5...8}:9000/data{1...4} ``` -With more than one argument, every argument needs an ellipsis; each pool must expand to at least two distinct drive endpoints; a single-drive pool cannot join a multi-pool deployment; a singleton range such as `{3...3}` does not bypass the minimum. +Avec plusieurs arguments, chaque argument doit contenir une ellipse ; chaque pool doit s’étendre en au moins deux points de terminaison de disque distincts ; un pool mono-disque ne peut pas rejoindre un déploiement multi-pool ; une plage singleton telle que `{3...3}` ne contourne pas le minimum. -A storage-class error stops startup before any disk is touched. Startup then initializes local disks, the lock clients, and the format quorum in that order. +Une erreur de classe de stockage interrompt le démarrage avant qu’aucun disque ne soit touché. Le démarrage initialise ensuite les disques locaux, les clients de verrouillage et le quorum de format, dans cet ordre. -## Startup configuration +## Configuration au démarrage -| Variable | Effect | Boundary | +| Variable | Effet | Contraintes | |---|---|---| -| `RUSTFS_ERASURE_SET_DRIVE_COUNT` | Pin the set width | Must be a valid symmetric divisor of the pool, at most 16; cannot change an initialized pool | -| `RUSTFS_STORAGE_CLASS_STANDARD` | STANDARD parity as `EC:` | Validated per pool; affects new writes only | -| `RUSTFS_STORAGE_CLASS_RRS` | RRS parity as `EC:` | Validated per pool; an explicit value fails on a single drive, the persisted default `EC:1` resolves to `0` there | -| `RUSTFS_STORAGE_CLASS_OPTIMIZE` | Accepted for MinIO compatibility | Stored but currently unused: it changes nothing at runtime | -| `RUSTFS_STORAGE_CLASS_INLINE_BLOCK` | Fixed per-shard inline limit (bytesize syntax such as `128KiB`) | Replaces the scaled default in [Inline objects](#inline-objects); values above 128 KiB log a warning | +| `RUSTFS_ERASURE_SET_DRIVE_COUNT` | Fige la largeur d’ensemble | Doit être un diviseur symétrique valide du pool, au plus 16 ; ne peut pas modifier un pool déjà initialisé | +| `RUSTFS_STORAGE_CLASS_STANDARD` | Parité STANDARD sous la forme `EC:` | Validée pour chaque pool ; n’affecte que les nouvelles écritures | +| `RUSTFS_STORAGE_CLASS_RRS` | Parité RRS sous la forme `EC:` | Validée pour chaque pool ; une valeur explicite échoue sur un seul disque, et la valeur persistée par défaut `EC:1` y est résolue en `0` | +| `RUSTFS_STORAGE_CLASS_OPTIMIZE` | Acceptée pour la compatibilité avec MinIO | Stockée mais actuellement inutilisée : elle ne change rien à l’exécution | +| `RUSTFS_STORAGE_CLASS_INLINE_BLOCK` | Limite inline fixe par shard (syntaxe de taille en octets telle que `128KiB`) | Remplace la valeur par défaut proportionnelle des [Objets inline](#objets-inline) ; les valeurs supérieures à 128 KiB produisent un avertissement dans le journal | -An empty `RUSTFS_STORAGE_CLASS_STANDARD` or `RUSTFS_STORAGE_CLASS_RRS` restores the automatic policy and overrides a persisted value. `MINIO_`-prefixed spellings of these keys, of `ERASURE_SET_DRIVE_COUNT`, and of `VOLUMES` are mapped onto the `RUSTFS_` names when the `RUSTFS_` name is unset; when both are set the `RUSTFS_` value wins and the conflict is reported at startup. +Une valeur vide de `RUSTFS_STORAGE_CLASS_STANDARD` ou de `RUSTFS_STORAGE_CLASS_RRS` rétablit la politique automatique et remplace une valeur persistée. Les graphies préfixées par `MINIO_` de ces clés, de `ERASURE_SET_DRIVE_COUNT` et de `VOLUMES` sont reportées sur les noms `RUSTFS_` lorsque le nom `RUSTFS_` n’est pas défini ; lorsque les deux sont définis, la valeur `RUSTFS_` l’emporte et le conflit est signalé au démarrage. -Other data-movement and listing knobs: `RUSTFS_REBALANCE_MAX_ATTEMPTS` (default 3), `RUSTFS_DECOMMISSION_BUCKET_CONCURRENCY` (default cap 4), `RUSTFS_DECOMMISSION_ENTRY_CONCURRENCY` (default cap 8, hard cap 64), and `RUSTFS_LIST_OBJECTS_QUORUM` (default `optimal`; accepts `disk`, `reduced`, `optimal`, `auto`, anything else means `strict`). None of them relaxes object quorum, object locks, or version checks. +Autres réglages de déplacement de données et de listage : `RUSTFS_REBALANCE_MAX_ATTEMPTS` (par défaut 3), `RUSTFS_DECOMMISSION_BUCKET_CONCURRENCY` (plafond par défaut 4), `RUSTFS_DECOMMISSION_ENTRY_CONCURRENCY` (plafond par défaut 8, plafond strict 64) et `RUSTFS_LIST_OBJECTS_QUORUM` (par défaut `optimal` ; accepte `disk`, `reduced`, `optimal`, `auto`, toute autre valeur signifie `strict`). Aucun d’eux n’assouplit le quorum d’objet, les verrous d’objet ni les contrôles de version. -## Storage classes, parity, and quorum +## Classes de stockage, parité et quorum -### Geometry +### Géométrie -Each object is Reed-Solomon coded across the `N` drives of one set into `K` data and `M` parity shards, `N = K + M`; any `K` shards rebuild it. The geometry is stored per object in `xl.meta`, so changing the default later rewrites nothing. Objects hash to a set and shards rotate within it; sets never share a failure budget. +Chaque objet est codé en Reed-Solomon sur les `N` disques d’un ensemble, en `K` shards de données et `M` shards de parité, `N = K + M` ; n’importe quels `K` shards le reconstruisent. La géométrie est stockée par objet dans `xl.meta`, si bien qu’un changement ultérieur de la valeur par défaut ne réécrit rien. Les objets sont répartis par hachage sur un ensemble et les shards tournent à l’intérieur de celui-ci ; les ensembles ne partagent jamais un budget de défaillance. -Default STANDARD parity by set width: 0 for one drive, 1 for 2 to 3, 2 for 4 to 5, 3 for 6 to 7, 4 for 8 to 16. Default RRS parity is 1 (0 on a single drive). +Parité STANDARD par défaut selon la largeur d’ensemble : 0 pour un disque, 1 pour 2 à 3, 2 pour 4 à 5, 3 pour 6 à 7, 4 pour 8 à 16. La parité RRS par défaut est 1 (0 sur un seul disque). -Validation rules: each parity is at most `N/2` for every pool, and STANDARD parity is at least RRS parity only when both are non-zero. There is no minimum, so `EC:0` passes on any width. Only `STANDARD` and `REDUCED_REDUNDANCY` are accepted on PUT, CopyObject, and CreateMultipartUpload; other AWS storage classes return `InvalidStorageClass`. +Règles de validation : chaque parité vaut au plus `N/2` pour chaque pool, et la parité STANDARD est au moins égale à la parité RRS seulement lorsque les deux sont non nulles. Il n’y a pas de minimum, donc `EC:0` est accepté pour toute largeur. Seuls `STANDARD` et `REDUCED_REDUNDANCY` sont acceptés sur PUT, CopyObject et CreateMultipartUpload ; les autres classes de stockage AWS renvoient `InvalidStorageClass`. -### Quorum and capacity +### Quorum et capacité ```text usable capacity ≈ raw × K / N @@ -81,38 +81,38 @@ write quorum = K, or K + 1 when K == M delete markers = N/2 + 1 (majority, both write and vote) ``` -Sixteen drives at `EC:4`: `K = 12`, about 75 percent usable, four failures tolerated, twelve valid shards needed to read. Two drives at `EC:1`: `K = M = 1`, so one drive down still reads but no longer writes. Internal metadata under `.rustfs.sys` is always written with parity `N/2`, regardless of the configured class. +Seize disques avec `EC:4` : `K = 12`, environ 75 pour cent de capacité utile, quatre défaillances tolérées, douze shards valides nécessaires pour lire. Deux disques avec `EC:1` : `K = M = 1`, donc un disque hors service permet encore la lecture, mais plus l’écriture. Les métadonnées internes sous `.rustfs.sys` sont toujours écrites avec la parité `N/2`, quelle que soit la classe configurée. -### Inline objects +### Objets inline -An object is stored inline in `xl.meta` when every shard is at most the per-shard budget. The default budget is `256 KiB / K` capped at 128 KiB per shard, so a wider set does not raise the maximum inline object size; on a versioned bucket the budget is divided by 8. `RUSTFS_STORAGE_CLASS_INLINE_BLOCK` replaces the scaled default with a fixed per-shard limit. Each drive keeps only its own shard inline, so inline data has the same loss semantics as external shards. Compressed or encrypted streams inline only when the stored size is known and within budget. +Un objet est stocké inline dans `xl.meta` lorsque chaque shard est au plus égal au budget par shard. Le budget par défaut est `256 KiB / K`, plafonné à 128 KiB par shard, si bien qu’un ensemble plus large n’augmente pas la taille maximale d’un objet inline ; sur un compartiment (bucket) avec gestion des versions, le budget est divisé par 8. `RUSTFS_STORAGE_CLASS_INLINE_BLOCK` remplace la valeur par défaut proportionnelle par une limite fixe par shard. Chaque disque ne conserve inline que son propre shard, si bien que les données inline ont la même sémantique de perte que les shards externes. Les flux compressés ou chiffrés ne sont mis inline que lorsque la taille stockée est connue et reste dans le budget. -### Write and read paths +### Chemins d’écriture et de lecture -Writes resolve the layout per pool, encode with Reed-Solomon in 1 MiB blocks, write bitrot-protected shards, and commit only after write quorum. A write below quorum is never reported as success. Reads pick the authoritative metadata at read quorum, verify bitrot, decode from at least `K` shards, and fail closed below that; a read that succeeds with missing shards enqueues read-repair. Multipart parts use the object's geometry and write quorum; `CompleteMultipartUpload` re-checks metadata and commit quorum, so an uploaded part is not a committed object. +Les écritures résolvent la disposition par pool, encodent en Reed-Solomon par blocs de 1 MiB, écrivent des shards protégés contre le bitrot et ne valident qu’après le quorum d’écriture. Une écriture sous le quorum n’est jamais signalée comme un succès. Les lectures sélectionnent les métadonnées faisant autorité au quorum de lecture, vérifient le bitrot, décodent à partir d’au moins `K` shards et échouent en mode fermé en deçà ; une lecture qui réussit avec des shards manquants met en file une réparation à la lecture. Les parties d’un chargement partitionné utilisent la géométrie de l’objet et le quorum d’écriture ; `CompleteMultipartUpload` revérifie les métadonnées et le quorum de validation, si bien qu’une partie chargée n’est pas un objet validé. -## Zero parity (EC:0) +## Parité nulle (EC:0) -`EC:0` is accepted for STANDARD, for RRS, or for both, on any set width. It gives raw capacity and no redundancy. +`EC:0` est accepté pour STANDARD, pour RRS, ou pour les deux, quelle que soit la largeur d’ensemble. Il offre la capacité brute et aucune redondance. -:::danger[EC:0 means one drive loss equals set loss] +:::danger[Avec EC:0, la perte d’un disque fait perdre des données sur l’ensemble] -A replaced or wiped drive permanently loses every zero-parity object that had a shard on it, unless a copy exists outside the set. Healing cannot rebuild zero-parity objects: heal reports `no-parity object is unrecoverable` for them. Production deployments should use `EC:1` or higher; `EC:2` or more per set is the usual floor once a set spans more than one node. Use `EC:0` only where an external layer (RAID, replication, backup, or a re-creatable source) owns durability and availability, and only with explicit sign-off. +Un disque remplacé ou effacé perd définitivement chaque objet à parité nulle qui y avait un shard, sauf si une copie existe en dehors de l’ensemble. La réparation des données ne peut pas reconstruire les objets à parité nulle : la réparation signale `no-parity object is unrecoverable` pour ceux-ci. Les déploiements de production devraient utiliser `EC:1` ou plus ; `EC:2` ou davantage par ensemble est le plancher habituel dès qu’un ensemble s’étend sur plus d’un nœud. N’utilisez `EC:0` que là où une couche externe (RAID, réplication, sauvegarde ou source recréable) assure la durabilité et la disponibilité, et seulement avec une validation explicite. ::: -Behavior details: +Détail du comportement : -- **Configuration.** Explicit `EC:0` produces no startup warning — the zero-redundancy warning fires only for automatic zero parity, meaning a single-drive pool. `STANDARD=EC:2` with `RRS=EC:0` is valid because the ordering rule is skipped when either side is zero; only objects written with `x-amz-storage-class: REDUCED_REDUNDANCY` then carry zero-parity semantics. -- **Writes.** Write quorum is `N`: if any drive of the set is unwritable, the write fails with `ErasureWriteQuorum` and nothing is committed. Because a zero-parity shard cannot be rebuilt later, the write path verifies every shard it just wrote against its bitrot hash before commit and refuses to commit a shard that already fails. -- **Reads.** Read quorum is `N`. With any drive of the set offline, HEAD and GET of every zero-parity object in that set fail with `ErasureReadQuorum`. There is no degraded read. -- **Deletes.** Delete markers and version deletes use majority quorum (`N/2 + 1`), so a delete can succeed on a set whose reads and writes are failing. A successful delete is not evidence that the set is healthy. -- **What still works with one drive down.** Bucket operations, `.rustfs.sys` metadata, delete markers, and listings that satisfy the list quorum. Everything else in the set is unavailable, including rebalance and decommission of its objects, which must read all `N` shards. -- **Raising parity later rewrites nothing.** Re-upload or server-side copy each object after the change to re-protect it. +- **Configuration.** Un `EC:0` explicite ne produit aucun avertissement au démarrage — l’avertissement d’absence de redondance ne se déclenche que pour une parité nulle automatique, c’est-à-dire un pool mono-disque. `STANDARD=EC:2` avec `RRS=EC:0` est valide, car la règle d’ordre est ignorée lorsque l’un des deux côtés est nul ; seuls les objets écrits avec `x-amz-storage-class: REDUCED_REDUNDANCY` portent alors la sémantique de parité nulle. +- **Écritures.** Le quorum d’écriture est `N` : si un disque quelconque de l’ensemble n’est pas accessible en écriture, l’écriture échoue avec `ErasureWriteQuorum` et rien n’est validé. Comme un shard à parité nulle ne peut pas être reconstruit plus tard, le chemin d’écriture vérifie chaque shard qu’il vient d’écrire par rapport à son empreinte de bitrot avant la validation, et refuse de valider un shard qui échoue déjà. +- **Lectures.** Le quorum de lecture est `N`. Si un disque quelconque de l’ensemble est hors ligne, les HEAD et GET de chaque objet à parité nulle de cet ensemble échouent avec `ErasureReadQuorum`. Il n’existe pas de lecture dégradée. +- **Suppressions.** Les marqueurs de suppression et les suppressions de versions utilisent le quorum majoritaire (`N/2 + 1`), si bien qu’une suppression peut réussir sur un ensemble dont les lectures et les écritures échouent. Une suppression réussie ne prouve pas que l’ensemble est sain. +- **Ce qui fonctionne encore avec un disque hors service.** Les opérations sur les compartiments, les métadonnées `.rustfs.sys`, les marqueurs de suppression et les listages qui satisfont le quorum de listage. Tout le reste dans l’ensemble est indisponible, y compris le rééquilibrage et la mise hors service de ses objets, qui doivent lire l’ensemble des `N` shards. +- **Augmenter la parité plus tard ne réécrit rien.** Rechargez chaque objet, ou copiez-le côté serveur, après le changement afin de le protéger à nouveau. -## Post-start verification +## Vérification après démarrage -Read-only admin checks: +Contrôles d’administration en lecture seule : ```text GET /rustfs/admin/v3/pools/list @@ -122,27 +122,27 @@ GET /rustfs/admin/v4/cluster/snapshot GET /rustfs/admin/v4/runtime/capabilities ``` -`pool` is a pool command line, or a zero-based index with `by-id=true`. Status queries ignore unknown parameters; mutation queries reject unknown or duplicate parameters and a `by-id` value other than `true` or `false`. +`pool` est une ligne de commande de pool, ou un index commençant à zéro avec `by-id=true`. Les requêtes d’état ignorent les paramètres inconnus ; les requêtes de mutation rejettent les paramètres inconnus ou en double, ainsi qu’une valeur de `by-id` autre que `true` ou `false`. -Confirm: pool count, endpoints per pool, set count and width per pool, local versus remote endpoints, and no topology mismatch. +Vérifiez : le nombre de pools, les points de terminaison par pool, le nombre et la largeur d’ensembles par pool, les points de terminaison locaux et distants, et l’absence d’écart de topologie. -Data-plane checks: write one STANDARD and one RRS object; GET, HEAD, range GET, CopyObject, and a multipart upload; take one drive or node offline within parity and confirm reads continue and writes behave per the quorum table; bring it back and confirm the heal queue drains and bitrot errors stop; confirm every node reports the same pool metadata and cluster snapshot. +Contrôles du plan de données : écrivez un objet STANDARD et un objet RRS ; GET, HEAD, GET par plage, CopyObject et un chargement partitionné ; mettez un disque ou un nœud hors ligne dans la limite de la parité et vérifiez que les lectures continuent et que les écritures se comportent selon le tableau de quorum ; ramenez-le en ligne et vérifiez que la file de réparation des données se vide et que les erreurs de bitrot cessent ; vérifiez que chaque nœud signale les mêmes métadonnées de pool et le même instantané de cluster. -## Expansion +## Extension -An existing pool cannot grow in place. Add a pool: +Un pool existant ne peut pas grandir sur place. Ajoutez un pool : -1. Plan its nodes, drives, and failure domain; each new pool needs at least two drive endpoints and its own valid set layout. -2. Prepare empty, RustFS-exclusive paths on every node. -3. Append the pool to the launch arguments on **every** node, keeping existing pools, their order, endpoints, and set width unchanged. A single-node single-drive deployment cannot expand; migrate through S3 instead. -4. Restart and verify per the checks above. -5. New writes are placed across available pools; old objects stay where they are. To move them, start a rebalance. A restart never rebalances. +1. Planifiez ses nœuds, ses disques et son domaine de défaillance ; chaque nouveau pool a besoin d’au moins deux points de terminaison de disque et de sa propre disposition d’ensembles valide. +2. Préparez, sur chaque nœud, des chemins vides dont RustFS est l’unique propriétaire. +3. Ajoutez le pool aux arguments de lancement sur **chaque** nœud, en conservant les pools existants, leur ordre, leurs points de terminaison et leur largeur d’ensemble inchangés. Un déploiement mono-nœud et mono-disque ne peut pas être étendu ; migrez par S3. +4. Redémarrez et vérifiez selon les contrôles ci-dessus. +5. Les nouvelles écritures sont placées sur les pools disponibles ; les objets existants restent là où ils sont. Pour les déplacer, lancez un rééquilibrage. Un redémarrage ne rééquilibre jamais. -Adding a pool does not add parity to existing objects and does not copy anything. Cross-pool movement is rebalance or decommission only. See [Storage Pool Expansion](./scaling/storage-pool-expansion.md) for a worked example. +L’ajout d’un pool n’ajoute pas de parité aux objets existants et ne copie rien. Le déplacement entre pools ne passe que par le rééquilibrage ou la mise hors service. Voir [Extension d’un pool de stockage](./scaling/storage-pool-expansion.md) pour un exemple concret. -## Rebalance +## Rééquilibrage -Rebalance redistributes objects across pools by usage. Preconditions: more than one pool (a single pool returns `NotImplemented`), no decommission running or conflicting, and no query string on `start` or `stop`. +Le rééquilibrage redistribue les objets entre les pools selon l’utilisation. Conditions préalables : plus d’un pool (un pool unique renvoie `NotImplemented`), aucune mise hors service en cours ou en conflit, et aucune chaîne de requête sur `start` ou `stop`. ```text POST /rustfs/admin/v3/rebalance/start → {"id": ""} @@ -150,13 +150,13 @@ GET /rustfs/admin/v3/rebalance/status POST /rustfs/admin/v3/rebalance/stop ``` -Status reports per-pool `id`, `status`, `stopping`, `used`, `lastError`, `cleanupWarnings`, and `progress` (objects, versions, bytes, remaining buckets, current bucket and object, elapsed, ETA), plus `stoppedAt` and stop-propagation fields. +L’état indique, pour chaque pool, `id`, `status`, `stopping`, `used`, `lastError`, `cleanupWarnings` et `progress` (objets, versions, octets, compartiments restants, compartiment et objet courants, temps écoulé, ETA), ainsi que `stoppedAt` et les champs de propagation de l’arrêt. -Start propagates an admission fence and worker state to peers; a propagation failure rolls back to a terminal state and reports any peer that did not roll back. Stop closes admission, stops local and remote workers, and persists the stopped state. Treat a rebalance as finished only when no pool is active or stopping, `lastError` is empty or explained, `cleanupWarnings` are understood, stop propagation has completed, and migrated objects read from their new pool. Per-pool state lives in `rebalance.bin`; never delete it to unblock a run. See [Data Rebalancing](./scaling/data-rebalancing.md) for the walkthrough. +Le démarrage propage une barrière d’admission et l’état des workers vers les pairs ; un échec de propagation revient à un état terminal et signale tout pair qui n’est pas revenu en arrière. L’arrêt ferme l’admission, arrête les workers locaux et distants et persiste l’état arrêté. Ne considérez un rééquilibrage comme terminé que lorsqu’aucun pool n’est actif ou en cours d’arrêt, que `lastError` est vide ou expliqué, que les `cleanupWarnings` sont comprises, que la propagation de l’arrêt est terminée et que les objets migrés se lisent depuis leur nouveau pool. L’état par pool réside dans `rebalance.bin` ; ne le supprimez jamais pour débloquer une exécution. Voir [Rééquilibrage des données](./scaling/data-rebalancing.md) pour la procédure pas à pas. -## Decommission +## Mise hors service -Operator summary — supported only on multi-pool, non-legacy (ellipsis) deployments; anything else returns `NotImplemented`. A rebalance in progress blocks start. +Résumé pour l’opérateur — prise en charge seulement sur les déploiements multi-pool non historiques (avec ellipse) ; tout autre cas renvoie `NotImplemented`. Un rééquilibrage en cours bloque le démarrage. ```text POST /rustfs/admin/v3/pools/decommission?pool=[,] # by command line @@ -166,17 +166,17 @@ POST /rustfs/admin/v3/pools/cancel?pool=1&by-id=true POST /rustfs/admin/v3/pools/clear?pool=1&by-id=true ``` -- Targets are validated as a batch before anything is persisted: unknown, duplicate, active, queued, or completed targets are rejected; failed or canceled targets must be cleared first unless they hold unresolved listing entries, in which case a new start is the retry path. -- Entry states: `queued` → `active` → `completed`, `failed`, or `canceled`, persisted in `pool.bin`. Startup resumes non-terminal entries and skips terminal predecessors. -- A source pool in any decommission state rejects new ordinary PUTs and new multipart uploads (a staged PUT gets `SlowDown`); existing multipart uploads may drain while the source is non-terminal. -- `clear` removes failed or canceled metadata only and never moves data back. -- Remove a pool from the launch arguments only after its entry is `completed`, free versions and tier ownership have converged, and every node shows the same status. Never detach source drives before that, and never substitute a directory delete for the configuration change. +- Les cibles sont validées en lot avant toute persistance : les cibles inconnues, en double, actives, en file d’attente ou terminées sont rejetées ; les cibles en échec ou annulées doivent d’abord être effacées, sauf si elles contiennent des entrées de listage non résolues, auquel cas un nouveau démarrage est le chemin de nouvelle tentative. +- États d’entrée : `queued` → `active` → `completed`, `failed` ou `canceled`, persistés dans `pool.bin`. Le démarrage reprend les entrées non terminales et ignore les prédécesseurs terminaux. +- Un pool source dans n’importe quel état de mise hors service rejette les nouveaux PUT ordinaires et les nouveaux chargements partitionnés (un PUT préparé reçoit `SlowDown`) ; les chargements partitionnés existants peuvent se vider tant que la source n’est pas terminale. +- `clear` ne retire que les métadonnées en échec ou annulées et ne rapatrie jamais les données. +- Ne retirez un pool des arguments de lancement qu’une fois son entrée à l’état `completed`, une fois que les versions libres et la propriété de niveau ont convergé, et une fois que chaque nœud affiche le même état. Ne détachez jamais les disques sources avant cela, et ne substituez jamais la suppression d’un répertoire au changement de configuration. -See [Storage Pool Decommission](./scaling/storage-pool-decommission.md) for the walkthrough. +Voir [Mise hors service d’un pool de stockage](./scaling/storage-pool-decommission.md) pour la procédure pas à pas. -## Heal and drive replacement +## Réparation des données et remplacement de disque -### Admin heal +### Réparation administrative des données ```text POST /rustfs/admin/v3/heal/ # root: cluster, or one erasure set with pool+set @@ -186,59 +186,59 @@ POST /rustfs/admin/v3/background-heal/status GET /rustfs/admin/v4/heal/replacement-recovery ``` -The JSON body carries `recursive`, `dryRun`, `remove`, `recreate`, `scanMode`, `updateParity`, `nolock`, `readRepair`, `pool`, and `set`. Handler rules: +Le corps JSON porte `recursive`, `dryRun`, `remove`, `recreate`, `scanMode`, `updateParity`, `nolock`, `readRepair`, `pool` et `set`. Règles du gestionnaire : -- a root heal must set `recursive=true` or name both `pool` and `set`; a bucket heal without a prefix is always recursive, and a prefix heal honors `recursive`; -- `readRepair=true` is rejected with `InvalidArgument`; -- `nolock` is accepted on the wire but always forced to `false` — admin heals always take the object namespace lock, so there is no lock bypass; -- `clientToken` correlates start, status, and stop; `forceStart` and `forceStop` are validated against it, and unknown or duplicate query keys are rejected. +- une réparation racine des données doit définir `recursive=true` ou nommer à la fois `pool` et `set` ; une réparation de compartiment sans préfixe est toujours récursive, et une réparation de préfixe respecte `recursive` ; +- `readRepair=true` est rejeté avec `InvalidArgument` ; +- `nolock` est accepté tel qu’il est transmis, mais toujours forcé à `false` — les réparations administratives des données prennent toujours le verrou d’espace de noms d’objet, il n’existe donc pas de contournement du verrou ; +- `clientToken` corrèle le démarrage, l’état et l’arrêt ; `forceStart` et `forceStop` sont validés par rapport à lui, et les clés de requête inconnues ou en double sont rejetées. -Heal selects the authoritative version from quorum metadata and refuses when more shards are missing than parity can rebuild or when the stored geometry does not match the set. It shares the `(bucket, object)` lock with PUT, delete, multipart complete, and data movement. +La réparation des données sélectionne la version faisant autorité à partir des métadonnées de quorum et refuse lorsque plus de shards manquent que la parité ne peut en reconstruire, ou lorsque la géométrie stockée ne correspond pas à l’ensemble. Elle partage le verrou `(bucket, object)` avec PUT, la suppression, la finalisation du chargement partitionné et le déplacement de données. -### Drive replacement +### Remplacement de disque -1. Confirm the affected set still meets read quorum for its objects (impossible at `EC:0`) and record pool index, set index, slot, and the failed disk's UUID from the pool status. -2. Replace the drive at the **same** endpoint and mount path with an empty filesystem owned by RustFS. Do not copy the old drive's directories; a copied `format.json` claims an identity the set already tracks. -3. Bring the node back. The empty drive is not a format-quorum member, so its slot stays offline until the erasure-set heal task writes the format into the original slot and rebuilds the shards — through the recorded automatic replacement intent when startup or the disk scanner observes a changed mount identity, or through an admin erasure-set heal (`POST /rustfs/admin/v3/heal/` with `pool` and `set`). -4. Watch `GET /rustfs/admin/v4/heal/replacement-recovery`, background heal status, disk health, and bitrot counters. An `idle` queue or a readable object is not proof of completion. -5. The replacement is done when recovery reports `completed` for that instance and sampled objects have `xl.meta` and parts on the new drive. +1. Vérifiez que l’ensemble concerné satisfait encore le quorum de lecture pour ses objets (impossible avec `EC:0`) et notez l’index de pool, l’index d’ensemble, le slot et l’UUID du disque en panne à partir de l’état du pool. +2. Remplacez le disque au **même** point de terminaison et au même chemin de montage par un système de fichiers vide dont RustFS est propriétaire. Ne copiez pas les répertoires de l’ancien disque ; un `format.json` copié revendique une identité que l’ensemble suit déjà. +3. Ramenez le nœud en ligne. Le disque vide n’est pas membre du quorum de format, si bien que son slot reste hors ligne jusqu’à ce que la tâche de réparation des données de l’ensemble d’effacement écrive le format dans le slot d’origine et reconstruise les shards — par l’intention de remplacement automatique enregistrée lorsque le démarrage ou l’analyseur de disques observe une identité de montage modifiée, ou par une réparation administrative de l’ensemble d’effacement (`POST /rustfs/admin/v3/heal/` avec `pool` et `set`). +4. Surveillez `GET /rustfs/admin/v4/heal/replacement-recovery`, l’état de la réparation des données en arrière-plan, l’intégrité des disques et les compteurs de bitrot. Une file `idle` ou un objet lisible ne prouve pas que l’opération est terminée. +5. Le remplacement est terminé lorsque la reprise signale `completed` pour cette instance et que les objets échantillonnés ont `xl.meta` et leurs parties sur le nouveau disque. -If a set has lost more drives than its parity, heal cannot rebuild; recover from replication, a remote tier, or backup. See [Node Healing](./high-availability/node-healing.md) for the broader healing model. +Si un ensemble a perdu plus de disques que sa parité, la réparation des données ne peut pas reconstruire ; récupérez les données depuis la réplication, un niveau distant ou une sauvegarde. Voir [Réparation des données des nœuds](./high-availability/node-healing.md) pour le modèle plus large de réparation des données. -## Restart and recovery +## Redémarrage et reprise -- **Ordinary restart.** No topology change in flight, identical arguments on every node, one node at a time. Startup reloads pool metadata, `rebalance.bin`, the decommission queue, and heal recovery records, and resumes workers by leader and owner rules. -- **Rebalance.** Read `/rebalance/status` first. Handle active or stopping pools, `lastError`, cleanup warnings, and stop propagation before deciding to stop or restart. Do not delete `rebalance.bin`. -- **Decommission.** Non-terminal entries resume; failed and canceled entries survive restarts until cleared or retried through the allowed path. -- **Root heal.** A graceful shutdown persists an unfinished cluster heal as `root-heal-.json` under `.rustfs.sys` and replays it with the same task id. Invalid, oversized, or unsupported records move to quarantine prefixes and are skipped with a log line until an operator repairs them. Do not delete quarantine markers or reuse a task id. -- **Unclean shutdown.** When the previous run left its marker behind, the heal manager enqueues a full erasure-set heal for every local set; graceful shutdown clears the marker. +- **Redémarrage ordinaire.** Aucun changement de topologie en cours, arguments identiques sur chaque nœud, un nœud à la fois. Le démarrage recharge les métadonnées de pool, `rebalance.bin`, la file de mise hors service et les enregistrements de reprise de réparation des données, puis reprend les workers selon les règles de leader et de propriétaire. +- **Rééquilibrage.** Lisez d’abord `/rebalance/status`. Traitez les pools actifs ou en cours d’arrêt, `lastError`, les avertissements de nettoyage et la propagation de l’arrêt avant de décider d’arrêter ou de redémarrer. Ne supprimez pas `rebalance.bin`. +- **Mise hors service.** Les entrées non terminales reprennent ; les entrées en échec et annulées survivent aux redémarrages jusqu’à ce qu’elles soient effacées ou retentées par le chemin autorisé. +- **Réparation racine des données.** Un arrêt propre persiste une réparation de cluster inachevée sous le nom `root-heal-.json` dans `.rustfs.sys` et la rejoue avec le même identifiant de tâche. Les enregistrements invalides, trop volumineux ou non pris en charge sont déplacés vers des préfixes de quarantaine et ignorés, avec une ligne de journal, jusqu’à ce qu’un opérateur les répare. Ne supprimez pas les marqueurs de quarantaine et ne réutilisez pas un identifiant de tâche. +- **Arrêt non propre.** Lorsque l’exécution précédente a laissé son marqueur, le gestionnaire de réparation des données met en file une réparation complète de chaque ensemble d’effacement local ; un arrêt propre efface le marqueur. -## Mutual exclusion and prohibited actions +## Exclusion mutuelle et actions interdites -| Operation | With rebalance | With decommission | Notes | +| Opération | Avec un rééquilibrage | Avec une mise hors service | Notes | |---|---|---|---| -| PUT, DELETE, multipart complete | Object lock | Source pool rejects new publication | Never bypass the pool fence | -| Decommission | Rejected while rebalance runs | Serial queue | Leader-only mutation | -| Rebalance | Multi-pool only | Rejected while decommission runs or conflicts | No query parameters | -| Admin heal | Object lock | Repairs data, never changes decommission state | `nolock` is ignored | -| Drive replacement | Cannot change the layout | Avoid on a source pool mid-decommission | Same slot, empty drive | +| PUT, DELETE, finalisation de chargement partitionné | Verrou d’objet | Le pool source refuse les nouvelles publications | Ne contournez jamais la barrière du pool | +| Mise hors service | Rejetée pendant qu’un rééquilibrage s’exécute | File sérielle | Mutation réservée au leader | +| Rééquilibrage | Multi-pool seulement | Rejeté pendant qu’une mise hors service s’exécute ou entre en conflit | Aucun paramètre de requête | +| Réparation administrative des données | Verrou d’objet | Répare les données, ne change jamais l’état de mise hors service | `nolock` est ignoré | +| Remplacement de disque | Ne peut pas modifier la disposition | À éviter sur un pool source en cours de mise hors service | Même slot, disque vide | -:::warning[Prohibited] +:::warning[Interdit] -Do not change launch endpoints while rebalance or decommission runs; do not delete `.rustfs.sys`, `rebalance.bin`, `pool.bin`, or root-heal records; do not run manual heal, file copies, and drive replacement on one pool at the same time; do not treat an HTTP 200 on a start call as completion. +Ne modifiez pas les points de terminaison de lancement pendant qu’un rééquilibrage ou une mise hors service s’exécute ; ne supprimez pas `.rustfs.sys`, `rebalance.bin`, `pool.bin` ni les enregistrements de réparation racine des données ; n’exécutez pas en même temps, sur un même pool, une réparation manuelle des données, des copies de fichiers et un remplacement de disque ; ne considérez pas un HTTP 200 sur un appel de démarrage comme une fin d’opération. ::: -## Checklists +## Listes de contrôle -- **After start or expansion**: identical endpoints and pool order on every node; topology equals the stored format; peers ready; new endpoints unique and RustFS-exclusive; GET, HEAD, range GET, and multipart verified. -- **After rebalance**: no pool active or stopping; `lastError` empty or explained; `cleanupWarnings` handled; stop propagation complete; migrated objects readable. -- **After decommission**: status `completed`; other entries handled by policy; source pool rejects new writes; free versions, tier ownership, and listing entries converged; launch arguments updated on every node before drives are detached. -- **After heal or replacement**: replacement recovery `completed`; slot and UUID correct; heal queue drained; no growing bitrot count; sampled current and historical versions readable; no leftover temporary directories. +- **Après le démarrage ou l’extension** : points de terminaison et ordre des pools identiques sur chaque nœud ; topologie égale au format stocké ; pairs prêts ; nouveaux points de terminaison uniques et exclusifs à RustFS ; GET, HEAD, GET par plage et chargement partitionné vérifiés. +- **Après un rééquilibrage** : aucun pool actif ou en cours d’arrêt ; `lastError` vide ou expliqué ; `cleanupWarnings` traités ; propagation de l’arrêt terminée ; objets migrés lisibles. +- **Après une mise hors service** : état `completed` ; autres entrées traitées selon la politique ; le pool source refuse les nouvelles écritures ; les versions libres, la propriété de niveau et les entrées de listage ont convergé ; arguments de lancement mis à jour sur chaque nœud avant le détachement des disques. +- **Après une réparation des données ou un remplacement** : reprise de remplacement `completed` ; slot et UUID corrects ; file de réparation des données vidée ; pas de compteur de bitrot en croissance ; versions courantes et historiques échantillonnées lisibles ; aucun répertoire temporaire résiduel. -## rc command mapping +## Correspondance des commandes rc -`rc` is the RustFS CLI (see [CLI Client (rc)](./rc.mdx)); its `expand` group is an alias of `rebalance` — there is no server-side expand API. Flags below are the commonly used ones; check `rc admin --help` for the installed version. +`rc` est la CLI RustFS (voir [Client CLI (rc)](./rc.mdx)) ; son groupe `expand` est un alias de `rebalance` — il n’existe pas d’API d’extension côté serveur. Les indicateurs ci-dessous sont d’usage courant ; consultez `rc admin --help` pour la version installée. ```bash rc alias set local http://localhost:9000 @@ -261,7 +261,7 @@ rc admin heal status local --client-token rc admin heal stop local --client-token ``` -| `rc` command | Server route | +| Commande `rc` | Route du serveur | |---|---| | `rc ping` / `rc ready` | `GET /health` / `GET /health/ready` | | `rc admin pool list` / `status` | `GET /rustfs/admin/v3/pools/list` / `GET /rustfs/admin/v3/pools/status` | @@ -270,9 +270,9 @@ rc admin heal stop local --client-token | `rc admin decommission status` | `GET /rustfs/admin/v3/decommission/status` | | `rc admin heal start` / `status` / `stop` | `/rustfs/admin/v3/heal/*`, `POST /rustfs/admin/v3/background-heal/status` | -`rc admin heal start` exposes `--bucket`, `--prefix`, `--scan-mode`, `--remove`, `--recreate`, and `--dry-run`; it does not expose `nolock`, `forceStart`, `forceStop`, `pool`, or `set`. There is no `rc` command for replacement recovery; call `GET /rustfs/admin/v4/heal/replacement-recovery` directly. +`rc admin heal start` expose `--bucket`, `--prefix`, `--scan-mode`, `--remove`, `--recreate` et `--dry-run` ; il n’expose pas `nolock`, `forceStart`, `forceStop`, `pool` ni `set`. Il n’existe pas de commande `rc` pour la reprise après remplacement ; appelez directement `GET /rustfs/admin/v4/heal/replacement-recovery`. -## References +## Références -- Upstream runbook: `docs/operations/cluster-lifecycle-operations.md` in [rustfs/rustfs#7998](https://github.com/rustfs/rustfs/pull/7998) — the source this page is adapted from, verified claim by claim against the RustFS source code. -- [Storage Pool Expansion](./scaling/storage-pool-expansion.md) · [Data Rebalancing](./scaling/data-rebalancing.md) · [Storage Pool Decommission](./scaling/storage-pool-decommission.md) · [Node Healing](./high-availability/node-healing.md) · [CLI Client (rc)](./rc.mdx) +- Runbook en amont : `docs/operations/cluster-lifecycle-operations.md` dans [rustfs/rustfs#7998](https://github.com/rustfs/rustfs/pull/7998) — source dont cette page est adaptée, vérifiée affirmation par affirmation par rapport au code source de RustFS. +- [Extension d’un pool de stockage](./scaling/storage-pool-expansion.md) · [Rééquilibrage des données](./scaling/data-rebalancing.md) · [Mise hors service d’un pool de stockage](./scaling/storage-pool-decommission.md) · [Réparation des données des nœuds](./high-availability/node-healing.md) · [Client CLI (rc)](./rc.mdx) diff --git a/content/fr/operations/credentials.md b/content/fr/operations/credentials.md index 91c4500e7..884a23108 100644 --- a/content/fr/operations/credentials.md +++ b/content/fr/operations/credentials.md @@ -1,46 +1,46 @@ --- -title: "Credential Management" -description: "This article covers configuring RustFS root credentials via environment variables and secret files, rotating them safely, the internode RPC secret, and the MinIO-compatible environment aliases." +title: "Gestion des identifiants" +description: "Configurez et effectuez la rotation des identifiants racine RustFS, définissez le secret RPC entre nœuds et utilisez les alias d’environnement compatibles avec MinIO." --- -## Root Credentials +## Identifiants racine -RustFS reads its root (admin) credential pair from: +RustFS lit sa paire d’identifiants racine (administration) depuis : ```bash RUSTFS_ACCESS_KEY= RUSTFS_SECRET_KEY= ``` -If neither is provided, the server falls back to the built-in default `rustfsadmin` / `rustfsadmin`. +Si aucune des deux n’est fournie, le serveur revient à la valeur intégrée par défaut `rustfsadmin` / `rustfsadmin`. -:::warning[Choose safe root credentials] +:::warning[Choisissez des identifiants racine sûrs] -[AWS Signature Version 4 (SigV4)](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv-signing-elements.html) embeds the access key in a slash-delimited credential scope: +[AWS Signature Version 4 (SigV4)](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv-signing-elements.html) incorpore la clé d’accès dans une portée d’identifiants délimitée par des barres obliques : `////aws4_request` -Do not include `/` in `RUSTFS_ACCESS_KEY`, because it causes the access key and credential scope to be parsed incorrectly. We recommend using only uppercase ASCII letters and digits (`A-Z`, `0-9`), matching the format generated by RustFS. Do not use unmodified Base64 output as an access key; use a separate strong random value for `RUSTFS_SECRET_KEY`. +N’incluez pas `/` dans `RUSTFS_ACCESS_KEY`, car cela fait analyser incorrectement la clé d’accès et la portée d’identifiants. Nous recommandons de n’utiliser que des lettres ASCII majuscules et des chiffres (`A-Z`, `0-9`), conformément au format généré par RustFS. N’utilisez pas une sortie Base64 non modifiée comme clé d’accès ; utilisez une valeur aléatoire forte distincte pour `RUSTFS_SECRET_KEY`. -The default `rustfsadmin` credentials are public and well-known. The container entrypoint prints a warning but still starts. Always set non-default credentials before exposing ports 9000/9001 beyond localhost. Additionally, a multi-node cluster running with an all-default pair **must** set `RUSTFS_RPC_SECRET` (see below) — the server refuses to derive internode RPC auth from the default secret key. +Les identifiants par défaut `rustfsadmin` sont publics et bien connus. Le point d’entrée du conteneur affiche un avertissement, mais démarre tout de même. Définissez toujours des identifiants autres que ceux par défaut avant d’exposer les ports 9000/9001 au-delà de localhost. De plus, un cluster multi-nœuds qui s’exécute avec une paire entièrement par défaut **doit** définir `RUSTFS_RPC_SECRET` (voir ci-dessous) — le serveur refuse de dériver l’authentification RPC entre nœuds à partir de la clé secrète par défaut. ::: -## File-Based Injection (Docker/Kubernetes Secrets) +## Injection par fichier (secrets Docker/Kubernetes) -Instead of putting secrets into the environment, point RustFS at files containing them: +Au lieu de placer les secrets dans l’environnement, indiquez à RustFS des fichiers qui les contiennent : ```bash RUSTFS_ACCESS_KEY_FILE=/run/secrets/rustfs_access_key RUSTFS_SECRET_KEY_FILE=/run/secrets/rustfs_secret_key ``` -Equivalent CLI flags exist (`--access-key-file`, `--secret-key-file`). Rules enforced by the container entrypoint: +Des indicateurs CLI équivalents existent (`--access-key-file`, `--secret-key-file`). Règles appliquées par le point d’entrée du conteneur : -- Only the **first line** of the file is read; surrounding whitespace and CR characters (CRLF-edited files) are trimmed. A file without a trailing newline is valid. -- Setting both the direct variable and the `_FILE` variant for the same credential is a hard error: `Set either RUSTFS_ACCESS_KEY or RUSTFS_ACCESS_KEY_FILE, not both.` -- An empty value, an empty file, or an unreadable file is a hard error (exit 1). -- A file containing the default `rustfsadmin` value triggers the same warning as the direct variable. +- Seule la **première ligne** du fichier est lue ; les blancs environnants et les caractères CR (fichiers édités en CRLF) sont rognés. Un fichier sans saut de ligne final est valide. +- Définir à la fois la variable directe et la variante `_FILE` pour le même identifiant est une erreur bloquante : `Set either RUSTFS_ACCESS_KEY or RUSTFS_ACCESS_KEY_FILE, not both.` +- Une valeur vide, un fichier vide ou un fichier illisible est une erreur bloquante (exit 1). +- Un fichier qui contient la valeur par défaut `rustfsadmin` déclenche le même avertissement que la variable directe. ```yaml title="docker-compose example with secrets" services: @@ -59,60 +59,60 @@ secrets: file: ./secrets/secret_key.txt ``` -## Rotating the Root Credentials +## Rotation des identifiants racine -All nodes of a cluster must run with the **same** root credential pair — internode RPC authentication is derived from it unless `RUSTFS_RPC_SECRET` is set explicitly. +Tous les nœuds d’un cluster doivent s’exécuter avec la **même** paire d’identifiants racine — l’authentification RPC entre nœuds en est dérivée, sauf si `RUSTFS_RPC_SECRET` est défini explicitement. :::note -The step-by-step procedure below is standard operational practice composed from verified building blocks (env/file configuration plus the verified rolling-restart readiness signals); RustFS does not currently document an online root-credential rotation API. +La procédure pas à pas ci-dessous est une pratique opérationnelle standard, composée de blocs vérifiés (configuration par environnement ou par fichier, plus les signaux vérifiés d’état de préparation du redémarrage progressif) ; RustFS ne documente pas actuellement d’API de rotation en ligne des identifiants racine. ::: -1. If you have not already, set an explicit `RUSTFS_RPC_SECRET` (same value on all nodes) **before** the rotation. This decouples internode auth from the credential pair, so the cluster tolerates nodes temporarily running with mixed old/new root credentials during the rolling restart. -2. Update the environment file / secret on **every** node with the new `RUSTFS_ACCESS_KEY` / `RUSTFS_SECRET_KEY` (or the files behind the `_FILE` variants). -3. Restart nodes **one at a time**, waiting for each to return `200` from `GET /health/ready` on port 9000 before restarting the next. -4. Update every client, SDK configuration, and automation that used the old pair. -5. Verify: sign a request with the old credentials and confirm it is rejected. +1. Si ce n’est pas déjà fait, définissez un `RUSTFS_RPC_SECRET` explicite (même valeur sur tous les nœuds) **avant** la rotation. Cela découple l’authentification entre nœuds de la paire d’identifiants, si bien que le cluster tolère des nœuds qui exécutent temporairement un mélange d’anciens et de nouveaux identifiants racine pendant le redémarrage progressif. +2. Mettez à jour le fichier d’environnement ou le secret sur **chaque** nœud avec les nouveaux `RUSTFS_ACCESS_KEY` / `RUSTFS_SECRET_KEY` (ou les fichiers derrière les variantes `_FILE`). +3. Redémarrez les nœuds **un par un**, en attendant que chacun renvoie `200` depuis `GET /health/ready` sur le port 9000 avant de redémarrer le suivant. +4. Mettez à jour chaque client, configuration de SDK et automatisation qui utilisait l’ancienne paire. +5. Vérifiez : signez une requête avec les anciens identifiants et confirmez qu’elle est rejetée. -## RUSTFS_RPC_SECRET (Internode RPC Auth) +## RUSTFS_RPC_SECRET (authentification RPC entre nœuds) -Nodes of a distributed cluster authenticate their internal RPC traffic with a shared secret: +Les nœuds d’un cluster distribué authentifient leur trafic RPC interne avec un secret partagé : -- If `RUSTFS_RPC_SECRET` is set, that value is used directly. Set the **same value on every node**. -- If it is unset, the secret is **derived** (HMAC) from the active access/secret key pair — which is why all nodes must share the same root credentials. -- Derivation **fails closed** when the secret key is the default `rustfsadmin`: a publicly known secret would yield a publicly computable RPC secret that any network peer could use to forge internode signatures. In that configuration internode RPC cannot authenticate until you either set `RUSTFS_RPC_SECRET` or configure a non-default `RUSTFS_SECRET_KEY`. +- Si `RUSTFS_RPC_SECRET` est défini, cette valeur est utilisée directement. Définissez la **même valeur sur chaque nœud**. +- S’il n’est pas défini, le secret est **dérivé** (HMAC) de la paire clé d’accès / clé secrète active — c’est pourquoi tous les nœuds doivent partager les mêmes identifiants racine. +- La dérivation **échoue en mode fermé** lorsque la clé secrète est la valeur par défaut `rustfsadmin` : un secret publiquement connu produirait un secret RPC publiquement calculable, que n’importe quel pair réseau pourrait utiliser pour forger des signatures entre nœuds. Dans cette configuration, le RPC entre nœuds ne peut pas s’authentifier tant que vous ne définissez pas `RUSTFS_RPC_SECRET` ou que vous ne configurez pas un `RUSTFS_SECRET_KEY` autre que celui par défaut. -When to set it explicitly: +Quand le définir explicitement : -- multi-node clusters that (temporarily or otherwise) run with default root credentials; -- before rotating root credentials, to keep internode auth stable during the rollout; -- environments where you want internode auth independent of the S3 root credential lifecycle. +- les clusters multi-nœuds qui s’exécutent (temporairement ou non) avec les identifiants racine par défaut ; +- avant la rotation des identifiants racine, afin de garder l’authentification entre nœuds stable pendant le déploiement ; +- les environnements où vous souhaitez une authentification entre nœuds indépendante du cycle de vie de l’identifiant racine S3. ```bash # Same value on every node RUSTFS_RPC_SECRET= ``` -## Compatibility Aliases +## Alias de compatibilité -For drop-in migration, RustFS accepts credential variables under legacy and MinIO-compatible names when the canonical `RUSTFS_ACCESS_KEY` / `RUSTFS_SECRET_KEY` are not set: +Pour une migration sans renommage, RustFS accepte les variables d’identifiants sous les noms historiques et les noms compatibles avec MinIO lorsque les noms canoniques `RUSTFS_ACCESS_KEY` / `RUSTFS_SECRET_KEY` ne sont pas définis : -| Accepted alias | Canonical variable | +| Alias accepté | Variable canonique | | --- | --- | -| `RUSTFS_ROOT_USER` (legacy) | `RUSTFS_ACCESS_KEY` | -| `RUSTFS_ROOT_PASSWORD` (legacy) | `RUSTFS_SECRET_KEY` | +| `RUSTFS_ROOT_USER` (historique) | `RUSTFS_ACCESS_KEY` | +| `RUSTFS_ROOT_PASSWORD` (historique) | `RUSTFS_SECRET_KEY` | | `MINIO_ROOT_USER` | `RUSTFS_ROOT_USER` → `RUSTFS_ACCESS_KEY` | | `MINIO_ROOT_PASSWORD` | `RUSTFS_ROOT_PASSWORD` → `RUSTFS_SECRET_KEY` | -The `MINIO_` prefix mapping covers a broader allowlist of variables (address, console address, audit webhook settings, and more), applied at startup as "external-prefix compatibility mappings". +La correspondance du préfixe `MINIO_` couvre une liste d’autorisation plus large de variables (adresse, adresse de la Console, paramètres de webhook d’audit, et d’autres), appliquée au démarrage sous la forme de « correspondances de compatibilité à préfixe externe ». :::note -Aliases are deprecated. When one is used, the server logs a one-time warning of the form `Environment variable MINIO_ROOT_USER is deprecated, use RUSTFS_ROOT_USER instead`. Use the `RUSTFS_`-prefixed canonical names in new deployments; the canonical name always wins when both are set. +Les alias sont dépréciés. Lorsqu’un alias est utilisé, le serveur journalise une fois un avertissement de la forme `Environment variable MINIO_ROOT_USER is deprecated, use RUSTFS_ROOT_USER instead`. Utilisez les noms canoniques préfixés par `RUSTFS_` dans les nouveaux déploiements ; le nom canonique l’emporte toujours lorsque les deux sont définis. ::: -## Beyond the Root Credential +## Au-delà de l’identifiant racine -Day-to-day access should not use the root pair. Create scoped users, groups, policies, and service accounts through the console on port 9001 or the IAM admin APIs, and reserve the root credential for administrative operations. See the IAM documentation in the administration section. +L’accès quotidien ne devrait pas utiliser la paire racine. Créez des utilisateurs, des groupes, des politiques et des comptes de service au périmètre limité par la Console sur le port 9001 ou par les API d’administration IAM, et réservez l’identifiant racine aux opérations d’administration. Consultez la documentation IAM dans la section administration. diff --git a/content/fr/operations/event-notifications.md b/content/fr/operations/event-notifications.md index a6162a4f4..2fb422e12 100644 --- a/content/fr/operations/event-notifications.md +++ b/content/fr/operations/event-notifications.md @@ -1,36 +1,36 @@ --- -title: "Event Notifications" -description: "Configure RustFS bucket event notifications and deliver filtered object events to external targets." +title: "Notifications d’événements" +description: "Configurez les notifications d’événements de compartiment RustFS et livrez les événements d’objets filtrés à des cibles externes." --- -RustFS Event Notifications deliver S3 bucket activity to external systems. This guide configures a webhook target, associates it with a bucket, and verifies delivery with AWS CLI. +Les notifications d’événements RustFS transmettent l’activité S3 des compartiments (bucket) vers des systèmes externes. Ce guide configure une cible webhook, l’associe à un compartiment et vérifie la livraison avec AWS CLI. -## Overview +## Vue d’ensemble -An event notification has two independent parts: +Une notification d’événement comporte deux parties indépendantes : -- A **notification target** defines where RustFS sends events. -- A **bucket notification configuration** selects the target, event types, and optional object-key filters for one bucket. +- Une **cible de notification** définit l’endroit où RustFS envoie les événements. +- Une **configuration de notification de compartiment** sélectionne la cible, les types d’événements et les filtres facultatifs de clé d’objet pour un compartiment. -RustFS supports webhook, Kafka, MQTT, MySQL, PostgreSQL, NATS, Redis, AMQP, and Pulsar target families. The webhook workflow below is useful for HTTP services, serverless functions, and integration platforms. +RustFS prend en charge les familles de cibles webhook, Kafka, MQTT, MySQL, PostgreSQL, NATS, Redis, AMQP et Pulsar. Le flux webhook ci-dessous convient aux services HTTP, aux fonctions sans serveur et aux plateformes d’intégration. -Bucket rules use the S3 `PutBucketNotificationConfiguration` and `GetBucketNotificationConfiguration` APIs. RustFS currently accepts queue configurations; AWS SNS topic and Lambda function configurations are not supported. +Les règles de compartiment utilisent les API S3 `PutBucketNotificationConfiguration` et `GetBucketNotificationConfiguration`. RustFS accepte actuellement les configurations de file d’attente ; les configurations de rubrique AWS SNS et de fonction Lambda ne sont pas prises en charge. -Common event families include: +Les familles d’événements courantes sont les suivantes : -| Event family | Example events | +| Famille d’événements | Exemples d’événements | | --- | --- | -| Object creation | `s3:ObjectCreated:Put`, `s3:ObjectCreated:Copy`, `s3:ObjectCreated:CompleteMultipartUpload` | -| Object removal | `s3:ObjectRemoved:Delete`, `s3:ObjectRemoved:DeleteMarkerCreated` | -| Object access | `s3:ObjectAccessed:Get`, `s3:ObjectAccessed:Head` | -| Object tagging | `s3:ObjectTagging:Put`, `s3:ObjectTagging:Delete` | -| Lifecycle and tiering | Expiration, restore, replication, and transition events | +| Création d’objet | `s3:ObjectCreated:Put`, `s3:ObjectCreated:Copy`, `s3:ObjectCreated:CompleteMultipartUpload` | +| Suppression d’objet | `s3:ObjectRemoved:Delete`, `s3:ObjectRemoved:DeleteMarkerCreated` | +| Accès à l’objet | `s3:ObjectAccessed:Get`, `s3:ObjectAccessed:Head` | +| Étiquetage d’objet | `s3:ObjectTagging:Put`, `s3:ObjectTagging:Delete` | +| Cycle de vie et hiérarchisation | Événements d’expiration, de restauration, de réplication et de transition | -Use a wildcard such as `s3:ObjectCreated:*` to subscribe to every event in a family. +Utilisez un caractère générique tel que `s3:ObjectCreated:*` pour vous abonner à tous les événements d’une famille. ## Configuration -Event Notifications are disabled by default. The following environment variables enable the module and create a webhook target named `primary`: +Les notifications d’événements sont désactivées par défaut. Les variables d’environnement suivantes activent le module et créent une cible webhook nommée `primary` : ```bash export RUSTFS_NOTIFY_ENABLE="true" @@ -41,40 +41,40 @@ export RUSTFS_NOTIFY_WEBHOOK_QUEUE_DIR_PRIMARY="/var/lib/rustfs/notify-primary" export RUSTFS_OUTBOUND_ALLOW_ORIGINS="https://events.example.com" ``` -Restart RustFS after changing environment-managed targets. The target name is the lowercase form of the environment-variable suffix, so `_PRIMARY` creates `primary`. Use the target ARN `arn:rustfs:sqs:us-east-1:primary:webhook` in the bucket configuration. +Redémarrez RustFS après avoir modifié des cibles gérées par des variables d’environnement. Le nom de la cible est la forme en minuscules du suffixe de la variable d’environnement : `_PRIMARY` crée donc `primary`. Utilisez l’ARN de cible `arn:rustfs:sqs:us-east-1:primary:webhook` dans la configuration du compartiment. -RustFS sends a `HEAD` health check to the endpoint origin's root path, such as `https://events.example.com/`, and sends JSON `POST` requests to the complete configured endpoint. The origin must respond to `HEAD`, while delivery requests must return a successful HTTP status. Allow the RustFS service account to write to the queue directory. +RustFS envoie un contrôle d’intégrité `HEAD` vers le chemin racine de l’origine du point de terminaison, par exemple `https://events.example.com/`, et envoie des requêtes `POST` JSON vers le point de terminaison configuré complet. L’origine doit répondre à `HEAD`, tandis que les requêtes de livraison doivent renvoyer un statut HTTP réussi. Autorisez le compte de service RustFS à écrire dans le répertoire de file d’attente. -### Webhook settings +### Réglages du webhook -Use the same `_PRIMARY` suffix on all settings for this target: +Utilisez le même suffixe `_PRIMARY` pour tous les réglages de cette cible : -| Variable | Purpose | +| Variable | Rôle | | --- | --- | -| `RUSTFS_NOTIFY_WEBHOOK_ENDPOINT_PRIMARY` | HTTP or HTTPS delivery endpoint | -| `RUSTFS_NOTIFY_WEBHOOK_AUTH_TOKEN_PRIMARY` | Bearer token sent in the `Authorization` header | -| `RUSTFS_NOTIFY_WEBHOOK_QUEUE_DIR_PRIMARY` | Directory for queued deliveries | -| `RUSTFS_NOTIFY_WEBHOOK_QUEUE_LIMIT_PRIMARY` | Maximum number of queued events | -| `RUSTFS_NOTIFY_WEBHOOK_CLIENT_CERT_PRIMARY` | Client certificate for mutual TLS (mTLS) | -| `RUSTFS_NOTIFY_WEBHOOK_CLIENT_KEY_PRIMARY` | Private key paired with the client certificate | -| `RUSTFS_NOTIFY_WEBHOOK_CLIENT_CA_PRIMARY` | Certificate authority used to verify the receiver | -| `RUSTFS_NOTIFY_WEBHOOK_SKIP_TLS_VERIFY_PRIMARY` | Disable server certificate verification | +| `RUSTFS_NOTIFY_WEBHOOK_ENDPOINT_PRIMARY` | Point de terminaison de livraison HTTP ou HTTPS | +| `RUSTFS_NOTIFY_WEBHOOK_AUTH_TOKEN_PRIMARY` | Jeton Bearer envoyé dans l’en-tête `Authorization` | +| `RUSTFS_NOTIFY_WEBHOOK_QUEUE_DIR_PRIMARY` | Répertoire de la file d’attente des livraisons | +| `RUSTFS_NOTIFY_WEBHOOK_QUEUE_LIMIT_PRIMARY` | Nombre maximal d’événements en file d’attente | +| `RUSTFS_NOTIFY_WEBHOOK_CLIENT_CERT_PRIMARY` | Certificat client pour le TLS mutuel (mTLS) | +| `RUSTFS_NOTIFY_WEBHOOK_CLIENT_KEY_PRIMARY` | Clé privée associée au certificat client | +| `RUSTFS_NOTIFY_WEBHOOK_CLIENT_CA_PRIMARY` | Autorité de certification utilisée pour vérifier le récepteur | +| `RUSTFS_NOTIFY_WEBHOOK_SKIP_TLS_VERIFY_PRIMARY` | Désactive la vérification du certificat du serveur | -:::warning[Keep certificate verification enabled] +:::warning[Conservez la vérification des certificats] -Do not enable `RUSTFS_NOTIFY_WEBHOOK_SKIP_TLS_VERIFY_PRIMARY` in production. Configure `RUSTFS_NOTIFY_WEBHOOK_CLIENT_CA_PRIMARY` when the receiver uses a private certificate authority. If you use mTLS, provide both the client certificate and private key. +N’activez pas `RUSTFS_NOTIFY_WEBHOOK_SKIP_TLS_VERIFY_PRIMARY` en production. Configurez `RUSTFS_NOTIFY_WEBHOOK_CLIENT_CA_PRIMARY` lorsque le récepteur utilise une autorité de certification privée. Si vous utilisez mTLS, fournissez à la fois le certificat client et la clé privée. ::: -For all target families and target-specific keys, see [Environment Variables](/reference/environment-variables#event--audit-targets). +Pour toutes les familles de cibles et les clés propres à chaque cible, consultez les [variables d’environnement](/fr/reference/environment-variables#cibles-dévénements-et-daudit). -## Usage +## Utilisation -The following example sends creation and removal events for `.dat` objects under `uploads/` to the `primary` webhook. +L’exemple suivant envoie les événements de création et de suppression des objets `.dat` situés sous `uploads/` vers le webhook `primary`. -### Configure the bucket rule +### Configurer la règle du compartiment -Create the notification configuration: +Créez la configuration de notification : ```json title="notification.json" { @@ -99,7 +99,7 @@ Create the notification configuration: } ``` -Apply it to `my-bucket` with [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html): +Appliquez-la à `my-bucket` avec l’[AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) : ```bash aws --endpoint-url http://localhost:9000 \ @@ -109,9 +109,9 @@ aws --endpoint-url http://localhost:9000 \ --notification-configuration file://notification.json ``` -Saving a bucket rule does not prove that its target exists or is online. Confirm that the module and target are enabled, the receiver answers health checks, and a test object operation produces a delivery. +L’enregistrement d’une règle de compartiment ne prouve pas que sa cible existe ou qu’elle est en ligne. Confirmez que le module et la cible sont activés, que le récepteur répond aux contrôles d’intégrité et qu’une opération de test sur un objet produit une livraison. -Read the active configuration: +Lisez la configuration active : ```bash aws --endpoint-url http://localhost:9000 \ @@ -120,13 +120,13 @@ aws --endpoint-url http://localhost:9000 \ --bucket my-bucket ``` -Prefix and suffix filters are case-sensitive and are combined with AND logic. A rule can contain at most one prefix and one suffix filter. +Les filtres de préfixe et de suffixe sont sensibles à la casse et se combinent selon une logique ET. Une règle peut contenir au plus un filtre de préfixe et un filtre de suffixe. -### Manage rules with rc +### Gérer les règles avec rc -The `rc` client can add, list, and remove bucket notification rules. It does not configure the notification module or create the underlying webhook, broker, or database target; configure those first through environment variables or the Console. +Le client `rc` peut ajouter, lister et supprimer des règles de notification de compartiment. Il ne configure pas le module de notification et ne crée pas la cible webhook, le courtier ou la base de données sous-jacents ; configurez-les d’abord au moyen de variables d’environnement ou de la Console. -Add creation and removal events for the `primary` target: +Ajoutez les événements de création et de suppression pour la cible `primary` : ```bash rc bucket event add \ @@ -135,13 +135,13 @@ rc bucket event add \ --event put,delete ``` -List the active rules: +Listez les règles actives : ```bash rc --json bucket event list rustfs/my-bucket ``` -Remove every rule associated with that target ARN: +Supprimez toutes les règles associées à cet ARN de cible : ```bash rc bucket event remove \ @@ -149,11 +149,11 @@ rc bucket event remove \ arn:rustfs:sqs:us-east-1:primary:webhook ``` -The current `rc bucket event add` command does not expose prefix or suffix filter options. Use AWS CLI when the rule must filter object keys. +La commande actuelle `rc bucket event add` n’expose pas d’options de filtre de préfixe ou de suffixe. Utilisez AWS CLI lorsque la règle doit filtrer les clés d’objet. -### Trigger and inspect events +### Déclencher et inspecter les événements -Upload and remove a matching object: +Chargez un objet correspondant, puis supprimez-le : ```bash printf 'hello from RustFS\n' > hello.txt @@ -167,7 +167,7 @@ aws --endpoint-url http://localhost:9000 \ s3 rm s3://my-bucket/uploads/hello.dat ``` -The webhook receives an S3-compatible JSON envelope. Important fields include the event name, bucket, object key, size, ETag, and request identifiers: +Le webhook reçoit une enveloppe JSON compatible avec S3. Les champs importants sont le nom de l’événement, le compartiment, la clé d’objet, la taille, l’ETag et les identifiants de requête : ```json { @@ -184,13 +184,13 @@ The webhook receives an S3-compatible JSON envelope. Important fields include th } ``` -Decode the object key as URL-encoded data before using it. Consumers should also be idempotent: queued delivery provides store-and-forward recovery, but a receiver can observe the same event more than once. +Décodez la clé d’objet comme une donnée encodée pour l’URL avant de l’utiliser. Les consommateurs devraient aussi être idempotents : la livraison en file d’attente assure une reprise par stockage puis retransmission (store-and-forward), mais un récepteur peut observer le même événement plus d’une fois. -### Replace or remove rules +### Remplacer ou supprimer des règles -`PutBucketNotificationConfiguration` replaces the complete notification configuration for the bucket. Include every rule that you want to retain when updating it. +`PutBucketNotificationConfiguration` remplace l’intégralité de la configuration de notification du compartiment. Lorsque vous la mettez à jour, incluez toutes les règles que vous souhaitez conserver. -Remove all rules by applying an empty configuration: +Supprimez toutes les règles en appliquant une configuration vide : ```bash aws --endpoint-url http://localhost:9000 \ @@ -200,6 +200,6 @@ aws --endpoint-url http://localhost:9000 \ --notification-configuration '{}' ``` -## Next steps +## Étapes suivantes -Configure [Audit Targets](/security-compliance/audit-logs) when you need request-level security and compliance records instead of bucket-scoped object events. Review [Observability](/operations/observability) to monitor the RustFS service. \ No newline at end of file +Configurez les [cibles d’audit](/fr/security-compliance/audit-logs) lorsque vous avez besoin d’enregistrements de sécurité et de conformité au niveau des requêtes, plutôt que d’événements d’objets limités à un compartiment. Consultez [Observabilité](/fr/operations/observability) pour superviser le service RustFS. diff --git a/content/fr/operations/high-availability/index.md b/content/fr/operations/high-availability/index.md index d274c255a..f8db393ee 100644 --- a/content/fr/operations/high-availability/index.md +++ b/content/fr/operations/high-availability/index.md @@ -1,7 +1,7 @@ --- -title: "High Availability" -description: "Review RustFS site replication and node recovery guidance." +title: "Haute disponibilité" +description: "Consultez les guides RustFS de réplication de site et de reprise des nœuds." --- -- [Site Replication](./site-replication.md) -- [Node Healing](./node-healing.md) \ No newline at end of file +- [Réplication de site](./site-replication.md) +- [Réparation des données des nœuds](./node-healing.md) diff --git a/content/fr/operations/high-availability/node-healing.md b/content/fr/operations/high-availability/node-healing.md index ef7bbd8f9..9d08e4a5e 100644 --- a/content/fr/operations/high-availability/node-healing.md +++ b/content/fr/operations/high-availability/node-healing.md @@ -1,52 +1,52 @@ --- -title: "Node Healing" -description: "Recover failed RustFS nodes and disks, monitor automatic healing, and run bounded manual heal tasks with rc." +title: "Réparation des données des nœuds" +description: "Récupérez les nœuds et les disques RustFS en panne, surveillez la réparation automatique des données et exécutez avec rc des tâches manuelles de réparation bornées." --- -RustFS healing reconstructs missing or inconsistent erasure-coded data from the healthy shards that remain in a storage set. Use this workflow after restoring an unavailable node, replacing a failed disk, or investigating scanner and heal alerts. +La réparation des données RustFS reconstitue les données à codage d’effacement manquantes ou incohérentes à partir des shards sains qui restent dans un ensemble de stockage. Utilisez ce flux après avoir restauré un nœud indisponible, remplacé un disque en panne ou examiné des alertes du scanner et de la réparation des données. -Healing is a cluster storage operation. It is different from [site replication](/operations/high-availability/site-replication), which copies data and identity configuration between independent RustFS deployments. +La réparation des données est une opération de stockage du cluster. Elle diffère de la [réplication de site](/fr/operations/high-availability/site-replication), qui copie les données et la configuration d’identité entre des déploiements RustFS indépendants. -:::warning[Healing is not a backup] +:::warning[La réparation des données n’est pas une sauvegarde] -RustFS can reconstruct data only while enough healthy shards remain in the affected erasure set. Healing cannot recover an object after failures exceed the set's available redundancy, and it does not protect against intentional deletion or application-level corruption. Maintain independent backups or replication according to your recovery requirements. +RustFS ne peut reconstituer des données que tant qu’il reste assez de shards sains dans l’ensemble d’effacement concerné. La réparation des données ne peut pas récupérer un objet lorsque les défaillances dépassent la redondance disponible de l’ensemble, et elle ne protège ni contre une suppression intentionnelle ni contre une corruption au niveau de l’application. Conservez des sauvegardes ou une réplication indépendantes, selon vos exigences de reprise. ::: -## How healing works +## Fonctionnement de la réparation des données -RustFS coordinates several healing sources through the cluster heal queue: +RustFS coordonne plusieurs sources de réparation des données par la file de réparation du cluster : -- `autoHeal`: The automatic disk scanner detects disks that are unformatted or have returned after an outage and queues erasure-set healing. -- `scanner`: The background data scanner can queue object and bucket healing when it finds inconsistent storage state. -- `readRepair`: Read-repair paths can submit work discovered while serving requests. -- `internal`: Internal recovery paths can submit system-initiated work. -- `admin`: Administrators can submit a recursive, bucket, or prefix heal with `rc admin heal start`. +- `autoHeal` : le scanner automatique de disques détecte les disques non formatés ou revenus après une interruption et met en file la réparation des données de l’ensemble d’effacement. +- `scanner` : le scanner de données en arrière-plan peut mettre en file la réparation des données d’un objet ou d’un compartiment (bucket) lorsqu’il trouve un état de stockage incohérent. +- `readRepair` : les chemins de réparation à la lecture peuvent soumettre du travail découvert pendant le service des requêtes. +- `internal` : les chemins de reprise internes peuvent soumettre du travail initié par le système. +- `admin` : les administrateurs peuvent soumettre une réparation des données récursive, de compartiment ou de préfixe avec `rc admin heal start`. -Automatic disk healing runs at low priority. The `healOperations` status object uses these source names to separate queued, active, and retrying work. +La réparation automatique des disques s’exécute à faible priorité. L’objet d’état `healOperations` utilise ces noms de source pour séparer le travail en file, actif et en nouvel essai. -:::note[Reconstruction consumes cluster resources] +:::note[La reconstitution consomme des ressources du cluster] -Healing reads healthy shards and writes reconstructed data. Deep scans add read and checksum work. Monitor client latency, disk utilization, available capacity, and the heal queue while recovery is active. +La réparation des données lit les shards sains et écrit les données reconstituées. Les analyses approfondies ajoutent des lectures et des calculs d’empreinte. Surveillez la latence des clients, l’utilisation des disques, la capacité disponible et la file de réparation des données pendant que la reprise est active. ::: -## Requirements +## Conditions requises -Before recovering a node or disk, prepare: +Avant de récupérer un nœud ou un disque, préparez : -- A RustFS deployment that still has enough healthy shards to reconstruct the affected data. -- Stable node addresses and the original configured storage mount paths. -- Replacement storage with capacity appropriate for the affected erasure set. -- The RustFS [`rc`](/operations/rc) client on a secured administration host. -- Administrative credentials that permit cluster information, scanner, and heal operations. -- A maintenance window when replacing hardware or running a deep recursive scan. +- Un déploiement RustFS qui dispose encore d’assez de shards sains pour reconstituer les données concernées. +- Des adresses de nœud stables et les chemins de montage de stockage configurés à l’origine. +- Un stockage de remplacement dont la capacité convient à l’ensemble d’effacement concerné. +- Le client RustFS [`rc`](/fr/operations/rc) sur un hôte d’administration sécurisé. +- Des identifiants d’administration qui autorisent les opérations d’information de cluster, de scanner et de réparation des données. +- Une fenêtre de maintenance lorsque vous remplacez du matériel ou exécutez une analyse récursive approfondie. -Record the failed node, pool, set, disk endpoint, mount path, and file-system UUID before changing hardware. Do not remove additional disks from the same erasure set while recovery is incomplete. +Notez le nœud en panne, le pool, l’ensemble, le point de terminaison du disque, le chemin de montage et l’UUID du système de fichiers avant de modifier le matériel. Ne retirez pas d’autres disques du même ensemble d’effacement tant que la reprise n’est pas terminée. -## 1. Identify the failed component +## 1. Identifier le composant en panne -Configure an `rc` alias if you do not already have one: +Configurez un alias `rc` si vous n’en avez pas déjà un : ```bash rc alias set rustfs https://rustfs.example.com:9000 \ @@ -54,7 +54,7 @@ rc alias set rustfs https://rustfs.example.com:9000 \ --region us-east-1 --bucket-lookup path ``` -Check cluster readiness, topology, storage health, and heal activity: +Vérifiez l’état de préparation du cluster, la topologie, l’intégrité du stockage et l’activité de réparation des données : ```bash rc ready rustfs @@ -64,35 +64,35 @@ rc admin scanner status rustfs rc admin heal status rustfs ``` -Readiness can fail while the cluster is degraded. Use the administrative information commands to identify which node or disk is unavailable and note its pool and erasure-set location. +L’état de préparation peut échouer alors que le cluster est dégradé. Utilisez les commandes d’information d’administration pour identifier le nœud ou le disque indisponible et notez son pool ainsi que l’emplacement de son ensemble d’effacement. -For machine-readable output, request JSON: +Pour une sortie lisible par une machine, demandez le JSON : ```bash rc --json admin info storage rustfs rc --json admin heal status rustfs ``` -The aggregate heal status reports runtime state, queued and active tasks, retrying work, request sources, priorities, and available progress counters. A zero-length queue does not prove that an offline disk has been replaced or that every object is recoverable; correlate it with storage topology and readiness. +L’état agrégé de réparation des données indique l’état d’exécution, les tâches en file et actives, le travail en nouvel essai, les sources de requête, les priorités et les compteurs de progression disponibles. Une file de longueur nulle ne prouve pas qu’un disque hors ligne a été remplacé ni que chaque objet est récupérable ; corrélez-la avec la topologie de stockage et l’état de préparation. -## 2. Restore the node or disk +## 2. Restaurer le nœud ou le disque -Correct the underlying failure before starting a manual heal. +Corrigez la défaillance sous-jacente avant de lancer une réparation manuelle des données. -For a node outage: +Pour une interruption de nœud : -1. Restore the node's configured network identity and connectivity to every other RustFS node on the S3 API port, normally `9000`. -2. Mount the original data disks at their configured paths. -3. Confirm that the RustFS process uses the same storage endpoint configuration as the rest of the cluster. -4. Start RustFS and verify that the node rejoins the cluster. +1. Restaurez l’identité réseau configurée du nœud et sa connectivité vers chaque autre nœud RustFS sur le port de l’API S3, normalement `9000`. +2. Montez les disques de données d’origine à leurs chemins configurés. +3. Vérifiez que le processus RustFS utilise la même configuration de points de terminaison de stockage que le reste du cluster. +4. Démarrez RustFS et vérifiez que le nœud rejoint le cluster. -For a failed disk: +Pour un disque en panne : -1. Stop the RustFS process on the affected node before removing or remounting storage. -2. Replace the failed device and prepare its file system according to [Disk Preparation](/installation/requirement/disk-preparation). -3. Mount the replacement at the exact path used by the failed disk and update `/etc/fstab` with its file-system UUID. -4. Verify the mount, file-system type, ownership, and available capacity before starting RustFS. -5. Start RustFS and confirm that the disk appears in the expected pool and erasure set. +1. Arrêtez le processus RustFS sur le nœud concerné avant de retirer ou de remonter le stockage. +2. Remplacez le périphérique en panne et préparez son système de fichiers selon [Préparation des disques](/fr/installation/requirement/disk-preparation). +3. Montez le remplacement au chemin exact utilisé par le disque en panne et mettez à jour `/etc/fstab` avec l’UUID de son système de fichiers. +4. Vérifiez le montage, le type de système de fichiers, le propriétaire et la capacité disponible avant de démarrer RustFS. +5. Démarrez RustFS et vérifiez que le disque apparaît dans le pool et l’ensemble d’effacement attendus. ```bash findmnt /data/rustfs0 @@ -100,15 +100,15 @@ df -hT /data/rustfs0 rc admin info storage rustfs ``` -:::warning[Do not reuse stale storage blindly] +:::warning[Ne réutilisez pas à l’aveugle un stockage obsolète] -Confirm the identity and contents of every device before mounting it at a RustFS data path. Do not copy internal metadata between disks, combine multiple configured endpoints on one replacement file system, or mount a replacement over a path that still contains required data. +Confirmez l’identité et le contenu de chaque périphérique avant de le monter sur un chemin de données RustFS. Ne copiez pas les métadonnées internes d’un disque à l’autre, ne regroupez pas plusieurs points de terminaison configurés sur un seul système de fichiers de remplacement, et ne montez pas un remplacement sur un chemin qui contient encore des données requises. ::: -## 3. Monitor automatic healing +## 3. Surveiller la réparation automatique des données -After the node or replacement disk is online, RustFS can detect the recovery candidate and queue erasure-set healing. Check both storage state and aggregate heal activity: +Une fois le nœud ou le disque de remplacement en ligne, RustFS peut détecter le candidat à la reprise et mettre en file la réparation des données de l’ensemble d’effacement. Vérifiez à la fois l’état du stockage et l’activité agrégée de réparation des données : ```bash rc admin info storage rustfs @@ -116,24 +116,24 @@ rc admin heal status rustfs rc admin scanner status rustfs ``` -In JSON output, watch these groups: +Dans la sortie JSON, surveillez ces groupes : -| Field | Meaning | +| Champ | Signification | | --- | --- | -| `state` | Heal runtime state, such as `active` or `idle`. | -| `healQueueLength` | Total work waiting in the heal queue. | -| `healActiveTasks` | Total heal tasks currently running. | -| `healOperations` | Queue, active, and retry counts grouped by source (`scanner`, `admin`, `autoHeal`, `internal`, and `readRepair`) and priority. | -| `progress` | Available totals for objects scanned, healed, failed, and bytes processed. | -| `clusterStatusComplete` | Whether the response includes every expected node. | +| `state` | État d’exécution de la réparation des données, par exemple `active` ou `idle`. | +| `healQueueLength` | Travail total en attente dans la file de réparation des données. | +| `healActiveTasks` | Nombre total de tâches de réparation des données en cours d’exécution. | +| `healOperations` | Comptes de file, d’activité et de nouvel essai, regroupés par source (`scanner`, `admin`, `autoHeal`, `internal` et `readRepair`) et par priorité. | +| `progress` | Totaux disponibles pour les objets analysés, réparés, en échec et les octets traités. | +| `clusterStatusComplete` | Indique si la réponse inclut chaque nœud attendu. | -Do not treat `idle` as successful recovery by itself. Confirm that the replacement disk is online, no heal failures remain, the cluster is ready, and representative objects are readable. +Ne considérez pas `idle` à lui seul comme une reprise réussie. Vérifiez que le disque de remplacement est en ligne, qu’il ne reste aucun échec de réparation des données, que le cluster est à l’état de préparation et que des objets représentatifs sont lisibles. -## 4. Run a targeted manual heal +## 4. Exécuter une réparation manuelle ciblée des données -Use a manual task when automatic recovery does not cover the required path or when you need an explicit scan after an incident. Start with the narrowest bucket or prefix that contains affected data. +Utilisez une tâche manuelle lorsque la reprise automatique ne couvre pas le chemin requis, ou lorsque vous avez besoin d’une analyse explicite après un incident. Commencez par le compartiment ou le préfixe le plus étroit qui contient les données concernées. -Preview a bucket heal without applying changes: +Prévisualisez une réparation de compartiment sans appliquer de modifications : ```bash rc admin heal start rustfs \ @@ -142,7 +142,7 @@ rc admin heal start rustfs \ --dry-run ``` -Run the targeted heal after reviewing the preview: +Exécutez la réparation ciblée après avoir examiné la prévisualisation : ```bash rc admin heal start rustfs \ @@ -150,7 +150,7 @@ rc admin heal start rustfs \ --scan-mode normal ``` -Limit the task to an object prefix when the affected scope is known: +Limitez la tâche à un préfixe d’objet lorsque le périmètre concerné est connu : ```bash rc admin heal start rustfs \ @@ -159,19 +159,19 @@ rc admin heal start rustfs \ --scan-mode deep ``` -`normal` is the default scan mode. Use `deep` when you need deeper data verification and have planned for the additional disk I/O. Omit `--bucket` only when a recursive scan of all buckets is necessary. +`normal` est le mode d’analyse par défaut. Utilisez `deep` lorsque vous avez besoin d’une vérification plus approfondie des données et que vous avez prévu les E/S disque supplémentaires. N’omettez `--bucket` que lorsqu’une analyse récursive de tous les compartiments est nécessaire. -:::warning[Review mutation options separately] +:::warning[Examinez séparément les options de mutation] -The `--remove` option removes dangling objects or parts, and `--recreate` requests recreation of missing data. Do not add either option to an incident command until you have inspected the affected storage state, tested with `--dry-run`, and confirmed the intended result. +L’option `--remove` retire les objets ou parties orphelins, et `--recreate` demande la recréation des données manquantes. N’ajoutez aucune de ces options à une commande d’incident tant que vous n’avez pas inspecté l’état du stockage concerné, testé avec `--dry-run` et confirmé le résultat attendu. ::: -## 5. Track the manual task +## 5. Suivre la tâche manuelle -Every manual heal returns a `clientToken`. Save it with the incident record because status and stop operations for that task require the token. +Chaque réparation manuelle des données renvoie un `clientToken`. Conservez-le avec le dossier d’incident, car les opérations d’état et d’arrêt de cette tâche exigent le jeton. -For a bucket or prefix task, pass the original target and token: +Pour une tâche de compartiment ou de préfixe, transmettez la cible d’origine et le jeton : ```bash rc admin heal status rustfs \ @@ -180,23 +180,23 @@ rc admin heal status rustfs \ --client-token ``` -For a recursive task started without `--bucket`, use the token alone: +Pour une tâche récursive démarrée sans `--bucket`, utilisez le jeton seul : ```bash rc admin heal status rustfs --client-token ``` -The tokenless command remains the cluster-wide background summary: +La commande sans jeton reste le résumé d’arrière-plan à l’échelle du cluster : ```bash rc admin heal status rustfs ``` -Task status can include scanned, healed, and failed item totals, bytes processed, the current item, scan mode, start time, and last update. Investigate failed items rather than relying only on the task's aggregate state. +L’état de la tâche peut inclure les totaux d’éléments analysés, réparés et en échec, les octets traités, l’élément courant, le mode d’analyse, l’heure de début et la dernière mise à jour. Examinez les éléments en échec plutôt que de vous fier seulement à l’état agrégé de la tâche. -## 6. Validate recovery +## 6. Valider la reprise -After the heal queue drains, verify the cluster and the recovered data path: +Une fois la file de réparation des données vidée, vérifiez le cluster et le chemin de données récupéré : ```bash rc ready rustfs @@ -205,20 +205,20 @@ rc admin info storage rustfs rc admin heal status rustfs ``` -Read representative objects from affected buckets and versions. For a known test object: +Lisez des objets représentatifs dans les compartiments et versions concernés. Pour un objet de test connu : ```bash rc object stat rustfs/my-bucket/hello.txt rc object copy rustfs/my-bucket/hello.txt ./hello-recovered.txt ``` -Compare the downloaded object with an independent checksum or trusted source when one is available. A successful object read validates that request, not every object or every shard in the cluster. +Comparez l’objet téléchargé à une empreinte indépendante ou à une source de confiance lorsqu’il en existe une. Une lecture d’objet réussie valide cette requête, et non chaque objet ni chaque shard du cluster. -Continue monitoring storage health and heal failures after the cluster becomes ready. Preserve the incident timeline, failed-device information, task token, and final status output for review. +Continuez à surveiller l’intégrité du stockage et les échecs de réparation des données une fois que le cluster a atteint l’état de préparation. Conservez la chronologie de l’incident, les informations sur le périphérique en panne, le jeton de tâche et la sortie d’état finale pour la revue. -## 7. Stop a manual heal +## 7. Arrêter une réparation manuelle des données -Stop only the task you have identified. For a bucket or prefix task, include the original target and token: +N’arrêtez que la tâche que vous avez identifiée. Pour une tâche de compartiment ou de préfixe, incluez la cible d’origine et le jeton : ```bash rc admin heal stop rustfs \ @@ -227,44 +227,44 @@ rc admin heal stop rustfs \ --client-token ``` -Stop a recursive token-scoped task with: +Arrêtez une tâche récursive limitée à un jeton avec : ```bash rc admin heal stop rustfs --client-token ``` -The tokenless stop command targets the global background heal operation: +La commande d’arrêt sans jeton vise l’opération globale de réparation des données en arrière-plan : ```bash rc admin heal stop rustfs ``` -Use the global stop only when continued background work creates a larger operational risk. Stopping healing leaves recovery incomplete; record the reason and confirm how healing will resume before closing the incident. +N’utilisez l’arrêt global que lorsque la poursuite du travail en arrière-plan crée un risque opérationnel plus important. Arrêter la réparation des données laisse la reprise incomplète ; notez la raison et confirmez comment la réparation des données reprendra avant de clore l’incident. -## Troubleshooting +## Dépannage -### The replacement disk is not healing +### Le disque de remplacement ne fait pas l’objet d’une réparation des données -Confirm that the replacement is mounted at the configured endpoint and appears in `rc admin info storage`. Check the RustFS logs for disk identification, formatting, permission, or queue-admission failures. Also confirm that healing services are initialized with `rc admin heal status`. +Vérifiez que le remplacement est monté au point de terminaison configuré et qu’il apparaît dans `rc admin info storage`. Consultez les journaux RustFS pour les échecs d’identification de disque, de formatage, de permission ou d’admission dans la file. Vérifiez aussi que les services de réparation des données sont initialisés avec `rc admin heal status`. -### Heal status is partial +### L’état de réparation des données est partiel -If `clusterStatusComplete` is false, one or more expected nodes did not contribute to the aggregate response. Restore node-to-node connectivity and check each node's storage and process health before trusting cluster totals. +Si `clusterStatusComplete` vaut false, un ou plusieurs nœuds attendus n’ont pas contribué à la réponse agrégée. Restaurez la connectivité de nœud à nœud et vérifiez l’intégrité du stockage et du processus de chaque nœud avant de faire confiance aux totaux du cluster. -### The queue remains active +### La file reste active -Compare queued, active, and retrying work by source. A growing `autoHeal` count points to disk or erasure-set recovery; scanner work points to background discovery; admin work belongs to manually submitted tasks. Check disk latency, free capacity, node connectivity, and repeated item failures before starting another task. +Comparez le travail en file, actif et en nouvel essai par source. Un compte `autoHeal` qui augmente indique une reprise de disque ou d’ensemble d’effacement ; le travail du scanner indique une découverte en arrière-plan ; le travail admin appartient aux tâches soumises manuellement. Vérifiez la latence des disques, la capacité libre, la connectivité des nœuds et les échecs répétés d’éléments avant de lancer une autre tâche. -### Objects cannot be reconstructed +### Les objets ne peuvent pas être reconstitués -Stop additional maintenance on the affected erasure set. Preserve the remaining disks and logs, then determine whether enough healthy shards survive. Repeated deep scans cannot reconstruct data when the available redundancy has already been exceeded. +Arrêtez toute maintenance supplémentaire sur l’ensemble d’effacement concerné. Préservez les disques restants et les journaux, puis déterminez si assez de shards sains subsistent. Des analyses approfondies répétées ne peuvent pas reconstituer des données lorsque la redondance disponible a déjà été dépassée. -### A manual task cannot be queried +### Une tâche manuelle ne peut pas être interrogée -Use the `clientToken` returned by `heal start`. Bucket and prefix tasks must be queried with the same `--bucket` and `--prefix` target used at start; a recursive root task uses the token without a bucket. +Utilisez le `clientToken` renvoyé par `heal start`. Les tâches de compartiment et de préfixe doivent être interrogées avec les mêmes cibles `--bucket` et `--prefix` que celles utilisées au démarrage ; une tâche racine récursive utilise le jeton sans compartiment. -## Next steps +## Étapes suivantes -- Review [Status Check](/operations/status-check) for readiness, cluster, and capacity checks. -- Configure [Observability](/operations/observability) to alert on disk health and sustained recovery work. -- Review [Site Replication](/operations/high-availability/site-replication) when recovery requires an independent RustFS deployment. +- Consultez [Contrôle d’état](/fr/operations/status-check) pour les contrôles d’état de préparation, de cluster et de capacité. +- Configurez l’[Observabilité](/fr/operations/observability) pour alerter sur l’intégrité des disques et un travail de reprise prolongé. +- Consultez la [Réplication de site](/fr/operations/high-availability/site-replication) lorsque la reprise exige un déploiement RustFS indépendant. diff --git a/content/fr/operations/high-availability/site-replication.md b/content/fr/operations/high-availability/site-replication.md index fb7ff8a1f..c45d77d7f 100644 --- a/content/fr/operations/high-availability/site-replication.md +++ b/content/fr/operations/high-availability/site-replication.md @@ -1,51 +1,51 @@ --- -title: "Site Replication" -description: "Configure and operate multi-site RustFS replication with the rc command-line client." +title: "Réplication de site" +description: "Configurez et exploitez la réplication multi-site de RustFS avec le client en ligne de commande rc." --- -Site replication links two or more independent **RustFS** deployments. It synchronizes buckets, object versions, and supported identity and access management (IAM) data across the linked sites. Use this workflow when applications need to write to separate RustFS sites while keeping their storage and identity configuration aligned. +La réplication de site relie deux déploiements **RustFS** indépendants ou plus. Elle synchronise les compartiments (bucket), les versions d’objets et les données prises en charge de gestion des identités et des accès (IAM) entre les sites liés. Utilisez ce flux lorsque des applications doivent écrire sur des sites RustFS distincts tout en gardant leur configuration de stockage et d’identité alignée. -Site replication is different from [bucket replication](/administration/data/bucket/replication). Bucket replication is a directional rule between selected buckets; site replication establishes a broader relationship between complete RustFS deployments. +La réplication de site diffère de la [réplication de compartiment](/fr/administration/data/bucket/replication). La réplication de compartiment est une règle directionnelle entre des compartiments sélectionnés ; la réplication de site établit une relation plus large entre des déploiements RustFS complets. -:::warning[Plan recovery separately] +:::warning[Planifiez la reprise séparément] -Site replication is asynchronous. A successful write at one site does not confirm that another site already has the replicated version. Site replication also does not provide DNS failover, traffic routing, or application recovery orchestration. +La réplication de site est asynchrone. Une écriture réussie sur un site ne confirme pas qu’un autre site possède déjà la version répliquée. La réplication de site ne fournit pas non plus de basculement DNS, de routage de trafic ni d’orchestration de reprise applicative. ::: -## Replicated resources +## Ressources répliquées -RustFS site replication synchronizes these resource families across linked sites: +La réplication de site RustFS synchronise ces familles de ressources entre les sites liés : -- Buckets and object versions, including delete markers. -- Bucket metadata required by the site replication workflow. -- IAM users, groups, policies, policy mappings, and service accounts. +- Les compartiments et les versions d’objets, y compris les marqueurs de suppression. +- Les métadonnées de compartiment requises par le flux de réplication de site. +- Les utilisateurs, groupes, politiques IAM, associations de politiques et comptes de service. -Bucket versioning support is required at every participating site. RustFS configures the site relationship and the underlying replication targets when you add the sites. +La prise en charge de la gestion des versions des compartiments est requise sur chaque site participant. RustFS configure la relation entre sites et les cibles de réplication sous-jacentes lorsque vous ajoutez les sites. -## Requirements +## Conditions requises -Before linking sites, prepare: +Avant de lier les sites, préparez : -- Two or more independent RustFS deployments running a release that exposes the site replication Admin API. -- A unique, stable S3 API endpoint for each deployment. -- Bidirectional network connectivity between every site endpoint on the S3 API port, normally `9000`. -- Trusted TLS certificates for production endpoints. -- The RustFS [`rc`](/operations/rc) client on a secured administration host. -- Root administrative credentials for every participating site. -- Compatible bucket-versioning support on every site. +- Deux déploiements RustFS indépendants ou plus, exécutant une version qui expose l’API d’administration de réplication de site. +- Un point de terminaison d’API S3 unique et stable pour chaque déploiement. +- Une connectivité réseau bidirectionnelle entre chaque point de terminaison de site sur le port de l’API S3, normalement `9000`. +- Des certificats TLS de confiance pour les points de terminaison de production. +- Le client RustFS [`rc`](/fr/operations/rc) sur un hôte d’administration sécurisé. +- Des identifiants racine d’administration pour chaque site participant. +- Une prise en charge compatible de la gestion des versions des compartiments sur chaque site. -Use empty test sites when first validating the workflow. Before linking existing sites, inventory bucket names, object-lock settings, IAM identities, and policies for conflicts. +Utilisez des sites de test vides lors de la première validation du flux. Avant de lier des sites existants, inventoriez les noms de compartiments, les paramètres de verrouillage d’objet, les identités IAM et les politiques afin de détecter les conflits. -:::warning[Protect administrative credentials] +:::warning[Protégez les identifiants d’administration] -The `add` operation resolves every peer endpoint and root credential from your local `rc` alias store. Run it only from a trusted administration host, restrict access to the local `rc` configuration, and do not place credentials in shell history, logs, or screenshots. +L’opération `add` résout chaque point de terminaison pair et chaque identifiant racine à partir de votre magasin local d’alias `rc`. Ne l’exécutez que depuis un hôte d’administration de confiance, limitez l’accès à la configuration locale de `rc` et ne placez pas les identifiants dans l’historique du shell, les journaux ou les captures d’écran. ::: -## 1. Configure site aliases +## 1. Configurer les alias de site -Configure one alias for each site. Replace the endpoint and credentials for both deployments: +Configurez un alias pour chaque site. Remplacez le point de terminaison et les identifiants des deux déploiements : ```bash rc alias set site1 https://site1.example.com:9000 \ @@ -57,7 +57,7 @@ rc alias set site2 https://site2.example.com:9000 \ --region us-east-1 --bucket-lookup path ``` -Check that both sites are reachable and ready: +Vérifiez que les deux sites sont joignables et à l’état de préparation : ```bash rc ready site1 @@ -66,48 +66,48 @@ rc admin info cluster site1 rc admin info cluster site2 ``` -Use HTTPS endpoints in production. If a site uses a private certificate authority, install that authority in the administration host's trust store before continuing. +Utilisez des points de terminaison HTTPS en production. Si un site utilise une autorité de certification privée, installez cette autorité dans le magasin de confiance de l’hôte d’administration avant de continuer. -:::warning[Loopback endpoints are for tests only] +:::warning[Les points de terminaison de bouclage sont réservés aux tests] -RustFS rejects loopback replication targets by default as an outbound-request security control. The server option `RUSTFS_REPLICATION_ALLOW_LOOPBACK_TARGET=true` exists only for single-host development and automated tests. Never enable it in production. +RustFS rejette par défaut les cibles de réplication en bouclage, comme contrôle de sécurité des requêtes sortantes. L’option serveur `RUSTFS_REPLICATION_ALLOW_LOOPBACK_TARGET=true` n’existe que pour le développement sur un seul hôte et les tests automatisés. Ne l’activez jamais en production. ::: -## 2. Link the sites +## 2. Lier les sites -Submit all participating aliases in one command. The first alias receives the administration request: +Soumettez tous les alias participants dans une seule commande. Le premier alias reçoit la requête d’administration : ```bash rc admin replicate add site1 site2 ``` -To create a relationship with more than two sites, include every alias in the initial command: +Pour créer une relation avec plus de deux sites, incluez chaque alias dans la commande initiale : ```bash rc admin replicate add site1 site2 site3 ``` -Do not run separate pairwise `add` commands to build the same multi-site relationship. +N’exécutez pas des commandes `add` deux à deux séparées pour construire la même relation multi-site. -Inspect the resulting configuration from at least two sites: +Inspectez la configuration obtenue depuis au moins deux sites : ```bash rc admin replicate info site1 rc admin replicate info site2 ``` -The output identifies each linked deployment by its deployment ID, site name, and endpoint. Save the deployment IDs because edit and resync operations can select a site by exact deployment ID or exact unique name. +La sortie identifie chaque déploiement lié par son ID de déploiement, son nom de site et son point de terminaison. Conservez les ID de déploiement, car les opérations de modification et de resynchronisation peuvent sélectionner un site par ID de déploiement exact ou par nom unique exact. -## 3. Check replication status +## 3. Vérifier l’état de la réplication -Request the default bucket and IAM summaries: +Demandez les résumés par défaut des compartiments et de l’IAM : ```bash rc admin replicate status site1 ``` -Select specific status sections when investigating an issue: +Sélectionnez des sections d’état précises lorsque vous examinez un problème : ```bash rc admin replicate status site1 --buckets @@ -115,11 +115,11 @@ rc admin replicate status site1 --users --groups --policies rc admin replicate status site1 --metrics ``` -Check status from each site. A healthy response from `site1` confirms that site's view of the relationship; it does not replace checking the other deployments. +Vérifiez l’état depuis chaque site. Une réponse saine de `site1` confirme la vue de ce site sur la relation ; elle ne remplace pas la vérification des autres déploiements. -## 4. Validate data and IAM replication +## 4. Valider la réplication des données et de l’IAM -Create a test bucket and object at the first site: +Créez un compartiment et un objet de test sur le premier site : ```bash rc bucket create site1/my-bucket @@ -127,20 +127,20 @@ printf 'hello rustfs\n' > hello.txt rc object copy hello.txt site1/my-bucket/hello.txt ``` -Poll the second site until the object appears: +Interrogez le second site jusqu’à ce que l’objet apparaisse : ```bash rc object stat site2/my-bucket/hello.txt rc object copy site2/my-bucket/hello.txt ./hello-from-site2.txt ``` -Compare the downloaded content before treating the data path as validated: +Comparez le contenu téléchargé avant de considérer le chemin de données comme validé : ```bash cmp hello.txt hello-from-site2.txt ``` -For IAM validation, create a temporary user and attach a test policy at one site, then inspect the user and policy mapping at another site. Remove the temporary identity after validation: +Pour la validation IAM, créez un utilisateur temporaire et attachez une politique de test sur un site, puis inspectez l’utilisateur et l’association de politique sur un autre site. Retirez l’identité temporaire après la validation : ```bash rc admin user add site1 replication-test @@ -152,17 +152,17 @@ rc admin policy entities site2 --user replication-test rc admin user rm site1 replication-test ``` -Use a randomly generated temporary secret and do not reuse an application or administrator credential. +Utilisez un secret temporaire généré aléatoirement et ne réutilisez pas un identifiant d’application ou d’administrateur. -## 5. Edit a site +## 5. Modifier un site -Use `edit` when a linked site's name, endpoint, or TLS trust settings change. First inspect the current deployment IDs and names: +Utilisez `edit` lorsque le nom, le point de terminaison ou les paramètres de confiance TLS d’un site lié changent. Inspectez d’abord les ID de déploiement et les noms actuels : ```bash rc admin replicate info site1 ``` -Rename a site: +Renommez un site : ```bash rc admin replicate edit site1 \ @@ -171,7 +171,7 @@ rc admin replicate edit site1 \ --yes ``` -Replace an endpoint and keep TLS verification enabled: +Remplacez un point de terminaison et laissez la vérification TLS activée : ```bash rc admin replicate edit site1 \ @@ -181,7 +181,7 @@ rc admin replicate edit site1 \ --yes ``` -For a private certificate authority, provide a certificate-only PEM bundle: +Pour une autorité de certification privée, fournissez un lot PEM contenant seulement des certificats : ```bash rc admin replicate edit site1 \ @@ -190,7 +190,7 @@ rc admin replicate edit site1 \ --yes ``` -Clear a previously configured custom CA when the endpoint moves to a certificate trusted by the system trust store: +Effacez une AC personnalisée déjà configurée lorsque le point de terminaison passe à un certificat approuvé par le magasin de confiance du système : ```bash rc admin replicate edit site1 \ @@ -200,11 +200,11 @@ rc admin replicate edit site1 \ --yes ``` -The endpoint must be an HTTP or HTTPS origin without a path, query, fragment, or embedded credentials. Prefer a trusted certificate over `--skip-tls-verify`. +Le point de terminaison doit être une origine HTTP ou HTTPS sans chemin, requête, fragment ni identifiants incorporés. Préférez un certificat de confiance à `--skip-tls-verify`. -## 6. Resynchronize a site +## 6. Resynchroniser un site -Use resynchronization after repairing a site that was unavailable or when status checks show missing replicated state. Start a resync for one exact peer: +Utilisez la resynchronisation après avoir réparé un site qui était indisponible, ou lorsque les contrôles d’état montrent un état répliqué manquant. Démarrez une resynchronisation pour un pair exact : ```bash rc admin replicate resync start site1 \ @@ -212,14 +212,14 @@ rc admin replicate resync start site1 \ --yes ``` -Read the last persisted resync snapshot: +Lisez le dernier instantané de resynchronisation persisté : ```bash rc admin replicate resync status site1 \ --site ``` -Cancel the selected resync only when you have confirmed it should stop: +N’annulez la resynchronisation sélectionnée que lorsque vous avez confirmé qu’elle devrait s’arrêter : ```bash rc admin replicate resync cancel site1 \ @@ -227,23 +227,23 @@ rc admin replicate resync cancel site1 \ --yes ``` -:::warning[Resync status is not live progress] +:::warning[L’état de resynchronisation n’est pas une progression en direct] -The current RustFS resync status endpoint returns the persisted result of the most recent start or cancel request. It does not inspect live workers, and its lifecycle state is reported as unknown. Start operations can overlap, cancellation is not idempotent, and a network timeout can leave the mutation outcome unknown. After an ambiguous result, inspect `replicate info`, `replicate status`, and the target data before issuing another mutation. +Le point de terminaison actuel d’état de resynchronisation RustFS renvoie le résultat persisté de la requête de démarrage ou d’annulation la plus récente. Il n’inspecte pas les workers en cours, et son état de cycle de vie est signalé comme inconnu. Les opérations de démarrage peuvent se chevaucher, l’annulation n’est pas idempotente, et un délai réseau peut laisser le résultat de la mutation inconnu. Après un résultat ambigu, inspectez `replicate info`, `replicate status` et les données cibles avant d’émettre une autre mutation. ::: -## 7. Remove site replication +## 7. Retirer la réplication de site -Removing a site changes the replication relationship. It does not provide an application cutover or prove that every queued object has arrived. Check status and preserve any required data before proceeding. +Retirer un site modifie la relation de réplication. Cela ne fournit pas de bascule applicative et ne prouve pas que chaque objet en file est arrivé. Vérifiez l’état et préservez les données requises avant de continuer. -Remove one named site: +Retirez un site nommé : ```bash rc admin replicate remove site1 --site site2-dr ``` -Repeat `--site` to remove multiple named sites in one request: +Répétez `--site` pour retirer plusieurs sites nommés dans une seule requête : ```bash rc admin replicate remove site1 \ @@ -251,41 +251,41 @@ rc admin replicate remove site1 \ --site site3 ``` -Dissolve the complete site replication relationship: +Dissolvez la relation complète de réplication de site : ```bash rc admin replicate remove site1 --all ``` -Verify the result from the remaining deployments: +Vérifiez le résultat depuis les déploiements restants : ```bash rc admin replicate info site1 rc admin replicate status site1 ``` -## Troubleshooting +## Dépannage -### A peer endpoint is rejected +### Un point de terminaison pair est rejeté -Confirm that the endpoint is a reachable HTTP or HTTPS origin and does not resolve to loopback. For production, make every site reachable through its stable network address and keep the loopback override disabled. +Vérifiez que le point de terminaison est une origine HTTP ou HTTPS joignable et qu’il ne se résout pas en bouclage. En production, rendez chaque site joignable par son adresse réseau stable et laissez le contournement de bouclage désactivé. -### TLS validation fails +### La validation TLS échoue -Confirm that the endpoint certificate contains the peer hostname and that the issuing certificate authority is trusted. Use `replicate edit --ca-cert` for a private CA bundle. Do not make `--skip-tls-verify` the permanent fix. +Vérifiez que le certificat du point de terminaison contient le nom d’hôte du pair et que l’autorité de certification émettrice est approuvée. Utilisez `replicate edit --ca-cert` pour un lot d’AC privée. Ne faites pas de `--skip-tls-verify` le correctif permanent. -### A mutation times out +### Une mutation expire -Do not immediately repeat `add`, `edit`, `resync start`, `resync cancel`, or `remove`. The server may have applied the change before the client lost the response. Inspect the relationship and data first: +Ne répétez pas immédiatement `add`, `edit`, `resync start`, `resync cancel` ou `remove`. Le serveur peut avoir appliqué le changement avant que le client ne perde la réponse. Inspectez d’abord la relation et les données : ```bash rc admin replicate info site1 rc admin replicate status site1 ``` -### Replication falls behind +### La réplication prend du retard -Check the site status and metrics from every deployment, then verify endpoint reachability and storage readiness: +Vérifiez l’état du site et les métriques depuis chaque déploiement, puis vérifiez la joignabilité des points de terminaison et l’état de préparation du stockage : ```bash rc admin replicate status site1 --metrics @@ -293,10 +293,10 @@ rc ready site1 rc ready site2 ``` -Application writes can outpace asynchronous replication. Do not infer a recovery point objective from a single status sample; measure lag under your workload and alert on sustained backlog. +Les écritures applicatives peuvent aller plus vite que la réplication asynchrone. N’inférez pas un objectif de point de reprise à partir d’un seul échantillon d’état ; mesurez le retard sous votre charge et alertez en cas d’arriéré prolongé. -## Next steps +## Étapes suivantes -- Review [Bucket Replication](/administration/data/bucket/replication) when you need directional replication for selected buckets instead of a complete site relationship. -- Monitor [cluster status and readiness](/operations/status-check) at every site. -- Review the [`rc` command guide](/operations/rc) and keep the client aligned with the RustFS server release. \ No newline at end of file +- Consultez la [Réplication de compartiment](/fr/administration/data/bucket/replication) lorsque vous avez besoin d’une réplication directionnelle pour des compartiments sélectionnés plutôt que d’une relation de site complète. +- Surveillez l’[état du cluster et l’état de préparation](/fr/operations/status-check) sur chaque site. +- Consultez le [guide des commandes `rc`](/fr/operations/rc) et maintenez le client aligné sur la version du serveur RustFS. diff --git a/content/fr/operations/index.md b/content/fr/operations/index.md index a7bd20cca..f908762e3 100644 --- a/content/fr/operations/index.md +++ b/content/fr/operations/index.md @@ -1,16 +1,16 @@ --- -title: "Operations & Observability" -description: "Operate, monitor, scale, upgrade, and troubleshoot RustFS deployments." +title: "Opérations et observabilité" +description: "Exploitez, surveillez, mettez à l’échelle, mettez à niveau et dépannez les déploiements RustFS." --- -Use this section to keep RustFS deployments healthy through upgrades, scaling, availability planning, monitoring, and incident response. +Utilisez cette section pour garder les déploiements RustFS en bon état de fonctionnement grâce aux mises à niveau, à la mise à l’échelle, à la planification de la disponibilité, à la supervision et à la réponse aux incidents. -## Operational areas +## Domaines opérationnels -- [Upgrade](./upgrade/index.md) covers binary, container, and Kubernetes upgrades. -- [Scaling](./scaling/index.md) covers storage expansion, rebalancing, and decommissioning. -- [High Availability](./high-availability/index.md) covers node healing and site replication. -- [Cluster Lifecycle Operations](./cluster-lifecycle.md) covers layout boundaries, quorum, expansion, rebalancing, decommissioning, healing, and restarts in one runbook. -- [Observability](./observability.md) covers metrics, logs, traces, monitoring integrations, and alert signals. -- [Status Check](./status-check.md) covers network ports, health probes, cluster status, and storage capacity checks. -- [Event Notifications](./event-notifications.md) covers bucket event targets. \ No newline at end of file +- [Mise à niveau](./upgrade/index.md) couvre les mises à niveau du binaire, du conteneur et de Kubernetes. +- [Mise à l’échelle](./scaling/index.md) couvre l’extension du stockage, le rééquilibrage et la mise hors service. +- [Haute disponibilité](./high-availability/index.md) couvre la réparation des données des nœuds et la réplication de site. +- [Opérations du cycle de vie du cluster](./cluster-lifecycle.md) couvre, dans un seul runbook, les limites de disposition, le quorum, l’extension, le rééquilibrage, la mise hors service, la réparation des données et les redémarrages. +- [Observabilité](./observability.md) couvre les métriques, les journaux, les traces, les intégrations de supervision et les signaux d’alerte. +- [Contrôle d’état](./status-check.md) couvre les ports réseau, les sondes de contrôle d’intégrité, l’état du cluster et les contrôles de capacité de stockage. +- [Notifications d’événements](./event-notifications.md) couvre les cibles d’événements de compartiment (bucket). diff --git a/content/fr/operations/observability.md b/content/fr/operations/observability.md index b0531ca3a..470541b73 100644 --- a/content/fr/operations/observability.md +++ b/content/fr/operations/observability.md @@ -1,11 +1,11 @@ --- -title: "Observability" -description: "This article explains RustFS telemetry exports, monitoring integrations, metric names and labels, recommended alerts, and log collection." +title: "Observabilité" +description: "Exportez les métriques, les traces et les journaux RustFS via OTLP, intégrez-les à vos outils de supervision et configurez les alertes recommandées." --- -## How RustFS Exposes Telemetry +## Comment RustFS expose la télémétrie -RustFS **pushes** metrics, traces, and logs over OTLP (OpenTelemetry Protocol). It does **not** expose a native Prometheus `/metrics` scrape endpoint — there is no HTTP route on port 9000 or 9001 that serves Prometheus text format. To get RustFS metrics into Prometheus you must run an OpenTelemetry Collector that receives OTLP from RustFS and re-exposes the data in Prometheus format: +RustFS **pousse** les métriques, les traces et les journaux via OTLP (OpenTelemetry Protocol). Il **n’expose pas** de point de terminaison Prometheus `/metrics` natif pour la collecte (scrape) : aucune route HTTP sur le port 9000 ou 9001 ne sert le format texte Prometheus. Pour acheminer les métriques RustFS vers Prometheus, vous devez exécuter un collecteur OpenTelemetry qui reçoit l’OTLP depuis RustFS et réexpose les données au format Prometheus : ```text RustFS (RUSTFS_OBS_ENDPOINT) --OTLP--> OpenTelemetry Collector --> Prometheus --> Grafana @@ -13,27 +13,27 @@ RustFS (RUSTFS_OBS_ENDPOINT) --OTLP--> OpenTelemetry Collector --> Prometheus -- \--> Tempo / Jaeger (traces) ``` -Point RustFS at the Collector with: +Pointez RustFS vers le collecteur avec : ```bash # OTLP over HTTP (the Collector's default HTTP receiver port is 4318; gRPC is 4317) RUSTFS_OBS_ENDPOINT=http://otel-collector:4318 ``` -Related environment variables (all defined in the server configuration): +Variables d’environnement associées (toutes définies dans la configuration du serveur) : -| Variable | Purpose | +| Variable | Rôle | | --- | --- | -| `RUSTFS_OBS_ENDPOINT` | Base OTLP endpoint for traces, metrics, and logs | -| `RUSTFS_OBS_TRACE_ENDPOINT` / `RUSTFS_OBS_METRIC_ENDPOINT` / `RUSTFS_OBS_LOG_ENDPOINT` | Per-signal endpoint overrides | -| `RUSTFS_OBS_METRICS_EXPORT_ENABLED` / `RUSTFS_OBS_TRACES_EXPORT_ENABLED` / `RUSTFS_OBS_LOGS_EXPORT_ENABLED` | Toggle each signal | -| `RUSTFS_OBS_METER_INTERVAL` | Metric export interval | -| `RUSTFS_OBS_SERVICE_NAME` / `RUSTFS_OBS_ENVIRONMENT` | Resource attributes attached to exported telemetry | -| `RUSTFS_OBS_LOGGER_LEVEL` | Log verbosity (e.g. `info`) | +| `RUSTFS_OBS_ENDPOINT` | Point de terminaison OTLP de base pour les traces, les métriques et les journaux | +| `RUSTFS_OBS_TRACE_ENDPOINT` / `RUSTFS_OBS_METRIC_ENDPOINT` / `RUSTFS_OBS_LOG_ENDPOINT` | Remplacements du point de terminaison pour chaque signal | +| `RUSTFS_OBS_METRICS_EXPORT_ENABLED` / `RUSTFS_OBS_TRACES_EXPORT_ENABLED` / `RUSTFS_OBS_LOGS_EXPORT_ENABLED` | Active ou désactive chaque signal | +| `RUSTFS_OBS_METER_INTERVAL` | Intervalle d’export des métriques | +| `RUSTFS_OBS_SERVICE_NAME` / `RUSTFS_OBS_ENVIRONMENT` | Attributs de ressource attachés à la télémétrie exportée | +| `RUSTFS_OBS_LOGGER_LEVEL` | Verbosité des journaux (par exemple `info`) | -## Reference Deployment (Docker Compose Observability Profile) +## Déploiement de référence (profil d’observabilité Docker Compose) -The upstream `rustfs/rustfs` repository ships a complete reference stack in `docker-compose.yml` behind the `observability` profile: **otel-collector**, **Prometheus**, **Grafana**, **Loki** (logs), **Tempo** and **Jaeger** (traces). Its Collector configuration receives OTLP on 4317 (gRPC) and 4318 (HTTP) and re-exports metrics for Prometheus on port `8889`: +Le dépôt amont `rustfs/rustfs` fournit une pile de référence complète dans `docker-compose.yml`, derrière le profil `observability` : **otel-collector**, **Prometheus**, **Grafana**, **Loki** (journaux), **Tempo** et **Jaeger** (traces). La configuration de son collecteur reçoit l’OTLP sur 4317 (gRPC) et 4318 (HTTP), puis réexporte les métriques pour Prometheus sur le port `8889` : ```yaml # OpenTelemetry Collector (excerpt from the upstream reference config) @@ -54,7 +54,7 @@ service: exporters: [prometheus] ``` -Prometheus then scrapes the Collector, not RustFS: +Prometheus collecte ensuite le collecteur, et non RustFS : ```yaml # prometheus.yml (excerpt) @@ -69,150 +69,150 @@ scrape_configs: :::note -If Prometheus shows no `rustfs_*` series, check the chain in order: is `RUSTFS_OBS_ENDPOINT` set on every node, is the Collector reachable from the nodes, and is Prometheus scraping the Collector's `8889` exporter port. +Si Prometheus n’affiche aucune série `rustfs_*`, vérifiez la chaîne dans l’ordre : `RUSTFS_OBS_ENDPOINT` est-il défini sur chaque nœud, le collecteur est-il joignable depuis les nœuds, et Prometheus collecte-t-il le port d’export `8889` du collecteur ? ::: -## Metrics Reference +## Référence des métriques -Every name below is verified against the server source. The list covers the operations-relevant subset exported via OTLP; internal and experimental instruments are omitted, and new releases may add metrics not listed here. Label sets are those recorded at the emission site. The Collector and Prometheus may attach additional resource labels, such as `service_name` and instance. +Chaque nom ci-dessous est vérifié dans le code source du serveur. La liste couvre le sous-ensemble utile à l’exploitation, exporté via OTLP ; les instruments internes et expérimentaux sont omis, et les nouvelles versions peuvent ajouter des métriques absentes de cette liste. Les jeux d’étiquettes sont ceux enregistrés au point d’émission. Le collecteur et Prometheus peuvent ajouter des étiquettes de ressource supplémentaires, telles que `service_name` et l’instance. -### Readiness and Process +### État de préparation et processus -| Metric | Type | Labels | Meaning | +| Métrique | Type | Étiquettes | Signification | | --- | --- | --- | --- | -| `rustfs_start_total` | counter | — | Process starts; a rising rate indicates restart loops | -| `rustfs_runtime_readiness_ready` | gauge | — | `1` when the node is fully ready, `0` while degraded | -| `rustfs_runtime_readiness_degraded_total` | counter | `reason` | Degraded readiness evaluations, by `degradedReasons` value (e.g. `storage_quorum_unavailable`) | +| `rustfs_start_total` | compteur | — | Démarrages du processus ; un taux en hausse indique des boucles de redémarrage | +| `rustfs_runtime_readiness_ready` | jauge | — | `1` lorsque le nœud est entièrement prêt, `0` tant qu’il est dégradé | +| `rustfs_runtime_readiness_degraded_total` | compteur | `reason` | Évaluations d’état de préparation dégradé, selon la valeur de `degradedReasons` (par exemple `storage_quorum_unavailable`) | ### Scanner -| Metric | Type | Labels | Meaning | +| Métrique | Type | Étiquettes | Signification | | --- | --- | --- | --- | -| `rustfs_scanner_objects_scanned_total` | counter | — | Objects visited by the background scanner | -| `rustfs_scanner_directories_scanned_total` | counter | — | Directories visited | -| `rustfs_scanner_buckets_scanned_total` | counter | `result`, `bucket`, `disk` | Bucket/drive scans completed, by outcome (`success` / `error` / `partial`) | -| `rustfs_scanner_cycles_total` | counter | `result` | Scanner cycles finished (`success` / `error` / `partial` / `unknown`) | -| `rustfs_scanner_cycle_duration_seconds` | gauge | — | Duration of the last completed scan cycle | -| `rustfs_scanner_bucket_drive_duration_seconds` | histogram | `bucket`, `disk` | Time to scan one bucket on one drive | -| `rustfs_scanner_leader_lock_total` | counter | `state` | Scanner leader-lock acquisition events | -| `rustfs_scanner_inline_heal_total` | counter | — | Objects queued for heal directly by the scanner | -| `rustfs_scanner_cache_save_duration_seconds` | histogram | `cache` | Time to persist the data-usage cache | -| `rustfs_scanner_set_scan_concurrency_limit` | gauge | — | Current per-set scan concurrency limit | -| `rustfs_scanner_disk_scan_concurrency_limit` | gauge | `pool`, `set` | Current per-disk scan concurrency limit | - -### Heal - -| Metric | Type | Labels | Meaning | +| `rustfs_scanner_objects_scanned_total` | compteur | — | Objets visités par le scanner d’arrière-plan | +| `rustfs_scanner_directories_scanned_total` | compteur | — | Répertoires visités | +| `rustfs_scanner_buckets_scanned_total` | compteur | `result`, `bucket`, `disk` | Analyses de compartiment (bucket) et de disque terminées, selon le résultat (`success` / `error` / `partial`) | +| `rustfs_scanner_cycles_total` | compteur | `result` | Cycles du scanner terminés (`success` / `error` / `partial` / `unknown`) | +| `rustfs_scanner_cycle_duration_seconds` | jauge | — | Durée du dernier cycle d’analyse terminé | +| `rustfs_scanner_bucket_drive_duration_seconds` | histogramme | `bucket`, `disk` | Temps nécessaire pour analyser un compartiment sur un disque | +| `rustfs_scanner_leader_lock_total` | compteur | `state` | Événements d’acquisition du verrou de leader du scanner | +| `rustfs_scanner_inline_heal_total` | compteur | — | Objets mis en file pour une réparation directement par le scanner | +| `rustfs_scanner_cache_save_duration_seconds` | histogramme | `cache` | Temps nécessaire pour persister le cache d’utilisation des données | +| `rustfs_scanner_set_scan_concurrency_limit` | jauge | — | Limite actuelle de concurrence d’analyse par ensemble | +| `rustfs_scanner_disk_scan_concurrency_limit` | jauge | `pool`, `set` | Limite actuelle de concurrence d’analyse par disque | + +### Réparation des données + +| Métrique | Type | Étiquettes | Signification | | --- | --- | --- | --- | -| `rustfs_heal_task_running` | gauge | `type`, `set` | Currently running heal tasks per erasure set | -| `rustfs_heal_task_start_total` | counter | `type`, `set` | Heal tasks started | -| `rustfs_heal_queue_delay_seconds` | histogram | `type`, `set` | Time a heal task waited in queue before starting | -| `rustfs_heal_admission_total` | counter | `source`, `result`, `reason`, `context` | Heal admission decisions (accepted / rejected and why) | -| `rustfs_heal_mainline_throttle_total` | counter | `source`, `result`, `reason` | Background heal throttled to protect foreground traffic | -| `rustfs_heal_scheduler_skip_total` | counter | `reason`, `set` | Heal scheduling skipped (e.g. per-set limit reached) | -| `rustfs_heal_page_concurrency_current` | gauge | — | Current page-level heal concurrency | -| `rustfs_heal_candidate_enqueue_total` | counter | — | Heal candidates enqueued by the scanner | -| `rustfs_heal_candidate_merge_total` | counter | — | Candidates merged with an existing queue entry | -| `rustfs_heal_candidate_drop_total` | counter | — | Candidates dropped | -| `rustfs_heal_candidate_priority_reject_total` | counter | — | Candidates rejected by priority policy | -| `rustfs_heal_read_repair_dedup_total` | counter | `reason` | Read-path repair requests deduplicated | - -### API / IO Path - -| Metric | Type | Labels | Meaning | +| `rustfs_heal_task_running` | jauge | `type`, `set` | Tâches de réparation en cours, par ensemble d’effacement | +| `rustfs_heal_task_start_total` | compteur | `type`, `set` | Tâches de réparation démarrées | +| `rustfs_heal_queue_delay_seconds` | histogramme | `type`, `set` | Temps d’attente d’une tâche de réparation dans la file avant son démarrage | +| `rustfs_heal_admission_total` | compteur | `source`, `result`, `reason`, `context` | Décisions d’admission d’une réparation (acceptée ou rejetée, et pourquoi) | +| `rustfs_heal_mainline_throttle_total` | compteur | `source`, `result`, `reason` | Réparation d’arrière-plan limitée afin de protéger le trafic de premier plan | +| `rustfs_heal_scheduler_skip_total` | compteur | `reason`, `set` | Planification de réparation ignorée (par exemple, limite par ensemble atteinte) | +| `rustfs_heal_page_concurrency_current` | jauge | — | Concurrence actuelle de la réparation au niveau des pages | +| `rustfs_heal_candidate_enqueue_total` | compteur | — | Candidats à la réparation mis en file par le scanner | +| `rustfs_heal_candidate_merge_total` | compteur | — | Candidats fusionnés avec une entrée de file existante | +| `rustfs_heal_candidate_drop_total` | compteur | — | Candidats écartés | +| `rustfs_heal_candidate_priority_reject_total` | compteur | — | Candidats rejetés par la politique de priorité | +| `rustfs_heal_read_repair_dedup_total` | compteur | `reason` | Demandes de réparation sur le chemin de lecture dédupliquées | + +### Chemin d’API et d’E/S + +| Métrique | Type | Étiquettes | Signification | | --- | --- | --- | --- | -| `rustfs_io_get_object_request_duration_seconds` | histogram | `status` | End-to-end GetObject latency | -| `rustfs_io_get_object_stage_duration_seconds` | histogram | `path`, `stage` | GetObject latency broken down by internal stage | -| `rustfs_io_get_object_response_size_bytes` | histogram | — | GetObject response sizes | -| `rustfs_io_operation_duration_seconds` | histogram | `operation` | Duration of IO operations | -| `rustfs_io_timeout_events_total` | counter | `operation` | IO operations that hit a timeout | -| `rustfs_operation_progress` | gauge | `operation` | Progress percentage of long-running operations | -| `rustfs_operation_stalled` | counter | `operation` | Operations detected as stalled | -| `rustfs_operation_completions` | counter | `operation`, `status` | Operation completions by status | -| `rustfs_io_queue_operations` | counter | `operation`, `priority` | IO queue enqueue/dequeue operations | -| `rustfs_io_queue_size` | gauge | `priority` | Current IO queue depth per priority | -| `rustfs_io_starvation_events` | counter | `priority` | Low-priority IO starvation events | -| `rustfs_io_bandwidth_bps` | gauge | — | Observed IO bandwidth (bytes/s) | -| `rustfs_io_scheduler_decisions` | counter | — | IO scheduler decisions taken | -| `rustfs_io_scheduler_load` | counter | `level` | Scheduler decisions by load level | -| `rustfs_io_load_changes` | counter | `from`, `to` | IO load-level transitions | - -### Backpressure - -| Metric | Type | Labels | Meaning | +| `rustfs_io_get_object_request_duration_seconds` | histogramme | `status` | Latence de bout en bout de GetObject | +| `rustfs_io_get_object_stage_duration_seconds` | histogramme | `path`, `stage` | Latence GetObject décomposée par étape interne | +| `rustfs_io_get_object_response_size_bytes` | histogramme | — | Tailles des réponses GetObject | +| `rustfs_io_operation_duration_seconds` | histogramme | `operation` | Durée des opérations d’E/S | +| `rustfs_io_timeout_events_total` | compteur | `operation` | Opérations d’E/S ayant atteint un délai d’expiration | +| `rustfs_operation_progress` | jauge | `operation` | Pourcentage d’avancement des opérations de longue durée | +| `rustfs_operation_stalled` | compteur | `operation` | Opérations détectées comme bloquées | +| `rustfs_operation_completions` | compteur | `operation`, `status` | Achèvements d’opérations, selon le statut | +| `rustfs_io_queue_operations` | compteur | `operation`, `priority` | Opérations d’entrée et de sortie de la file d’E/S | +| `rustfs_io_queue_size` | jauge | `priority` | Profondeur actuelle de la file d’E/S, par priorité | +| `rustfs_io_starvation_events` | compteur | `priority` | Événements de famine des E/S de faible priorité | +| `rustfs_io_bandwidth_bps` | jauge | — | Bande passante d’E/S observée (octets/s) | +| `rustfs_io_scheduler_decisions` | compteur | — | Décisions prises par l’ordonnanceur d’E/S | +| `rustfs_io_scheduler_load` | compteur | `level` | Décisions de l’ordonnanceur, selon le niveau de charge | +| `rustfs_io_load_changes` | compteur | `from`, `to` | Transitions de niveau de charge d’E/S | + +### Contre-pression + +| Métrique | Type | Étiquettes | Signification | | --- | --- | --- | --- | -| `rustfs_backpressure_state_changes` | counter | `from`, `to` | Backpressure state transitions | -| `rustfs_backpressure_activations` | counter | — | Times backpressure engaged | -| `rustfs_backpressure_deactivations` | counter | — | Times backpressure released | -| `rustfs_backpressure_rejections` | counter | — | Requests rejected due to backpressure | -| `rustfs_backpressure_concurrent` | gauge | — | Current concurrent requests tracked by the limiter | +| `rustfs_backpressure_state_changes` | compteur | `from`, `to` | Transitions d’état de contre-pression | +| `rustfs_backpressure_activations` | compteur | — | Nombre de fois où la contre-pression s’est activée | +| `rustfs_backpressure_deactivations` | compteur | — | Nombre de fois où la contre-pression a été relâchée | +| `rustfs_backpressure_rejections` | compteur | — | Requêtes rejetées à cause de la contre-pression | +| `rustfs_backpressure_concurrent` | jauge | — | Requêtes concurrentes actuellement suivies par le limiteur | -### Capacity +### Capacité -| Metric | Type | Labels | Meaning | +| Métrique | Type | Étiquettes | Signification | | --- | --- | --- | --- | -| `rustfs_capacity_current_bytes` | gauge | — | Current used capacity in bytes | -| `rustfs_capacity_update_total` | counter | `source` | Capacity recalculations | -| `rustfs_capacity_update_duration_seconds` | histogram | `source` | Time to recalculate capacity | -| `rustfs_capacity_cache_hits` | counter | — | Capacity cache hits | -| `rustfs_capacity_cache_misses` | counter | — | Capacity cache misses | -| `rustfs_capacity_cache_served_total` | counter | `state` | Capacity responses served from cache, by freshness state | +| `rustfs_capacity_current_bytes` | jauge | — | Capacité utilisée actuelle, en octets | +| `rustfs_capacity_update_total` | compteur | `source` | Recalculs de capacité | +| `rustfs_capacity_update_duration_seconds` | histogramme | `source` | Temps nécessaire pour recalculer la capacité | +| `rustfs_capacity_cache_hits` | compteur | — | Accès réussis au cache de capacité | +| `rustfs_capacity_cache_misses` | compteur | — | Accès manqués au cache de capacité | +| `rustfs_capacity_cache_served_total` | compteur | `state` | Réponses de capacité servies depuis le cache, selon l’état de fraîcheur | -### Locking +### Verrouillage -| Metric | Type | Labels | Meaning | +| Métrique | Type | Étiquettes | Signification | | --- | --- | --- | --- | -| `rustfs_lock_contentions` | counter | — | Lock contention events | -| `rustfs_lock_hold_time_secs` | histogram | — | How long locks were held | -| `rustfs_lock_spin_successes` / `rustfs_lock_spin_failures` | counter | — | Spin-lock acquisition outcomes | -| `rustfs_lock_early_releases` | counter | — | Locks released early by optimization | -| `rustfs_object_lock_diag_acquire_duration_seconds` | histogram | — | Object-lock acquire latency (diagnostics mode) | -| `rustfs_object_lock_diag_hold_duration_seconds` | histogram | — | Object-lock hold duration (diagnostics mode) | -| `rustfs_object_lock_diag_slow_acquire_total` / `rustfs_object_lock_diag_slow_hold_total` | counter | — | Slow lock acquire/hold events (diagnostics mode) | +| `rustfs_lock_contentions` | compteur | — | Événements de contention de verrou | +| `rustfs_lock_hold_time_secs` | histogramme | — | Durée pendant laquelle les verrous ont été tenus | +| `rustfs_lock_spin_successes` / `rustfs_lock_spin_failures` | compteur | — | Résultats d’acquisition des verrous à attente active | +| `rustfs_lock_early_releases` | compteur | — | Verrous relâchés plus tôt par une optimisation | +| `rustfs_object_lock_diag_acquire_duration_seconds` | histogramme | — | Latence d’acquisition du verrouillage d’objet (mode diagnostic) | +| `rustfs_object_lock_diag_hold_duration_seconds` | histogramme | — | Durée de détention du verrouillage d’objet (mode diagnostic) | +| `rustfs_object_lock_diag_slow_acquire_total` / `rustfs_object_lock_diag_slow_hold_total` | compteur | — | Événements lents d’acquisition ou de détention de verrou (mode diagnostic) | -### Log Cleaner +### Nettoyage des journaux -| Metric | Type | Labels | Meaning | +| Métrique | Type | Étiquettes | Signification | | --- | --- | --- | --- | -| `rustfs_log_cleaner_runs_total` | counter | — | Log-cleaner runs | -| `rustfs_log_cleaner_deleted_files_total` | counter | — | Log files deleted | -| `rustfs_log_cleaner_freed_bytes_total` | counter | — | Bytes reclaimed | -| `rustfs_log_cleaner_rotation_total` / `rustfs_log_cleaner_rotation_failures_total` | counter | — | Log rotations and rotation failures | -| `rustfs_log_cleaner_rotation_duration_seconds` | histogram | — | Rotation duration | -| `rustfs_log_cleaner_active_file_size_bytes` | gauge | — | Size of the active log file | +| `rustfs_log_cleaner_runs_total` | compteur | — | Exécutions du nettoyeur de journaux | +| `rustfs_log_cleaner_deleted_files_total` | compteur | — | Fichiers journaux supprimés | +| `rustfs_log_cleaner_freed_bytes_total` | compteur | — | Octets récupérés | +| `rustfs_log_cleaner_rotation_total` / `rustfs_log_cleaner_rotation_failures_total` | compteur | — | Rotations de journaux et échecs de rotation | +| `rustfs_log_cleaner_rotation_duration_seconds` | histogramme | — | Durée de la rotation | +| `rustfs_log_cleaner_active_file_size_bytes` | jauge | — | Taille du fichier journal actif | -:::note[Additional metrics] +:::note[Métriques supplémentaires] -Additional verified metric names exist whose type/label details are not documented here, including `rustfs_scanner_cache_save_attempt_total`, `rustfs_scanner_cache_save_timeout_total`, `rustfs_scanner_cache_save_retry_total`, `rustfs_scanner_excess_object_versions_total`, `rustfs_scanner_excess_object_version_size_total`, `rustfs_scanner_excess_folders_total`, `rustfs_scanner_pending_heal_prune_total`, `rustfs_scanner_pending_heal_malformed_total`, and the `rustfs_io_scheduler_*` / `rustfs_io_buffer_*` / `rustfs_timeout_dynamic_*` families. Inspect them in Prometheus once the pipeline is live. +D’autres noms de métriques vérifiés existent, dont le type et les étiquettes ne sont pas documentés ici, notamment `rustfs_scanner_cache_save_attempt_total`, `rustfs_scanner_cache_save_timeout_total`, `rustfs_scanner_cache_save_retry_total`, `rustfs_scanner_excess_object_versions_total`, `rustfs_scanner_excess_object_version_size_total`, `rustfs_scanner_excess_folders_total`, `rustfs_scanner_pending_heal_prune_total`, `rustfs_scanner_pending_heal_malformed_total`, ainsi que les familles `rustfs_io_scheduler_*`, `rustfs_io_buffer_*` et `rustfs_timeout_dynamic_*`. Inspectez-les dans Prometheus une fois le pipeline en service. ::: -## Suggested Alerts +## Alertes suggérées -| Alert | Signal | Suggested rule | +| Alerte | Signal | Règle suggérée | | --- | --- | --- | -| Node not ready > 2 min | `rustfs_runtime_readiness_ready` gauge, or an external probe on `GET /health/ready` returning non-200 | `rustfs_runtime_readiness_ready == 0` for `2m` | -| Restart loop | `rustfs_start_total` | `increase(rustfs_start_total[10m]) > 3` | -| Heal backlog growing | `rustfs_heal_task_running` and `rustfs_heal_queue_delay_seconds` | sustained non-zero running tasks plus rising queue delay for `30m` | -| Scanner stalled | `rustfs_scanner_cycles_total` | `increase(rustfs_scanner_cycles_total[24h]) == 0` | -| Cluster used capacity watermark | `rustfs_capacity_current_bytes` | compare against your deployed raw capacity (a constant you set), e.g. `rustfs_capacity_current_bytes > 0.8 * ` | +| Nœud non prêt depuis plus de 2 min | jauge `rustfs_runtime_readiness_ready`, ou une sonde externe sur `GET /health/ready` qui renvoie un code autre que 200 | `rustfs_runtime_readiness_ready == 0` pendant `2m` | +| Boucle de redémarrage | `rustfs_start_total` | `increase(rustfs_start_total[10m]) > 3` | +| File de réparation en croissance | `rustfs_heal_task_running` et `rustfs_heal_queue_delay_seconds` | tâches en cours durablement non nulles et délai de file en hausse pendant `30m` | +| Scanner bloqué | `rustfs_scanner_cycles_total` | `increase(rustfs_scanner_cycles_total[24h]) == 0` | +| Seuil de capacité utilisée du cluster | `rustfs_capacity_current_bytes` | comparez la valeur à la capacité brute déployée (une constante que vous définissez), par exemple `rustfs_capacity_current_bytes > 0.8 * ` | :::note -Per-disk usage and disk online/offline state are currently surfaced through the console and the admin API (server/storage info), not as dedicated OTLP metrics. For a per-disk watermark alert, poll the admin API from your own exporter or watch the console dashboard. +L’utilisation par disque et l’état en ligne ou hors ligne des disques sont actuellement exposés par la Console et par l’API d’administration (informations serveur et stockage), et non comme métriques OTLP dédiées. Pour une alerte de seuil par disque, interrogez l’API d’administration depuis votre propre exporteur, ou surveillez le tableau de bord de la Console. ::: -## Log Collection +## Collecte des journaux -Where logs go is controlled by `RUSTFS_OBS_LOG_DIRECTORY`: +La destination des journaux est contrôlée par `RUSTFS_OBS_LOG_DIRECTORY` : -- **Unset** — logs go to stdout. In containers, use your log driver; on systemd hosts, stdout/stderr is captured by **journald**, so `journalctl -u rustfs -f` works without extra configuration. -- **A local directory** (e.g. `/var/log/rustfs/`) — RustFS writes rotating log files there. Rotation is tuned with `RUSTFS_OBS_LOG_FILENAME`, `RUSTFS_OBS_LOG_ROTATION_SIZE_MB`, `RUSTFS_OBS_LOG_ROTATION_TIME`, and `RUSTFS_OBS_LOG_KEEP_FILES`. -- **A URL** (contains `://`) — logs are shipped to a remote endpoint. +- **Non définie** — les journaux vont sur stdout. Dans les conteneurs, utilisez votre pilote de journalisation ; sur les hôtes systemd, stdout/stderr est capturé par **journald**, de sorte que `journalctl -u rustfs -f` fonctionne sans configuration supplémentaire. +- **Un répertoire local** (par exemple `/var/log/rustfs/`) — RustFS y écrit des fichiers journaux en rotation. La rotation se règle avec `RUSTFS_OBS_LOG_FILENAME`, `RUSTFS_OBS_LOG_ROTATION_SIZE_MB`, `RUSTFS_OBS_LOG_ROTATION_TIME` et `RUSTFS_OBS_LOG_KEEP_FILES`. +- **Une URL** (contient `://`) — les journaux sont expédiés vers un point de terminaison distant. -When `RUSTFS_OBS_ENDPOINT` is set and log export is enabled, logs are additionally exported via OTLP; the reference stack routes them into Loki for querying from Grafana. +Lorsque `RUSTFS_OBS_ENDPOINT` est défini et que l’export des journaux est activé, les journaux sont en outre exportés via OTLP ; la pile de référence les achemine vers Loki pour les interroger depuis Grafana. ```bash title="Example: file logs plus OTLP export" RUSTFS_ADDRESS=":9000" diff --git a/content/fr/operations/rc.mdx b/content/fr/operations/rc.mdx index 5339949e8..49d07d946 100644 --- a/content/fr/operations/rc.mdx +++ b/content/fr/operations/rc.mdx @@ -1,20 +1,20 @@ --- -title: "CLI Client (rc)" -description: "Install the RustFS command-line client and use it to connect to and inspect a RustFS cluster." +title: "Client CLI (rc)" +description: "Installez le client en ligne de commande RustFS et utilisez-le pour vous connecter à un cluster RustFS et l’inspecter." --- -`rc` is the RustFS command-line client for S3 object operations and RustFS administration. This guide installs `rc`, configures a cluster alias, and introduces the main inspection commands. The download examples use `v0.1.30`; check the [RustFS CLI releases](https://github.com/rustfs/cli/releases) for a newer version before installing. +`rc` est le client en ligne de commande RustFS pour les opérations sur les objets S3 et l’administration de RustFS. Ce guide installe `rc`, configure un alias de cluster et présente les principales commandes d’inspection. Les exemples de téléchargement utilisent `v0.1.30` ; consultez les [versions du CLI RustFS](https://github.com/rustfs/cli/releases) pour une version plus récente avant l’installation. ## Installation ### Linux -The default Linux archives are statically linked with musl for broad compatibility. Choose the tab that matches `uname -m`. +Les archives Linux par défaut sont liées statiquement à musl, pour une large compatibilité. Choisissez l’onglet qui correspond à `uname -m`. -For an `x86_64` host: +Pour un hôte `x86_64` : ```bash curl -fLO https://github.com/rustfs/cli/releases/download/v0.1.30/rustfs-cli-linux-amd64-v0.1.30.tar.gz @@ -25,7 +25,7 @@ sudo install -m 0755 rc /usr/local/bin/rc -For an `aarch64` host: +Pour un hôte `aarch64` : ```bash curl -fLO https://github.com/rustfs/cli/releases/download/v0.1.30/rustfs-cli-linux-arm64-v0.1.30.tar.gz @@ -36,16 +36,16 @@ sudo install -m 0755 rc /usr/local/bin/rc -If your environment specifically requires a glibc-linked binary, select the `linux-amd64-gnu` or `linux-arm64-gnu` archive from the release page. +Si votre environnement exige spécifiquement un binaire lié à glibc, sélectionnez l’archive `linux-amd64-gnu` ou `linux-arm64-gnu` sur la page de la version. ### macOS -Choose the tab that matches the value returned by `uname -m`. +Choisissez l’onglet qui correspond à la valeur renvoyée par `uname -m`. -For an Intel (`x86_64`) Mac: +Pour un Mac Intel (`x86_64`) : ```bash curl -fLO https://github.com/rustfs/cli/releases/download/v0.1.30/rustfs-cli-macos-amd64-v0.1.30.tar.gz @@ -56,7 +56,7 @@ sudo install -m 0755 rc /usr/local/bin/rc -For an Apple silicon (`arm64`) Mac: +Pour un Mac à puce Apple (`arm64`) : ```bash curl -fLO https://github.com/rustfs/cli/releases/download/v0.1.30/rustfs-cli-macos-arm64-v0.1.30.tar.gz @@ -67,7 +67,7 @@ sudo install -m 0755 rc /usr/local/bin/rc -You can alternatively install the package through Homebrew: +Vous pouvez aussi installer le paquet avec Homebrew : ```bash brew install rustfs/tap/rc @@ -75,63 +75,63 @@ brew install rustfs/tap/rc ### Windows -The current Windows release provides an AMD64 binary. Install it through the official Scoop bucket: +La version Windows actuelle fournit un binaire AMD64. Installez-le avec le dépôt de paquets Scoop officiel : ```powershell scoop bucket add rustfs https://github.com/rustfs/scoop-bucket scoop install rustfs/rc ``` -### Verify the installation +### Vérifier l’installation -Open a new terminal and verify that `rc` is available: +Ouvrez un nouveau terminal et vérifiez que `rc` est disponible : ```bash rc --version rc --help ``` -## Usage +## Utilisation -### Configure an alias +### Configurer un alias -An alias stores the RustFS endpoint and credentials so you do not need to repeat them for every command. Replace the credentials before running: +Un alias mémorise le point de terminaison RustFS et les identifiants, afin que vous n’ayez pas à les répéter pour chaque commande. Remplacez les identifiants avant d’exécuter les commandes : ```bash rc alias set local http://localhost:9000 rc alias list ``` -`alias set` replaces an existing alias with the same name. `alias list` does not print secret keys. +`alias set` remplace un alias existant du même nom. `alias list` n’affiche pas les clés secrètes. -### Check service health +### Vérifier l’état du service -Check whether the service is live and whether its required dependencies are ready: +Vérifiez si le service est actif et si ses dépendances requises sont prêtes : ```bash rc ping local rc ready local ``` -### Inspect the cluster +### Inspecter le cluster -Use the administrative cluster information command to inspect cluster status, servers, disks, and storage capacity: +Utilisez la commande d’information administrative du cluster pour inspecter l’état du cluster, les serveurs, les disques et la capacité de stockage : ```bash rc admin info cluster local ``` -List server pools when the deployment uses multiple pools: +Listez les pools de serveurs lorsque le déploiement en utilise plusieurs : ```bash rc admin pool list local ``` -Administrative commands require credentials with the corresponding RustFS Admin API permissions. +Les commandes d’administration exigent des identifiants disposant des autorisations correspondantes de l’API d’administration RustFS. -### Inspect buckets and objects +### Inspecter les compartiments et les objets -Prefer the noun-first command groups for new scripts: +Pour les nouveaux scripts, préférez les groupes de commandes qui placent le nom en premier : ```bash rc bucket list local/ @@ -139,9 +139,9 @@ rc object list local/my-bucket rc object stat local/my-bucket/hello.txt ``` -### Manage lifecycle rules and storage tiers +### Gérer les règles de cycle de vie et les niveaux de stockage -`rc` groups lifecycle rules, remote storage tiers, and restore requests under `bucket lifecycle`: +`rc` regroupe les règles de cycle de vie, les niveaux de stockage distants et les demandes de restauration sous `bucket lifecycle` : ```bash rc bucket lifecycle rule list local/my-bucket @@ -149,13 +149,13 @@ rc bucket lifecycle tier list local rc bucket lifecycle restore local/my-bucket/hello.txt --days 7 ``` -Use the `rule` commands to add, edit, remove, export, or import bucket lifecycle rules. Use the `tier` commands to add, inspect, update credentials for, or remove a remote tier. The older `rc ilm` form remains available as a compatibility alias, but we recommend `rc bucket lifecycle` for new scripts. +Utilisez les commandes `rule` pour ajouter, modifier, supprimer, exporter ou importer des règles de cycle de vie de compartiment. Utilisez les commandes `tier` pour ajouter un niveau distant, l’inspecter, en mettre à jour les identifiants ou le supprimer. L’ancienne forme `rc ilm` reste disponible comme alias de compatibilité, mais nous recommandons `rc bucket lifecycle` pour les nouveaux scripts. -See [Lifecycle Management](/administration/data/lifecycle-management) for rule and restore workflows, and [Tiered Storage](/administration/data/tiered-storage) for remote-tier configuration and maintenance. +Consultez [Gestion du cycle de vie](/fr/administration/data/lifecycle-management) pour les flux de règles et de restauration, et [Stockage hiérarchisé](/fr/administration/data/tiered-storage) pour la configuration et la maintenance des niveaux distants. -### Discover more commands +### Découvrir d’autres commandes -Use `--help` at any command level to see the commands and options supported by your installed version: +Utilisez `--help` à n’importe quel niveau de commande pour voir les commandes et les options prises en charge par la version installée : ```bash rc --help @@ -167,4 +167,4 @@ rc bucket lifecycle --help rc object --help ``` -For the complete source and command reference, see the [RustFS CLI repository](https://github.com/rustfs/cli). +Pour les sources complètes et la référence des commandes, consultez le [dépôt du CLI RustFS](https://github.com/rustfs/cli). diff --git a/content/fr/operations/scaling/data-rebalancing.md b/content/fr/operations/scaling/data-rebalancing.md index 5025f8540..933995200 100644 --- a/content/fr/operations/scaling/data-rebalancing.md +++ b/content/fr/operations/scaling/data-rebalancing.md @@ -1,84 +1,84 @@ --- -title: "Rebalancing" -description: "Redistribute existing objects across active RustFS storage pools through the Console or rc." +title: "Rééquilibrage" +description: "Redistribuez les objets existants entre les pools de stockage RustFS actifs, depuis la Console ou avec rc." --- -## Overview +## Vue d’ensemble -### Requirements +### Prérequis -- Install [`rc`](/operations/rc) on the administration host before using the `rc` workflow in this guide. -- Configure credentials with rebalance administration permission. +- Installez [`rc`](/fr/operations/rc) sur l’hôte d’administration avant d’utiliser le flux `rc` de ce guide. +- Configurez des identifiants disposant de l’autorisation d’administration du rééquilibrage. -After [Pool Expansion](./storage-pool-expansion.md), new writes can use the added capacity, but existing objects remain in their original pools. **Rebalancing** moves existing objects across all active pools so their used-capacity ratios converge. +Après une [extension de pool](./storage-pool-expansion.md), les nouvelles écritures peuvent utiliser la capacité ajoutée, mais les objets existants restent dans leurs pools d’origine. Le **rééquilibrage** déplace les objets existants sur l’ensemble des pools actifs afin que leurs ratios de capacité utilisée convergent. -Rebalancing requires at least two active pools. RustFS rejects a new rebalance while another rebalance or a pool decommission is running. Stopping a rebalance does not move already relocated objects back to their original pools. +Le rééquilibrage exige au moins deux pools actifs. RustFS refuse un nouveau rééquilibrage tant qu’un autre rééquilibrage ou une mise hors service de pool est en cours. L’arrêt d’un rééquilibrage ne ramène pas les objets déjà déplacés vers leurs pools d’origine. -Before starting, verify that all nodes and disks are healthy, no decommission is active, and the cluster has enough free capacity for normal writes during the operation. Schedule the operation during a lower-traffic period because object movement consumes disk, network, and CPU resources. +Avant de commencer, vérifiez que tous les nœuds et tous les disques sont sains, qu’aucune mise hors service n’est active et que le cluster dispose d’assez de capacité libre pour les écritures normales pendant l’opération. Planifiez l’opération pendant une période de plus faible trafic, car le déplacement des objets consomme des ressources disque, réseau et processeur. -## Operation +## Opération -### Start rebalancing in the Console +### Démarrer le rééquilibrage dans la Console -1. Sign in to the RustFS Console with an account that has rebalance administration permission. -2. Open **Rebalance**. -3. Review the active pools and their used-capacity ratios. -4. Select **Start Rebalance** and confirm the operation. -5. Keep the page open or return to it periodically to review per-pool progress. -6. Use **Stop Rebalance** only when you need to halt the operation. Data already moved remains in its new pool. +1. Connectez-vous à la Console RustFS avec un compte disposant de l’autorisation d’administration du rééquilibrage. +2. Ouvrez **Rebalance** (rééquilibrage). +3. Examinez les pools actifs et leurs ratios de capacité utilisée. +4. Sélectionnez **Start Rebalance** (démarrer le rééquilibrage) et confirmez l’opération. +5. Laissez la page ouverte, ou revenez-y périodiquement, pour suivre la progression de chaque pool. +6. Utilisez **Stop Rebalance** (arrêter le rééquilibrage) uniquement lorsque vous devez interrompre l’opération. Les données déjà déplacées restent dans leur nouveau pool. -![RustFS Console showing a rebalance in progress with moved bytes and objects](./images/rebalance-running-console.png) +![Console RustFS affichant un rééquilibrage en cours, avec les octets et les objets déplacés](./images/rebalance-running-console.png) -### Start rebalancing with rc +### Démarrer le rééquilibrage avec rc -Configure the cluster alias if it does not already exist: +Configurez l’alias du cluster s’il n’existe pas déjà : ```bash rc alias set rustfs http://:9000 ``` -Start the rebalance: +Démarrez le rééquilibrage : ```bash rc admin rebalance start rustfs ``` -Check progress: +Contrôlez la progression : ```bash rc admin rebalance status rustfs ``` -The status includes the operation ID and per-pool usage, moved bytes, object and version counts, remaining buckets, elapsed time, and estimated completion time when available. +Le statut comprend l’ID de l’opération et, pour chaque pool, l’utilisation, les octets déplacés, le nombre d’objets et de versions, les compartiments (bucket) restants, le temps écoulé et, lorsqu’elle est disponible, l’heure de fin estimée. -To stop a running rebalance: +Pour arrêter un rééquilibrage en cours : ```bash rc admin rebalance stop rustfs ``` -`rc admin expand start|status|stop` and the `scale` alias expose the same post-expansion rebalance workflow. +`rc admin expand start|status|stop` et l’alias `scale` exposent le même flux de rééquilibrage après une extension. -## Verification +## Vérification -### Verify rebalancing in the Console +### Vérifier le rééquilibrage dans la Console -Wait until the Rebalance page reports `Completed`. Confirm that: +Attendez que la page **Rebalance** indique `Completed`. Confirmez que : -![RustFS Console showing a completed rebalance and balanced pool usage](./images/rebalance-completed-console.png) +![Console RustFS affichant un rééquilibrage terminé et une utilisation équilibrée des pools](./images/rebalance-completed-console.png) -- No pool reports a failed or stopped state. -- Used-capacity ratios are closer across the active pools. -- All nodes and disks remain online. -- Normal object reads and writes succeed. +- Aucun pool ne signale un état d’échec ou d’arrêt. +- Les ratios de capacité utilisée se rapprochent entre les pools actifs. +- Tous les nœuds et tous les disques restent en ligne. +- Les lectures et les écritures d’objets habituelles réussissent. -### Verify rebalancing with rc +### Vérifier le rééquilibrage avec rc -Run: +Exécutez : ```bash rc admin rebalance status rustfs rc admin pool list rustfs ``` -Verify that the rebalance status is `Completed`, remaining bucket counts are zero, and no failure is reported. Compare the per-pool usage ratios with the values recorded before the operation, then read an existing object and write a new test object through the S3 endpoint. +Vérifiez que le statut du rééquilibrage est `Completed`, que les nombres de compartiments restants sont nuls et qu’aucun échec n’est signalé. Comparez les ratios d’utilisation de chaque pool aux valeurs relevées avant l’opération, puis lisez un objet existant et écrivez un nouvel objet de test par le point de terminaison S3. diff --git a/content/fr/operations/scaling/index.md b/content/fr/operations/scaling/index.md index ffa659899..76c733ffd 100644 --- a/content/fr/operations/scaling/index.md +++ b/content/fr/operations/scaling/index.md @@ -1,10 +1,10 @@ --- -title: "Scaling" -description: "Expand, rebalance, and retire RustFS storage pools." +title: "Montée en charge" +description: "Étendez, rééquilibrez et mettez hors service les pools de stockage RustFS." --- -Choose the workflow that matches the topology change: +Choisissez le flux qui correspond au changement de topologie : -- [Pool Expansion](./storage-pool-expansion.md) -- [Rebalancing](./data-rebalancing.md) -- [Pool Decommission](./storage-pool-decommission.md) \ No newline at end of file +- [Extension de pool](./storage-pool-expansion.md) +- [Rééquilibrage](./data-rebalancing.md) +- [Mise hors service d’un pool](./storage-pool-decommission.md) diff --git a/content/fr/operations/scaling/storage-pool-decommission.md b/content/fr/operations/scaling/storage-pool-decommission.md index 4b881793f..005b6dc8e 100644 --- a/content/fr/operations/scaling/storage-pool-decommission.md +++ b/content/fr/operations/scaling/storage-pool-decommission.md @@ -1,119 +1,119 @@ --- -title: "Pool Decommission" -description: "Drain and retire a RustFS storage pool through the Console or rc, then verify that its data was relocated." +title: "Mise hors service d’un pool" +description: "Videz un pool de stockage RustFS et mettez-le hors service depuis la Console ou avec rc, puis vérifiez que ses données ont été déplacées." --- -## Overview +## Vue d’ensemble -### Requirements +### Prérequis -- Install [`rc`](/operations/rc) on the administration host before using the `rc` workflow in this guide. -- Configure credentials with decommission administration permission. +- Installez [`rc`](/fr/operations/rc) sur l’hôte d’administration avant d’utiliser le flux `rc` de ce guide. +- Configurez des identifiants disposant de l’autorisation d’administration de la mise hors service. -**Pool decommission** moves objects from a selected pool to the remaining active pools so the target pool can be removed from the deployment. Use it when retiring hardware, replacing a pool, or consolidating capacity. +La **mise hors service d’un pool** déplace les objets d’un pool sélectionné vers les pools actifs restants, afin de pouvoir retirer le pool cible du déploiement. Utilisez-la pour mettre du matériel hors service, remplacer un pool ou consolider la capacité. -Decommission is different from [Rebalancing](./data-rebalancing.md): rebalance keeps every pool active, while decommission drains and retires the selected pool. The two operations cannot run at the same time. +La mise hors service diffère du [rééquilibrage](./data-rebalancing.md) : le rééquilibrage conserve chaque pool actif, tandis que la mise hors service vide le pool sélectionné, puis le retire du déploiement. Les deux opérations ne peuvent pas s’exécuter en même temps. -Before starting: +Avant de commencer : -- Keep at least one active pool after the operation. -- Verify that the remaining pools have enough free capacity. RustFS requires their free space to cover the used bytes being drained plus a 30% overhead. -- Confirm that every node and disk is healthy and no rebalance is running. -- Back up critical data and schedule the operation during a lower-traffic period. -- Record the exact pool ID and volume expression before selecting the target. +- Conservez au moins un pool actif après l’opération. +- Vérifiez que les pools restants disposent d’assez de capacité libre. RustFS exige que leur espace libre couvre les octets utilisés en cours de vidage, plus une marge de 30 %. +- Confirmez que chaque nœud et chaque disque est sain, et qu’aucun rééquilibrage n’est en cours. +- Sauvegardez les données critiques et planifiez l’opération pendant une période de plus faible trafic. +- Notez l’ID exact du pool et l’expression de volumes avant de sélectionner la cible. -Canceling a decommission does not roll back completed moves. Objects already relocated remain in the destination pools. +L’annulation d’une mise hors service n’annule pas les déplacements déjà effectués. Les objets déjà relocalisés restent dans les pools de destination. -## Operation +## Opération -### Start decommissioning in the Console +### Démarrer la mise hors service dans la Console -1. Sign in to the RustFS Console with an account that has decommission administration permission. -2. Open **Pool Decommission**. -3. Locate the pool to retire and verify its ID, volume expression, used capacity, and status. +1. Connectez-vous à la Console RustFS avec un compte disposant de l’autorisation d’administration de la mise hors service. +2. Ouvrez **Pool Decommission** (mise hors service du pool). +3. Repérez le pool à mettre hors service et vérifiez son ID, son expression de volumes, sa capacité utilisée et son statut. - ![RustFS Console showing the selected storage pool before decommissioning](./images/pool-decommission-selection-console.png) + ![Console RustFS affichant le pool de stockage sélectionné avant la mise hors service](./images/pool-decommission-selection-console.png) -4. Select **Start Decommission** for that pool. -5. Review the confirmation dialog carefully, then select **Start Decommission**. +4. Sélectionnez **Start Decommission** (démarrer la mise hors service) pour ce pool. +5. Examinez attentivement la boîte de dialogue de confirmation, puis sélectionnez **Start Decommission**. - ![RustFS Console showing the pool decommission confirmation dialog](./images/pool-decommission-confirmation-console.png) + ![Console RustFS affichant la boîte de dialogue de confirmation de la mise hors service du pool](./images/pool-decommission-confirmation-console.png) -6. Use **Sync** to refresh the pool state and movement counters until the operation completes. +6. Utilisez **Sync** (synchroniser) pour actualiser l’état du pool et les compteurs de déplacement jusqu’à la fin de l’opération. - ![RustFS Console showing pool decommission progress and movement counters](./images/pool-decommission-running-console.png) + ![Console RustFS affichant la progression de la mise hors service du pool et les compteurs de déplacement](./images/pool-decommission-running-console.png) -After completion, remove the drained pool expression from `RUSTFS_VOLUMES` on every remaining node and restart RustFS with the same ordered topology. For Helm, decommission the pool before removing its entry from `pools.list`; never remove or reorder a live pool entry. +Une fois l’opération terminée, retirez l’expression du pool vidé de `RUSTFS_VOLUMES` sur chaque nœud restant et redémarrez RustFS avec la même topologie ordonnée. Avec Helm, mettez le pool hors service avant de retirer son entrée de `pools.list` ; ne retirez ni ne réordonnez jamais une entrée de pool encore en service. -![RustFS Console showing the selected pool with a completed decommission status](./images/pool-decommission-completed-console.png) +![Console RustFS affichant le pool sélectionné avec un statut de mise hors service terminée](./images/pool-decommission-completed-console.png) -### Start decommissioning with rc +### Démarrer la mise hors service avec rc -Configure the cluster alias if needed, then list the pools: +Configurez l’alias du cluster si nécessaire, puis listez les pools : ```bash rc alias set rustfs http://:9000 rc admin pool list rustfs ``` -Start decommissioning pool `0` by its zero-based ID: +Démarrez la mise hors service du pool `0` à l’aide de son ID à base zéro : ```bash rc admin decommission start rustfs 0 --by-id ``` -You can instead pass the exact pool volume expression without `--by-id`: +Vous pouvez aussi transmettre l’expression de volumes exacte du pool, sans `--by-id` : ```bash rc admin decommission start rustfs 'http://rustfs-node1:9000/data/rustfs{1...4}/mnmd' ``` -Monitor all pools or only the target pool: +Surveillez tous les pools, ou seulement le pool cible : ```bash rc admin decommission status rustfs rc admin decommission status rustfs 0 --by-id ``` -To cancel a running operation, use: +Pour annuler une opération en cours, utilisez : ```bash rc admin decommission cancel rustfs 0 --by-id ``` -If a decommission is failed or canceled, clear its metadata before retrying: +Si une mise hors service a échoué ou a été annulée, effacez ses métadonnées avant de réessayer : ```bash rc admin decommission clear rustfs 0 --by-id ``` -After the target reports `complete`, remove its expression from `RUSTFS_VOLUMES` on every remaining node and restart RustFS with the reduced topology. +Lorsque la cible indique `complete`, retirez son expression de `RUSTFS_VOLUMES` sur chaque nœud restant et redémarrez RustFS avec la topologie réduite. -## Verification +## Vérification -### Verify decommissioning in the Console +### Vérifier la mise hors service dans la Console -Confirm that the target pool reports `Completed`, with zero failed objects and zero failed bytes. After removing the pool from the startup topology and restarting RustFS, verify that: +Confirmez que le pool cible indique `Completed`, avec zéro objet en échec et zéro octet en échec. Après avoir retiré le pool de la topologie de démarrage et redémarré RustFS, vérifiez que : -![RustFS Console showing only the remaining pool after the retired pool was removed](./images/pool-decommission-final-topology-console.png) +![Console RustFS n’affichant que le pool restant après le retrait du pool mis hors service](./images/pool-decommission-final-topology-console.png) -- The retired pool no longer appears as an active pool. -- Every remaining node and disk is online. -- Remaining pools show the relocated data and have adequate free capacity. -- Existing objects can still be listed, read, and downloaded. +- Le pool mis hors service n’apparaît plus comme pool actif. +- Chaque nœud et chaque disque restant est en ligne. +- Les pools restants affichent les données déplacées et disposent d’une capacité libre suffisante. +- Les objets existants peuvent toujours être listés, lus et téléchargés. -### Verify decommissioning with rc +### Vérifier la mise hors service avec rc -Before removing the pool from the topology, run: +Avant de retirer le pool de la topologie, exécutez : ```bash rc admin decommission status rustfs 0 --by-id ``` -Confirm that the status is `complete` and the failed object and byte counters are zero. After updating `RUSTFS_VOLUMES` and restarting RustFS, run: +Confirmez que le statut est `complete` et que les compteurs d’objets et d’octets en échec sont à zéro. Après avoir mis à jour `RUSTFS_VOLUMES` et redémarré RustFS, exécutez : ```bash rc admin pool list rustfs ``` -Verify that only the intended active pools remain. Read objects that previously resided on the retired pool and write a new test object through the S3 endpoint. +Vérifiez que seuls les pools actifs prévus subsistent. Lisez des objets qui résidaient auparavant sur le pool mis hors service, puis écrivez un nouvel objet de test par le point de terminaison S3. diff --git a/content/fr/operations/scaling/storage-pool-expansion.md b/content/fr/operations/scaling/storage-pool-expansion.md index e5cb761e7..cea8eeadc 100644 --- a/content/fr/operations/scaling/storage-pool-expansion.md +++ b/content/fr/operations/scaling/storage-pool-expansion.md @@ -1,104 +1,104 @@ --- -title: "Pool Expansion" -description: "Add a storage pool to a RustFS cluster and verify the expanded topology through the Console or rc." +title: "Extension de pool" +description: "Ajoutez un pool de stockage à un cluster RustFS et vérifiez la topologie étendue depuis la Console ou avec rc." --- -## Overview +## Vue d’ensemble -### Requirements +### Prérequis -- Install [`rc`](/operations/rc) on the administration host before using the `rc` workflow in this guide. -- Configure credentials with permission to read RustFS cluster and pool status. +- Installez [`rc`](/fr/operations/rc) sur l’hôte d’administration avant d’utiliser le flux `rc` de ce guide. +- Configurez des identifiants autorisés à lire l’état du cluster et des pools RustFS. -RustFS expands capacity by appending a **server pool** to the cluster topology. Each pool is one space-separated volume expression in `RUSTFS_VOLUMES`. After the expanded topology is applied, new writes can use the added capacity; existing objects remain in their current pools until you run [Rebalancing](./data-rebalancing.md). +RustFS étend la capacité en ajoutant un **pool de serveurs** à la topologie du cluster. Chaque pool correspond à une expression de volumes, séparée par des espaces, dans `RUSTFS_VOLUMES`. Une fois la topologie étendue appliquée, les nouvelles écritures peuvent utiliser la capacité ajoutée ; les objets existants restent dans leurs pools actuels jusqu’à ce que vous lanciez un [rééquilibrage](./data-rebalancing.md). -This guide uses the following two-pool example: +Ce guide utilise l’exemple à deux pools suivant : ```ini title="/etc/default/rustfs" RUSTFS_VOLUMES="http://rustfs-node1:9000/data/rustfs{1...4}/mnmd http://rustfs-node2:9000/data/rustfs{1...4}/mnmd" ``` -Before expanding: +Avant d’étendre : -- Back up critical data and run the workflow during a maintenance window. -- Use the same RustFS version, credentials, and complete `RUSTFS_VOLUMES` value on every node. -- Verify name resolution, time synchronization, and port `9000` connectivity between all old and new nodes. -- Prepare the new pool with the intended disk count and storage specification. +- Sauvegardez les données critiques et exécutez le flux pendant une fenêtre de maintenance. +- Utilisez la même version de RustFS, les mêmes identifiants et la valeur complète de `RUSTFS_VOLUMES` sur chaque nœud. +- Vérifiez la résolution de noms, la synchronisation de l’heure et la connectivité du port `9000` entre tous les anciens et les nouveaux nœuds. +- Préparez le nouveau pool avec le nombre de disques et la spécification de stockage prévus. -:::warning[Append the pool; do not replace the topology] +:::warning[Ajoutez le pool ; ne remplacez pas la topologie] -Every node must start with the complete ordered pool list. Omitting the existing pool or using a different expression on one node creates an inconsistent topology. +Chaque nœud doit démarrer avec la liste ordonnée complète des pools. Omettre le pool existant, ou utiliser une expression différente sur un nœud, crée une topologie incohérente. ::: -## Operation +## Opération -### Expand with Console assistance +### Étendre avec l’aide de la Console -The Console displays storage pools but does not add a pool to the server startup topology. Use this Console-assisted workflow: +La Console affiche les pools de stockage, mais elle n’ajoute pas de pool à la topologie de démarrage du serveur. Utilisez ce flux assisté par la Console : -1. Record the existing pools and their usage from **Rebalance** or **Pool Decommission**. -2. Install the same RustFS version and service configuration on the new pool node or nodes. -3. Append the new pool expression to `RUSTFS_VOLUMES` on every existing and new node. Keep the existing expressions unchanged and in the same order. -4. Restart RustFS across all nodes so every process starts with the same expanded topology. -5. Wait for all nodes to become ready, then refresh the pool list in the Console. +1. Relevez les pools existants et leur utilisation depuis **Rebalance** (rééquilibrage) ou **Pool Decommission** (mise hors service du pool). +2. Installez la même version de RustFS et la même configuration de service sur le ou les nœuds du nouveau pool. +3. Ajoutez l’expression du nouveau pool à `RUSTFS_VOLUMES` sur chaque nœud existant et nouveau. Conservez les expressions existantes inchangées et dans le même ordre. +4. Redémarrez RustFS sur tous les nœuds, afin que chaque processus démarre avec la même topologie étendue. +5. Attendez que tous les nœuds soient prêts, puis actualisez la liste des pools dans la Console. -![RustFS Console showing the original and newly added storage pools](./images/pool-expansion-console.png) +![Console RustFS affichant le pool de stockage d’origine et le pool nouvellement ajouté](./images/pool-expansion-console.png) -For a Helm deployment, append the new entry to `pools.list` and apply `helm upgrade`. Do not remove or reorder existing entries. +Pour un déploiement Helm, ajoutez la nouvelle entrée à `pools.list` et appliquez `helm upgrade`. Ne retirez ni ne réordonnez les entrées existantes. -### Inspect the expansion with rc +### Inspecter l’extension avec rc -Configure an alias with credentials that can read cluster and pool status: +Configurez un alias avec des identifiants capables de lire l’état du cluster et des pools : ```bash rc alias set rustfs http://:9000 ``` -Record the current topology: +Relevez la topologie actuelle : ```bash rc admin pool list rustfs ``` -Prepare the new nodes, append the new pool expression to the complete `RUSTFS_VOLUMES` value on every node, and restart RustFS across the cluster. `rc` does not mutate the server startup topology. +Préparez les nouveaux nœuds, ajoutez l’expression du nouveau pool à la valeur complète de `RUSTFS_VOLUMES` sur chaque nœud, puis redémarrez RustFS sur l’ensemble du cluster. `rc` ne modifie pas la topologie de démarrage du serveur. -After the cluster returns, list the pools again: +Lorsque le cluster est de nouveau disponible, listez encore les pools : ```bash rc admin pool list rustfs ``` -Use a zero-based pool ID to inspect the new pool in detail: +Utilisez un ID de pool à base zéro pour inspecter le nouveau pool en détail : ```bash rc admin pool status rustfs 1 --by-id ``` -:::note[Rebalance aliases] +:::note[Alias de rééquilibrage] -`rc admin expand start`, `status`, and `stop` are aliases for the post-expansion rebalance workflow. They redistribute existing data; they do not append a pool to `RUSTFS_VOLUMES`. +`rc admin expand start`, `status` et `stop` sont des alias du flux de rééquilibrage qui suit une extension. Ils redistribuent les données existantes ; ils n’ajoutent pas de pool à `RUSTFS_VOLUMES`. ::: -## Verification +## Vérification -### Verify the expansion in the Console +### Vérifier l’extension dans la Console -Confirm that: +Confirmez que : -- The pool list shows the original pool and the new pool. -- Every expected node and disk is online. -- The new pool reports the expected total and available capacity. -- The cluster reports no degraded nodes before you resume normal traffic. +- La liste des pools affiche le pool d’origine et le nouveau pool. +- Chaque nœud et chaque disque attendu est en ligne. +- Le nouveau pool indique la capacité totale et la capacité disponible attendues. +- Le cluster ne signale aucun nœud dégradé avant que vous repreniez le trafic normal. -### Verify the expansion with rc +### Vérifier l’extension avec rc -Run: +Exécutez : ```bash rc admin pool list rustfs rc admin pool status rustfs 1 --by-id ``` -Verify that the new pool has the expected command-line expression and an active state. Write and read a test object through the normal S3 endpoint before starting a rebalance. +Vérifiez que le nouveau pool possède l’expression de ligne de commande attendue et un état actif. Écrivez puis lisez un objet de test par le point de terminaison S3 habituel avant de démarrer un rééquilibrage. diff --git a/content/fr/operations/status-check.md b/content/fr/operations/status-check.md index 9627a3b5e..e67dbe38c 100644 --- a/content/fr/operations/status-check.md +++ b/content/fr/operations/status-check.md @@ -1,26 +1,26 @@ --- -title: "Status Check" -description: "Check RustFS network access, health endpoints, cluster status, and storage capacity." +title: "Contrôle d’état" +description: "Vérifiez l’accès réseau de RustFS, les points de terminaison de contrôle d’intégrité, l’état du cluster et la capacité de stockage." --- -Use network probes, the **Status** page in the RustFS Console, or the `rc` command line to review RustFS availability and storage consumption. Before using the command-line workflow, [install `rc`](/operations/rc) and configure an alias for the target cluster. +Utilisez des sondes réseau, la page **Status** (état) de la Console RustFS, ou la ligne de commande `rc` pour examiner la disponibilité de RustFS et la consommation de stockage. Avant d’utiliser le flux en ligne de commande, [installez `rc`](/fr/operations/rc) et configurez un alias pour le cluster cible. -## Network ports +## Ports réseau -RustFS uses two listeners by default. You can change both bind addresses through environment variables or command-line flags. +RustFS utilise deux écouteurs par défaut. Vous pouvez modifier les deux adresses d’écoute par des variables d’environnement ou des indicateurs de ligne de commande. -| Port | Listener | Configured by | Traffic | +| Port | Écouteur | Configuré par | Trafic | | --- | --- | --- | --- | -| `9000` | S3 API | `RUSTFS_ADDRESS` / `--address` | S3 object API, admin API, and internal node-to-node RPC under `/rustfs/rpc/` and `/rustfs/peer/` | -| `9001` | Console | `RUSTFS_CONSOLE_ADDRESS` / `--console-address` | Embedded web console under `/rustfs/console/`; disable it with `RUSTFS_CONSOLE_ENABLE=false` | +| `9000` | API S3 | `RUSTFS_ADDRESS` / `--address` | API objet S3, API d’administration et RPC interne de nœud à nœud sous `/rustfs/rpc/` et `/rustfs/peer/` | +| `9001` | Console | `RUSTFS_CONSOLE_ADDRESS` / `--console-address` | Console web intégrée sous `/rustfs/console/` ; désactivez-la avec `RUSTFS_CONSOLE_ENABLE=false` | -:::note[Internode connectivity] +:::note[Connectivité entre nœuds] -Internode RPC shares port 9000. In a multi-node cluster, every node must be able to reach every other node on the S3 port; there is no separate cluster port. +Le RPC entre nœuds partage le port 9000. Dans un cluster multi-nœuds, chaque nœud doit pouvoir joindre chaque autre nœud sur le port S3 ; il n’existe pas de port de cluster distinct. ::: -Open the default ports with `firewalld` when clients need to reach both listeners: +Ouvrez les ports par défaut avec `firewalld` lorsque les clients doivent joindre les deux écouteurs : ```bash title="firewall-cmd" firewall-cmd --permanent --add-port=9000/tcp @@ -28,25 +28,25 @@ firewall-cmd --permanent --add-port=9001/tcp firewall-cmd --reload ``` -:::warning[Restrict console access] +:::warning[Limitez l’accès à la Console] -Expose port 9001 only to trusted networks. If you do not need the console, set `RUSTFS_CONSOLE_ENABLE=false` and leave the port closed. +N’exposez le port 9001 qu’à des réseaux de confiance. Si vous n’avez pas besoin de la Console, définissez `RUSTFS_CONSOLE_ENABLE=false` et laissez le port fermé. ::: -## Health endpoints +## Points de terminaison de contrôle d’intégrité -The S3 listener on port **9000** serves unauthenticated probe endpoints. Disable them with `RUSTFS_HEALTH_ENDPOINT_ENABLE=false`. The console on port **9001** has its own health path. +L’écouteur S3 sur le port **9000** sert des points de terminaison de sonde non authentifiés. Désactivez-les avec `RUSTFS_HEALTH_ENDPOINT_ENABLE=false`. La Console sur le port **9001** a son propre chemin de contrôle d’intégrité. -| Endpoint | Port | Meaning | +| Point de terminaison | Port | Signification | | --- | --- | --- | -| `GET /health`, `HEAD /health`, `GET /health/live`, `GET /minio/health/live` | 9000 | Liveness — returns `200` as long as the process is up | -| `GET /health/ready` | 9000 | Readiness — `200` only when storage, IAM, and peer health are ready; `503` otherwise | -| `GET /minio/health/ready` | 9000 | MinIO-compatible alias of the readiness probe | -| `GET /minio/health/cluster`, `GET /minio/health/cluster/read` | 9000 | Cluster write/read health (additionally require lock quorum) | -| `GET /rustfs/console/health` | 9001 | Console process health | +| `GET /health`, `HEAD /health`, `GET /health/live`, `GET /minio/health/live` | 9000 | Vivacité — renvoie `200` tant que le processus est actif | +| `GET /health/ready` | 9000 | État de préparation — `200` seulement lorsque le stockage, l’IAM et l’intégrité des pairs sont prêts ; `503` sinon | +| `GET /minio/health/ready` | 9000 | Alias compatible avec MinIO de la sonde d’état de préparation | +| `GET /minio/health/cluster`, `GET /minio/health/cluster/read` | 9000 | Intégrité d’écriture et de lecture du cluster (exige en plus le quorum de verrouillage) | +| `GET /rustfs/console/health` | 9001 | Intégrité du processus Console | -A ready node answers `200` with `"ready": true`. A degraded node answers `503` with per-dependency detail: +Un nœud à l’état de préparation répond `200` avec `"ready": true`. Un nœud dégradé répond `503` avec le détail par dépendance : ```bash title="Probe examples" curl -fsS http://localhost:9000/health @@ -54,60 +54,60 @@ curl -s http://:9000/health/ready | jq curl -fsS http://localhost:9001/rustfs/console/health ``` -The `details` object reports `storage` / `iam` / `lock` (and `kms` when configured), and `degradedReasons` lists machine-readable causes such as `storage_quorum_unavailable`, `iam_not_ready`, or `lock_quorum_unavailable`. +L’objet `details` indique `storage` / `iam` / `lock` (et `kms` lorsqu’il est configuré), et `degradedReasons` liste des causes lisibles par une machine telles que `storage_quorum_unavailable`, `iam_not_ready` ou `lock_quorum_unavailable`. -## Cluster status +## État du cluster -### Check cluster status in the Console +### Vérifier l’état du cluster dans la Console -1. Sign in to the RustFS Console. -2. Open **Status**. -3. Confirm that the cluster is online and review the server, network, and drive status. -4. Investigate any offline server, unavailable drive, or failed network connection before maintenance or capacity changes. +1. Connectez-vous à la Console RustFS. +2. Ouvrez **Status**. +3. Vérifiez que le cluster est en ligne et examinez l’état des serveurs, du réseau et des disques. +4. Analysez tout serveur hors ligne, tout disque indisponible ou toute connexion réseau en échec avant une maintenance ou un changement de capacité. -### Check cluster status with rc +### Vérifier l’état du cluster avec rc -Run the cluster information command with your configured alias: +Exécutez la commande d’information du cluster avec votre alias configuré : ```bash rc admin info cluster rustfs ``` -The overview reports the cluster state, RustFS version, server and disk counts, backend type, and erasure-coding parity. The node list shows uptime, network connectivity, drive availability, and pool membership. The disk list shows each drive's state and pool, set, and disk location. +La vue d’ensemble indique l’état du cluster, la version de RustFS, le nombre de serveurs et de disques, le type de backend et la parité du codage d’effacement. La liste des nœuds montre la durée de fonctionnement, la connectivité réseau, la disponibilité des disques et l’appartenance aux pools. La liste des disques montre l’état de chaque disque ainsi que l’emplacement du pool, de l’ensemble et du disque. -For machine-readable output, request JSON: +Pour une sortie lisible par une machine, demandez le JSON : ```bash rc admin info cluster rustfs --json ``` -## Storage capacity +## Capacité de stockage -### Check storage capacity in the Console +### Vérifier la capacité de stockage dans la Console -1. Sign in to the RustFS Console and open **Status**. -2. Review the cluster's used and total storage capacity. -3. Review the capacity and available space for each disk. -4. Compare usage over time and plan expansion before available capacity becomes insufficient for normal writes and maintenance. +1. Connectez-vous à la Console RustFS et ouvrez **Status**. +2. Examinez la capacité de stockage utilisée et totale du cluster. +3. Examinez la capacité et l’espace disponible de chaque disque. +4. Comparez l’utilisation dans le temps et planifiez une extension avant que la capacité disponible ne devienne insuffisante pour les écritures normales et la maintenance. -### Check storage capacity with rc +### Vérifier la capacité de stockage avec rc -Use the same cluster information command: +Utilisez la même commande d’information du cluster : ```bash rc admin info cluster rustfs ``` -The **Storage** summary reports used capacity, total capacity, and the used percentage for the cluster. Each entry under **Disks** reports used, total, and available capacity for that drive. +Le résumé **Storage** (stockage) indique la capacité utilisée, la capacité totale et le pourcentage utilisé pour le cluster. Chaque entrée sous **Disks** (disques) indique la capacité utilisée, totale et disponible de ce disque. -Use JSON output when collecting the values in a script or monitoring integration: +Utilisez la sortie JSON lorsque vous collectez les valeurs dans un script ou une intégration de supervision : ```bash rc admin info cluster rustfs --json ``` -Administrative information commands require credentials with the corresponding RustFS Admin API permissions. +Les commandes d’information d’administration exigent des identifiants disposant des permissions correspondantes de l’API d’administration RustFS. -## Next steps +## Étapes suivantes -For continuous telemetry and alerting, continue with [Observability](./observability.md). To add storage, review [Pool Expansion](./scaling/storage-pool-expansion.md). +Pour la télémétrie continue et l’alerte, poursuivez avec l’[Observabilité](./observability.md). Pour ajouter du stockage, consultez l’[Extension de pool](./scaling/storage-pool-expansion.md). diff --git a/content/fr/operations/upgrade/binary/index.md b/content/fr/operations/upgrade/binary/index.md index 594d2abe0..9ad1388a8 100644 --- a/content/fr/operations/upgrade/binary/index.md +++ b/content/fr/operations/upgrade/binary/index.md @@ -1,28 +1,28 @@ --- -title: "Binary Upgrade" -description: "Upgrade RustFS binary deployments one node at a time while preserving cluster availability." +title: "Mise à niveau du binaire" +description: "Mettez à niveau les déploiements binaires de RustFS un nœud à la fois, tout en préservant la disponibilité du cluster." --- -Use a rolling upgrade to replace the RustFS executable on each node without taking the entire cluster offline. Before you begin, read the target release notes and confirm every node is healthy. +Utilisez une mise à niveau progressive pour remplacer l’exécutable RustFS sur chaque nœud sans mettre l’ensemble du cluster hors ligne. Avant de commencer, lisez les notes de la version cible et confirmez que chaque nœud est sain. -## Before you upgrade +## Avant la mise à niveau -Check readiness on every node: +Vérifiez l’état de préparation sur chaque nœud : ```bash curl -fsS http://:9000/health/ready ``` -Back up the service configuration and retain the currently running executable for rollback: +Sauvegardez la configuration du service et conservez l’exécutable en cours d’exécution pour le retour arrière : ```bash sudo cp /etc/default/rustfs /etc/default/rustfs.bak sudo cp /usr/local/bin/rustfs /usr/local/bin/rustfs.previous ``` -## Upgrade each node +## Mettre à niveau chaque nœud -Upgrade one node at a time. Do not continue until the restarted node reports ready. +Mettez à niveau un nœud à la fois. Ne continuez pas tant que le nœud redémarré ne se déclare pas prêt. ```bash sudo systemctl stop rustfs @@ -32,11 +32,11 @@ sudo systemctl start rustfs curl -fsS http://:9000/health/ready ``` -Repeat the procedure for each remaining node. +Répétez la procédure pour chaque nœud restant. -## Roll back +## Revenir en arrière -If the new version fails validation, restore the previous executable on one node at a time and wait for readiness before continuing: +Si la nouvelle version échoue à la validation, restaurez l’exécutable précédent un nœud à la fois et attendez l’état de préparation avant de continuer : ```bash sudo systemctl stop rustfs @@ -45,6 +45,6 @@ sudo systemctl start rustfs curl -fsS http://:9000/health/ready ``` -## Next steps +## Étapes suivantes -Review [Status Check](/operations/status-check) for additional post-upgrade validation. \ No newline at end of file +Consultez [Contrôle de l’état](/fr/operations/status-check) pour une validation supplémentaire après la mise à niveau. diff --git a/content/fr/operations/upgrade/container/index.md b/content/fr/operations/upgrade/container/index.md index e9e388f14..4192300bd 100644 --- a/content/fr/operations/upgrade/container/index.md +++ b/content/fr/operations/upgrade/container/index.md @@ -1,45 +1,45 @@ --- -title: "Container Upgrade" -description: "Upgrade RustFS containers started with Docker, Podman, or Docker Compose while preserving persistent data." +title: "Mise à niveau de conteneur" +description: "Mettez à niveau les conteneurs RustFS démarrés avec Docker, Podman ou Docker Compose tout en préservant les données persistantes." --- -Upgrade a container deployment by recreating the RustFS container from a newer image. Choose the workflow that matches the original installation method: a container started directly with Docker or Podman, or a service managed by Docker Compose. +Mettez à niveau un déploiement en conteneur en recréant le conteneur RustFS à partir d’une image plus récente. Choisissez le flux qui correspond à la méthode d’installation d’origine : un conteneur démarré directement avec Docker ou Podman, ou un service géré par Docker Compose. -## Before you upgrade +## Avant la mise à niveau -Read the target release notes and use an explicit image tag for the upgrade. Record the current image and retain the original `docker run`, `podman run`, or Compose configuration because recreating a container does not copy its runtime options automatically. +Lisez les notes de la version cible et utilisez une étiquette d’image explicite pour la mise à niveau. Notez l’image actuelle et conservez la commande `docker run`, `podman run` ou la configuration Compose d’origine, car la recréation d’un conteneur ne copie pas automatiquement ses options d’exécution. -Confirm that RustFS is healthy before replacing it: +Confirmez que RustFS est sain avant de le remplacer : ```bash curl -fsS http://localhost:9000/health/ready ``` -:::warning[Preserve persistent storage] +:::warning[Préservez le stockage persistant] -Do not remove the named volume or host directory mounted at `/data`. Commands such as `docker compose down -v`, `docker volume rm`, and `podman volume rm` delete persistent storage and are not part of an upgrade. +Ne supprimez pas le volume nommé ni le répertoire de l’hôte monté sur `/data`. Des commandes telles que `docker compose down -v`, `docker volume rm` et `podman volume rm` suppriment le stockage persistant et ne font pas partie d’une mise à niveau. ::: -## Upgrade a Docker container +## Mettre à niveau un conteneur Docker -The following workflow matches the container name and named volume used in the [Docker installation guide](/installation/container/docker). If your deployment uses different ports, environment variables, mounts, or startup arguments, keep those settings unchanged in the replacement command. +Le flux suivant correspond au nom de conteneur et au volume nommé utilisés dans le [guide d’installation Docker](/fr/installation/container/docker). Si votre déploiement utilise d’autres ports, variables d’environnement, montages ou arguments de démarrage, conservez ces réglages inchangés dans la commande de remplacement. -Record the current image, then pull the target version: +Notez l’image actuelle, puis récupérez la version cible : ```bash docker inspect --format '{{.Config.Image}}' rustfs docker pull rustfs/rustfs: ``` -Stop and remove only the container. The `rustfs-data` volume remains intact: +Arrêtez et supprimez uniquement le conteneur. Le volume `rustfs-data` reste intact : ```bash docker stop rustfs docker rm rustfs ``` -Recreate the container with the original configuration and the target image: +Recréez le conteneur avec la configuration d’origine et l’image cible : ```bash docker run -d \ @@ -59,7 +59,7 @@ docker run -d \ /data ``` -Wait for the replacement container to become healthy: +Attendez que le conteneur de remplacement soit sain : ```bash docker ps --filter name=rustfs @@ -67,9 +67,9 @@ docker logs rustfs curl -fsS http://localhost:9000/health/ready ``` -## Upgrade a Podman container +## Mettre à niveau un conteneur Podman -The Podman workflow is the same replacement operation, using the image name from the [Podman installation guide](/installation/container/podman). +Le flux Podman est la même opération de remplacement, avec le nom d’image du [guide d’installation Podman](/fr/installation/container/podman). ```bash podman inspect --format '{{.Config.Image}}' rustfs @@ -78,7 +78,7 @@ podman stop rustfs podman rm rustfs ``` -Recreate the container with the original configuration and persistent volume: +Recréez le conteneur avec la configuration d’origine et le volume persistant : ```bash podman run -d \ @@ -97,7 +97,7 @@ podman run -d \ /data ``` -Verify the replacement before continuing: +Vérifiez le remplacement avant de continuer : ```bash podman ps --filter name=rustfs @@ -105,16 +105,16 @@ podman logs rustfs curl -fsS http://localhost:9000/health/ready ``` -## Upgrade with Docker Compose +## Mettre à niveau avec Docker Compose -Run Compose commands from the directory containing the deployment's `docker-compose.yml`. Before the upgrade, save the fully resolved configuration and confirm the current image: +Exécutez les commandes Compose depuis le répertoire qui contient le fichier `docker-compose.yml` du déploiement. Avant la mise à niveau, enregistrez la configuration entièrement résolue et confirmez l’image actuelle : ```bash docker compose config > docker-compose.resolved.yaml docker compose images rustfs ``` -Change the `rustfs` service to an explicit target image tag while leaving its volumes, environment, ports, and command unchanged: +Passez le service `rustfs` à une étiquette d’image cible explicite, en laissant inchangés ses volumes, son environnement, ses ports et sa commande : ```yaml title="docker-compose.yml" services: @@ -122,7 +122,7 @@ services: image: rustfs/rustfs: ``` -Validate the file, pull the target image, and recreate only the RustFS service. `--no-deps` leaves optional observability services running: +Validez le fichier, récupérez l’image cible et recréez uniquement le service RustFS. `--no-deps` laisse les services d’observabilité facultatifs en cours d’exécution : ```bash docker compose config --quiet @@ -130,7 +130,7 @@ docker compose pull rustfs docker compose up -d --no-deps rustfs ``` -Check the service and the RustFS readiness endpoint: +Contrôlez le service et le point de terminaison d’état de préparation de RustFS : ```bash docker compose ps rustfs @@ -138,19 +138,19 @@ docker compose logs --tail=100 rustfs curl -fsS http://localhost:9000/health/ready ``` -If you started RustFS together with the `observability` profile, the RustFS service still upgrades with the same commands. Upgrade observability images separately according to each component's release notes. +Si vous avez démarré RustFS avec le profil `observability`, le service RustFS se met tout de même à niveau avec les mêmes commandes. Mettez à niveau les images d’observabilité séparément, selon les notes de version de chaque composant. -## Upgrade a multi-node deployment +## Mettre à niveau un déploiement à plusieurs nœuds -Replace one RustFS node at a time. Wait for the upgraded node's readiness endpoint to succeed and confirm cluster status before proceeding to the next node. Do not recreate all nodes simultaneously. +Remplacez un nœud RustFS à la fois. Attendez que le point de terminaison d’état de préparation du nœud mis à niveau réussisse, et confirmez l’état du cluster avant de passer au nœud suivant. Ne recréez pas tous les nœuds en même temps. -Use the same Docker, Podman, or Compose workflow on each node, preserving that node's existing mounts and configuration. +Utilisez le même flux Docker, Podman ou Compose sur chaque nœud, en préservant les montages et la configuration déjà en place sur ce nœud. -## Roll back +## Revenir en arrière -For Docker or Podman, stop and remove the failed replacement container, then repeat the corresponding `run` command with the previously recorded image tag. Keep the same persistent volume and runtime configuration. +Pour Docker ou Podman, arrêtez et supprimez le conteneur de remplacement en échec, puis répétez la commande `run` correspondante avec l’étiquette d’image précédemment notée. Conservez le même volume persistant et la même configuration d’exécution. -For Docker Compose, restore the previous `image` value in `docker-compose.yml`, then recreate the RustFS service: +Pour Docker Compose, restaurez la valeur `image` précédente dans `docker-compose.yml`, puis recréez le service RustFS : ```bash docker compose pull rustfs @@ -158,8 +158,8 @@ docker compose up -d --no-deps rustfs curl -fsS http://localhost:9000/health/ready ``` -In a multi-node deployment, roll back one node at a time and wait for readiness before continuing. +Dans un déploiement à plusieurs nœuds, revenez en arrière un nœud à la fois et attendez l’état de préparation avant de continuer. -## Next steps +## Étapes suivantes -Review [Status Check](/operations/status-check) for additional post-upgrade validation. \ No newline at end of file +Consultez [Contrôle de l’état](/fr/operations/status-check) pour une validation supplémentaire après la mise à niveau. diff --git a/content/fr/operations/upgrade/index.md b/content/fr/operations/upgrade/index.md index b9521a4a7..9e36f75c4 100644 --- a/content/fr/operations/upgrade/index.md +++ b/content/fr/operations/upgrade/index.md @@ -1,14 +1,14 @@ --- -title: "Upgrade" -description: "Plan and perform RustFS upgrades while preserving cluster availability." +title: "Mise à niveau" +description: "Planifiez et effectuez les mises à niveau de RustFS tout en préservant la disponibilité du cluster." --- -Choose the upgrade workflow that matches how you deploy RustFS. For multi-node clusters, replace one node or pod at a time and wait for it to report ready before continuing. +Choisissez le flux de mise à niveau qui correspond à la façon dont vous déployez RustFS. Pour les clusters à plusieurs nœuds, remplacez un nœud ou un pod à la fois et attendez qu’il se déclare prêt avant de continuer. -## Deployment methods +## Modes de déploiement -- [Binary Upgrade](./binary/index.md) covers systemd-managed executable replacement and rollback. -- [Container Upgrade](./container/index.md) covers image replacement with persistent data volumes. -- [Kubernetes Upgrade](./kubernetes/index.md) covers Helm- and Operator-managed workloads. +- [Mise à niveau du binaire](./binary/index.md) couvre le remplacement et le retour arrière d’un exécutable géré par systemd. +- [Mise à niveau de conteneur](./container/index.md) couvre le remplacement d’image avec des volumes de données persistants. +- [Mise à niveau Kubernetes](./kubernetes/index.md) couvre les charges de travail gérées par Helm et par l’Operator. -Before any upgrade, read the target release notes and confirm the cluster is healthy. \ No newline at end of file +Avant toute mise à niveau, lisez les notes de la version cible et confirmez que le cluster est sain. diff --git a/content/fr/operations/upgrade/kubernetes/index.md b/content/fr/operations/upgrade/kubernetes/index.md index 9914e1465..bfbce3080 100644 --- a/content/fr/operations/upgrade/kubernetes/index.md +++ b/content/fr/operations/upgrade/kubernetes/index.md @@ -1,26 +1,26 @@ --- -title: "Kubernetes Upgrade" -description: "Upgrade RustFS deployments managed by the Helm chart or RustFS Operator and verify each rollout." +title: "Mise à niveau Kubernetes" +description: "Mettez à niveau les déploiements RustFS gérés par le chart Helm ou par RustFS Operator, puis vérifiez chaque déploiement." --- -Upgrade a Kubernetes deployment through the tool that owns its resources. Use Helm for a direct RustFS Helm chart installation. For an Operator installation, upgrade the Operator release and each Tenant through their respective declarative configurations. +Mettez à niveau un déploiement Kubernetes avec l’outil qui possède ses ressources. Utilisez Helm pour une installation directe du chart Helm RustFS. Pour une installation avec l’Operator, mettez à niveau la version de l’Operator et chaque Tenant au moyen de leurs configurations déclaratives respectives. -## Before you upgrade +## Avant la mise à niveau -Read the RustFS, chart, and Operator release notes that apply to your deployment. Confirm that the cluster has enough capacity to replace pods and that all current workloads are ready: +Lisez les notes de version de RustFS, du chart et de l’Operator qui s’appliquent à votre déploiement. Confirmez que le cluster dispose d’assez de capacité pour remplacer les pods et que toutes les charges de travail actuelles sont prêtes : ```bash kubectl get nodes kubectl -n get pods,pvc ``` -Do not delete PersistentVolumeClaims (PVCs) during an upgrade or rollback. Keep the existing deployment values and manifests under version control, including any image tags, storage topology, scheduling rules, and Secret references. +Ne supprimez pas les PersistentVolumeClaims (PVC) pendant une mise à niveau ou un retour arrière. Conservez sous contrôle de version les valeurs et les manifestes du déploiement existant, y compris les étiquettes d’image, la topologie de stockage, les règles de planification et les références aux Secrets. -## Upgrade a Helm chart deployment +## Mettre à niveau un déploiement par chart Helm -This workflow applies to RustFS installed directly with the [RustFS Helm chart](/installation/cloud-native/helm-chart/installation). It does not apply to a Tenant created by RustFS Operator. +Ce flux s’applique à RustFS installé directement avec le [chart Helm RustFS](/fr/installation/cloud-native/helm-chart/installation). Il ne s’applique pas à un Tenant créé par RustFS Operator. -Record the current release revision, chart version, application version, and effective user-supplied values: +Relevez la révision actuelle de la release, la version du chart, la version de l’application et les valeurs effectives fournies par l’utilisateur : ```bash helm status rustfs --namespace rustfs @@ -28,20 +28,20 @@ helm history rustfs --namespace rustfs helm get values rustfs --namespace rustfs -o yaml > rustfs-values.previous.yaml ``` -Prepare the target chart in the same way as the installation. If you use the chart repository, update its index and set the chart reference: +Préparez le chart cible de la même façon que lors de l’installation. Si vous utilisez le dépôt du chart, mettez à jour son index et définissez la référence du chart : ```bash helm repo update rustfs export RUSTFS_CHART=rustfs/rustfs ``` -If you use a source checkout, check out the target RustFS release and point `RUSTFS_CHART` at its chart directory: +Si vous utilisez une copie des sources, placez-vous sur la version RustFS cible et faites pointer `RUSTFS_CHART` vers le répertoire de son chart : ```bash export RUSTFS_CHART=./helm/rustfs ``` -Update your maintained values file for any release-specific changes. Set `image.rustfs.tag` to the explicit RustFS version you intend to run, then apply the upgrade: +Mettez à jour le fichier de valeurs que vous maintenez pour tout changement propre à la version. Définissez `image.rustfs.tag` sur la version RustFS explicite que vous comptez exécuter, puis appliquez la mise à niveau : ```bash helm upgrade rustfs "$RUSTFS_CHART" \ @@ -52,34 +52,34 @@ helm upgrade rustfs "$RUSTFS_CHART" \ --timeout 10m ``` -Helm performs a rolling update. Monitor the release and pods until the rollout completes: +Helm effectue une mise à jour continue. Surveillez la release et les pods jusqu’à la fin du déploiement : ```bash helm status rustfs --namespace rustfs kubectl -n rustfs get pods,pvc,services ``` -Distributed mode creates a StatefulSet: +Le mode distribué crée un StatefulSet : ```bash kubectl -n rustfs rollout status statefulset/rustfs --timeout=10m ``` -Standalone mode creates a Deployment: +Le mode autonome crée un Deployment : ```bash kubectl -n rustfs rollout status deployment/rustfs --timeout=10m ``` -Verify the S3 API after the rollout. If it is not exposed outside the cluster, start the port forward documented in the installation guide first: +Vérifiez l’API S3 après le déploiement. Si elle n’est pas exposée à l’extérieur du cluster, démarrez d’abord le réacheminement de port documenté dans le guide d’installation : ```bash curl -fsS http://localhost:9000/health/ready ``` -### Roll back a Helm release +### Revenir en arrière sur une release Helm -List the release history, identify the last working revision, and let Helm restore its chart, values, and image configuration: +Listez l’historique de la release, identifiez la dernière révision fonctionnelle et laissez Helm restaurer son chart, ses valeurs et sa configuration d’image : ```bash helm history rustfs --namespace rustfs @@ -89,20 +89,20 @@ helm rollback rustfs \ --timeout 10m ``` -Check the workload and readiness endpoint again after rollback. Do not uninstall the release or delete its PVCs. +Contrôlez de nouveau la charge de travail et le point de terminaison d’état de préparation après le retour arrière. Ne désinstallez pas la release et ne supprimez pas ses PVC. -## Upgrade an Operator deployment +## Mettre à niveau un déploiement Operator -An Operator deployment has two independent upgrade surfaces: +Un déploiement Operator comporte deux périmètres de mise à niveau indépendants : -- The RustFS Operator and Operator Console run from the `rustfs-operator` Helm release. -- Each Tenant runs the RustFS image declared in that Tenant's `spec.image` field. +- RustFS Operator et Operator Console s’exécutent à partir de la release Helm `rustfs-operator`. +- Chaque Tenant exécute l’image RustFS déclarée dans le champ `spec.image` de ce Tenant. -Upgrade and validate the Operator control plane before changing Tenant images. Do not combine an Operator upgrade with multiple Tenant upgrades in one maintenance step. +Mettez à niveau et validez le plan de contrôle de l’Operator avant de modifier les images des Tenants. Ne combinez pas une mise à niveau de l’Operator et plusieurs mises à niveau de Tenants dans une même étape de maintenance. -### Upgrade the Operator release +### Mettre à niveau la release Operator -Record the current release and save its values: +Relevez la release actuelle et enregistrez ses valeurs : ```bash helm status rustfs-operator --namespace rustfs-system @@ -111,7 +111,7 @@ helm get values rustfs-operator --namespace rustfs-system -o yaml \ > rustfs-operator-values.previous.yaml ``` -Update the Operator source checkout to the target release and review changes to its chart values and CustomResourceDefinitions (CRDs). Helm does not upgrade CRDs stored in a chart's `crds/` directory, so apply both target CRDs before upgrading the controller: +Mettez à jour la copie des sources de l’Operator vers la version cible et examinez les changements de ses valeurs de chart et de ses CustomResourceDefinitions (CRD). Helm ne met pas à niveau les CRD stockées dans le répertoire `crds/` d’un chart ; appliquez donc les deux CRD cibles avant de mettre à niveau le contrôleur : ```bash kubectl apply --server-side --force-conflicts \ @@ -122,7 +122,7 @@ kubectl apply --server-side --force-conflicts \ -f deploy/rustfs-operator/crds/policybinding-crd.yaml ``` -The CRDs are cluster-scoped and shared by every Tenant namespace. Applying them first allows the Kubernetes API server to accept fields introduced by the new controller. After both commands succeed, upgrade the Operator with your maintained values file: +Les CRD ont une portée de cluster et sont partagées par chaque espace de noms de Tenant. Les appliquer d’abord permet au serveur d’API Kubernetes d’accepter les champs introduits par le nouveau contrôleur. Lorsque les deux commandes ont réussi, mettez à niveau l’Operator avec le fichier de valeurs que vous maintenez : ```bash helm upgrade rustfs-operator deploy/rustfs-operator/ \ @@ -134,7 +134,7 @@ helm upgrade rustfs-operator deploy/rustfs-operator/ \ --timeout 10m ``` -Verify the CRDs and all control-plane components before upgrading a Tenant: +Vérifiez les CRD et tous les composants du plan de contrôle avant de mettre à niveau un Tenant : ```bash kubectl get crd tenants.rustfs.com @@ -143,7 +143,7 @@ kubectl -n rustfs-system rollout status deployment/rustfs-operator-console --tim kubectl get tenants --all-namespaces ``` -CRD changes are not part of Helm release history and `helm rollback` does not restore them. Review the target release's compatibility and migration notes before considering a controller rollback. If that release explicitly supports downgrading, restore the previous Helm revision without applying older CRD files: +Les changements de CRD ne font pas partie de l’historique de release Helm, et `helm rollback` ne les restaure pas. Consultez les notes de compatibilité et de migration de la version cible avant d’envisager un retour arrière du contrôleur. Si cette version prend explicitement en charge la rétrogradation, restaurez la révision Helm précédente sans appliquer d’anciens fichiers de CRD : ```bash helm history rustfs-operator --namespace rustfs-system @@ -153,13 +153,13 @@ helm rollback rustfs-operator \ --timeout 10m ``` -Do not downgrade across a documented one-way workload or security migration. Roll forward to a fixed Operator release instead. +Ne rétrogradez pas au-delà d’une migration de charge de travail ou de sécurité documentée comme unidirectionnelle. Avancez plutôt vers une version corrigée de l’Operator. -### Upgrade a Tenant +### Mettre à niveau un Tenant -The Operator owns each Tenant's StatefulSets. Do not change their container images directly because reconciliation restores the image declared by the Tenant. +L’Operator possède les StatefulSets de chaque Tenant. Ne modifiez pas directement les images de leurs conteneurs, car la réconciliation rétablit l’image déclarée par le Tenant. -Record the current Tenant image and confirm its `Ready` condition: +Relevez l’image actuelle du Tenant et confirmez sa condition `Ready` : ```bash kubectl -n storage-a get tenant tenant-a \ @@ -168,7 +168,7 @@ kubectl -n storage-a get tenant tenant-a kubectl -n storage-a get pods,pvc -l rustfs.tenant=tenant-a ``` -In the complete `tenant.yaml` used to install the Tenant, change only `spec.image` to `rustfs/rustfs:`. Leave its pools, PVC templates, credentials, and other settings unchanged. Apply the complete manifest and wait for the Operator to reconcile the new generation: +Dans le fichier `tenant.yaml` complet utilisé pour installer le Tenant, ne modifiez que `spec.image`, en la remplaçant par `rustfs/rustfs:`. Laissez inchangés ses pools, ses modèles de PVC, ses identifiants et ses autres réglages. Appliquez le manifeste complet et attendez que l’Operator réconcilie la nouvelle génération : ```bash kubectl apply -f tenant.yaml @@ -178,11 +178,11 @@ kubectl -n storage-a wait tenant/tenant-a \ kubectl -n storage-a get pods -l rustfs.tenant=tenant-a ``` -Upgrade one Tenant at a time. Confirm its S3 API and [cluster status](/operations/status-check) before updating another Tenant. +Mettez à niveau un Tenant à la fois. Confirmez son API S3 et l’[état du cluster](/fr/operations/status-check) avant de mettre à jour un autre Tenant. -### Roll back a Tenant +### Revenir en arrière sur un Tenant -Restore the previously recorded image in `spec.image`, apply the complete Tenant manifest, and wait for `Ready` again: +Restaurez dans `spec.image` l’image précédemment relevée, appliquez le manifeste complet du Tenant et attendez de nouveau la condition `Ready` : ```bash kubectl apply -f tenant.yaml @@ -191,8 +191,8 @@ kubectl -n storage-a wait tenant/tenant-a \ --timeout=10m ``` -The Operator reuses the Tenant's existing PVCs. Do not delete the Tenant, its StatefulSets, or its PVCs during rollback. +L’Operator réutilise les PVC existants du Tenant. Ne supprimez pas le Tenant, ses StatefulSets ni ses PVC pendant le retour arrière. -## Next steps +## Étapes suivantes -Review [Status Check](/operations/status-check) and [Observability](/operations/observability) to validate the deployment after the rollout. \ No newline at end of file +Consultez [Contrôle de l’état](/fr/operations/status-check) et [Observabilité](/fr/operations/observability) pour valider le déploiement après la mise à jour. diff --git a/content/fr/reference/cli.md b/content/fr/reference/cli.md index 47fc0a905..b8a2d6c49 100644 --- a/content/fr/reference/cli.md +++ b/content/fr/reference/cli.md @@ -1,20 +1,20 @@ --- -title: "CLI Reference" -description: "Reference for the rustfs subcommands, server flags, environment variable equivalents, and volume path syntax." +title: "Référence CLI" +description: "Référence des sous-commandes rustfs, des indicateurs du serveur, des équivalents en variables d’environnement et de la syntaxe des chemins de volume." --- -The `rustfs` binary ships six subcommands. Running `rustfs` with no subcommand starts the server. +Le binaire `rustfs` fournit six sous-commandes. L’exécution de `rustfs` sans sous-commande démarre le serveur. -## Subcommands +## Sous-commandes -| Command | Description | +| Commande | Description | | --- | --- | -| `rustfs server [OPTIONS] ...` | Start the object storage server (default when no subcommand is given). | -| `rustfs info [--all] [--json] [system\|runtime\|build\|config\|deps]` | Display system, runtime, build, configuration, or dependency information. | -| `rustfs tls inspect --path ` | Inspect a TLS certificate directory layout and parsing status. | -| `rustfs diagnose [OPTIONS] ...` | Analyze log files and report probable failure causes. | -| `rustfs inspect ` | Inspect persisted bucket metadata without a running server. | -| `rustfs connect ` | Configure outbound RustFS Connect integration. | +| `rustfs server [OPTIONS] ...` | Démarre le serveur de stockage objet (comportement par défaut lorsqu’aucune sous-commande n’est fournie). | +| `rustfs info [--all] [--json] [system\|runtime\|build\|config\|deps]` | Affiche les informations sur le système, l’exécution, la compilation, la configuration ou les dépendances. | +| `rustfs tls inspect --path ` | Inspecte la disposition d’un répertoire de certificats TLS et l’état de son analyse. | +| `rustfs diagnose [OPTIONS] ...` | Analyse les fichiers journaux et signale les causes d’échec probables. | +| `rustfs inspect ` | Inspecte les métadonnées de compartiment (bucket) persistées, sans serveur en cours d’exécution. | +| `rustfs connect ` | Configure l’intégration sortante RustFS Connect. | ```bash title="Examples" rustfs server /data/rustfs @@ -22,62 +22,62 @@ rustfs info --all --json rustfs tls inspect --path /etc/rustfs/tls ``` -### Legacy invocation compatibility +### Compatibilité des invocations historiques -Arguments are preprocessed for backward compatibility, so older invocation styles keep working: +Les arguments sont prétraités pour la rétrocompatibilité, afin que les anciens styles d’invocation continuent de fonctionner : -| Legacy form | Interpreted as | +| Forme historique | Interprétée comme | | --- | --- | | `rustfs /data` | `rustfs server /data` | | `rustfs --address :9000 /data` | `rustfs server --address :9000 /data` | -| `rustfs` (no arguments) | `rustfs server` with volumes read from `RUSTFS_VOLUMES` | +| `rustfs` (sans argument) | `rustfs server` avec les volumes lus depuis `RUSTFS_VOLUMES` | | `rustfs --info` | `rustfs info` | | `rustfs help` | `rustfs --help` | -## Server flags +## Indicateurs du serveur -Every server flag has an environment variable equivalent; the flag wins when both are set. +Chaque indicateur du serveur possède une variable d’environnement équivalente ; l’indicateur l’emporte lorsque les deux sont définis. -| Flag | Environment variable | Default | Description | +| Indicateur | Variable d’environnement | Valeur par défaut | Description | | --- | --- | --- | --- | -| `...` (positional) | `RUSTFS_VOLUMES` | required | Storage volumes or endpoints, space-separated. | -| `--address` | `RUSTFS_ADDRESS` | `:9000` | S3 API bind address (`ADDRESS:PORT`, IP or hostname). | -| `--server-domains` | `RUSTFS_SERVER_DOMAINS` | unset | Comma-separated domains for virtual-hosted-style requests. | -| `--access-key` | `RUSTFS_ACCESS_KEY` | unset | Root access key (conflicts with `--access-key-file`). | -| `--access-key-file` | `RUSTFS_ACCESS_KEY_FILE` | unset | File containing the root access key. | -| `--secret-key` | `RUSTFS_SECRET_KEY` | unset | Root secret key (conflicts with `--secret-key-file`). | -| `--secret-key-file` | `RUSTFS_SECRET_KEY_FILE` | unset | File containing the root secret key. | -| `--console-enable` | `RUSTFS_CONSOLE_ENABLE` | `true` | Enable the embedded web console. | -| `--console-address` | `RUSTFS_CONSOLE_ADDRESS` | `:9001` | Console bind address. | -| `--obs-endpoint` | `RUSTFS_OBS_ENDPOINT` | empty | OTLP/HTTP base URL for traces, metrics, and logs. | -| `--tls-path` | `RUSTFS_TLS_PATH` | unset | TLS certificate directory for the API and console. | -| `--license` | `RUSTFS_LICENSE` | unset | License string. | -| `--region` | `RUSTFS_REGION` | unset | Service region reported to clients. | -| `--kms-enable` | `RUSTFS_KMS_ENABLE` | `false` | Enable KMS server-side encryption. | -| `--kms-backend` | `RUSTFS_KMS_BACKEND` | `local` | KMS backend: `local`, `vault` / `vault-kv2`, `vault-transit`. | -| `--kms-key-dir` | `RUSTFS_KMS_KEY_DIR` | unset | Key directory for the local KMS backend. | -| `--kms-local-master-key` | `RUSTFS_KMS_LOCAL_MASTER_KEY` | unset | Master key for local KMS key-file encryption. | -| `--kms-vault-address` | `RUSTFS_KMS_VAULT_ADDRESS` | unset | Vault address for the Vault backends. | -| `--kms-vault-token` | `RUSTFS_KMS_VAULT_TOKEN` | unset | Vault token for the Vault backends. | -| `--kms-vault-mount-path` | `RUSTFS_KMS_VAULT_MOUNT_PATH` | unset | Transit mount for `vault-transit` (defaults to `transit`); deprecated and unused for `vault` / `vault-kv2`. | -| `--kms-default-key-id` | `RUSTFS_KMS_DEFAULT_KEY_ID` | unset | Default KMS key ID for encryption. | -| `--kms-allow-insecure-dev-defaults` | `RUSTFS_KMS_ALLOW_INSECURE_DEV_DEFAULTS` | `false` | Allow development-only insecure KMS defaults. | -| `--buffer-profile` | `RUSTFS_BUFFER_PROFILE` | `GeneralPurpose` | Workload profile for adaptive buffer sizing. | -| `--buffer-profile-disable` | `RUSTFS_BUFFER_PROFILE_DISABLE` | `false` | Use legacy fixed-size buffers. | +| `...` (positionnel) | `RUSTFS_VOLUMES` | obligatoire | Volumes ou points de terminaison de stockage, séparés par des espaces. | +| `--address` | `RUSTFS_ADDRESS` | `:9000` | Adresse d’écoute de l’API S3 (`ADDRESS:PORT`, adresse IP ou nom d’hôte). | +| `--server-domains` | `RUSTFS_SERVER_DOMAINS` | non définie | Domaines séparés par des virgules pour les requêtes en adressage de type hôte virtuel. | +| `--access-key` | `RUSTFS_ACCESS_KEY` | non définie | Clé d’accès racine (incompatible avec `--access-key-file`). | +| `--access-key-file` | `RUSTFS_ACCESS_KEY_FILE` | non définie | Fichier contenant la clé d’accès racine. | +| `--secret-key` | `RUSTFS_SECRET_KEY` | non définie | Clé secrète racine (incompatible avec `--secret-key-file`). | +| `--secret-key-file` | `RUSTFS_SECRET_KEY_FILE` | non définie | Fichier contenant la clé secrète racine. | +| `--console-enable` | `RUSTFS_CONSOLE_ENABLE` | `true` | Active la console web intégrée. | +| `--console-address` | `RUSTFS_CONSOLE_ADDRESS` | `:9001` | Adresse d’écoute de la Console. | +| `--obs-endpoint` | `RUSTFS_OBS_ENDPOINT` | vide | URL de base OTLP/HTTP pour les traces, les métriques et les journaux. | +| `--tls-path` | `RUSTFS_TLS_PATH` | non définie | Répertoire de certificats TLS pour l’API et la Console. | +| `--license` | `RUSTFS_LICENSE` | non définie | Chaîne de licence. | +| `--region` | `RUSTFS_REGION` | non définie | Région du service signalée aux clients. | +| `--kms-enable` | `RUSTFS_KMS_ENABLE` | `false` | Active le chiffrement côté serveur KMS. | +| `--kms-backend` | `RUSTFS_KMS_BACKEND` | `local` | Backend KMS : `local`, `vault` / `vault-kv2`, `vault-transit`. | +| `--kms-key-dir` | `RUSTFS_KMS_KEY_DIR` | non définie | Répertoire de clés du backend KMS local. | +| `--kms-local-master-key` | `RUSTFS_KMS_LOCAL_MASTER_KEY` | non définie | Clé principale pour le chiffrement des fichiers de clés du KMS local. | +| `--kms-vault-address` | `RUSTFS_KMS_VAULT_ADDRESS` | non définie | Adresse Vault pour les backends Vault. | +| `--kms-vault-token` | `RUSTFS_KMS_VAULT_TOKEN` | non définie | Jeton Vault pour les backends Vault. | +| `--kms-vault-mount-path` | `RUSTFS_KMS_VAULT_MOUNT_PATH` | non définie | Point de montage Transit pour `vault-transit` (vaut `transit` par défaut) ; obsolète et inutilisé pour `vault` / `vault-kv2`. | +| `--kms-default-key-id` | `RUSTFS_KMS_DEFAULT_KEY_ID` | non définie | ID de clé KMS par défaut pour le chiffrement. | +| `--kms-allow-insecure-dev-defaults` | `RUSTFS_KMS_ALLOW_INSECURE_DEV_DEFAULTS` | `false` | Autorise les valeurs par défaut KMS non sécurisées, réservées au développement. | +| `--buffer-profile` | `RUSTFS_BUFFER_PROFILE` | `GeneralPurpose` | Profil de charge pour le dimensionnement adaptatif des tampons. | +| `--buffer-profile-disable` | `RUSTFS_BUFFER_PROFILE_DISABLE` | `false` | Utilise les tampons de taille fixe historiques. | :::note -If neither `--access-key`/`--secret-key` nor their file variants are provided, the server falls back to the built-in default credentials (`rustfsadmin`/`rustfsadmin`) and logs a warning. Set real credentials for any non-throwaway deployment. +Si ni `--access-key`/`--secret-key` ni leurs variantes fichier ne sont fournis, le serveur revient aux identifiants par défaut intégrés (`rustfsadmin`/`rustfsadmin`) et journalise un avertissement. Définissez de véritables identifiants pour tout déploiement qui n’est pas à usage jetable. ::: -## Volume syntax +## Syntaxe des volumes -Volumes are passed as positional arguments (or via `RUSTFS_VOLUMES`) and are space-separated. +Les volumes sont transmis comme arguments positionnels (ou via `RUSTFS_VOLUMES`) et sont séparés par des espaces. -### Ellipses expansion +### Expansion des ellipses -A volume token may contain one or more `{N...M}` ranges, which expand numerically: +Un jeton de volume peut contenir une ou plusieurs plages `{N...M}`, qui s’étendent numériquement : ```bash title="Ellipses expansion" # Expands to /data/rustfs0 /data/rustfs1 /data/rustfs2 /data/rustfs3 @@ -87,21 +87,21 @@ rustfs server /data/rustfs{0...3} rustfs server http://node{1...4}:9000/data/rustfs{0...3} ``` -Rules verified from the parser: +Règles vérifiées dans l’analyseur : -- The range format is `{N...M}` where `N` and `M` are decimal or hexadecimal positive integers and `M` must be greater than `N`. -- A single token may carry multiple ranges (e.g. host range plus disk range); all combinations are expanded. -- The maximum expanded size of one range is 10,000 entries. +- Le format de plage est `{N...M}`, où `N` et `M` sont des entiers positifs décimaux ou hexadécimaux et où `M` doit être supérieur à `N`. +- Un seul jeton peut porter plusieurs plages (par exemple une plage d’hôtes et une plage de disques) ; toutes les combinaisons sont développées. +- La taille maximale développée d’une plage est de 10 000 entrées. -### Multiple pools +### Plusieurs pools -Separate server pools are expressed as space-separated groups of endpoints. Each argument (one per space) forms its own expansion group: +Des pools de serveurs distincts s’expriment comme des groupes de points de terminaison séparés par des espaces. Chaque argument (un par espace) forme son propre groupe d’expansion : ```bash title="Two pools" rustfs server http://node{1...4}:9000/data/rustfs{0...3} http://node{5...8}:9000/data/rustfs{0...3} ``` -When set through the environment, the same string goes into `RUSTFS_VOLUMES`: +Lorsqu’elle est définie via l’environnement, la même chaîne est placée dans `RUSTFS_VOLUMES` : ```bash title="Via environment" export RUSTFS_VOLUMES="http://node{1...4}:9000/data/rustfs{0...3}" diff --git a/content/fr/reference/environment-variables.md b/content/fr/reference/environment-variables.md index 9db713983..14777dc8f 100644 --- a/content/fr/reference/environment-variables.md +++ b/content/fr/reference/environment-variables.md @@ -1,201 +1,201 @@ --- -title: "Environment Variables" -description: "Reference for the environment variables that configure the RustFS server, console, TLS, KMS, observability, scanner, healing, storage classes, credentials, and event targets." +title: "Variables d’environnement" +description: "Référence des variables d’environnement qui configurent le serveur RustFS, la Console, TLS, le KMS, l’observabilité, le scanner, la réparation des données, les classes de stockage, les identifiants et les cibles d’événements." --- -This page lists the environment variables recognized by the `rustfs` server binary. It covers the operations-relevant subset verified against the RustFS source code; some internal tuning knobs are intentionally omitted. Every variable can also be supplied through the matching command-line flag where one exists (see the [CLI reference](./cli)). +Cette page répertorie les variables d’environnement reconnues par le binaire serveur `rustfs`. Elle couvre le sous-ensemble pertinent pour l’exploitation, vérifié par rapport au code source de RustFS ; certains réglages internes sont omis volontairement. Chaque variable peut aussi être fournie par l’indicateur de ligne de commande correspondant, lorsqu’il existe (voir la [référence CLI](./cli)). -:::note[Boolean values] +:::note[Valeurs booléennes] -Boolean variables accept `true`/`false`. Values shown as "unset" have no default and the corresponding feature stays disabled or falls back to built-in behavior. +Les variables booléennes acceptent `true`/`false`. Les valeurs indiquées comme « non définie » n’ont pas de valeur par défaut, et la fonctionnalité correspondante reste désactivée ou revient au comportement intégré. ::: -## Core server +## Serveur principal -| Variable | Default | Description | +| Variable | Valeur par défaut | Description | | --- | --- | --- | -| `RUSTFS_VOLUMES` | unset (required) | Storage volumes or endpoints, space-separated. Supports `{N...M}` ellipses expansion, e.g. `/data/rustfs{0...3}` or `http://node{1...4}:9000/data/rustfs{0...3}`. The Docker image defaults to `/data`. | -| `RUSTFS_ADDRESS` | `:9000` | Bind address and port for the S3 API listener (also carries internal node RPC). | -| `RUSTFS_SERVER_DOMAINS` | unset | Comma-separated domain name(s) for virtual-hosted-style S3 requests, e.g. `s3.example.com` so `bucket.s3.example.com` resolves to bucket `bucket`. When unset, only path-style addressing works. | -| `RUSTFS_REGION` | unset | Region reported to S3 clients. When unset the server falls back to `us-east-1`. | -| `RUSTFS_LICENSE` | unset | License string. | -| `RUSTFS_BUFFER_PROFILE` | `GeneralPurpose` | Workload profile for adaptive buffer sizing. Options: `GeneralPurpose`, `AiTraining`, `DataAnalytics`, `WebWorkload`, `IndustrialIoT`, `SecureStorage`. | -| `RUSTFS_BUFFER_PROFILE_DISABLE` | `false` | Disable adaptive buffer sizing and use legacy fixed-size buffers. | -| `RUSTFS_HEALTH_ENDPOINT_ENABLE` | `true` | Register the unauthenticated `/health` and `/health/ready` probe endpoints. | -| `RUSTFS_HEALTH_READINESS_CACHE_TTL_MS` | `1000` | Cache TTL for readiness probe results, in milliseconds. | -| `RUSTFS_HEALTH_CLUSTER_TIMEOUT_MS` | `2000` | Timeout for cluster health probes (`/minio/health/cluster`), in milliseconds. | -| `RUSTFS_STARTUP_READINESS_MAX_WAIT_SECS` | `120` | Maximum time the readiness probe reports "starting" before startup is considered failed. | -| `RUSTFS_CHECK_UPDATE` | `true` | Check for a newer RustFS release at startup by sending one HTTPS request to `version.rustfs.com`; the user agent carries the current version. The result is logged only, and RustFS never updates itself. Set to `false` to skip the outbound request, for example in air-gapped deployments; unrecognized values fall back to `true`. | +| `RUSTFS_VOLUMES` | non définie (obligatoire) | Volumes ou points de terminaison de stockage, séparés par des espaces. Prend en charge l’expansion d’ellipses `{N...M}`, par exemple `/data/rustfs{0...3}` ou `http://node{1...4}:9000/data/rustfs{0...3}`. L’image Docker utilise `/data` par défaut. | +| `RUSTFS_ADDRESS` | `:9000` | Adresse et port d’écoute de l’API S3 (porte aussi le RPC interne entre nœuds). | +| `RUSTFS_SERVER_DOMAINS` | non définie | Noms de domaine séparés par des virgules pour les requêtes S3 en adressage de type hôte virtuel, par exemple `s3.example.com`, afin que `bucket.s3.example.com` corresponde au compartiment (bucket) `bucket`. Lorsqu’elle n’est pas définie, seul l’adressage de type chemin (path-style) fonctionne. | +| `RUSTFS_REGION` | non définie | Région signalée aux clients S3. Lorsqu’elle n’est pas définie, le serveur revient à `us-east-1`. | +| `RUSTFS_LICENSE` | non définie | Chaîne de licence. | +| `RUSTFS_BUFFER_PROFILE` | `GeneralPurpose` | Profil de charge pour le dimensionnement adaptatif des tampons. Options : `GeneralPurpose`, `AiTraining`, `DataAnalytics`, `WebWorkload`, `IndustrialIoT`, `SecureStorage`. | +| `RUSTFS_BUFFER_PROFILE_DISABLE` | `false` | Désactive le dimensionnement adaptatif des tampons et utilise les tampons de taille fixe historiques. | +| `RUSTFS_HEALTH_ENDPOINT_ENABLE` | `true` | Enregistre les points de terminaison de sonde non authentifiés `/health` et `/health/ready`. | +| `RUSTFS_HEALTH_READINESS_CACHE_TTL_MS` | `1000` | Durée de vie du cache des résultats de la sonde d’état de préparation, en millisecondes. | +| `RUSTFS_HEALTH_CLUSTER_TIMEOUT_MS` | `2000` | Délai d’expiration des sondes d’intégrité du cluster (`/minio/health/cluster`), en millisecondes. | +| `RUSTFS_STARTUP_READINESS_MAX_WAIT_SECS` | `120` | Durée maximale pendant laquelle la sonde d’état de préparation indique « starting » avant que le démarrage soit considéré comme échoué. | +| `RUSTFS_CHECK_UPDATE` | `true` | Vérifie l’existence d’une version plus récente de RustFS au démarrage en envoyant une requête HTTPS vers `version.rustfs.com` ; l’agent utilisateur porte la version actuelle. Le résultat est seulement journalisé, et RustFS ne se met jamais à jour lui-même. Définissez `false` pour ignorer la requête sortante, par exemple dans les déploiements isolés (air-gapped) ; les valeurs non reconnues reviennent à `true`. | ## Console -| Variable | Default | Description | +| Variable | Valeur par défaut | Description | | --- | --- | --- | -| `RUSTFS_CONSOLE_ENABLE` | `true` | Enable the embedded web console (served on a separate listener). | -| `RUSTFS_CONSOLE_ADDRESS` | `:9001` | Bind address and port for the console listener. | +| `RUSTFS_CONSOLE_ENABLE` | `true` | Active la console web intégrée (servie sur un écouteur distinct). | +| `RUSTFS_CONSOLE_ADDRESS` | `:9001` | Adresse et port d’écoute de la Console. | ## CORS -| Variable | Default | Description | +| Variable | Valeur par défaut | Description | | --- | --- | --- | -| `RUSTFS_CORS_ALLOWED_ORIGINS` | empty | Comma-separated origins allowed to access the S3 API from a browser. Set `*` for wildcard origins without credentials. | -| `RUSTFS_CONSOLE_CORS_ALLOWED_ORIGINS` | `*` | Comma-separated origins allowed to access the Console from a browser, or `*` for all origins. | +| `RUSTFS_CORS_ALLOWED_ORIGINS` | vide | Origines séparées par des virgules, autorisées à accéder à l’API S3 depuis un navigateur. Définissez `*` pour des origines génériques sans identifiants. | +| `RUSTFS_CONSOLE_CORS_ALLOWED_ORIGINS` | `*` | Origines séparées par des virgules, autorisées à accéder à la Console depuis un navigateur, ou `*` pour toutes les origines. | -See [CORS Configuration](/administration/cors) for configuration and verification steps. +Consultez la [configuration CORS](/fr/administration/cors) pour les étapes de configuration et de vérification. -## TLS & KMS +## TLS et KMS -| Variable | Default | Description | +| Variable | Valeur par défaut | Description | | --- | --- | --- | -| `RUSTFS_TLS_PATH` | unset | Directory containing the TLS certificate and key (`rustfs_cert.pem` / `rustfs_key.pem`) for the S3 API and console. TLS is enabled when set. | -| `RUSTFS_TLS_RELOAD_ENABLE` | `false` | Watch the TLS directory and hot-reload certificates. | -| `RUSTFS_TLS_KEYLOG` | `false` | Write TLS session keys to a keylog file for debugging. Do not enable in production. | -| `RUSTFS_TRUST_SYSTEM_CA` | `false` | Also trust the operating system CA store for outbound TLS connections. | -| `RUSTFS_TRUST_LEAF_CERT_AS_CA` | `false` | Trust a leaf certificate as if it were a CA (self-signed setups). | -| `RUSTFS_SERVER_MTLS_ENABLE` | `false` | Require client certificates (mutual TLS) on the server listeners. | -| `RUSTFS_MTLS_CLIENT_CERT` | unset | Client certificate presented for internode mTLS connections. | -| `RUSTFS_MTLS_CLIENT_KEY` | unset | Client private key for internode mTLS connections. | -| `RUSTFS_KMS_ENABLE` | `false` | Enable KMS-backed server-side encryption. | -| `RUSTFS_KMS_BACKEND` | `local` | KMS backend: `local`, `vault` / `vault-kv2` (Vault KV2 storage with local data-key wrapping), or `vault-transit`. | -| `RUSTFS_KMS_KEY_DIR` | unset | Key directory for the `local` backend. | -| `RUSTFS_KMS_LOCAL_MASTER_KEY` | unset | Master key protecting local KMS key files. | -| `RUSTFS_KMS_VAULT_ADDRESS` | unset | Vault server address for the Vault backends. | -| `RUSTFS_KMS_VAULT_TOKEN` | unset | Vault token for the Vault backends. | -| `RUSTFS_KMS_VAULT_MOUNT_PATH` | `transit` | Transit mount for `vault-transit`; deprecated and unused for `vault` / `vault-kv2`. | -| `RUSTFS_KMS_VAULT_KV_MOUNT` | `secret` | KV v2 mount for the `vault` / `vault-kv2` backend. | -| `RUSTFS_KMS_VAULT_KEY_PREFIX` | `rustfs/kms/keys` | Key record prefix within the KV v2 mount for `vault` / `vault-kv2`. | -| `RUSTFS_KMS_DEFAULT_KEY_ID` | unset | Default KMS key ID used for encryption. | -| `RUSTFS_KMS_ALLOW_INSECURE_DEV_DEFAULTS` | `false` | Allow development-only insecure KMS defaults. Never enable in production. | - -## Observability - -The observability pipeline exports traces, metrics, and logs over OTLP/HTTP. - -| Variable | Default | Description | +| `RUSTFS_TLS_PATH` | non définie | Répertoire contenant le certificat et la clé TLS (`rustfs_cert.pem` / `rustfs_key.pem`) pour l’API S3 et la Console. TLS est activé lorsque la variable est définie. | +| `RUSTFS_TLS_RELOAD_ENABLE` | `false` | Surveille le répertoire TLS et recharge les certificats à chaud. | +| `RUSTFS_TLS_KEYLOG` | `false` | Écrit les clés de session TLS dans un fichier keylog pour le débogage. Ne l’activez pas en production. | +| `RUSTFS_TRUST_SYSTEM_CA` | `false` | Fait aussi confiance au magasin d’autorités de certification du système d’exploitation pour les connexions TLS sortantes. | +| `RUSTFS_TRUST_LEAF_CERT_AS_CA` | `false` | Fait confiance à un certificat feuille comme s’il s’agissait d’une autorité de certification (configurations auto-signées). | +| `RUSTFS_SERVER_MTLS_ENABLE` | `false` | Exige des certificats client (TLS mutuel) sur les écouteurs du serveur. | +| `RUSTFS_MTLS_CLIENT_CERT` | non définie | Certificat client présenté pour les connexions mTLS entre nœuds. | +| `RUSTFS_MTLS_CLIENT_KEY` | non définie | Clé privée client pour les connexions mTLS entre nœuds. | +| `RUSTFS_KMS_ENABLE` | `false` | Active le chiffrement côté serveur reposant sur le KMS. | +| `RUSTFS_KMS_BACKEND` | `local` | Backend KMS : `local`, `vault` / `vault-kv2` (stockage Vault KV2 avec enveloppement local des clés de données), ou `vault-transit`. | +| `RUSTFS_KMS_KEY_DIR` | non définie | Répertoire de clés du backend `local`. | +| `RUSTFS_KMS_LOCAL_MASTER_KEY` | non définie | Clé principale qui protège les fichiers de clés du KMS local. | +| `RUSTFS_KMS_VAULT_ADDRESS` | non définie | Adresse du serveur Vault pour les backends Vault. | +| `RUSTFS_KMS_VAULT_TOKEN` | non définie | Jeton Vault pour les backends Vault. | +| `RUSTFS_KMS_VAULT_MOUNT_PATH` | `transit` | Point de montage Transit pour `vault-transit` ; obsolète et inutilisé pour `vault` / `vault-kv2`. | +| `RUSTFS_KMS_VAULT_KV_MOUNT` | `secret` | Point de montage KV v2 pour le backend `vault` / `vault-kv2`. | +| `RUSTFS_KMS_VAULT_KEY_PREFIX` | `rustfs/kms/keys` | Préfixe des enregistrements de clés dans le point de montage KV v2 pour `vault` / `vault-kv2`. | +| `RUSTFS_KMS_DEFAULT_KEY_ID` | non définie | ID de clé KMS par défaut utilisé pour le chiffrement. | +| `RUSTFS_KMS_ALLOW_INSECURE_DEV_DEFAULTS` | `false` | Autorise les valeurs par défaut KMS non sécurisées, réservées au développement. Ne l’activez jamais en production. | + +## Observabilité + +Le pipeline d’observabilité exporte les traces, les métriques et les journaux via OTLP/HTTP. + +| Variable | Valeur par défaut | Description | | --- | --- | --- | -| `RUSTFS_OBS_ENDPOINT` | empty | Root OTLP/HTTP base URL for traces, metrics, and logs, e.g. `http://otel-collector:4318`. When empty, logs go to stdout or local files. | -| `RUSTFS_OBS_TRACE_ENDPOINT` | unset | Per-signal override for the traces endpoint. | -| `RUSTFS_OBS_METRIC_ENDPOINT` | unset | Per-signal override for the metrics endpoint. | -| `RUSTFS_OBS_LOG_ENDPOINT` | unset | Per-signal override for the logs endpoint. | -| `RUSTFS_OBS_TRACES_EXPORT_ENABLED` | `true` | Export traces to the OTLP endpoint. | -| `RUSTFS_OBS_METRICS_EXPORT_ENABLED` | `true` | Export metrics to the OTLP endpoint. | -| `RUSTFS_OBS_LOGS_EXPORT_ENABLED` | `true` | Export logs to the OTLP endpoint. | -| `RUSTFS_OBS_USE_STDOUT` | unset | Force telemetry output to stdout. | -| `RUSTFS_OBS_SAMPLE_RATIO` | unset | Trace sampling ratio (0.0–1.0). | -| `RUSTFS_OBS_METER_INTERVAL` | unset | Metrics export interval in seconds. | -| `RUSTFS_OBS_SERVICE_NAME` | unset | Service name reported in telemetry resource attributes. | -| `RUSTFS_OBS_ENVIRONMENT` | unset | Deployment environment label (`production`, `development`, `test`, `staging`). | -| `RUSTFS_OBS_LOGGER_LEVEL` | unset | Log level filter (e.g. `info`, `debug`). | -| `RUSTFS_OBS_LOG_STDOUT_ENABLED` | unset | Also mirror logs to stdout when file/OTLP logging is active. | -| `RUSTFS_OBS_LOG_DIRECTORY` | unset | Local log directory. Unset means logs go to stdout; a URL value sends logs to a remote endpoint. | -| `RUSTFS_OBS_LOG_FILENAME` | `rustfs.log` | Log filename inside the log directory. | -| `RUSTFS_OBS_LOG_ROTATION_TIME` | `hourly` | Time-based log rotation: `daily`, `hourly`, `minutely`. | -| `RUSTFS_OBS_LOG_KEEP_FILES` | `30` | Number of rotated log files to keep. | -| `RUSTFS_OBS_LOG_MAX_TOTAL_SIZE_BYTES` | `2147483648` | Total size budget (2 GiB) for the log directory before cleanup. | -| `RUSTFS_OBS_LOG_COMPRESS_OLD_FILES` | `true` | Compress rotated log files (`zstd` by default, controllable via `RUSTFS_OBS_LOG_COMPRESSION_ALGORITHM`). | - -Metrics collection intervals follow the pattern `RUSTFS_METRICS__INTERVAL_SEC` with scopes `DEFAULT`, `SYSTEM`, `CLUSTER`, `BUCKET`, `NODE`, `RESOURCE`, `AUDIT`, `NOTIFICATION`, and `BUCKET_REPLICATION_BANDWIDTH` — for example `RUSTFS_METRICS_CLUSTER_INTERVAL_SEC=60`. - -## Scanner & Healing - -| Variable | Default | Description | +| `RUSTFS_OBS_ENDPOINT` | vide | URL de base OTLP/HTTP racine pour les traces, les métriques et les journaux, par exemple `http://otel-collector:4318`. Lorsqu’elle est vide, les journaux vont vers stdout ou des fichiers locaux. | +| `RUSTFS_OBS_TRACE_ENDPOINT` | non définie | Remplacement par signal pour le point de terminaison des traces. | +| `RUSTFS_OBS_METRIC_ENDPOINT` | non définie | Remplacement par signal pour le point de terminaison des métriques. | +| `RUSTFS_OBS_LOG_ENDPOINT` | non définie | Remplacement par signal pour le point de terminaison des journaux. | +| `RUSTFS_OBS_TRACES_EXPORT_ENABLED` | `true` | Exporte les traces vers le point de terminaison OTLP. | +| `RUSTFS_OBS_METRICS_EXPORT_ENABLED` | `true` | Exporte les métriques vers le point de terminaison OTLP. | +| `RUSTFS_OBS_LOGS_EXPORT_ENABLED` | `true` | Exporte les journaux vers le point de terminaison OTLP. | +| `RUSTFS_OBS_USE_STDOUT` | non définie | Force la sortie de télémétrie vers stdout. | +| `RUSTFS_OBS_SAMPLE_RATIO` | non définie | Taux d’échantillonnage des traces (0.0–1.0). | +| `RUSTFS_OBS_METER_INTERVAL` | non définie | Intervalle d’export des métriques, en secondes. | +| `RUSTFS_OBS_SERVICE_NAME` | non définie | Nom du service indiqué dans les attributs de ressource de télémétrie. | +| `RUSTFS_OBS_ENVIRONMENT` | non définie | Libellé d’environnement de déploiement (`production`, `development`, `test`, `staging`). | +| `RUSTFS_OBS_LOGGER_LEVEL` | non définie | Filtre de niveau de journal (par exemple `info`, `debug`). | +| `RUSTFS_OBS_LOG_STDOUT_ENABLED` | non définie | Recopie aussi les journaux vers stdout lorsque la journalisation fichier ou OTLP est active. | +| `RUSTFS_OBS_LOG_DIRECTORY` | non définie | Répertoire de journaux local. Lorsqu’elle n’est pas définie, les journaux vont vers stdout ; une valeur d’URL envoie les journaux vers un point de terminaison distant. | +| `RUSTFS_OBS_LOG_FILENAME` | `rustfs.log` | Nom du fichier journal dans le répertoire de journaux. | +| `RUSTFS_OBS_LOG_ROTATION_TIME` | `hourly` | Rotation des journaux selon le temps : `daily`, `hourly`, `minutely`. | +| `RUSTFS_OBS_LOG_KEEP_FILES` | `30` | Nombre de fichiers journaux rotés à conserver. | +| `RUSTFS_OBS_LOG_MAX_TOTAL_SIZE_BYTES` | `2147483648` | Budget de taille totale (2 GiB) du répertoire de journaux avant nettoyage. | +| `RUSTFS_OBS_LOG_COMPRESS_OLD_FILES` | `true` | Compresse les fichiers journaux rotés (`zstd` par défaut, réglable via `RUSTFS_OBS_LOG_COMPRESSION_ALGORITHM`). | + +Les intervalles de collecte des métriques suivent le modèle `RUSTFS_METRICS__INTERVAL_SEC`, avec les portées `DEFAULT`, `SYSTEM`, `CLUSTER`, `BUCKET`, `NODE`, `RESOURCE`, `AUDIT`, `NOTIFICATION` et `BUCKET_REPLICATION_BANDWIDTH` — par exemple `RUSTFS_METRICS_CLUSTER_INTERVAL_SEC=60`. + +## Scanner et réparation des données + +| Variable | Valeur par défaut | Description | | --- | --- | --- | -| `RUSTFS_SCANNER_SPEED` | `default` | Scanner speed preset: `fastest`, `fast`, `default`, `slow`, `slowest`. Controls sleep factor, max sleep, and cycle interval. | -| `RUSTFS_SCANNER_DELAY` | preset | Overrides the scanner sleep multiplier (e.g. `30.0`). | -| `RUSTFS_SCANNER_MAX_WAIT_SECS` | preset | Overrides the maximum scanner sleep in seconds. | -| `RUSTFS_SCANNER_CYCLE` | preset | Overrides the scan cycle interval in seconds (e.g. `3600`). | -| `RUSTFS_SCANNER_START_DELAY_SECS` | unset | Startup delay in seconds before the first scan cycle. | -| `RUSTFS_SCANNER_CYCLE_MAX_DURATION_SECS` | `1800` | Caps one cycle's runtime in seconds; `0` disables the budget. | -| `RUSTFS_SCANNER_CYCLE_MAX_OBJECTS` | `0` | Caps objects processed per cycle; `0` disables the budget. | -| `RUSTFS_SCANNER_CYCLE_MAX_DIRECTORIES` | `0` | Caps directories entered per cycle; `0` disables the budget. | -| `RUSTFS_SCANNER_BITROT_CYCLE_SECS` | `2592000` | Periodic deep (bitrot) scan cycle in seconds (30 days). `0`/`true`/`on` makes every cycle deep; `false`/`off` disables deep scans. | -| `RUSTFS_SCANNER_IDLE_MODE` | `true` | When `true` the scanner throttles itself; `false` runs at full speed. | -| `RUSTFS_SCANNER_CACHE_SAVE_TIMEOUT_SECS` | `14` | Scanner cache save timeout in seconds (minimum `1`). | -| `RUSTFS_SCANNER_MAX_CONCURRENT_SET_SCANS` | `4` | Caps concurrent erasure-set scan tasks; `0` keeps topology-based concurrency. | -| `RUSTFS_SCANNER_MAX_CONCURRENT_DISK_SCANS` | `4` | Caps concurrent disk bucket walks per set; `0` keeps disk-count-based concurrency. | -| `RUSTFS_SCANNER_YIELD_EVERY_N_OBJECTS` | `128` | How often scanner object loops yield to the async runtime; `0` disables the extra yield. | -| `RUSTFS_SCANNER_ALERT_EXCESS_VERSIONS` | `100` | Object version count that triggers scanner alerts. | -| `RUSTFS_SCANNER_ALERT_EXCESS_VERSION_SIZE` | `1099511627776` | Cumulative version bytes (1 TiB) that trigger scanner alerts. | -| `RUSTFS_SCANNER_ALERT_EXCESS_FOLDERS` | `65538` | Direct subfolder count that triggers scanner alerts. | -| `RUSTFS_HEAL_AUTO_HEAL_ENABLE` | `true` | Enable automatic background healing of degraded objects. | -| `RUSTFS_HEAL_QUEUE_SIZE` | `10000` | Capacity of the heal-candidate queue. | -| `RUSTFS_HEAL_INTERVAL_SECS` | `10` | Interval between heal scheduler runs, in seconds. | -| `RUSTFS_HEAL_TASK_TIMEOUT_SECS` | `300` | Timeout for a single heal task, in seconds. | -| `RUSTFS_HEAL_MAX_CONCURRENT_HEALS` | `4` | Maximum concurrent heal tasks. | -| `RUSTFS_HEAL_MAX_CONCURRENT_PER_SET` | `1` | Maximum concurrent heal tasks per erasure set. | - -## Storage & Erasure - -| Variable | Default | Description | +| `RUSTFS_SCANNER_SPEED` | `default` | Préréglage de vitesse du scanner : `fastest`, `fast`, `default`, `slow`, `slowest`. Contrôle le facteur de pause, la pause maximale et l’intervalle de cycle. | +| `RUSTFS_SCANNER_DELAY` | préréglage | Remplace le multiplicateur de pause du scanner (par exemple `30.0`). | +| `RUSTFS_SCANNER_MAX_WAIT_SECS` | préréglage | Remplace la pause maximale du scanner, en secondes. | +| `RUSTFS_SCANNER_CYCLE` | préréglage | Remplace l’intervalle du cycle d’analyse, en secondes (par exemple `3600`). | +| `RUSTFS_SCANNER_START_DELAY_SECS` | non définie | Délai de démarrage, en secondes, avant le premier cycle d’analyse. | +| `RUSTFS_SCANNER_CYCLE_MAX_DURATION_SECS` | `1800` | Plafonne la durée d’un cycle, en secondes ; `0` désactive le budget. | +| `RUSTFS_SCANNER_CYCLE_MAX_OBJECTS` | `0` | Plafonne le nombre d’objets traités par cycle ; `0` désactive le budget. | +| `RUSTFS_SCANNER_CYCLE_MAX_DIRECTORIES` | `0` | Plafonne le nombre de répertoires parcourus par cycle ; `0` désactive le budget. | +| `RUSTFS_SCANNER_BITROT_CYCLE_SECS` | `2592000` | Cycle d’analyse approfondie (bitrot) périodique, en secondes (30 jours). `0`/`true`/`on` rend chaque cycle approfondi ; `false`/`off` désactive les analyses approfondies. | +| `RUSTFS_SCANNER_IDLE_MODE` | `true` | Lorsque la valeur est `true`, le scanner se limite lui-même ; `false` le fait tourner à pleine vitesse. | +| `RUSTFS_SCANNER_CACHE_SAVE_TIMEOUT_SECS` | `14` | Délai d’expiration de l’enregistrement du cache du scanner, en secondes (minimum `1`). | +| `RUSTFS_SCANNER_MAX_CONCURRENT_SET_SCANS` | `4` | Plafonne les tâches d’analyse simultanées d’ensembles de codage d’effacement ; `0` conserve la concurrence fondée sur la topologie. | +| `RUSTFS_SCANNER_MAX_CONCURRENT_DISK_SCANS` | `4` | Plafonne les parcours simultanés de compartiments sur disque par ensemble ; `0` conserve la concurrence fondée sur le nombre de disques. | +| `RUSTFS_SCANNER_YIELD_EVERY_N_OBJECTS` | `128` | Fréquence à laquelle les boucles d’objets du scanner rendent la main à l’environnement d’exécution asynchrone ; `0` désactive cette cession supplémentaire. | +| `RUSTFS_SCANNER_ALERT_EXCESS_VERSIONS` | `100` | Nombre de versions d’objet qui déclenche les alertes du scanner. | +| `RUSTFS_SCANNER_ALERT_EXCESS_VERSION_SIZE` | `1099511627776` | Nombre cumulé d’octets de versions (1 TiB) qui déclenche les alertes du scanner. | +| `RUSTFS_SCANNER_ALERT_EXCESS_FOLDERS` | `65538` | Nombre de sous-dossiers directs qui déclenche les alertes du scanner. | +| `RUSTFS_HEAL_AUTO_HEAL_ENABLE` | `true` | Active la réparation automatique en arrière-plan des objets dégradés. | +| `RUSTFS_HEAL_QUEUE_SIZE` | `10000` | Capacité de la file des candidats à la réparation. | +| `RUSTFS_HEAL_INTERVAL_SECS` | `10` | Intervalle entre les exécutions du planificateur de réparation, en secondes. | +| `RUSTFS_HEAL_TASK_TIMEOUT_SECS` | `300` | Délai d’expiration d’une tâche de réparation, en secondes. | +| `RUSTFS_HEAL_MAX_CONCURRENT_HEALS` | `4` | Nombre maximal de tâches de réparation simultanées. | +| `RUSTFS_HEAL_MAX_CONCURRENT_PER_SET` | `1` | Nombre maximal de tâches de réparation simultanées par ensemble de codage d’effacement. | + +## Stockage et codage d’effacement + +| Variable | Valeur par défaut | Description | | --- | --- | --- | -| `RUSTFS_STORAGE_CLASS_STANDARD` | auto | Parity for the STANDARD storage class in `EC:n` format, e.g. `EC:4`. When unset, parity is derived from the erasure set size. | -| `RUSTFS_STORAGE_CLASS_RRS` | `EC:1` | Parity for the REDUCED_REDUNDANCY storage class in `EC:n` format. | -| `RUSTFS_STORAGE_CLASS_OPTIMIZE` | `availability` | Optimization goal for parity selection. | -| `RUSTFS_STORAGE_CLASS_INLINE_BLOCK` | `131072` | Threshold (128 KiB) below which object data is inlined into metadata. | -| `RUSTFS_ERASURE_SET_DRIVE_COUNT` | `0` | Force the number of drives per erasure set; `0` selects the layout automatically. | -| `RUSTFS_DURABILITY_MODE` | unset | Write durability mode: `strict`, `relaxed`, or `none`. Takes precedence over the legacy drive-sync switch when set to a valid value. | +| `RUSTFS_STORAGE_CLASS_STANDARD` | automatique | Parité de la classe de stockage STANDARD au format `EC:n`, par exemple `EC:4`. Lorsqu’elle n’est pas définie, la parité est déduite de la taille de l’ensemble de codage d’effacement. | +| `RUSTFS_STORAGE_CLASS_RRS` | `EC:1` | Parité de la classe de stockage REDUCED_REDUNDANCY au format `EC:n`. | +| `RUSTFS_STORAGE_CLASS_OPTIMIZE` | `availability` | Objectif d’optimisation pour le choix de la parité. | +| `RUSTFS_STORAGE_CLASS_INLINE_BLOCK` | `131072` | Seuil (128 KiB) en dessous duquel les données d’objet sont intégrées dans les métadonnées. | +| `RUSTFS_ERASURE_SET_DRIVE_COUNT` | `0` | Force le nombre de disques par ensemble de codage d’effacement ; `0` sélectionne la disposition automatiquement. | +| `RUSTFS_DURABILITY_MODE` | non définie | Mode de durabilité des écritures : `strict`, `relaxed` ou `none`. Lorsqu’une valeur valide est définie, elle a priorité sur le commutateur historique de synchronisation des disques. | -## Credentials & Internal +## Identifiants et paramètres internes -| Variable | Default | Description | +| Variable | Valeur par défaut | Description | | --- | --- | --- | -| `RUSTFS_ACCESS_KEY` | `rustfsadmin` | Root access key. Mutually exclusive with `RUSTFS_ACCESS_KEY_FILE`. | -| `RUSTFS_SECRET_KEY` | `rustfsadmin` | Root secret key. Mutually exclusive with `RUSTFS_SECRET_KEY_FILE`. | -| `RUSTFS_ACCESS_KEY_FILE` | unset | Path to a file containing the access key (e.g. a Docker/Kubernetes secret mount). | -| `RUSTFS_SECRET_KEY_FILE` | unset | Path to a file containing the secret key. | -| `RUSTFS_RPC_SECRET` | derived | Secret used to authenticate internode RPC. When unset it is derived from the active access/secret key pair; with an all-default credential pair, multi-node clusters must set it explicitly. | +| `RUSTFS_ACCESS_KEY` | `rustfsadmin` | Clé d’accès racine. Mutuellement exclusive avec `RUSTFS_ACCESS_KEY_FILE`. | +| `RUSTFS_SECRET_KEY` | `rustfsadmin` | Clé secrète racine. Mutuellement exclusive avec `RUSTFS_SECRET_KEY_FILE`. | +| `RUSTFS_ACCESS_KEY_FILE` | non définie | Chemin d’un fichier contenant la clé d’accès (par exemple un montage de secret Docker ou Kubernetes). | +| `RUSTFS_SECRET_KEY_FILE` | non définie | Chemin d’un fichier contenant la clé secrète. | +| `RUSTFS_RPC_SECRET` | dérivé | Secret utilisé pour authentifier le RPC entre nœuds. Lorsqu’il n’est pas défini, il est dérivé de la paire de clés d’accès et secrète active ; avec une paire d’identifiants entièrement par défaut, les clusters multi-nœuds doivent le définir explicitement. | :::warning -The built-in default credentials `rustfsadmin`/`rustfsadmin` are for first-boot convenience only. Always set non-default credentials for production deployments. +Les identifiants par défaut intégrés `rustfsadmin`/`rustfsadmin` servent uniquement à faciliter le premier démarrage. Définissez toujours des identifiants autres que ceux par défaut pour les déploiements de production. ::: -## Event & Audit targets +## Cibles d’événements et d’audit -Module switches: +Commutateurs de module : -| Variable | Default | Description | +| Variable | Valeur par défaut | Description | | --- | --- | --- | -| `RUSTFS_NOTIFY_ENABLE` | `false` | Enable the bucket event notification module. | -| `RUSTFS_AUDIT_ENABLE` | `false` | Enable the audit logging module. | +| `RUSTFS_NOTIFY_ENABLE` | `false` | Active le module de notification d’événements de compartiment. | +| `RUSTFS_AUDIT_ENABLE` | `false` | Active le module de journalisation d’audit. | -Target configuration is pattern-based: `RUSTFS_NOTIFY__` for event notification and `RUSTFS_AUDIT__` for audit logs. Supported targets in both families: `WEBHOOK`, `KAFKA`, `MQTT`, `MYSQL`, `POSTGRES`, `NATS`, `REDIS`, `AMQP`, `PULSAR`. +La configuration des cibles suit un modèle : `RUSTFS_NOTIFY__` pour les notifications d’événements et `RUSTFS_AUDIT__` pour les journaux d’audit. Cibles prises en charge dans les deux familles : `WEBHOOK`, `KAFKA`, `MQTT`, `MYSQL`, `POSTGRES`, `NATS`, `REDIS`, `AMQP`, `PULSAR`. -Sub-keys for the webhook target (the same keys exist under `RUSTFS_AUDIT_WEBHOOK_*`): +Sous-clés de la cible webhook (les mêmes clés existent sous `RUSTFS_AUDIT_WEBHOOK_*`) : -| Variable | Default | Description | +| Variable | Valeur par défaut | Description | | --- | --- | --- | -| `RUSTFS_NOTIFY_WEBHOOK_ENABLE` | `false` | Enable the webhook target. | -| `RUSTFS_NOTIFY_WEBHOOK_ENDPOINT` | unset | Webhook HTTP(S) endpoint URL. | -| `RUSTFS_NOTIFY_WEBHOOK_AUTH_TOKEN` | unset | Bearer token sent with each delivery. | -| `RUSTFS_NOTIFY_WEBHOOK_QUEUE_DIR` | unset | Directory for the persistent delivery queue. | -| `RUSTFS_NOTIFY_WEBHOOK_QUEUE_LIMIT` | unset | Maximum queued events. | -| `RUSTFS_NOTIFY_WEBHOOK_CLIENT_CERT` | unset | Client certificate for mTLS to the endpoint. | -| `RUSTFS_NOTIFY_WEBHOOK_CLIENT_KEY` | unset | Client private key for mTLS to the endpoint. | -| `RUSTFS_NOTIFY_WEBHOOK_CLIENT_CA` | unset | CA certificate used to verify the endpoint. | -| `RUSTFS_NOTIFY_WEBHOOK_SKIP_TLS_VERIFY` | unset | Skip TLS verification of the endpoint (not recommended). | +| `RUSTFS_NOTIFY_WEBHOOK_ENABLE` | `false` | Active la cible webhook. | +| `RUSTFS_NOTIFY_WEBHOOK_ENDPOINT` | non définie | URL du point de terminaison HTTP(S) du webhook. | +| `RUSTFS_NOTIFY_WEBHOOK_AUTH_TOKEN` | non définie | Jeton Bearer envoyé avec chaque livraison. | +| `RUSTFS_NOTIFY_WEBHOOK_QUEUE_DIR` | non définie | Répertoire de la file de livraison persistante. | +| `RUSTFS_NOTIFY_WEBHOOK_QUEUE_LIMIT` | non définie | Nombre maximal d’événements en file d’attente. | +| `RUSTFS_NOTIFY_WEBHOOK_CLIENT_CERT` | non définie | Certificat client pour le mTLS vers le point de terminaison. | +| `RUSTFS_NOTIFY_WEBHOOK_CLIENT_KEY` | non définie | Clé privée client pour le mTLS vers le point de terminaison. | +| `RUSTFS_NOTIFY_WEBHOOK_CLIENT_CA` | non définie | Certificat d’autorité de certification utilisé pour vérifier le point de terminaison. | +| `RUSTFS_NOTIFY_WEBHOOK_SKIP_TLS_VERIFY` | non définie | Ignore la vérification TLS du point de terminaison (déconseillé). | -Other targets follow the same shape with target-specific keys, e.g. `RUSTFS_NOTIFY_KAFKA_BROKERS`, `RUSTFS_NOTIFY_KAFKA_TOPIC`, `RUSTFS_NOTIFY_MQTT_BROKER`, `RUSTFS_NOTIFY_MQTT_TOPIC`, `RUSTFS_NOTIFY_MYSQL_DSN_STRING`, `RUSTFS_NOTIFY_NATS_ADDRESS`, `RUSTFS_NOTIFY_REDIS_URL`, `RUSTFS_NOTIFY_AMQP_URL`, `RUSTFS_NOTIFY_PULSAR_BROKER`. +Les autres cibles suivent la même forme avec des clés propres à chaque cible, par exemple `RUSTFS_NOTIFY_KAFKA_BROKERS`, `RUSTFS_NOTIFY_KAFKA_TOPIC`, `RUSTFS_NOTIFY_MQTT_BROKER`, `RUSTFS_NOTIFY_MQTT_TOPIC`, `RUSTFS_NOTIFY_MYSQL_DSN_STRING`, `RUSTFS_NOTIFY_NATS_ADDRESS`, `RUSTFS_NOTIFY_REDIS_URL`, `RUSTFS_NOTIFY_AMQP_URL`, `RUSTFS_NOTIFY_PULSAR_BROKER`. -## Legacy compatibility +## Compatibilité historique -### MINIO_* variable mapping +### Correspondance des variables MINIO_* -For migration convenience, RustFS maps a fixed allowlist of `MINIO_*` variables to their `RUSTFS_*` equivalents at startup: +Pour faciliter la migration, RustFS associe au démarrage une liste d’autorisation fixe de variables `MINIO_*` à leurs équivalents `RUSTFS_*` : -- If only the `MINIO_`-prefixed variable is set, its value is used and a deprecation warning is logged. -- If both `MINIO_*` and `RUSTFS_*` are set with different values, the `RUSTFS_*` value wins and a conflict is recorded. +- Si seule la variable préfixée par `MINIO_` est définie, sa valeur est utilisée et un avertissement d’obsolescence est journalisé. +- Si `MINIO_*` et `RUSTFS_*` sont toutes deux définies avec des valeurs différentes, la valeur `RUSTFS_*` l’emporte et un conflit est enregistré. -The mapped suffixes include `ACCESS_KEY`, `SECRET_KEY`, `ACCESS_KEY_FILE`, `SECRET_KEY_FILE`, `ROOT_USER`, `ROOT_PASSWORD`, `ADDRESS`, `CONSOLE_ADDRESS`, `VOLUMES`, `REGION`, `LICENSE`, `ERASURE_SET_DRIVE_COUNT`, `STORAGE_CLASS_STANDARD`, `STORAGE_CLASS_RRS`, `STORAGE_CLASS_OPTIMIZE`, `STORAGE_CLASS_INLINE_BLOCK`, `SCANNER_SPEED`, `SCANNER_CYCLE`, `COMPRESS_ENABLE`, `COMPRESS_EXTENSIONS`, `COMPRESS_MIME_TYPES`, `DRIVE_ACTIVE_MONITORING`, `ILM_EXPIRATION_WORKERS`, `API_XFF_HEADER`, `POLICY_PLUGIN_URL`, `POLICY_PLUGIN_AUTH_TOKEN`, the `IDENTITY_OPENID_*` keys, and every variable starting with `NOTIFY_WEBHOOK_`, `NOTIFY_MQTT_`, `AUDIT_WEBHOOK_`, or `AUDIT_MQTT_`. For example, `MINIO_ROOT_USER` maps to `RUSTFS_ROOT_USER` and `MINIO_NOTIFY_WEBHOOK_ENDPOINT` maps to `RUSTFS_NOTIFY_WEBHOOK_ENDPOINT`. +Les suffixes associés comprennent `ACCESS_KEY`, `SECRET_KEY`, `ACCESS_KEY_FILE`, `SECRET_KEY_FILE`, `ROOT_USER`, `ROOT_PASSWORD`, `ADDRESS`, `CONSOLE_ADDRESS`, `VOLUMES`, `REGION`, `LICENSE`, `ERASURE_SET_DRIVE_COUNT`, `STORAGE_CLASS_STANDARD`, `STORAGE_CLASS_RRS`, `STORAGE_CLASS_OPTIMIZE`, `STORAGE_CLASS_INLINE_BLOCK`, `SCANNER_SPEED`, `SCANNER_CYCLE`, `COMPRESS_ENABLE`, `COMPRESS_EXTENSIONS`, `COMPRESS_MIME_TYPES`, `DRIVE_ACTIVE_MONITORING`, `ILM_EXPIRATION_WORKERS`, `API_XFF_HEADER`, `POLICY_PLUGIN_URL`, `POLICY_PLUGIN_AUTH_TOKEN`, les clés `IDENTITY_OPENID_*`, ainsi que chaque variable qui commence par `NOTIFY_WEBHOOK_`, `NOTIFY_MQTT_`, `AUDIT_WEBHOOK_` ou `AUDIT_MQTT_`. Par exemple, `MINIO_ROOT_USER` correspond à `RUSTFS_ROOT_USER` et `MINIO_NOTIFY_WEBHOOK_ENDPOINT` correspond à `RUSTFS_NOTIFY_WEBHOOK_ENDPOINT`. -### Deprecated aliases +### Alias obsolètes -| Deprecated variable | Use instead | +| Variable obsolète | À utiliser à la place | | --- | --- | | `RUSTFS_ROOT_USER` | `RUSTFS_ACCESS_KEY` | | `RUSTFS_ROOT_PASSWORD` | `RUSTFS_SECRET_KEY` | | `RUSTFS_DATA_SCANNER_START_DELAY_SECS` | `RUSTFS_SCANNER_START_DELAY_SECS` | -Deprecated aliases still work but log a warning; the canonical `RUSTFS_*` name always takes precedence when both are set. +Les alias obsolètes fonctionnent encore, mais journalisent un avertissement ; le nom canonique `RUSTFS_*` a toujours priorité lorsque les deux sont définis. diff --git a/content/fr/reference/index.md b/content/fr/reference/index.md index 8bcb95e50..09b12b874 100644 --- a/content/fr/reference/index.md +++ b/content/fr/reference/index.md @@ -1,11 +1,11 @@ --- -title: "Reference" -description: "Look up RustFS configuration variables and command-line options." +title: "Référence" +description: "Consultez les variables de configuration et les options de ligne de commande de RustFS." --- -Use this section for concise technical references while configuring, operating, or integrating RustFS. +Utilisez cette section comme référence technique concise pour configurer, exploiter ou intégrer RustFS. -## References +## Références -- [Environment Variables](./environment-variables.md) -- [CLI](./cli.md) \ No newline at end of file +- [Variables d’environnement](./environment-variables.md) +- [CLI](./cli.md) diff --git a/content/fr/security-compliance/audit-logs.md b/content/fr/security-compliance/audit-logs.md index 593410ac2..1c5dd90ef 100644 --- a/content/fr/security-compliance/audit-logs.md +++ b/content/fr/security-compliance/audit-logs.md @@ -1,28 +1,28 @@ --- -title: "Audit Targets" -description: "Configure RustFS audit targets and deliver request-level audit records to external systems." +title: "Cibles d’audit" +description: "Configurez les cibles d’audit RustFS et transmettez les enregistrements d’audit au niveau de la requête vers des systèmes externes." --- -RustFS Audit Targets send request-level activity records to external systems for security monitoring, compliance, and incident investigation. This guide configures a webhook target and verifies audit delivery with an S3 request. +Les cibles d’audit RustFS envoient des enregistrements d’activité au niveau de la requête vers des systèmes externes, pour la supervision de sécurité, la conformité et l’investigation d’incidents. Ce guide configure une cible webhook et vérifie la livraison d’audit avec une requête S3. -## Overview +## Vue d’ensemble -Audit Targets and Event Notifications serve different purposes: +Les cibles d’audit et les notifications d’événements ont des rôles distincts : -| Feature | Audit Targets | Event Notifications | +| Caractéristique | Cibles d’audit | Notifications d’événements | | --- | --- | --- | -| Scope | Request and API activity across RustFS | Events selected by each bucket configuration | -| Routing | Every enabled audit target receives audit records | Each bucket rule selects a target | -| Filtering | No per-target event filter | Event, prefix, and suffix filters | -| Typical use | Security information and event management (SIEM), compliance, investigation | Application workflows and data pipelines | +| Portée | Activité des requêtes et de l’API dans l’ensemble de RustFS | Événements sélectionnés par la configuration de chaque compartiment (bucket) | +| Routage | Chaque cible d’audit activée reçoit les enregistrements d’audit | Chaque règle de compartiment sélectionne une cible | +| Filtrage | Aucun filtre d’événement par cible | Filtres par événement, préfixe et suffixe | +| Usage typique | Gestion des informations et des événements de sécurité (SIEM), conformité, investigation | Flux applicatifs et pipelines de données | -RustFS supports webhook, Kafka, MQTT, MySQL, PostgreSQL, NATS, Redis, AMQP, and Pulsar audit target families. Each enabled target receives the audit stream independently. +RustFS prend en charge les familles de cibles d’audit webhook, Kafka, MQTT, MySQL, PostgreSQL, NATS, Redis, AMQP et Pulsar. Chaque cible activée reçoit le flux d’audit de façon indépendante. -Audit records can contain request paths, query parameters, selected headers, identity claims, access-key identifiers, remote hosts, user agents, response status, and errors. Protect the destination and restrict access according to your retention and compliance requirements. +Les enregistrements d’audit peuvent contenir les chemins de requête, les paramètres de requête, certains en-têtes, les claims d’identité, les identifiants de clé d’accès, les hôtes distants, les agents utilisateur, le statut de réponse et les erreurs. Protégez la destination et restreignez l’accès selon vos exigences de conservation et de conformité. ## Configuration -Audit delivery is disabled by default. The following environment variables enable the module and create a webhook target named `primary`: +La livraison d’audit est désactivée par défaut. Les variables d’environnement suivantes activent le module et créent une cible webhook nommée `primary` : ```bash export RUSTFS_AUDIT_ENABLE="true" @@ -33,69 +33,69 @@ export RUSTFS_AUDIT_WEBHOOK_QUEUE_DIR_PRIMARY="/var/lib/rustfs/audit-primary" export RUSTFS_OUTBOUND_ALLOW_ORIGINS="https://audit.example.com" ``` -Restart RustFS after changing environment-managed targets. The target name is the lowercase form of the environment-variable suffix, so `_PRIMARY` creates `primary`. +Redémarrez RustFS après avoir modifié des cibles gérées par l’environnement. Le nom de la cible est la forme en minuscules du suffixe de la variable d’environnement : `_PRIMARY` crée donc `primary`. -RustFS sends a `HEAD` health check to the endpoint origin's root path, such as `https://audit.example.com/`, and sends JSON `POST` requests to the complete configured endpoint. The origin must respond to `HEAD`, while delivery requests must return a successful HTTP status. Allow the RustFS service account to write to the queue directory. +RustFS envoie un contrôle d’intégrité `HEAD` vers le chemin racine de l’origine du point de terminaison, par exemple `https://audit.example.com/`, et envoie des requêtes `POST` JSON vers le point de terminaison configuré complet. L’origine doit répondre à `HEAD`, tandis que les requêtes de livraison doivent renvoyer un statut HTTP de succès. Autorisez le compte de service RustFS à écrire dans le répertoire de file d’attente. -### Webhook settings +### Réglages du webhook -Use the same `_PRIMARY` suffix on all settings for this target: +Utilisez le même suffixe `_PRIMARY` pour tous les réglages de cette cible : -| Variable | Purpose | +| Variable | Rôle | | --- | --- | -| `RUSTFS_AUDIT_WEBHOOK_ENDPOINT_PRIMARY` | HTTP or HTTPS delivery endpoint | -| `RUSTFS_AUDIT_WEBHOOK_AUTH_TOKEN_PRIMARY` | Bearer token sent in the `Authorization` header | -| `RUSTFS_AUDIT_WEBHOOK_QUEUE_DIR_PRIMARY` | Directory for queued audit records | -| `RUSTFS_AUDIT_WEBHOOK_QUEUE_LIMIT_PRIMARY` | Maximum number of queued records | -| `RUSTFS_AUDIT_WEBHOOK_CLIENT_CERT_PRIMARY` | Client certificate for mutual TLS (mTLS) | -| `RUSTFS_AUDIT_WEBHOOK_CLIENT_KEY_PRIMARY` | Private key paired with the client certificate | -| `RUSTFS_AUDIT_WEBHOOK_CLIENT_CA_PRIMARY` | Certificate authority used to verify the receiver | -| `RUSTFS_AUDIT_WEBHOOK_SKIP_TLS_VERIFY_PRIMARY` | Disable server certificate verification | +| `RUSTFS_AUDIT_WEBHOOK_ENDPOINT_PRIMARY` | Point de terminaison de livraison HTTP ou HTTPS | +| `RUSTFS_AUDIT_WEBHOOK_AUTH_TOKEN_PRIMARY` | Jeton Bearer envoyé dans l’en-tête `Authorization` | +| `RUSTFS_AUDIT_WEBHOOK_QUEUE_DIR_PRIMARY` | Répertoire des enregistrements d’audit en file d’attente | +| `RUSTFS_AUDIT_WEBHOOK_QUEUE_LIMIT_PRIMARY` | Nombre maximal d’enregistrements en file d’attente | +| `RUSTFS_AUDIT_WEBHOOK_CLIENT_CERT_PRIMARY` | Certificat client pour le TLS mutuel (mTLS) | +| `RUSTFS_AUDIT_WEBHOOK_CLIENT_KEY_PRIMARY` | Clé privée associée au certificat client | +| `RUSTFS_AUDIT_WEBHOOK_CLIENT_CA_PRIMARY` | Autorité de certification utilisée pour vérifier le récepteur | +| `RUSTFS_AUDIT_WEBHOOK_SKIP_TLS_VERIFY_PRIMARY` | Désactive la vérification du certificat serveur | -:::warning[Protect audit data] +:::warning[Protégez les données d’audit] -Use HTTPS for remote collectors. Keep certificate verification enabled, store bearer tokens outside source control, and provide both the client certificate and key when using mTLS. Audit payloads may contain security-sensitive request and identity metadata. +Utilisez HTTPS pour les collecteurs distants. Laissez la vérification des certificats activée, stockez les jetons Bearer hors du dépôt de code source et fournissez à la fois le certificat client et la clé lorsque vous utilisez mTLS. Les charges utiles d’audit peuvent contenir des métadonnées de requête et d’identité sensibles pour la sécurité. ::: -For all target families and target-specific keys, see [Environment Variables](/reference/environment-variables#event--audit-targets). +Pour toutes les familles de cibles et les clés propres à chaque cible, consultez les [variables d’environnement](/fr/reference/environment-variables#cibles-dévénements-et-daudit). -### Multiple targets +### Plusieurs cibles -Add a distinct uppercase suffix to define another instance. For example, use `RUSTFS_AUDIT_WEBHOOK_ENABLE_ARCHIVE` and the corresponding `_ARCHIVE` settings to create an `archive` webhook alongside `primary`. +Ajoutez un suffixe distinct en majuscules pour définir une autre instance. Par exemple, utilisez `RUSTFS_AUDIT_WEBHOOK_ENABLE_ARCHIVE` et les réglages `_ARCHIVE` correspondants pour créer un webhook `archive` à côté de `primary`. -RustFS fans each audit record out to all enabled targets. A failure in one target does not prevent delivery attempts to the others. +RustFS diffuse chaque enregistrement d’audit vers toutes les cibles activées. L’échec d’une cible n’empêche pas les tentatives de livraison vers les autres. -:::note[Environment-managed targets] +:::note[Cibles gérées par l’environnement] -A target defined by environment variables cannot be edited or removed through the Console or admin API. Change its environment variables and restart RustFS instead. Do not define the same target through both environment variables and persisted configuration. +Une cible définie par des variables d’environnement ne peut être ni modifiée ni supprimée via la Console ou l’API d’administration. Modifiez ses variables d’environnement, puis redémarrez RustFS. Ne définissez pas la même cible à la fois par des variables d’environnement et par une configuration persistée. ::: -## Usage +## Utilisation -:::note[rc command-line support] +:::note[Prise en charge de la ligne de commande rc] -The current `rc` client does not provide commands for creating, listing, or removing Audit Targets. Configure them through environment variables or the Console. The `rc bucket event` commands manage bucket notification rules only; they do not manage audit delivery. +Le client `rc` actuel ne fournit pas de commandes pour créer, lister ou supprimer les cibles d’audit. Configurez-les par des variables d’environnement ou dans la Console. Les commandes `rc bucket event` gèrent uniquement les règles de notification des compartiments ; elles ne gèrent pas la livraison d’audit. ::: -### Verify the receiver +### Vérifier le récepteur -Before generating traffic, verify that the collector is reachable from the RustFS host and accepts the configured bearer token: +Avant de générer du trafic, vérifiez que le collecteur est accessible depuis l’hôte RustFS et qu’il accepte le jeton Bearer configuré : ```bash curl --fail --head \ https://audit.example.com/ ``` -The health check measures origin reachability and does not include the webhook authorization token. Separately confirm that the configured `/rustfs` delivery path accepts `Authorization: Bearer ` on `POST` requests. +Le contrôle d’intégrité mesure l’accessibilité de l’origine et n’inclut pas le jeton d’autorisation du webhook. Confirmez séparément que le chemin de livraison `/rustfs` configuré accepte `Authorization: Bearer ` sur les requêtes `POST`. -If the target remains offline, check DNS, firewall policy, `RUSTFS_OUTBOUND_ALLOW_ORIGINS`, certificate trust, and the origin's response to `HEAD /`. +Si la cible reste hors ligne, vérifiez le DNS, la politique de pare-feu, `RUSTFS_OUTBOUND_ALLOW_ORIGINS`, la confiance accordée aux certificats et la réponse de l’origine à `HEAD /`. -### Generate an audit record +### Générer un enregistrement d’audit -Perform an authenticated S3 operation against RustFS: +Effectuez une opération S3 authentifiée sur RustFS : ```bash printf 'hello from RustFS\n' > hello.txt @@ -105,7 +105,7 @@ aws --endpoint-url http://localhost:9000 \ s3 cp hello.txt s3://my-bucket/hello.txt ``` -The webhook receives a JSON audit entry. Fields vary by operation and empty optional fields may be omitted. A representative subset is: +Le webhook reçoit une entrée d’audit JSON. Les champs varient selon l’opération et les champs facultatifs vides peuvent être omis. Un sous-ensemble représentatif est le suivant : ```json { @@ -128,16 +128,16 @@ The webhook receives a JSON audit entry. Fields vary by operation and empty opti } ``` -Treat the payload schema as additive. Parse the fields you need and tolerate unknown or absent fields so collectors remain compatible with later RustFS releases. +Considérez le schéma de la charge utile comme additif. Analysez les champs dont vous avez besoin et tolérez les champs inconnus ou absents, afin que les collecteurs restent compatibles avec les versions ultérieures de RustFS. -### Delivery behavior +### Comportement de livraison -When `RUSTFS_AUDIT_WEBHOOK_QUEUE_DIR_PRIMARY` is configured, RustFS stores pending records on disk and replays them after transient delivery failures. Size the queue directory and `RUSTFS_AUDIT_WEBHOOK_QUEUE_LIMIT_PRIMARY` for the expected outage window, then monitor both disk usage and target health. +Lorsque `RUSTFS_AUDIT_WEBHOOK_QUEUE_DIR_PRIMARY` est configuré, RustFS stocke les enregistrements en attente sur disque et les rejoue après des échecs de livraison transitoires. Dimensionnez le répertoire de file d’attente et `RUSTFS_AUDIT_WEBHOOK_QUEUE_LIMIT_PRIMARY` pour la fenêtre d’indisponibilité attendue, puis surveillez à la fois l’utilisation du disque et l’état de la cible. -Webhook delivery is at least once. A timeout can occur after the receiver processes a request but before RustFS observes the response, so use `requestID` and other stable fields to deduplicate records where required. +La livraison webhook est au moins une fois. Un délai d’expiration peut survenir après que le récepteur a traité une requête, mais avant que RustFS n’observe la réponse : utilisez `requestID` et d’autres champs stables pour dédupliquer les enregistrements lorsque c’est nécessaire. -The receiver should acknowledge a record only after it has durably accepted it. Returning a non-success status keeps failures visible to the delivery path; silently accepting and discarding a record cannot be recovered by RustFS. +Le récepteur ne devrait accuser réception d’un enregistrement qu’après l’avoir accepté de façon durable. Renvoyer un statut autre que le succès maintient les échecs visibles pour le chemin de livraison ; un enregistrement accepté puis ignoré en silence ne peut pas être récupéré par RustFS. -## Next steps +## Étapes suivantes -Configure [Event Notifications](/operations/event-notifications) for bucket-scoped application workflows. Review [Observability](/operations/observability) to monitor service health and [Credentials](/operations/credentials) to limit administrative access. \ No newline at end of file +Configurez les [notifications d’événements](/fr/operations/event-notifications) pour les flux applicatifs limités à un compartiment. Consultez l’[observabilité](/fr/operations/observability) pour surveiller l’état du service et les [identifiants](/fr/operations/credentials) pour limiter l’accès administratif. diff --git a/content/fr/security-compliance/encryption/index.md b/content/fr/security-compliance/encryption/index.md index 0737b6cfa..9ca4ee9b9 100644 --- a/content/fr/security-compliance/encryption/index.md +++ b/content/fr/security-compliance/encryption/index.md @@ -1,14 +1,14 @@ --- -title: "Data Encryption" -description: "Find the verified RustFS server-side encryption and key management references." +title: "Chiffrement des données" +description: "Retrouvez les références vérifiées de RustFS sur le chiffrement côté serveur et la gestion des clés." --- -RustFS provides server-side encryption options for data stored in the object storage service. Use this section to choose the key-management model that matches your security requirements. +RustFS propose des options de chiffrement côté serveur pour les données stockées dans le service de stockage objet. Utilisez cette section pour choisir le modèle de gestion des clés qui correspond à vos exigences de sécurité. -## Encryption options +## Options de chiffrement -- [SSE-S3](./sse-s.md) covers server-managed server-side encryption with the S3 `AES256` mode. -- [SSE-C](./sse-c.md) covers server-side encryption with customer-provided keys. -- [SSE-KMS](./kms.md) covers Local, Vault KV2, and Vault Transit key-management backends. +- [SSE-S3](./sse-s.md) décrit le chiffrement côté serveur géré par le serveur, avec le mode S3 `AES256`. +- [SSE-C](./sse-c.md) décrit le chiffrement côté serveur avec des clés fournies par le client. +- [SSE-KMS](./kms.md) décrit les backends de gestion des clés Local, Vault KV2 et Vault Transit. -For the currently verified KMS configuration surface, see the [CLI reference](/reference/cli) and [environment variable reference](/reference/environment-variables). \ No newline at end of file +Pour la surface de configuration KMS actuellement vérifiée, consultez la [référence CLI](/fr/reference/cli) et la [référence des variables d’environnement](/fr/reference/environment-variables). diff --git a/content/fr/security-compliance/encryption/kms.md b/content/fr/security-compliance/encryption/kms.md index a1db65686..d3a965368 100644 --- a/content/fr/security-compliance/encryption/kms.md +++ b/content/fr/security-compliance/encryption/kms.md @@ -1,44 +1,44 @@ --- title: "SSE-KMS" -description: "Configure SSE-KMS with a local or HashiCorp Vault KMS backend for RustFS." +description: "Configurez SSE-KMS avec un backend KMS local ou HashiCorp Vault pour RustFS." --- -RustFS Key Management Service (KMS) generates and wraps per-object data encryption keys for [SSE-S3](./sse-s.md) and SSE-KMS. This guide configures SSE-KMS at server startup with a local key store, Vault KV v2, or Vault Transit. +Le service de gestion des clés (Key Management Service, KMS) de RustFS génère et enveloppe les clés de chiffrement des données propres à chaque objet, pour [SSE-S3](./sse-s.md) et SSE-KMS. Ce guide configure SSE-KMS au démarrage du serveur avec un magasin de clés local, Vault KV v2 ou Vault Transit. -## Requirements +## Prérequis -- Install and configure [`rc`](/operations/rc) for the encryption verification workflow. -- Back up all existing data and KMS key material before changing encryption configuration. -- Apply the same KMS backend and default key ID to every RustFS node. -- Use a process manager or secret manager that injects secrets without committing them to source control. -- For Vault, enable the required secrets engines, create a least-privilege token, and make Vault reachable from every RustFS node. -- Provision a KMS master key before configuring its ID as the RustFS default key. +- Installez et configurez [`rc`](/fr/operations/rc) pour le flux de vérification du chiffrement. +- Sauvegardez toutes les données existantes et le matériel de clés KMS avant de modifier la configuration de chiffrement. +- Appliquez le même backend KMS et le même ID de clé par défaut à chaque nœud RustFS. +- Utilisez un gestionnaire de processus ou de secrets qui injecte les secrets sans les ajouter au dépôt de code source. +- Pour Vault, activez les moteurs de secrets requis, créez un jeton de moindre privilège et rendez Vault accessible depuis chaque nœud RustFS. +- Provisionnez une clé principale KMS avant de configurer son ID comme clé par défaut de RustFS. -:::warning[Key loss makes encrypted objects unreadable] +:::warning[La perte de la clé rend les objets chiffrés illisibles] -RustFS does not store a recoverable copy of your KMS master key outside the configured backend. Back up local key files and their master key, or protect Vault data and recovery credentials, before writing encrypted objects. +RustFS ne conserve pas de copie récupérable de votre clé principale KMS en dehors du backend configuré. Sauvegardez les fichiers de clés locaux et leur clé principale, ou protégez les données Vault et les identifiants de récupération, avant d’écrire des objets chiffrés. ::: -## Choose a backend +## Choisir un backend -| Backend | `RUSTFS_KMS_BACKEND` | Key storage and wrapping | Intended use | +| Backend | `RUSTFS_KMS_BACKEND` | Stockage et enveloppement des clés | Usage prévu | | --- | --- | --- | --- | -| Local | `local` | Key files on the RustFS host | Development, testing, or a carefully backed-up single-host deployment | -| Vault KV2 | `vault` or `vault-kv2` | Master key material in Vault KV v2; data-key wrapping in RustFS | Centralized key storage | -| Vault Transit | `vault-transit` | Cryptographic operations through Vault Transit | Centralized production key management without the KV2 backend mode | +| Local | `local` | Fichiers de clés sur l’hôte RustFS | Développement, tests ou déploiement mono-hôte soigneusement sauvegardé | +| Vault KV2 | `vault` ou `vault-kv2` | Matériel de clé principale dans Vault KV v2 ; enveloppement des clés de données dans RustFS | Stockage centralisé des clés | +| Vault Transit | `vault-transit` | Opérations cryptographiques via Vault Transit | Gestion centralisée des clés de production, sans le mode de backend KV2 | -SSE-S3 and SSE-KMS both require the KMS service to be running. Configuring a bucket default alone does not make encrypted writes succeed when KMS is unavailable. +SSE-S3 et SSE-KMS exigent tous deux que le service KMS soit en cours d’exécution. Configurer seulement la valeur par défaut d’un compartiment (bucket) ne suffit pas à faire réussir les écritures chiffrées lorsque le KMS est indisponible. -## Configure the local backend +## Configurer le backend local -Create an absolute key directory owned by the RustFS service account: +Créez un répertoire de clés en chemin absolu, appartenant au compte de service RustFS : ```bash sudo install -d -m 0700 -o rustfs -g rustfs /var/lib/rustfs/kms ``` -Add the KMS settings to the RustFS environment file on every node: +Ajoutez les réglages KMS au fichier d’environnement RustFS sur chaque nœud : ```ini title="/etc/default/rustfs" RUSTFS_KMS_ENABLE=true @@ -47,18 +47,18 @@ RUSTFS_KMS_KEY_DIR=/var/lib/rustfs/kms RUSTFS_KMS_LOCAL_MASTER_KEY= ``` -`RUSTFS_KMS_KEY_DIR` is required by the RustFS server startup path. The local backend writes key files with owner-only permissions. RustFS rejects development defaults such as a temporary key directory or missing local master key unless you explicitly set `RUSTFS_KMS_ALLOW_INSECURE_DEV_DEFAULTS=true`; never enable that override in production. +`RUSTFS_KMS_KEY_DIR` est exigé au démarrage du serveur RustFS. Le backend local écrit les fichiers de clés avec des permissions réservées au propriétaire. RustFS rejette les valeurs par défaut de développement, telles qu’un répertoire de clés temporaire ou une clé principale locale absente, sauf si vous définissez explicitement `RUSTFS_KMS_ALLOW_INSECURE_DEV_DEFAULTS=true` ; n’activez jamais cette dérogation en production. -Restart RustFS after updating the environment. This starts the KMS backend but does not create a master key: +Redémarrez RustFS après la mise à jour de l’environnement. Cela démarre le backend KMS, mais ne crée pas de clé principale : ```bash sudo systemctl restart rustfs sudo systemctl status rustfs --no-pager ``` -## Configure Vault KV2 +## Configurer Vault KV2 -Enable a KV v2 engine for master key material and metadata. RustFS reads the master key material and wraps data keys locally; this backend does not call Vault Transit. Configure every RustFS node: +Activez un moteur KV v2 pour le matériel de clé principale et les métadonnées. RustFS lit le matériel de clé principale et enveloppe les clés de données localement ; ce backend n’appelle pas Vault Transit. Configurez chaque nœud RustFS : ```ini title="/etc/default/rustfs" RUSTFS_KMS_ENABLE=true @@ -69,15 +69,15 @@ RUSTFS_KMS_VAULT_KV_MOUNT=secret RUSTFS_KMS_VAULT_KEY_PREFIX=rustfs/kms/keys ``` -The KV mount defaults to `secret` and the key prefix to `rustfs/kms/keys`; the variables above let you select different paths. Use a Vault token authorized for the configured KV data and metadata paths. `RUSTFS_KMS_VAULT_MOUNT_PATH` is deprecated and unused for the KV2 backend. +Le point de montage KV vaut `secret` par défaut et le préfixe de clé vaut `rustfs/kms/keys` ; les variables ci-dessus permettent de choisir d’autres chemins. Utilisez un jeton Vault autorisé pour les chemins de données et de métadonnées KV configurés. `RUSTFS_KMS_VAULT_MOUNT_PATH` est obsolète et inutilisé pour le backend KV2. -Master key material is Base64-encoded in KV2. Any identity with KV read access to the key path can recover the plaintext master key, so restrict that access to trusted RustFS identities. +Le matériel de clé principale est encodé en Base64 dans KV2. Toute identité disposant d’un accès en lecture KV sur le chemin de la clé peut récupérer la clé principale en clair : restreignez donc cet accès aux identités RustFS de confiance. -RustFS validates the Vault URL and rejects insecure development defaults unless `RUSTFS_KMS_ALLOW_INSECURE_DEV_DEFAULTS=true` is set. Use HTTPS and a certificate trusted by the RustFS hosts in production. +RustFS valide l’URL Vault et rejette les valeurs par défaut de développement non sécurisées, sauf si `RUSTFS_KMS_ALLOW_INSECURE_DEV_DEFAULTS=true` est défini. En production, utilisez HTTPS et un certificat auquel les hôtes RustFS font confiance. -## Configure Vault Transit +## Configurer Vault Transit -Enable the Transit engine and configure every RustFS node: +Activez le moteur Transit et configurez chaque nœud RustFS : ```ini title="/etc/default/rustfs" RUSTFS_KMS_ENABLE=true @@ -87,13 +87,13 @@ RUSTFS_KMS_VAULT_TOKEN= RUSTFS_KMS_VAULT_MOUNT_PATH=transit ``` -Vault Transit retains historical key versions, so rotating a Transit key does not by itself make objects wrapped with an older version unreadable. Keep old versions enabled for as long as objects depend on them. +Vault Transit conserve les versions historiques des clés : la rotation d’une clé Transit ne rend donc pas, à elle seule, illisibles les objets enveloppés avec une version antérieure. Laissez les anciennes versions activées tant que des objets en dépendent. -## Create and select the default key +## Créer et sélectionner la clé par défaut -`RUSTFS_KMS_DEFAULT_KEY_ID` selects an existing key; it does not create one. Start the KMS backend without this variable, create the key, and only then add the variable and restart RustFS. +`RUSTFS_KMS_DEFAULT_KEY_ID` sélectionne une clé existante ; elle n’en crée pas. Démarrez le backend KMS sans cette variable, créez la clé, puis seulement ensuite ajoutez la variable et redémarrez RustFS. -When your installed `rc` exposes the KMS lifecycle commands, create and inspect a key with: +Lorsque le `rc` installé expose les commandes de cycle de vie KMS, créez et inspectez une clé avec : ```bash rc admin kms status rustfs @@ -101,29 +101,29 @@ rc admin kms key create rustfs --name rustfs-default-key rc admin kms key status rustfs rustfs-default-key ``` -Then add the same default key ID on every RustFS node: +Ajoutez ensuite le même ID de clé par défaut sur chaque nœud RustFS : ```ini title="/etc/default/rustfs" RUSTFS_KMS_DEFAULT_KEY_ID=rustfs-default-key ``` -Restart every node consistently after changing the default. +Redémarrez chaque nœud de façon cohérente après avoir modifié la valeur par défaut. -For Vault Transit, you can alternatively create the named Transit key directly in Vault before configuring it as the default: +Pour Vault Transit, vous pouvez aussi créer la clé Transit nommée directement dans Vault avant de la configurer comme valeur par défaut : ```bash vault write -f transit/keys/rustfs-default-key ``` -:::note[rc version boundary] +:::note[Exigences de version de rc] -The tested `rc 0.1.29` on the validation host does not expose `rc admin kms`; it supports only the bucket and object encryption commands used below. Run `rc admin --help` before following the key lifecycle commands. If the KMS command family is absent, use a newer `rc` release that includes it or provision the key through the native RustFS KMS Admin API. +`rc 0.1.29` n’inclut pas `rc admin kms` ; il ne prend en charge que les commandes de chiffrement de compartiment et d’objet utilisées ci-dessous. Exécutez `rc admin --help` avant de suivre les commandes de cycle de vie des clés. Si la famille de commandes KMS est absente, utilisez une version plus récente de `rc` qui l’inclut, ou provisionnez la clé via l’API d’administration KMS native de RustFS. ::: -## Verify KMS-backed encryption +## Vérifier le chiffrement reposant sur le KMS -Create a test bucket, configure SSE-KMS with the default key, upload an object, and read it back: +Créez un compartiment de test, configurez SSE-KMS avec la clé par défaut, chargez (upload) un objet et relisez-le : ```bash rc bucket create rustfs/my-bucket @@ -133,7 +133,7 @@ rc object copy /path/to/hello.txt rustfs/my-bucket/hello.txt rc object show rustfs/my-bucket/hello.txt ``` -To select a specific KMS key, set it on the bucket default or the individual write: +Pour sélectionner une clé KMS précise, définissez-la sur la valeur par défaut du compartiment ou sur l’écriture individuelle : ```bash rc bucket encryption set rustfs/my-bucket \ @@ -144,17 +144,17 @@ rc object copy /path/to/hello.txt rustfs/my-bucket/hello.txt \ --enc-kms rustfs/my-bucket/hello.txt=rustfs-default-key ``` -The selector before `=` must exactly match the destination passed to `rc object copy`. +Le sélecteur placé avant `=` doit correspondre exactement à la destination transmise à `rc object copy`. -## Rotate and recover keys +## Effectuer la rotation et récupérer les clés -- **Vault token:** issue a replacement token, update every RustFS node, restart consistently, verify encrypted reads and writes, and then revoke the old token. -- **Vault Transit key:** rotate the Transit key in Vault. New wrapping operations use the new version while Vault retains older versions for decryption. -- **Local or Vault KV2 key material:** back up the current material before rotation and verify that objects written before and after rotation remain readable. -- **Existing objects:** rotating a master key does not rewrite object data. Each object keeps the wrapped data key stored with its encryption metadata. +- **Jeton Vault :** émettez un jeton de remplacement, mettez à jour chaque nœud RustFS, redémarrez de façon cohérente, vérifiez les lectures et écritures chiffrées, puis révoquez l’ancien jeton. +- **Clé Vault Transit :** effectuez la rotation de la clé Transit dans Vault. Les nouvelles opérations d’enveloppement utilisent la nouvelle version, tandis que Vault conserve les versions antérieures pour le déchiffrement. +- **Matériel de clé local ou Vault KV2 :** sauvegardez le matériel actuel avant la rotation et vérifiez que les objets écrits avant et après la rotation restent lisibles. +- **Objets existants :** la rotation d’une clé principale ne réécrit pas les données des objets. Chaque objet conserve la clé de données enveloppée, stockée avec ses métadonnées de chiffrement. -Do not delete or disable an old master-key version until you have established that no retained object depends on it. +Ne supprimez ni ne désactivez une ancienne version de clé principale tant que vous n’avez pas établi qu’aucun objet conservé n’en dépend. -## Next steps +## Étapes suivantes -Configure [SSE-S3](./sse-s.md), or use [SSE-C](./sse-c.md) when the client must retain control of the encryption key. \ No newline at end of file +Configurez [SSE-S3](./sse-s.md), ou utilisez [SSE-C](./sse-c.md) lorsque le client doit conserver le contrôle de la clé de chiffrement. diff --git a/content/fr/security-compliance/encryption/sse-c.md b/content/fr/security-compliance/encryption/sse-c.md index f397d1b62..ce9fcdacf 100644 --- a/content/fr/security-compliance/encryption/sse-c.md +++ b/content/fr/security-compliance/encryption/sse-c.md @@ -1,26 +1,26 @@ --- title: "SSE-C" -description: "Use customer-provided AES-256 keys for RustFS object encryption and decryption." +description: "Utilisez des clés AES-256 fournies par le client pour le chiffrement et le déchiffrement des objets RustFS." --- -SSE-C encrypts an object with a 256-bit key supplied by the client on every write and read request. RustFS validates and uses the key for the request but does not persist the plaintext customer key. SSE-C does not use the RustFS KMS backend. +SSE-C chiffre un objet avec une clé de 256 bits fournie par le client à chaque requête d’écriture et de lecture. RustFS valide et utilise la clé pour la requête, mais ne persiste pas la clé client en clair. SSE-C n’utilise pas le backend KMS de RustFS. -## Requirements +## Prérequis -- Install and configure [`rc`](/operations/rc). -- Install OpenSSL for the key-generation example. -- Use HTTPS so customer keys are encrypted in transit. -- Store the customer key in a secret manager and maintain a mapping between each object and its key. +- Installez et configurez [`rc`](/fr/operations/rc). +- Installez OpenSSL pour l’exemple de génération de clé. +- Utilisez HTTPS afin que les clés client soient chiffrées en transit. +- Stockez la clé client dans un gestionnaire de secrets et conservez une correspondance entre chaque objet et sa clé. -:::warning[The same key is required for every read] +:::warning[La même clé est exigée pour chaque lecture] -If you lose an SSE-C key, RustFS cannot recover it and the object becomes unreadable. Never log, commit, or send the key over an unencrypted connection. +Si vous perdez une clé SSE-C, RustFS ne peut pas la retrouver et l’objet devient illisible. Ne journalisez jamais la clé, ne l’ajoutez jamais au dépôt et ne l’envoyez jamais sur une connexion non chiffrée. ::: -## Prepare a customer key +## Préparer une clé client -Generate 32 random bytes through a hexadecimal intermediate, then derive the Base64 key and its Base64-encoded MD5 checksum: +Générez 32 octets aléatoires via un intermédiaire hexadécimal, puis dérivez la clé Base64 et sa somme MD5 encodée en Base64 : ```bash SSE_C_KEY_HEX=$(openssl rand -hex 32) @@ -29,11 +29,11 @@ SSE_C_KEY_MD5=$(printf '%s' "$SSE_C_KEY_HEX" | xxd -r -p \ | openssl dgst -md5 -binary | openssl base64 -A) ``` -Move these values into your approved secret-management workflow. Do not print them to the terminal or shell history. +Placez ces valeurs dans votre processus approuvé de gestion des secrets. Ne les affichez pas dans le terminal ni dans l’historique du shell. -## Upload an encrypted object +## Charger un objet chiffré -`rc 0.1.29` has no dedicated SSE-C option. Its signed custom-header option can send the three S3 SSE-C headers: +`rc 0.1.29` ne dispose pas d’option SSE-C dédiée. Son option d’en-tête personnalisé signé peut envoyer les trois en-têtes SSE-C de S3 : ```bash rc object copy /path/to/hello.txt rustfs/my-bucket/hello.txt \ @@ -42,17 +42,17 @@ rc object copy /path/to/hello.txt rustfs/my-bucket/hello.txt \ -H "x-amz-server-side-encryption-customer-key-md5:$SSE_C_KEY_MD5" ``` -The required request headers are: +Les en-têtes de requête exigés sont les suivants : -| Header | Value | +| En-tête | Valeur | | --- | --- | | `x-amz-server-side-encryption-customer-algorithm` | `AES256` | -| `x-amz-server-side-encryption-customer-key` | Base64-encoded 32-byte key | -| `x-amz-server-side-encryption-customer-key-md5` | Base64-encoded MD5 digest of the raw key | +| `x-amz-server-side-encryption-customer-key` | Clé de 32 octets encodée en Base64 | +| `x-amz-server-side-encryption-customer-key-md5` | Empreinte MD5 de la clé brute, encodée en Base64 | -## Read the encrypted object +## Lire l’objet chiffré -Supply the same three headers on reads and metadata requests: +Fournissez les trois mêmes en-têtes pour les lectures et les requêtes de métadonnées : ```bash rc object show rustfs/my-bucket/hello.txt \ @@ -61,24 +61,24 @@ rc object show rustfs/my-bucket/hello.txt \ -H "x-amz-server-side-encryption-customer-key-md5:$SSE_C_KEY_MD5" ``` -The same workflow was validated with `rc 0.1.29` against RustFS by uploading an object, reading it with the original key, and comparing the returned bytes with the source. +Le même flux a été validé avec `rc 0.1.29` sur RustFS en chargeant (upload) un objet, en le lisant avec la clé d’origine et en comparant les octets renvoyés à la source. -:::warning[Protect command arguments] +:::warning[Protégez les arguments de commande] -The generic `-H` method places expanded header values in the `rc` process arguments, which may be visible to other processes on the host. For production automation, prefer an S3 SDK that accepts SSE-C key material through protected memory or a credential provider instead of command-line arguments. +La méthode générique `-H` place les valeurs d’en-tête développées dans les arguments du processus `rc`, qui peuvent être visibles par d’autres processus de l’hôte. Pour l’automatisation en production, préférez un SDK S3 qui accepte le matériel de clé SSE-C via une mémoire protégée ou un fournisseur d’identifiants, plutôt que des arguments de ligne de commande. ::: -## Clear shell variables +## Effacer les variables du shell -After the operation, remove key material from the shell environment: +Après l’opération, retirez le matériel de clé de l’environnement du shell : ```bash unset SSE_C_KEY_HEX SSE_C_KEY_B64 SSE_C_KEY_MD5 ``` -Changing a bucket's SSE-S3 or SSE-KMS default does not alter SSE-C objects. SSE-C is selected by the customer-key headers on each individual request and takes precedence for that request. +Modifier la valeur par défaut SSE-S3 ou SSE-KMS d’un compartiment (bucket) ne modifie pas les objets SSE-C. SSE-C est sélectionné par les en-têtes de clé client de chaque requête individuelle et a priorité pour cette requête. -## Next steps +## Étapes suivantes -Compare [SSE-S3](./sse-s.md) for server-managed encryption and [KMS](./kms.md) for explicit KMS-backed key management. \ No newline at end of file +Comparez [SSE-S3](./sse-s.md) pour le chiffrement géré par le serveur et [KMS](./kms.md) pour une gestion des clés explicite reposant sur le KMS. diff --git a/content/fr/security-compliance/encryption/sse-s.md b/content/fr/security-compliance/encryption/sse-s.md index 7a4a9929b..00b516bba 100644 --- a/content/fr/security-compliance/encryption/sse-s.md +++ b/content/fr/security-compliance/encryption/sse-s.md @@ -1,77 +1,77 @@ --- title: "SSE-S3" -description: "Configure server-managed SSE-S3 encryption for RustFS buckets and object writes." +description: "Configurez le chiffrement SSE-S3 géré par le serveur pour les compartiments RustFS et les écritures d’objets." --- -SSE-S3 uses the S3 `AES256` encryption mode. RustFS generates a unique data encryption key for each encrypted object and uses the configured KMS service to wrap that key. Clients do not provide or retain the encryption key. +SSE-S3 utilise le mode de chiffrement S3 `AES256`. RustFS génère une clé de chiffrement des données unique pour chaque objet chiffré et utilise le service KMS configuré pour envelopper cette clé. Les clients ne fournissent ni ne conservent la clé de chiffrement. -## Requirements +## Prérequis -- Configure and start [KMS](./kms.md), create its default key, and verify the key is available before enabling SSE-S3. -- Install and configure [`rc`](/operations/rc). -- Create the target bucket and verify that normal object writes succeed. +- Configurez et démarrez [KMS](./kms.md), créez sa clé par défaut et vérifiez que la clé est disponible avant d’activer SSE-S3. +- Installez et configurez [`rc`](/fr/operations/rc). +- Créez le compartiment (bucket) cible et vérifiez que les écritures d’objets ordinaires réussissent. -:::warning[KMS availability is required] +:::warning[La disponibilité du KMS est exigée] -RustFS accepts an SSE-S3 bucket default even when KMS is unavailable, but encrypted object writes then fail. Verify an encrypted write and read before using the bucket for production data. +RustFS accepte une valeur par défaut SSE-S3 sur le compartiment même lorsque le KMS est indisponible, mais les écritures d’objets chiffrés échouent alors. Vérifiez une écriture et une lecture chiffrées avant d’utiliser le compartiment pour des données de production. ::: -## Set bucket default encryption +## Définir le chiffrement par défaut du compartiment -Apply SSE-S3 to new writes that do not specify an object-level encryption mode: +Appliquez SSE-S3 aux nouvelles écritures qui ne précisent pas de mode de chiffrement au niveau de l’objet : ```bash rc bucket encryption set rustfs/my-bucket --mode sse-s3 rc bucket encryption info rustfs/my-bucket ``` -The reported mode should be `SSE-S3`. +Le mode indiqué devrait être `SSE-S3`. -Upload and read a test object: +Chargez (upload) et lisez un objet de test : ```bash rc object copy /path/to/hello.txt rustfs/my-bucket/hello.txt rc object show rustfs/my-bucket/hello.txt ``` -## Encrypt one object explicitly +## Chiffrer un objet explicitement -Apply SSE-S3 to a single destination without changing the bucket default: +Appliquez SSE-S3 à une seule destination sans modifier la valeur par défaut du compartiment : ```bash rc object copy /path/to/hello.txt rustfs/my-bucket/hello.txt \ --enc-s3 rustfs/my-bucket/hello.txt ``` -For recursive writes, the encryption selector must exactly match the destination prefix: +Pour les écritures récursives, le sélecteur de chiffrement doit correspondre exactement au préfixe de destination : ```bash rc object copy ./reports/ rustfs/my-bucket/reports/ --recursive \ --enc-s3 rustfs/my-bucket/reports/ ``` -## Clear the bucket default +## Effacer la valeur par défaut du compartiment -Remove the default rule: +Supprimez la règle par défaut : ```bash rc bucket encryption clear rustfs/my-bucket rc bucket encryption info rustfs/my-bucket ``` -Clearing or changing the bucket default affects only later writes. It does not decrypt or rewrite existing objects. +Effacer ou modifier la valeur par défaut du compartiment n’affecte que les écritures ultérieures. Cela ne déchiffre ni ne réécrit les objets existants. -## Request contract +## En-têtes de requête -S3 clients request SSE-S3 with: +Les clients S3 demandent SSE-S3 avec : ```http x-amz-server-side-encryption: AES256 ``` -An object-level request overrides the bucket default for that write. If no object-level mode is supplied, RustFS resolves the effective mode from the bucket encryption configuration. +Une requête au niveau de l’objet remplace la valeur par défaut du compartiment pour cette écriture. Si aucun mode au niveau de l’objet n’est fourni, RustFS détermine le mode effectif à partir de la configuration de chiffrement du compartiment. -## Next steps +## Étapes suivantes -Use [SSE-KMS](./kms.md#verify-kms-backed-encryption) when you need an explicit KMS key ID, or compare [SSE-C](./sse-c.md) for client-held keys. \ No newline at end of file +Utilisez [SSE-KMS](./kms.md#vérifier-le-chiffrement-reposant-sur-le-kms) lorsque vous avez besoin d’un ID de clé KMS explicite, ou comparez [SSE-C](./sse-c.md) pour des clés détenues par le client. diff --git a/content/fr/security-compliance/iam/access-token.md b/content/fr/security-compliance/iam/access-token.md index f3442e3b1..fd8cccfee 100644 --- a/content/fr/security-compliance/iam/access-token.md +++ b/content/fr/security-compliance/iam/access-token.md @@ -1,29 +1,29 @@ --- -title: "RustFS Access Key Management" -description: "Creation, usage, and deletion of RustFS access keys." +title: "Clés d’accès" +description: "Créez et supprimez les clés d’accès RustFS dans la Console." --- -RustFS access keys are the core credentials of the RustFS system, used for identity authentication and operation authorization, and are very useful in API and SDK scenarios. This chapter introduces the creation and deletion of RustFS access keys. +Les clés d’accès sont les identifiants que les applications et les outils utilisent pour s’authentifier auprès de RustFS et pour autoriser leurs requêtes. Cette page montre comment créer et supprimer des clés d’accès dans la Console. -Prerequisites: +## Prérequis -- An available RustFS instance. You can refer to the [Installation Guide](../../installation/index.md) for installation. +- Une instance RustFS en cours d’exécution. Voir le [guide d’installation](../../installation/index.md). -## Creating Access Keys +## Création de clés d’accès -1. Log in to the RustFS UI console. -2. In the left navigation bar, select **Access Keys**. -3. On the access keys page, in the upper right corner, click **Add Access Key**. -4. Enter the key's **expiration time, name, and description**, then click **Submit**. -5. (Optional but recommended). On the access key page that appears, select **Copy** or **Export** to save the access key for future use. +1. Connectez-vous à la Console RustFS. +2. Dans la barre de navigation de gauche, sélectionnez **Access Keys** (clés d’accès). +3. Sur la page des clés d’accès, dans le coin supérieur droit, cliquez sur **Add Access Key** (ajouter une clé d’accès). +4. Saisissez une **Expiration** (expiration), un **Name** (nom) et une **Description**, puis sélectionnez **Submit** (valider). +5. (Recommandé) Sur la page qui s’affiche, sélectionnez **Copy** (copier) ou **Export** (exporter) pour enregistrer la clé. -![access key list page](images/access_token_creation.png) +![page de la liste des clés d’accès](images/access_token_creation.png) -## Deleting Access Keys +## Suppression de clés d’accès -1. Log in to the RustFS UI console. -2. In the left navigation bar, select **Access Keys**. -3. On the access keys page, select the access key you want to delete. -4. Select the **Delete** button on the right side of the access key or **Delete Selected Items** in the upper right corner to delete the access key. +1. Connectez-vous à la Console RustFS. +2. Dans la barre de navigation de gauche, sélectionnez **Access Keys**. +3. Sur la page des clés d’accès, sélectionnez la clé d’accès à supprimer. +4. Sélectionnez **Delete** (supprimer) à côté de la clé d’accès, ou **Delete Selected Items** (supprimer les éléments sélectionnés) dans le coin supérieur droit. -![access key deletion](images/access_token_deletion.png) \ No newline at end of file +![suppression d’une clé d’accès](images/access_token_deletion.png) diff --git a/content/fr/security-compliance/iam/index.md b/content/fr/security-compliance/iam/index.md index 2d23161d0..2e72df13f 100644 --- a/content/fr/security-compliance/iam/index.md +++ b/content/fr/security-compliance/iam/index.md @@ -1,54 +1,54 @@ --- -title: "RustFS IAM Management" -description: "Overview of RustFS Identity and Access Management (IAM): identity types, policy attachment, and policy evaluation semantics." +title: "Gestion des identités et des accès" +description: "Présentation de la gestion des identités et des accès (IAM) de RustFS : types d’identité, association des politiques et sémantique d’évaluation des politiques." --- -RustFS ships a built-in Identity and Access Management (IAM) system modeled on the AWS IAM policy language. Every request — S3 data access, Console operation, or admin API call — is authenticated against a credential and then authorized against the policies attached to that identity. +RustFS inclut un système intégré de gestion des identités et des accès (IAM), modelé sur le langage de politiques d’AWS IAM. Chaque requête — accès aux données S3, opération de la Console ou appel à l’API d’administration — est authentifiée à l’aide d’un identifiant, puis autorisée selon les politiques associées à cette identité. -## Identity Types +## Types d’identité -RustFS distinguishes the following identity types: +RustFS distingue les types d’identité suivants : -| Identity | Created by | Typical use | +| Identité | Créée par | Usage typique | | --- | --- | --- | -| Root credentials | `RUSTFS_ACCESS_KEY` / `RUSTFS_SECRET_KEY` environment variables at server start | Initial setup and break-glass administration. The root account bypasses IAM identity-policy evaluation (owner semantics). | -| IAM users | Console or admin API (`add-user`) | Long-term named accounts for people or applications. | -| Groups | Console or admin API (`update-group-members`) | Attach one policy set to many users at once. Users inherit the policies of every group they belong to. | -| Service accounts (access keys) | Console or admin API (`add-service-account`) | Derived credentials that belong to a parent user. They inherit the parent's permissions, optionally restricted further by an embedded session policy, and can carry an expiration time. | -| STS temporary credentials | `AssumeRole` / `AssumeRoleWithWebIdentity` STS calls | Short-lived credentials (15 minutes to 12 hours) with an access key, secret key, and session token. | -| External OIDC identities | OpenID Connect providers (Keycloak, Authing, and other standard OIDC IdPs) | Console SSO. ID token claims are mapped to RustFS policy names, and RustFS issues STS credentials. | +| Identifiants racine | Variables d’environnement `RUSTFS_ACCESS_KEY` / `RUSTFS_SECRET_KEY` au démarrage du serveur | Configuration initiale et administration d’urgence (break-glass). Le compte racine contourne l’évaluation des politiques d’identité IAM (sémantique de propriétaire). | +| Utilisateurs IAM | Console ou API d’administration (`add-user`) | Comptes nommés de longue durée pour des personnes ou des applications. | +| Groupes | Console ou API d’administration (`update-group-members`) | Associer un même ensemble de politiques à plusieurs utilisateurs à la fois. Les utilisateurs héritent des politiques de chaque groupe auquel ils appartiennent. | +| Comptes de service (clés d’accès) | Console ou API d’administration (`add-service-account`) | Identifiants dérivés qui appartiennent à un utilisateur parent. Ils héritent des autorisations du parent, facultativement restreintes encore par une politique de session intégrée, et peuvent comporter une expiration. | +| Identifiants temporaires STS | Appels STS `AssumeRole` / `AssumeRoleWithWebIdentity` | Identifiants de courte durée (15 minutes à 12 heures), avec une clé d’accès, une clé secrète et un jeton de session. | +| Identités OIDC externes | Fournisseurs OpenID Connect (Keycloak, Authing et d’autres IdP OIDC standards) | Authentification unique de la Console. Les claims du jeton d’identité sont associés aux noms de politiques RustFS, et RustFS émet des identifiants STS. | :::warning -Root credentials bypass IAM identity policies, but bucket policies can still deny root S3 requests. Only `GetBucketPolicy`, `PutBucketPolicy`, and `DeleteBucketPolicy` bypass a bucket-policy deny so the owner can recover access. Use root credentials only to bootstrap the deployment, then create IAM users and service accounts for day-to-day work. +Les identifiants racine contournent les politiques d’identité IAM, mais les politiques de compartiment (bucket) peuvent encore refuser les requêtes S3 du compte racine. Seuls `GetBucketPolicy`, `PutBucketPolicy` et `DeleteBucketPolicy` contournent un refus de politique de compartiment, afin que le propriétaire puisse rétablir l’accès. Utilisez les identifiants racine uniquement pour initialiser le déploiement, puis créez des utilisateurs IAM et des comptes de service pour le travail quotidien. ::: -## How Policies Attach to Identities +## Association des politiques aux identités -Policies are named JSON documents stored in RustFS. Attachment works as follows: +Les politiques sont des documents JSON nommés, stockés dans RustFS. L’association fonctionne comme suit : -- **User binding** — one or more policy names are attached to an IAM user (`set-user-or-group-policy`, or the `idp/builtin/policy/attach` endpoint which accepts a list of policies). -- **Group binding** — the same mechanism with `isGroup=true`; every member of the group receives the group's policies in addition to their own. -- **Service accounts** — do not get their own policy bindings. They evaluate under the parent user's combined policies. If the service account was created with an explicit policy document, that session policy is applied as an additional restriction (both must allow). -- **STS sessions** — inherit the parent identity's policies. The `Policy` request parameter of `AssumeRole` can embed an additional session policy that further restricts the temporary credentials. -- **OIDC identities** — the ID token's `groups`/`roles` claim values are matched against RustFS policy names; the matched policies govern the issued STS credentials. +- **Association à un utilisateur** — un ou plusieurs noms de politiques sont associés à un utilisateur IAM (`set-user-or-group-policy`, ou le point de terminaison `idp/builtin/policy/attach` qui accepte une liste de politiques). +- **Association à un groupe** — le même mécanisme avec `isGroup=true` ; chaque membre du groupe reçoit les politiques du groupe en plus des siennes. +- **Comptes de service** — ils n’ont pas leurs propres associations de politiques. Ils sont évalués selon les politiques combinées de l’utilisateur parent. Si le compte de service a été créé avec un document de politique explicite, cette politique de session s’applique comme restriction supplémentaire (les deux doivent autoriser). +- **Sessions STS** — elles héritent des politiques de l’identité parente. Le paramètre de requête `Policy` de `AssumeRole` peut intégrer une politique de session supplémentaire qui restreint encore les identifiants temporaires. +- **Identités OIDC** — les valeurs des claims `groups`/`roles` du jeton d’identité sont comparées aux noms de politiques RustFS ; les politiques correspondantes régissent les identifiants STS émis. -RustFS ships these built-in (canned) policies: `readwrite`, `readonly`, `writeonly`, `diagnostics`, and `consoleAdmin`. See [Users, Groups, and Policies](./policies.md) for their contents and for writing custom policies. +RustFS fournit ces politiques intégrées (prédéfinies) : `readwrite`, `readonly`, `writeonly`, `diagnostics` et `consoleAdmin`. Consultez [Utilisateurs, groupes et politiques](./policies.md) pour leur contenu et pour rédiger des politiques personnalisées. -## Policy Evaluation Semantics +## Sémantique d’évaluation des politiques -When an identity has multiple attached policies, RustFS merges their statements (dropping duplicates) and evaluates the merged document: +Lorsqu’une identité possède plusieurs politiques associées, RustFS fusionne leurs instructions (en supprimant les doublons) et évalue le document fusionné : -1. **Explicit deny wins.** All `Deny` statements are checked first; if any matching `Deny` statement applies to the request, the request is rejected regardless of any `Allow`. -2. **Owner shortcut.** The root account bypasses IAM identity-policy evaluation; the bucket-policy checks and exceptions described above still apply. -3. **Explicit allow required.** Otherwise, at least one `Allow` statement must match the requested action and resource. -4. **Default deny.** If no statement matches, the request is denied. +1. **Un refus explicite l’emporte.** Toutes les instructions `Deny` sont vérifiées en premier ; si une instruction `Deny` correspondante s’applique à la requête, la requête est rejetée, indépendamment de tout `Allow`. +2. **Raccourci du propriétaire.** Le compte racine contourne l’évaluation des politiques d’identité IAM ; les contrôles et exceptions de politique de compartiment décrits ci-dessus s’appliquent toujours. +3. **Autorisation explicite obligatoire.** Sinon, au moins une instruction `Allow` doit correspondre à l’action et à la ressource demandées. +4. **Refus par défaut.** Si aucune instruction ne correspond, la requête est refusée. -For service accounts and STS sessions carrying a session policy, the effective permission is the intersection: the parent's policies and the session policy must both allow the request. +Pour les comptes de service et les sessions STS qui portent une politique de session, l’autorisation effective est l’intersection : les politiques du parent et la politique de session doivent toutes deux autoriser la requête. -## In This Section +## Dans cette section -- [Users, Groups, and Policies](./policies.md) — managing users and groups, the policy document format, and built-in policies. -- [Service Accounts and STS](./sts.md) — derived access keys and temporary credentials via `AssumeRole`. -- [Access Keys](./access-token.md) — creating and deleting access keys from the Console. +- [Utilisateurs, groupes et politiques](./policies.md) — gestion des utilisateurs et des groupes, format du document de politique et politiques intégrées. +- [Comptes de service et STS](./sts.md) — clés d’accès dérivées et identifiants temporaires via `AssumeRole`. +- [Clés d’accès](./access-token.md) — création et suppression de clés d’accès depuis la Console. diff --git a/content/fr/security-compliance/iam/policies.md b/content/fr/security-compliance/iam/policies.md index 89704aae6..a5b6a4feb 100644 --- a/content/fr/security-compliance/iam/policies.md +++ b/content/fr/security-compliance/iam/policies.md @@ -7,7 +7,7 @@ Cette page couvre l’administration IAM au quotidien : création d’utilisat ## Prérequis -- Installez [`rc`](/operations/rc) avant d’utiliser les commandes d’administration RustFS. +- Installez [`rc`](/fr/operations/rc) avant d’utiliser les commandes d’administration RustFS. - Configurez un alias avec des identifiants autorisés à effectuer les actions `admin:*` correspondantes. ## Gérer les utilisateurs @@ -28,7 +28,7 @@ Les utilisateurs se gèrent depuis la Console (section **Identity** de la naviga Un nom d’utilisateur (clé d’accès) ne doit pas contenir d’espace et ne peut pas être identique à la clé d’accès racine. La clé secrète est obligatoire lors de la création d’un utilisateur. -:: : +::: ## Gérer les groupes @@ -161,9 +161,9 @@ Les opérateurs de condition pris en charge sont : `StringEquals`, `StringNotE :::note -Un `Deny` explicite l’emporte toujours sur `Allow` : la seconde instruction s’applique donc aux opérations de suppression, même si `s3:*` les inclut. Voir la [sémantique d’évaluation](./index.md#policy-evaluation-semantics). +Un `Deny` explicite l’emporte toujours sur `Allow` : la seconde instruction s’applique donc aux opérations de suppression, même si `s3:*` les inclut. Voir la [sémantique d’évaluation](./index.md#sémantique-dévaluation-des-politiques). -:: : +::: ## Politiques intégrées @@ -181,4 +181,4 @@ RustFS définit cinq politiques intégrées, associables sans les créer au pré La politique intégrée `readonly` ne comprend ni `s3:ListBucket` ni `s3:ListAllMyBuckets`. L’autorisation `s3:GetBucketLocation` vous permet de voir les noms des compartiments dans RustFS, et `s3:GetObject` vous permet de récupérer des objets dont vous connaissez la clé. Pour lister les objets d’un compartiment, ajoutez une politique personnalisée accordant `s3:ListBucket` sur ce compartiment. -:: : +::: diff --git a/content/fr/security-compliance/iam/sts.md b/content/fr/security-compliance/iam/sts.md index 8ba58d53b..0d37adbe3 100644 --- a/content/fr/security-compliance/iam/sts.md +++ b/content/fr/security-compliance/iam/sts.md @@ -1,34 +1,34 @@ --- -title: "Service Accounts and STS" -description: "RustFS service accounts (derived access keys) and temporary credentials via the STS AssumeRole API." +title: "Comptes de service et STS" +description: "Comptes de service RustFS (clés d’accès dérivées) et identifiants temporaires via l’API STS AssumeRole." --- -RustFS provides two mechanisms for issuing credentials that are derived from an existing identity: **service accounts** (long-lived access keys owned by a parent user) and **STS temporary credentials** (short-lived keys with a session token). +RustFS propose deux mécanismes pour émettre des identifiants dérivés d’une identité existante : les **comptes de service** (clés d’accès de longue durée appartenant à un utilisateur parent) et les **identifiants temporaires STS** (clés de courte durée accompagnées d’un jeton de session). -## Service Accounts +## Comptes de service -A service account is an access key/secret key pair that belongs to a parent IAM user (or to the root account). It authenticates like a normal key but is authorized as its parent: +Un compte de service est une paire clé d’accès/clé secrète qui appartient à un utilisateur IAM parent (ou au compte racine). Il s’authentifie comme une clé ordinaire, mais il est autorisé en tant que son parent : -- **Inherited policy (default).** If the service account is created without a policy, it inherits whatever the parent user's combined policies allow at request time. -- **Session-bound policy.** If a policy document is supplied at creation, it is embedded into the service account. Requests must then be allowed by *both* the parent's policies and the embedded policy. -- **Expiration.** An optional expiration timestamp (RFC 3339) can be set; the credential stops working after that time. +- **Politique héritée (par défaut).** Si le compte de service est créé sans politique, il hérite de ce que les politiques combinées de l’utilisateur parent autorisent au moment de la requête. +- **Politique liée à la session.** Si un document de politique est fourni à la création, il est intégré au compte de service. Les requêtes doivent alors être autorisées à la fois par les politiques du parent et par la politique intégrée. +- **Expiration.** Un horodatage d’expiration facultatif (RFC 3339) peut être défini ; l’identifiant cesse de fonctionner après cette date. -Service accounts cannot call `AssumeRole`, and a service account access key cannot be turned into a regular IAM user. +Les comptes de service ne peuvent pas appeler `AssumeRole`, et une clé d’accès de compte de service ne peut pas être transformée en utilisateur IAM ordinaire. -In the Console, service accounts are managed on the **Access Keys** page — see [Access Key Management](./access-token.md). The admin API exposes: +Dans la Console, les comptes de service se gèrent sur la page **Access Keys** (clés d’accès) — voir [Gestion des clés d’accès](./access-token.md). L’API d’administration expose : -| Operation | Method and path | Notes | +| Opération | Méthode et chemin | Remarques | | --- | --- | --- | -| Create service account | `PUT /rustfs/admin/v3/add-service-account` | Body below. Also served at `/add-service-accounts`. Requires `admin:CreateServiceAccount` when creating for another user (`targetUser`). | -| List service accounts | `GET /rustfs/admin/v3/list-service-accounts?user=` | Requires `admin:ListServiceAccounts` to list another user's accounts. | -| List access keys (bulk) | `GET /rustfs/admin/v3/list-access-keys-bulk` | Supports filtering to users only, service accounts only, or STS keys only. | -| Service account details | `GET /rustfs/admin/v3/info-service-account?accessKey=` | Returns name, description, parent, expiration, and the session policy (or `impliedPolicy: true` when inherited). | -| Temporary account details | `GET /rustfs/admin/v3/temporary-account-info?accessKey=` | For STS-issued keys. | -| Access key details | `GET /rustfs/admin/v3/info-access-key?accessKey=` | Unified lookup across users, service accounts, and STS keys. | -| Update service account | `POST /rustfs/admin/v3/update-service-account?accessKey=` | Can rotate the secret, change status, name, description, expiration, or replace the policy. | -| Delete service account | `DELETE /rustfs/admin/v3/delete-service-account?accessKey=` | Also served at `/delete-service-accounts`. Non-admin callers can delete only their own service accounts. | +| Créer un compte de service | `PUT /rustfs/admin/v3/add-service-account` | Corps ci-dessous. Également servi sur `/add-service-accounts`. Exige `admin:CreateServiceAccount` lors de la création pour un autre utilisateur (`targetUser`). | +| Lister les comptes de service | `GET /rustfs/admin/v3/list-service-accounts?user=` | Exige `admin:ListServiceAccounts` pour lister les comptes d’un autre utilisateur. | +| Lister les clés d’accès (en lot) | `GET /rustfs/admin/v3/list-access-keys-bulk` | Permet de filtrer uniquement les utilisateurs, uniquement les comptes de service ou uniquement les clés STS. | +| Détail d’un compte de service | `GET /rustfs/admin/v3/info-service-account?accessKey=` | Renvoie le nom, la description, le parent, l’expiration et la politique de session (ou `impliedPolicy: true` en cas d’héritage). | +| Détail d’un compte temporaire | `GET /rustfs/admin/v3/temporary-account-info?accessKey=` | Pour les clés émises par STS. | +| Détail d’une clé d’accès | `GET /rustfs/admin/v3/info-access-key?accessKey=` | Recherche unifiée parmi les utilisateurs, les comptes de service et les clés STS. | +| Mettre à jour un compte de service | `POST /rustfs/admin/v3/update-service-account?accessKey=` | Peut effectuer la rotation de la clé secrète, modifier l’état, le nom, la description ou l’expiration, ou remplacer la politique. | +| Supprimer un compte de service | `DELETE /rustfs/admin/v3/delete-service-account?accessKey=` | Également servi sur `/delete-service-accounts`. Les appelants non administrateurs ne peuvent supprimer que leurs propres comptes de service. | -Creation body (all fields optional unless noted): +Corps de création (tous les champs sont facultatifs, sauf mention contraire) : ```json { @@ -44,32 +44,32 @@ Creation body (all fields optional unless noted): :::note -Omit `accessKey`/`secretKey` to have RustFS generate a random pair. Omit `policy` to create an inherited-policy service account. `targetUser` requires admin privileges; regular users create service accounts for themselves. +Omettez `accessKey`/`secretKey` pour que RustFS génère une paire aléatoire. Omettez `policy` pour créer un compte de service à politique héritée. `targetUser` exige des privilèges d’administrateur ; les utilisateurs ordinaires créent des comptes de service pour eux-mêmes. ::: -## STS Temporary Credentials +## Identifiants temporaires STS -RustFS implements an AWS-compatible STS endpoint at the server root (`POST /` with form-encoded parameters). Two actions are supported: +RustFS implémente un point de terminaison STS compatible avec AWS à la racine du serveur (`POST /` avec des paramètres encodés en formulaire). Deux actions sont prises en charge : -- `AssumeRole` — for existing IAM identities, signed with SigV4. -- `AssumeRoleWithWebIdentity` — for OIDC identities, authenticated by the JWT itself (see [External Identity (OIDC)](../oidc/index.md)). +- `AssumeRole` — pour les identités IAM existantes, signée avec SigV4. +- `AssumeRoleWithWebIdentity` — pour les identités OIDC, authentifiée par le JWT lui-même (voir [Identité externe (OIDC)](../oidc/index.md)). ### AssumeRole -The request must be signed (AWS Signature V4) by a long-term IAM credential — temporary credentials and service accounts cannot call `AssumeRole`. With built-in IAM authorization, RustFS evaluates `sts:AssumeRole` for regular IAM users in deny-only mode: a matching explicit `Deny` rejects the request, but a separate `Allow` is not required. The user must have at least one applicable user or group policy binding, and all bound policy names must resolve. +La requête doit être signée (AWS Signature V4) par un identifiant IAM de longue durée — les identifiants temporaires et les comptes de service ne peuvent pas appeler `AssumeRole`. Avec l’autorisation IAM intégrée, RustFS évalue `sts:AssumeRole` pour les utilisateurs IAM ordinaires en mode refus uniquement : un `Deny` explicite correspondant rejette la requête, mais un `Allow` distinct n’est pas exigé. L’utilisateur doit avoir au moins une association de politique d’utilisateur ou de groupe applicable, et tous les noms de politiques associés doivent être résolus. -Form parameters: +Paramètres de formulaire : -| Parameter | Required | Description | +| Paramètre | Obligatoire | Description | | --- | --- | --- | -| `Action` | Yes | `AssumeRole`. | -| `Version` | Yes | Must be `2011-06-15`. | -| `DurationSeconds` | No | Credential lifetime in seconds. Default 3600 (1 hour); values are clamped to the range 900 (15 minutes) to 43200 (12 hours). | -| `Policy` | No | An inline session policy (JSON) that further restricts the temporary credentials. | -| `RoleArn`, `RoleSessionName`, `ExternalId` | No | Accepted for AWS compatibility. | +| `Action` | Oui | `AssumeRole`. | +| `Version` | Oui | Doit être `2011-06-15`. | +| `DurationSeconds` | Non | Durée de vie des identifiants, en secondes. Valeur par défaut : 3600 (1 heure) ; les valeurs sont ramenées à l’intervalle 900 (15 minutes) à 43200 (12 heures). | +| `Policy` | Non | Politique de session intégrée (JSON) qui restreint encore les identifiants temporaires. | +| `RoleArn`, `RoleSessionName`, `ExternalId` | Non | Acceptés pour la compatibilité avec AWS. | -Example: +Exemple : ```bash curl -s -X POST "https://rustfs.example.com/" \ @@ -80,26 +80,26 @@ curl -s -X POST "https://rustfs.example.com/" \ -d "DurationSeconds=3600" ``` -The response is an XML `AssumeRoleResponse` containing `AccessKeyId`, `SecretAccessKey`, `SessionToken`, and `Expiration`. Use all three values on subsequent S3 requests (the session token goes in `X-Amz-Security-Token`). +La réponse est un document XML `AssumeRoleResponse` contenant `AccessKeyId`, `SecretAccessKey`, `SessionToken` et `Expiration`. Utilisez les trois valeurs pour les requêtes S3 suivantes (le jeton de session se place dans `X-Amz-Security-Token`). -The temporary credential inherits the caller's policies; the `parent` of the credential is the calling access key. If a `Policy` parameter was supplied, it is stored in the session and applied as an additional restriction. +L’identifiant temporaire hérite des politiques de l’appelant ; le `parent` de l’identifiant est la clé d’accès appelante. Si un paramètre `Policy` a été fourni, il est stocké dans la session et appliqué comme restriction supplémentaire. ### AssumeRoleWithWebIdentity -Used by the OIDC flow; no SigV4 signature is needed because the identity provider's JWT is the authentication: +Utilisée par le flux OIDC ; aucune signature SigV4 n’est nécessaire, car le JWT du fournisseur d’identité constitue l’authentification : -| Parameter | Required | Description | +| Paramètre | Obligatoire | Description | | --- | --- | --- | -| `Action` | Yes | `AssumeRoleWithWebIdentity`. | -| `Version` | Yes | Must be `2011-06-15`. | -| `WebIdentityToken` | Yes | The OIDC ID token issued by a configured provider. | -| `DurationSeconds` | No | Same default and 900–43200 clamping as `AssumeRole`. | -| `Policy` | No | Optional inline session policy. | +| `Action` | Oui | `AssumeRoleWithWebIdentity`. | +| `Version` | Oui | Doit être `2011-06-15`. | +| `WebIdentityToken` | Oui | Jeton d’identité OIDC émis par un fournisseur configuré. | +| `DurationSeconds` | Non | Même valeur par défaut et même bornage 900–43200 que pour `AssumeRole`. | +| `Policy` | Non | Politique de session intégrée facultative. | -RustFS verifies the token against the configured provider (signature, issuer, audience, expiry), maps its `groups`/`roles` claims to RustFS policy names, and rejects the request if no policies or groups can be mapped. The response is an XML `AssumeRoleWithWebIdentityResponse` with the same credential fields plus `SubjectFromWebIdentityToken`. +RustFS vérifie le jeton auprès du fournisseur configuré (signature, émetteur, audience, expiration), associe ses claims `groups`/`roles` aux noms de politiques RustFS et rejette la requête si aucune politique ni aucun groupe ne peut être associé. La réponse est un document XML `AssumeRoleWithWebIdentityResponse` avec les mêmes champs d’identifiants, plus `SubjectFromWebIdentityToken`. :::warning -Keep `DurationSeconds` as short as your workload allows; a leaked temporary credential remains valid until its expiration. +Gardez `DurationSeconds` aussi court que votre charge de travail le permet ; un identifiant temporaire divulgué reste valide jusqu’à son expiration. ::: diff --git a/content/fr/security-compliance/index.md b/content/fr/security-compliance/index.md index 68960b85d..fa8259363 100644 --- a/content/fr/security-compliance/index.md +++ b/content/fr/security-compliance/index.md @@ -1,15 +1,15 @@ --- -title: "Security & Compliance" -description: "Configure identity, encryption, transport security, audit logging, and credentials for RustFS." +title: "Sécurité et conformité" +description: "Configurez l’identité, le chiffrement, la sécurité du transport, la journalisation d’audit et les identifiants pour RustFS." --- -Use this section to secure access to RustFS and configure the controls required by your environment. +Utilisez cette section pour sécuriser l’accès à RustFS et configurer les contrôles exigés par votre environnement. -## Security areas +## Domaines de sécurité -- [IAM Management](./iam/index.md) covers users, groups, policies, and access keys. -- [Data Encryption](./encryption/index.md) covers server-side encryption options and key management. -- [OIDC](./oidc/index.md) covers external identity providers. -- [TLS Configuration](/integration/tls-configured) covers encrypted client and node connections. -- [Audit Logs](./audit-logs.md) covers audit target configuration. -- [Credential Management](/operations/credentials) covers root credentials and secret injection. +- [Gestion IAM](./iam/index.md) décrit les utilisateurs, les groupes, les politiques et les clés d’accès. +- [Chiffrement des données](./encryption/index.md) décrit les options de chiffrement côté serveur et la gestion des clés. +- [OIDC](./oidc/index.md) décrit les fournisseurs d’identité externes. +- [Configuration TLS](/fr/integration/tls-configured) décrit les connexions chiffrées des clients et des nœuds. +- [Journaux d’audit](./audit-logs.md) décrit la configuration des cibles d’audit. +- [Gestion des identifiants](/fr/operations/credentials) décrit les identifiants racine et l’injection des secrets. diff --git a/content/fr/security-compliance/oidc/gitlab.md b/content/fr/security-compliance/oidc/gitlab.md index 2c8ead1fc..fb9b98585 100644 --- a/content/fr/security-compliance/oidc/gitlab.md +++ b/content/fr/security-compliance/oidc/gitlab.md @@ -1,76 +1,76 @@ --- title: "GitLab" -description: "Configure GitLab as an OpenID Connect identity provider for RustFS Console single sign-on." +description: "Configurez GitLab comme fournisseur d’identité OpenID Connect pour l’authentification unique de la Console RustFS." --- -RustFS integrates with **GitLab** through the OpenID Connect (OIDC) Authorization Code Flow. The examples on this page use the default RustFS provider ID, `default`. +RustFS s’intègre à **GitLab** via le flux Authorization Code d’OpenID Connect (OIDC). Les exemples de cette page utilisent l’identifiant de fournisseur RustFS par défaut, `default`. -## Requirements +## Prérequis -Before you begin, prepare: +Avant de commencer, préparez : -- An [installed GitLab instance](https://about.gitlab.com/install/) and access to its Admin area. -- A RustFS deployment with a public HTTPS Console origin. -- A RustFS policy to assign to GitLab users. The examples use `consoleAdmin`; use a policy with only the permissions your users require in production. +- Une [instance GitLab installée](https://about.gitlab.com/install/) et un accès à sa zone d’administration. +- Un déploiement RustFS avec une origine HTTPS publique pour la Console. +- Une politique RustFS à affecter aux utilisateurs GitLab. Les exemples utilisent `consoleAdmin` ; en production, utilisez une politique qui n’accorde que les autorisations requises par vos utilisateurs. -## Overview +## Vue d’ensemble -The browser login flow is: +Le flux de connexion dans le navigateur est le suivant : -1. RustFS sends an authorization-code request with a Proof Key for Code Exchange (PKCE) S256 challenge. -2. GitLab authenticates the user and redirects the browser to RustFS with `code` and `state`. -3. RustFS exchanges the code at the GitLab token endpoint. -4. RustFS verifies the ID token signature, issuer, audience, expiry, and nonce. -5. RustFS assigns the configured local Identity and Access Management (IAM) policy and issues temporary credentials for the Console session. +1. RustFS envoie une demande de code d’autorisation avec un défi Proof Key for Code Exchange (PKCE) S256. +2. GitLab authentifie l’utilisateur et redirige le navigateur vers RustFS avec `code` et `state`. +3. RustFS échange le code auprès du point de terminaison de jeton de GitLab. +4. RustFS vérifie la signature du jeton d’identité, l’émetteur, l’audience, l’expiration et le nonce. +5. RustFS affecte la politique locale de gestion des identités et des accès (IAM) configurée et émet des identifiants temporaires pour la session Console. -GitLab authenticates the user, while RustFS policies authorize S3 and administration operations. +GitLab authentifie l’utilisateur, tandis que les politiques RustFS autorisent les opérations S3 et d’administration. -The examples use the following values. Replace the hostnames and client secret for your environment: +Les exemples utilisent les valeurs suivantes. Remplacez les noms d’hôte et le secret client pour votre environnement : -| Setting | Example | +| Réglage | Exemple | | --- | --- | -| GitLab issuer | `https://gitlab.example.com` | -| GitLab application ID | `` | -| Public RustFS origin | `https://rustfs.example.com` | -| RustFS callback URL | `https://rustfs.example.com/rustfs/admin/v3/oidc/callback/default` | +| Émetteur GitLab (issuer) | `https://gitlab.example.com` | +| ID d’application GitLab | `` | +| Origine publique RustFS | `https://rustfs.example.com` | +| URL de rappel RustFS | `https://rustfs.example.com/rustfs/admin/v3/oidc/callback/default` | ## Configuration -### GitLab configuration +### Configuration de GitLab -#### Create the OAuth application +#### Créer l’application OAuth -1. Sign in to GitLab as an administrator. -2. Open **Admin Area**, select **Applications**, and select **New application**. -3. Enter `RustFS OIDC` as the application name. -4. Set **Redirect URI** to the exact RustFS callback URL: +1. Connectez-vous à GitLab en tant qu’administrateur. +2. Ouvrez **Admin Area** (zone d’administration), sélectionnez **Applications**, puis **New application**. +3. Saisissez `RustFS OIDC` comme nom d’application. +4. Réglez **Redirect URI** sur l’URL de rappel RustFS exacte : ```text https://rustfs.example.com/rustfs/admin/v3/oidc/callback/default ``` -5. Enable **Confidential**. -6. Enable **Trusted** to skip the user authorization prompt for this instance-wide application. -7. Select the `openid`, `profile`, and `email` scopes. -8. Save the application, then copy the generated application ID and secret. +5. Activez **Confidential**. +6. Activez **Trusted** pour ignorer l’invite d’autorisation de l’utilisateur pour cette application à l’échelle de l’instance. +7. Sélectionnez les portées `openid`, `profile` et `email`. +8. Enregistrez l’application, puis copiez l’ID et le secret d’application générés. -See the [GitLab OAuth provider documentation](https://docs.gitlab.com/integration/oauth_provider/) for details about administering applications. +Consultez la [documentation du fournisseur OAuth GitLab](https://docs.gitlab.com/integration/oauth_provider/) pour les détails d’administration des applications. -![GitLab Admin area showing the RustFS OIDC instance OAuth application as trusted and confidential](./images/gitlab-oidc-configuration.png) +![Zone d’administration GitLab montrant l’application OAuth d’instance RustFS OIDC comme approuvée et confidentielle](./images/gitlab-oidc-configuration.png) -:::note[Test environment shown] +:::note[Environnement de test illustré] -The screenshot shows an HTTP callback URL from a test environment. Use the public HTTPS callback URL for your RustFS deployment. +La capture montre une URL de rappel HTTP issue d’un environnement de test. Utilisez l’URL de rappel HTTPS publique de votre déploiement RustFS. ::: -### RustFS configuration +### Configuration de RustFS -Configure the GitLab provider through environment variables. +Configurez le fournisseur GitLab au moyen de variables d’environnement. -#### Configure with environment variables +#### Configurer avec des variables d’environnement -Add the GitLab provider and public browser origin to the RustFS service environment: +Ajoutez le fournisseur GitLab et l’origine publique du navigateur à l’environnement du service RustFS : ```ini title="/etc/default/rustfs" RUSTFS_BROWSER_REDIRECT_URL="https://rustfs.example.com" @@ -88,23 +88,23 @@ RUSTFS_IDENTITY_OPENID_USERNAME_CLAIM="preferred_username" RUSTFS_IDENTITY_OPENID_ROLE_POLICY="consoleAdmin" ``` -Restart RustFS after applying the configuration. +Redémarrez RustFS après avoir appliqué la configuration. -`RUSTFS_BROWSER_REDIRECT_URL` must contain the public scheme and authority without a path. It controls the Console success redirect and logout fallback URL. The provider callback URL must exactly match the URL registered in GitLab. +`RUSTFS_BROWSER_REDIRECT_URL` doit contenir le schéma et l’autorité publics, sans chemin. Cette variable contrôle la redirection de succès de la Console et l’URL de repli lors de la déconnexion. L’URL de rappel du fournisseur doit correspondre exactement à l’URL enregistrée dans GitLab. -:::warning[Limit the assigned policy] +:::warning[Limitez la politique affectée] -`RUSTFS_IDENTITY_OPENID_ROLE_POLICY` assigns the same RustFS policy to every user who signs in through this provider. Replace `consoleAdmin` with a policy that grants only the permissions required by your GitLab users. +`RUSTFS_IDENTITY_OPENID_ROLE_POLICY` affecte la même politique RustFS à chaque utilisateur qui se connecte via ce fournisseur. Remplacez `consoleAdmin` par une politique qui n’accorde que les autorisations requises par vos utilisateurs GitLab. ::: -For a reverse proxy or load balancer, preserve the callback query string and route the authorize and callback requests to the same RustFS node. The in-flight OIDC `state` is local to that node. +Avec un reverse proxy ou un répartiteur de charge, conservez la chaîne de requête du rappel et acheminez les requêtes d’autorisation et de rappel vers le même nœud RustFS. L’état OIDC en cours (`state`) est local à ce nœud. -## Verification +## Vérification -### Verify GitLab discovery +### Vérifier la découverte GitLab -Query the GitLab discovery document: +Interrogez le document de découverte GitLab : ```bash curl -fsS "https://gitlab.example.com/.well-known/openid-configuration" | jq '{ @@ -117,44 +117,44 @@ curl -fsS "https://gitlab.example.com/.well-known/openid-configuration" | jq '{ }' ``` -Confirm that: +Vérifiez que : -- `issuer` is `https://gitlab.example.com`. -- `authorization_endpoint`, `token_endpoint`, and `jwks_uri` are present. -- `scopes_supported` includes `openid`, `profile`, and `email`. -- `code_challenge_methods_supported` includes `S256`. +- `issuer` vaut `https://gitlab.example.com`. +- `authorization_endpoint`, `token_endpoint` et `jwks_uri` sont présents. +- `scopes_supported` contient `openid`, `profile` et `email`. +- `code_challenge_methods_supported` contient `S256`. -### Verify the RustFS provider +### Vérifier le fournisseur RustFS -After restarting RustFS, check that the provider is available: +Après le redémarrage de RustFS, vérifiez que le fournisseur est disponible : ```bash curl -fsS "https://rustfs.example.com/rustfs/admin/v3/oidc/providers" | jq ``` -The response should include the `default` provider with the display name `GitLab`. +La réponse devrait inclure le fournisseur `default` avec le nom d’affichage `GitLab`. -### Test Console login +### Tester la connexion à la Console -Open the RustFS Console and select **GitLab**, or open the authorization endpoint directly: +Ouvrez la Console RustFS et sélectionnez **GitLab**, ou ouvrez directement le point de terminaison d’autorisation : ```text https://rustfs.example.com/rustfs/admin/v3/oidc/authorize/default ``` -![RustFS Console login page showing the Login with GitLab option](./images/rustfs-console-gitlab-oidc.png) +![Page de connexion de la Console RustFS montrant l’option Login with GitLab](./images/rustfs-console-gitlab-oidc.png) -Verify the complete flow: +Vérifiez le flux complet : -1. The browser redirects to GitLab. -2. The user signs in and authorizes the application when prompted. -3. GitLab redirects to the RustFS callback URL with `code` and `state`. -4. RustFS validates the ID token and creates the Console session. -5. The Console opens with the configured RustFS policy. +1. Le navigateur redirige vers GitLab. +2. L’utilisateur se connecte et autorise l’application lorsque l’invite s’affiche. +3. GitLab redirige vers l’URL de rappel RustFS avec `code` et `state`. +4. RustFS valide le jeton d’identité et crée la session Console. +5. La Console s’ouvre avec la politique RustFS configurée. -If GitLab reports a redirect URI mismatch, confirm that the URI registered in the GitLab application exactly matches `RUSTFS_IDENTITY_OPENID_REDIRECT_URI`. +Si GitLab signale une non-correspondance de l’URI de redirection, confirmez que l’URI enregistrée dans l’application GitLab correspond exactement à `RUSTFS_IDENTITY_OPENID_REDIRECT_URI`. -## Next steps +## Étapes suivantes -- Review [users, groups, and policies](../iam/policies.md) before selecting the policy assigned to GitLab users. -- Review the [Console security notes](/administration/console) before exposing the login endpoint publicly. \ No newline at end of file +- Consultez [Utilisateurs, groupes et politiques](../iam/policies.md) avant de choisir la politique affectée aux utilisateurs GitLab. +- Consultez les [notes de sécurité de la Console](/fr/administration/console) avant d’exposer publiquement le point de terminaison de connexion. diff --git a/content/fr/security-compliance/oidc/index.md b/content/fr/security-compliance/oidc/index.md index 0d784b7ad..15953fde0 100644 --- a/content/fr/security-compliance/oidc/index.md +++ b/content/fr/security-compliance/oidc/index.md @@ -1,40 +1,40 @@ --- title: "OIDC" -description: "Understand how RustFS uses OpenID Connect providers for Console single sign-on." +description: "Comprenez comment RustFS utilise les fournisseurs OpenID Connect pour l’authentification unique de la Console." --- -RustFS supports OpenID Connect (OIDC) for Console single sign-on. Use this overview to understand the authentication flow, prepare an identity provider, and choose a provider-specific configuration guide. +RustFS prend en charge OpenID Connect (OIDC) pour l’authentification unique de la Console. Utilisez cette vue d’ensemble pour comprendre le flux d’authentification, préparer un fournisseur d’identité et choisir un guide de configuration propre à un fournisseur. -## How OIDC works +## Fonctionnement d’OIDC -RustFS uses the OIDC Authorization Code Flow with Proof Key for Code Exchange (PKCE): +RustFS utilise le flux Authorization Code d’OIDC avec Proof Key for Code Exchange (PKCE) : -1. RustFS sends an authorization request with an S256 PKCE challenge. -2. The identity provider authenticates you and returns an authorization code to the RustFS callback URL. -3. RustFS exchanges the code at the provider's token endpoint. -4. RustFS verifies the ID token signature, issuer, audience, expiry, and nonce. -5. RustFS maps configured token claims to local Identity and Access Management (IAM) policies and creates a Console session with temporary credentials. +1. RustFS envoie une demande d’autorisation avec un défi PKCE S256. +2. Le fournisseur d’identité vous authentifie et renvoie un code d’autorisation à l’URL de rappel de RustFS. +3. RustFS échange le code auprès du point de terminaison de jeton du fournisseur. +4. RustFS vérifie la signature du jeton d’identité, l’émetteur, l’audience, l’expiration et le nonce. +5. RustFS associe les claims de jeton configurés à des politiques locales de gestion des identités et des accès (IAM) et crée une session Console avec des identifiants temporaires. -The identity provider authenticates you, while RustFS policies authorize S3 and administration operations. +Le fournisseur d’identité vous authentifie, tandis que les politiques RustFS autorisent les opérations S3 et d’administration. -## Provider requirements +## Exigences du fournisseur -Before configuring a provider, prepare: +Avant de configurer un fournisseur, préparez : -- An OIDC discovery URL that exposes the authorization, token, and JSON Web Key Set (JWKS) endpoints. -- A confidential client that supports the Authorization Code Flow, S256 PKCE, and client-secret authentication in the token request body. -- An exact callback URL in the form `https:///rustfs/admin/v3/oidc/callback/`. -- A public HTTPS origin for the RustFS Console. -- A flat group or role claim whose values match existing RustFS policy names. +- Une URL de découverte OIDC qui expose les points de terminaison d’autorisation, de jeton et de jeu de clés JSON Web (JWKS). +- Un client confidentiel qui prend en charge le flux Authorization Code, PKCE S256 et l’authentification par secret client dans le corps de la requête de jeton. +- Une URL de rappel exacte de la forme `https:///rustfs/admin/v3/oidc/callback/`. +- Une origine HTTPS publique pour la Console RustFS. +- Un claim de groupe ou de rôle plat dont les valeurs correspondent à des noms de politiques RustFS existants. -Use a dedicated client for RustFS and grant each identity only the policies it requires. +Utilisez un client dédié à RustFS et n’accordez à chaque identité que les politiques dont elle a besoin. -## Provider guides +## Guides des fournisseurs -- [Configure Keycloak](/security-compliance/oidc/keycloak) as an OIDC provider for the RustFS Console. -- [Configure GitLab](/security-compliance/oidc/gitlab) as an OIDC provider for the RustFS Console. +- [Configurer Keycloak](/fr/security-compliance/oidc/keycloak) comme fournisseur OIDC pour la Console RustFS. +- [Configurer GitLab](/fr/security-compliance/oidc/gitlab) comme fournisseur OIDC pour la Console RustFS. -## Next steps +## Étapes suivantes -- Review [users, groups, and policies](/security-compliance/iam/policies) before mapping identity-provider claims. -- Review the [Console security notes](/administration/console) before exposing the login endpoint publicly. +- Consultez [Utilisateurs, groupes et politiques](/fr/security-compliance/iam/policies) avant d’associer les claims du fournisseur d’identité. +- Consultez les [notes de sécurité de la Console](/fr/administration/console) avant d’exposer publiquement le point de terminaison de connexion. diff --git a/content/fr/security-compliance/oidc/keycloak.md b/content/fr/security-compliance/oidc/keycloak.md index ce5602cac..4f3c70e25 100644 --- a/content/fr/security-compliance/oidc/keycloak.md +++ b/content/fr/security-compliance/oidc/keycloak.md @@ -76,7 +76,7 @@ Laissez **Full group path** désactivé. Une valeur telle que `/consoleAdmin` ne Si vous utilisez des rôles de domaine ou de client plutôt que des groupes, ajoutez un mapper de rôles qui émet un tableau `roles` plat à la racine du jeton. RustFS n’analyse pas le claim imbriqué `realm_access.roles` de Keycloak. -:: : +::: ### Configuration de RustFS @@ -117,7 +117,7 @@ Utilisez le format `scheme://host:port`, sans chemin tel que `/realms/rustfs`. S Sans l’autorisation requise, la découverte échoue au démarrage et le fournisseur reste indisponible pour la connexion à la Console et pour STS, même si sa configuration indique `enabled: true`. -:: : +::: `RUSTFS_BROWSER_REDIRECT_URL` doit contenir le schéma et l’autorité publics, sans chemin. Cette variable contrôle la redirection de succès de la Console et l’URL de repli lors de la déconnexion. L’URL de rappel du fournisseur doit correspondre exactement à l’URL enregistrée dans Keycloak. @@ -125,7 +125,7 @@ Sans l’autorisation requise, la découverte échoue au démarrage et le fourni N’utilisez pas `RUSTFS_IDENTITY_OPENID_ROLE_POLICY=consoleAdmin` comme raccourci permanent. Associez les groupes ou les rôles Keycloak à des politiques RustFS afin que chaque utilisateur ne reçoive que les autorisations requises. -:: : +::: Avec un reverse proxy ou un répartiteur de charge, conservez la chaîne de requête du rappel et acheminez les requêtes d’autorisation et de rappel vers le même nœud RustFS. L’état OIDC en cours (`state`) est local à ce nœud. @@ -184,4 +184,4 @@ Si l’authentification réussit mais que l’accès est refusé, confirmez que ## Étapes suivantes - Consultez [Utilisateurs, groupes et politiques](../iam/policies.md) avant d’affecter des groupes Keycloak. -- Consultez les [notes de sécurité de la Console](/administration/console) avant d’exposer publiquement le point de terminaison de connexion. +- Consultez les [notes de sécurité de la Console](/fr/administration/console) avant d’exposer publiquement le point de terminaison de connexion. diff --git a/content/fr/troubleshooting/driver.md b/content/fr/troubleshooting/driver.md index f0d48390f..c7854206f 100644 --- a/content/fr/troubleshooting/driver.md +++ b/content/fr/troubleshooting/driver.md @@ -1,34 +1,25 @@ --- -title: "Hard Drive Failures" -description: "RustFS ensures read/write access can still be provided when some disks fail through mechanisms similar to erasure coding, and automatically heals data after replacing disks." +title: "Pannes de disque" +description: "Remplacez un disque défaillant dans un déploiement RustFS et laissez RustFS réparer les données automatiquement." --- -RustFS ensures read/write access can still be provided when some disks fail through mechanisms similar to erasure coding, and automatically heals data after replacing disks. - -## Table of Contents - -1. [Unmount Failed Disk](#unmount-failed-disk) -2. [Replace Failed Disk](#replace-failed-disk) -3. [Update `/etc/fstab` or RustFS Configuration](#update-etcfstab-or-rustfs-configuration) -4. [Remount New Disk](#remount-new-disk) -5. [Trigger and Monitor Data Healing](#trigger-and-monitor-data-healing) -6. [Follow-up Checks and Notes](#follow-up-checks-and-notes) +RustFS utilise le codage d’effacement pour que les données restent lisibles et inscriptibles lorsque certains disques tombent en panne. Après le remplacement d’un disque défaillant, RustFS y répare automatiquement les données manquantes. -### Unmount Failed Disk +### Démontez le disque défaillant -Before replacing the physical hard drive, you need to safely unmount the failed disk from the operating system level to avoid I/O errors in the file system or RustFS during the replacement process. +Avant de remplacer le disque dur physique, démontez le disque défaillant au niveau du système d’exploitation afin d’éviter des erreurs d’E/S dans le système de fichiers ou dans RustFS pendant le remplacement. ```bash # Assume the failed disk is /dev/sdb umount /dev/sdb ``` -:::note[Notes] +:::note[Remarques] -* If there are multiple mount points, execute `umount` separately. -* If encountering "device is busy", you can first stop the RustFS service: +* Si le disque possède plusieurs points de montage, exécutez `umount` sur chacun d’eux. +* Si l’erreur « device is busy » apparaît, arrêtez d’abord le service RustFS : ```bash systemctl stop rustfs @@ -38,26 +29,28 @@ systemctl stop rustfs -### Replace Failed Disk +### Remplacez le disque défaillant -After physically replacing the failed disk, you need to partition and format the new disk, and apply the same label as the original disk. +Après avoir physiquement remplacé le disque défaillant, vous devez partitionner et formater le nouveau disque, puis lui appliquer la même étiquette que le disque d’origine. ```bash # Format as XFS and apply the same label as the original disk (RustFS requires XFS, like the other disks in the deployment) mkfs.xfs -L DISK1 /dev/sdb ``` -> **Requirements** -> -> * New disk capacity ≥ original disk capacity; -> * File system type consistent with other disks (XFS, per the [installation guide](../installation/linux/index.md)); -> * Recommend using labels (LABEL) or UUID for mounting to ensure disk order is not affected by system restarts. +:::note[Exigences] + +* Le nouveau disque est au moins aussi grand que le disque d’origine. +* Utilisez le même système de fichiers que les autres disques (XFS ; voir le [guide d’installation](../installation/linux/index.md)). +* Nous recommandons de monter les systèmes de fichiers par étiquette (LABEL) ou par UUID, afin que les montages restent corrects si les noms de périphériques changent après un redémarrage. + +::: -### Update `/etc/fstab` or RustFS Configuration +### Mettez à jour `/etc/fstab` ou la configuration RustFS -Confirm that the mount item labels or UUIDs in `/etc/fstab` point to the new disk. The mount point must stay identical to the one listed in `RUSTFS_VOLUMES` (in `/etc/default/rustfs`), so the healed disk rejoins the cluster at the same path. +Vérifiez que les étiquettes ou les UUID des entrées de `/etc/fstab` pointent vers le nouveau disque. Le point de montage doit rester identique à celui indiqué dans `RUSTFS_VOLUMES` (dans `/etc/default/rustfs`), afin que le disque réparé rejoigne le cluster au même chemin. ```bash # View current fstab @@ -67,16 +60,16 @@ cat /etc/fstab LABEL=DISK1 /data/rustfs0 xfs defaults,noatime 0 2 ``` -:::tip[Tips] +:::tip[Conseils] -* If using UUID: +* Si vous utilisez un UUID : ```bash blkid /dev/sdb # Get the new partition's UUID, then replace the corresponding field in fstab ``` -* After modifying fstab, be sure to validate syntax: +* Après avoir modifié `/etc/fstab`, validez la syntaxe : ```bash mount -a # If no errors, configuration is correct @@ -86,32 +79,32 @@ mount -a # If no errors, configuration is correct -### Remount New Disk +### Remontez le nouveau disque -Execute the following commands to batch mount all disks and start the RustFS service: +Exécutez les commandes suivantes pour monter tous les systèmes de fichiers configurés et démarrer RustFS : ```bash mount -a systemctl start rustfs ``` -Confirm all disks are mounted normally: +Vérifiez que tous les systèmes de fichiers attendus sont montés : ```bash df -h | grep /data/rustfs ``` -:::note +:::note[Échecs de montage] -If some mounts fail, please check if fstab entries are consistent with disk labels/UUIDs. +Si un montage échoue, vérifiez que les étiquettes ou les UUID de `/etc/fstab` correspondent à ceux du système de fichiers cible. ::: -### Trigger and Monitor Data Healing +### Déclenchez et suivez la réparation des données -Once RustFS detects a freshly formatted disk at a known mount point, its background scanner heals the missing data onto it automatically — no manual command is required. Confirm that recovery has started and track its progress through the service logs: +Dès que RustFS détecte un disque fraîchement formaté sur un point de montage connu, son scanner en arrière-plan y répare automatiquement les données manquantes. Aucune commande manuelle n’est requise. Confirmez que la récupération a commencé et suivez sa progression dans les journaux du service : ```bash # For systemd-managed installations @@ -121,28 +114,28 @@ journalctl -u rustfs -f tail -f /var/log/rustfs/rustfs.log ``` -You can also open the RustFS Console and check the disk status of the affected node. +Vous pouvez aussi ouvrir la Console RustFS et vérifier l’état des disques du nœud concerné. -:::note[Notes] +:::note[Remarques] -* The healing process will complete in the background, usually with minimal impact on online access; -* After healing is complete, the tool will report success or list failed objects. +* La réparation s’exécute en arrière-plan et a généralement peu d’impact sur les requêtes des clients. +* Une fois la réparation terminée, les journaux signalent le succès ou listent les objets dont la réparation a échoué. ::: -### Follow-up Checks and Notes +### Vérifications et remarques de suivi -1. **Performance Monitoring** +1. **Surveillance des performances** - * I/O may fluctuate slightly during healing, recommend monitoring disk and network load. -2. **Batch Failures** + * La charge d’E/S peut fluctuer pendant la réparation. Nous recommandons de surveiller l’utilisation des disques et du réseau. +2. **Pannes par lot** - * If multiple failures occur in the same batch of disks, consider more frequent hardware inspections. -3. **Regular Drills** + * Si plusieurs disques du même lot de fabrication tombent en panne, inspectez plus souvent les disques restants de ce lot. +3. **Tests de panne réguliers** - * Regularly simulate disk failure drills to ensure team familiarity with recovery processes. -4. **Maintenance Windows** + * Organisez régulièrement des exercices de panne de disque afin que votre équipe puisse s’exercer à la procédure de reprise. +4. **Fenêtres de maintenance** - * When failure rates are high, arrange dedicated maintenance windows to speed up replacement and healing. + * Lorsque le taux de panne est élevé, planifiez des fenêtres de maintenance dédiées pour accélérer le remplacement et la réparation. diff --git a/content/fr/troubleshooting/index.md b/content/fr/troubleshooting/index.md index 2d67143db..3dcc4a6f1 100644 --- a/content/fr/troubleshooting/index.md +++ b/content/fr/troubleshooting/index.md @@ -1,11 +1,10 @@ --- -title: "Troubleshooting" -description: "Diagnose and resolve RustFS issues." +title: "Dépannage" +description: "Diagnostiquez et résolvez les problèmes de RustFS." --- -Contents: - -- [Node Failures](./node.md) -- [Driver Failures](./driver.md) -- [Node Healing](../operations/high-availability/node-healing.md) +Cette section traite : +- [Pannes de nœud](./node.md) +- [Pannes de disque](./driver.md) +- [Réparation des données d’un nœud](../operations/high-availability/node-healing.md) diff --git a/content/fr/troubleshooting/node.md b/content/fr/troubleshooting/node.md index 34f8fe953..abbc0ca8e 100644 --- a/content/fr/troubleshooting/node.md +++ b/content/fr/troubleshooting/node.md @@ -1,83 +1,83 @@ --- -title: "Node Failures" -description: "Complete steps for handling node failures in RustFS clusters. Mainly includes: replacement node hardware preparation, configuration updates, service deployment, rejoining the cluster, data healing, and subsequent checks and best practices." +title: "Pannes de nœud" +description: "Préparez un nœud de remplacement, mettez à jour sa configuration, rétablissez son appartenance au cluster et vérifiez la réparation des données." --- -In distributed RustFS clusters, erasure coding mechanisms are adopted to ensure read/write access can still be provided when some nodes fail, and automatic data healing occurs after nodes rejoin. This document will guide you through the following process: +Un cluster RustFS distribué utilise le codage d’effacement pour rester lisible et inscriptible lorsque certains nœuds tombent en panne, et il répare les données automatiquement lorsqu’un nœud rejoint de nouveau le cluster. Ce guide détaille les étapes suivantes : -1. Start replacement node and synchronize environment -2. Update DNS/hostname to point old node identifiers to new nodes -3. Download and deploy RustFS services consistent with the cluster -4. Rejoin new nodes to the cluster and trigger data healing -5. Monitor healing progress and perform subsequent checks and optimization +1. Démarrez le nœud de remplacement et alignez son environnement logiciel sur celui du cluster. +2. Mettez à jour le DNS ou `/etc/hosts` afin que l’ancien nom d’hôte soit résolu vers le nouveau nœud. +3. Installez la même version de RustFS que sur les autres nœuds. +4. Démarrez les nœuds de remplacement afin qu’ils rejoignent le cluster et commencent la réparation des données. +5. Surveillez la progression de la réparation, puis effectuez les vérifications de suivi. -## 1) Start Replacement Node +## 1. Préparez le nœud de remplacement -* **Hardware and System Preparation** - Ensure the replacement node server hardware is roughly consistent with the failed node, including CPU, memory, network configuration, and disk type; even using higher configurations won't affect cluster performance. - Software environment needs to maintain version consistency with other nodes (operating system, kernel, dependency libraries, etc.) to avoid cluster abnormal behavior caused by environment differences. +* **Préparation du matériel et du système** + Assurez-vous que le matériel du nœud de remplacement (processeur, mémoire, réseau et type de disque) correspond à peu près à celui du nœud défaillant. Un matériel de gamme supérieure n’affecte pas les performances du cluster. + Utilisez des versions logicielles identiques à celles des autres nœuds, y compris le système d’exploitation, le noyau et les dépendances, afin d’éviter les problèmes causés par des environnements incohérents. -* **Drive Exclusive Access** - As with physical drive operations, RustFS requires exclusive access to storage volumes, prohibiting any other processes or scripts from directly modifying data within storage volumes, otherwise data corruption or redundancy loss can easily occur. +* **Accès exclusif aux disques** + Comme pour les opérations sur les disques physiques, RustFS exige un accès exclusif à ses volumes de stockage. Ne laissez pas d’autres processus ou scripts modifier directement les données de ces volumes, car cela peut corrompre les données ou réduire la redondance. -## 2) Update Hostname and Network Resolution +## 2. Mettez à jour le nom d’hôte et la résolution réseau -* **DNS/Hosts Configuration** - If the replacement node's IP address differs from the failed node, you need to re-resolve the old node's hostname (such as `rustfs-node-2.example.net`) to the new node to ensure nodes within the cluster discover each other through the same address. +* **Configuration du DNS et du fichier hosts** + Si l’adresse IP du nœud de remplacement diffère de celle du nœud défaillant, faites pointer le nom d’hôte de l’ancien nœud (par exemple, `rustfs-node-2.example.net`) vers l’adresse IP du nouveau nœud, afin que les nœuds du cluster puissent toujours se joindre sous le même nom. ```bash # Example: Add or modify line in /etc/hosts 192.168.1.12 rustfs-node-2.example.net ``` - After correct resolution, you can verify the hostname points to the new node through `ping` or `nslookup`. + Utilisez `ping` ou `nslookup` pour vérifier que le nom d’hôte est résolu vers le nouveau nœud. -## 3) Deploy and Configure RustFS Services +## 3. Déployez et configurez les services RustFS -* **Download and Installation** - Follow the same version deployment process as RustFS official, download binaries or installation packages consistent with existing nodes, and extract to a unified directory. Ensure startup scripts, environment variables, and configuration files (such as `/etc/default/rustfs`) are completely consistent with other nodes in the cluster. +* **Téléchargement et installation** + Installez la même version de RustFS que sur les nœuds existants, avec la même méthode d’installation et le même répertoire. Assurez-vous que les scripts de démarrage, les variables d’environnement et les fichiers de configuration (comme `/etc/default/rustfs`) sont identiques à ceux des autres nœuds. -* **Configuration Verification** +* **Vérification de la configuration** - * Check that `RUSTFS_VOLUMES` in `/etc/default/rustfs` is byte-for-byte identical to the other nodes, and that it covers the replacement node's hostname and port. - * Ensure all nodes have the same access keys and permission configurations to avoid new nodes being unable to join due to authentication failures. + * Vérifiez que `RUSTFS_VOLUMES` dans `/etc/default/rustfs` est identique, octet pour octet, à la valeur des autres nœuds, et qu’il couvre le nom d’hôte et le port du nœud de remplacement. + * Assurez-vous que tous les nœuds utilisent les mêmes clés d’accès et les mêmes réglages de permissions ; sinon, le nouveau nœud échoue à l’authentification et ne peut pas rejoindre le cluster. -## 4) Rejoin Cluster and Trigger Data Healing +## 4. Réintégrez le cluster et déclenchez la réparation des données -* **Start Service** +* **Démarrage du service** ```bash systemctl start rustfs ``` - Or use your custom startup script to start RustFS services, and view startup logs through `journalctl -u rustfs -f` to confirm the new node has detected other online nodes and started the data healing process. + Vous pouvez aussi démarrer RustFS avec votre propre script de démarrage. Exécutez ensuite `journalctl -u rustfs -f` pour confirmer que le nouveau nœud a détecté les autres nœuds et a démarré la réparation. -* **Monitor Healing Status** - Healing runs in the background once the node rejoins; no manual command is required. Watch its progress through the service logs on the replacement node, and check node and disk status in the RustFS Console: +* **Surveillance de l’état de la réparation** + La réparation s’exécute en arrière-plan dès que le nœud rejoint le cluster ; aucune commande manuelle n’est requise. Suivez sa progression dans les journaux du service sur le nœud de remplacement, et vérifiez l’état des nœuds et des disques dans la Console RustFS : ```bash journalctl -u rustfs -f ``` -* **Community Experience Reference** - Community testing shows that when nodes go offline and rejoin, RustFS will only perform healing operations on new nodes, not fully rebalance the cluster, thus avoiding unnecessary network and I/O peaks. +* **Observations de la communauté** + Lors des tests menés par la communauté, lorsqu’un nœud se déconnecte puis rejoint le cluster, RustFS ne répare que ce nœud, au lieu de rééquilibrer l’ensemble du cluster. Cela évite des pics inutiles de réseau et d’E/S. -## 5) Subsequent Checks and Best Practices +## 5. Vérifications de suivi et bonnes pratiques -* **Monitoring and Alerts** +* **Surveillance et alertes** - * During healing, monitor disk and network load to ensure the cluster meets read/write and network bandwidth requirements. - * Set up alerts to notify operations teams when node healing fails or progress stalls beyond thresholds. + * Pendant la réparation, surveillez la charge des disques et du réseau afin de vous assurer que le cluster respecte encore ses exigences de lecture, d’écriture et de bande passante. + * Configurez des alertes pour prévenir les équipes d’exploitation lorsque la réparation d’un nœud échoue ou lorsque la progression reste bloquée au-delà des seuils. -* **Repeated Failure Drills** - Regularly simulate node failures and drill the entire recovery process to ensure team familiarity with operation commands and emergency procedures. +* **Tests de panne réguliers** + Organisez régulièrement des exercices de panne de nœud et exercez-vous à l’ensemble de la procédure de reprise, afin que votre équipe connaisse les commandes et le processus de réponse aux incidents. -* **Root Cause Analysis** - Conduct in-depth hardware health diagnostics (SMART, BIOS logs, etc.) on frequently failing nodes or disks, and implement preventive maintenance plans. +* **Analyse des causes racines** + Exécutez des diagnostics matériels détaillés (par exemple, les données SMART et les journaux du BIOS) sur les nœuds ou les disques qui tombent en panne de façon répétée, et mettez en place un plan de maintenance préventive. -* **Professional Support** - If deeper-level fault location and recovery guidance is needed, contact the RustFS development team or community for help. +* **Assistance professionnelle** + Pour obtenir de l’aide afin de diagnostiquer la cause d’une panne ou de rétablir le cluster, contactez l’équipe de développement ou la communauté RustFS. --- -**Summary**: Through the above process, RustFS can quickly and safely replace nodes and complete data healing after node hardware completely fails, minimizing cluster availability interruptions. Be sure to cross-reference with your own environment and specific command-line tools to ensure configuration consistency and correct operation sequence. +Ces étapes remplacent un nœud défaillant et réparent ses données. Adaptez les commandes à votre environnement, et conservez une configuration identique sur tous les nœuds. diff --git a/content/ja/developer/integration/ai/vllm.md b/content/ja/developer/integration/ai/vllm.md index bcf9704db..a439a9bc9 100644 --- a/content/ja/developer/integration/ai/vllm.md +++ b/content/ja/developer/integration/ai/vllm.md @@ -152,3 +152,4 @@ KV キャッシュの既定の予約は、システム RAM の 90% です。`--g - 追加のサービング構成を採用する前に、[S3 互換性に関する注意](/ja/administration/protocols/s3)を確認します。 - [アクセスキー管理](/ja/security-compliance/iam/access-token)で、本番用の専用認証情報を作成します。 - [vLLM ドキュメント](https://docs.vllm.ai/en/latest/serving/openai_compatible_server.html)に従い、同じバケットをバックエンドにしたモデルストアの上で、チャットテンプレート、テンソル並列、量子化ウェイトを確認します。 + diff --git a/content/zh/developer/integration/ai/vllm.md b/content/zh/developer/integration/ai/vllm.md index b8bcb13a2..f9818a84d 100644 --- a/content/zh/developer/integration/ai/vllm.md +++ b/content/zh/developer/integration/ai/vllm.md @@ -151,4 +151,4 @@ vLLM 的 CPU 引擎通过共享内存交换张量。运行容器时加 `--shm-si - 在启用更多服务方案前,先阅读 [S3 兼容性说明](/administration/protocols/s3)。 - 使用[访问密钥管理](/security-compliance/iam/access-token)创建专用的生产凭证。 -- 按照 [vLLM 文档](https://docs.vllm.ai/en/latest/serving/openai_compatible_server.html)在同一个桶支撑的模型库之上使用 chat 模板、张量并行与量化权重。 +- 按照 [vLLM 文档](https://docs.vllm.ai/serving/openai_compatible_server.html)在同一个桶支撑的模型库之上使用 chat 模板、张量并行与量化权重。 diff --git a/content/zh/developer/integration/devops/elasticsearch.md b/content/zh/developer/integration/devops/elasticsearch.md index 551bf9155..0dfdec5ab 100644 --- a/content/zh/developer/integration/devops/elasticsearch.md +++ b/content/zh/developer/integration/devops/elasticsearch.md @@ -259,4 +259,4 @@ docker compose logs create-bucket - 在采用其他 S3 操作前,请查看 [S3 兼容性说明](/administration/protocols/s3)。 - 通过[访问密钥管理](/security-compliance/iam/access-token)创建专用的生产凭证。 -- 按照 [Elasticsearch 快照文档](https://www.elastic.co/guide/en/elasticsearch/reference/current/snapshot-restore.html)了解快照生命周期管理(SLM)。 +- 按照 [Elasticsearch 快照文档](https://www.elastic.co/docs/deploy-manage/tools/snapshot-and-restore)了解快照生命周期管理(SLM)。