> For the complete documentation index, see [llms.txt](https://docs.edgegap.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.edgegap.com/fr/learn/advanced-features/managed-clusters.md).

# Managed Clusters

Exécutez des services backend personnalisés sur les clusters gérés Edgegap, avec un démarrage rapide pour intégrer votre propre infrastructure.

Découvrez les Managed Clusters et démarrez rapidement avec des solutions backend personnalisées.

## ✔️ Introduction

Les Managed Clusters facilitent et accélèrent l’hébergement de services de jeu auto-gérés et de backend de jeu. Vous préparez l’image du service et nous fournissons un environnement cloud résilient et à haute disponibilité pour les exécuter :

* authentification des joueurs,
* stockage des données - comptes, progression, inventaire, récompenses, ...
* services sociaux - chat, clans, classements, tournois, ...
* matchmaking personnalisé - en utilisant [#advanced-matchmaker](#advanced-matchmaker "mention"), [#nakama-by-heroic-labs](#nakama-by-heroic-labs "mention"), ...
* calcul sans serveur - géré [fonctions en tant que service](https://github.com/openfaas/faas) (alt. cloudscript, lambda), ...

{% hint style="success" %}
Voir [Matchmaking](/fr/learn/matchmaking.md) et [Navigateur de serveurs](/fr/learn/navigateur-de-serveurs.md) pour commencer avec l'intégration du client de jeu.
{% endhint %}

Les clusters privés garantissent que vos services disposent de **calcul dédié pour servir vos joueurs 24 h/24, 7 j/7**.

Nous proposons actuellement [3 niveaux de cluster privé](https://edgegap.com/resources/pricing#managed-infrastructure) pour répondre aux besoins de chacun :

<table><thead><tr><th width="160">Niveau</th><th align="right">Niveau Hobbyiste</th><th align="right">Niveau Studio</th><th align="right">Niveau Entreprise</th></tr></thead><tbody><tr><td>Mieux adapté pour</td><td align="right">passionnés,<br>développeurs indépendants</td><td align="right">versions commerciales</td><td align="right">lancements à fort trafic</td></tr><tr><td>Limite de débit (req/s)</td><td align="right">200</td><td align="right">750</td><td align="right">2,000</td></tr><tr><td>Ressources</td><td align="right">1 vCPU + 2 Go de RAM</td><td align="right">6 vCPU + 12 Go de RAM</td><td align="right">18 vCPU + 48 Go de RAM</td></tr><tr><td>Redondance</td><td align="right">1 nœud virtuel</td><td align="right">3 nœuds virtuels</td><td align="right">3 nœuds virtuels</td></tr><tr><td>Prix, à l’heure</td><td align="right">$0.0312</td><td align="right"> $0.146</td><td align="right">$0.548</td></tr><tr><td><strong>Prix, 30 jours</strong><br>(utilisation continue)</td><td align="right"><strong>$22.464</strong></td><td align="right"><strong>$105.12</strong></td><td align="right"><strong>$394.56</strong></td></tr></tbody></table>

{% hint style="info" %}
Nos clusters utilisent des machines cloud équipées de processeurs AMD/Intel avec une vitesse d’horloge allant jusqu’à 3,7 GHz.
{% endhint %}

## 🛠️ Outils pour développeurs

Si vous voyez une opportunité d’amélioration, merci de nous le faire savoir sur notre [Discord communautaire](https://discord.gg/NgCnkHbsGp).

Nous espérons que vous vivrez une expérience fluide. 🚀

### Docker

Pour aider à rendre votre serveur fiable, nous utilisons [Docker](https://www.docker.com/) - un logiciel de virtualisation pour garantir que toutes les dépendances de votre code serveur, jusqu’au niveau du système d’exploitation, seront toujours exactement les mêmes, peu importe quand ou où le serveur est lancé.

{% hint style="info" %}
Nous recommandons de regarder ["Ne jamais installer localement" (vidéo)](https://www.youtube.com/watch?v=J0NuOlA2xDc\&ab_channel=Coderized). **Vous N'AVEZ PAS besoin d'utiliser Dockerhub avec Docker**.  Docker ≠ Dockerhub. Pensez à Docker comme à un moteur de programmation et à Dockerhub comme à son App Store.
{% endhint %}

### Kubernetes (K8s)

[Kubernetes](https://kubernetes.io/docs/concepts/overview/), également appelé K8s, est un système open source permettant d’automatiser le déploiement, la mise à l’échelle et la gestion des applications conteneurisées (images Docker). Il regroupe les conteneurs qui composent une application en unités logiques pour faciliter la gestion et la découverte.

Les Managed Clusters Edgegap fournissent une API Kubernetes à des fins d’administration.

### K8s Lens

Avec plus d’un million d’utilisateurs, [K8s Lens](https://k8slens.dev/) est l’IDE Kubernetes le plus populaire au monde. Connectez-vous aux clusters, explorez, obtenez des informations, apprenez et agissez en cas de besoin. Lens fournit toutes les informations de vos charges de travail et ressources en temps réel, toujours dans le bon contexte.

L’API Kubernetes du cluster Edgegap peut être utilisée via Lens ou d’autres IDE Kubernetes.

### Gestionnaire de paquets Helm

[Helm](https://helm.sh/) est la meilleure façon de trouver, partager et utiliser des logiciels conçus pour Kubernetes. Helm vous aide à gérer les applications Kubernetes - les charts Helm vous aident à définir, installer et mettre à niveau même les applications Kubernetes les plus complexes. Les charts sont faciles à créer, versionner, partager et publier - alors commencez à utiliser Helm et arrêtez le copier-coller.

[Installation de l’interface CLI Helm](https://helm.sh/docs/intro/install/) fournit aux développeurs une interface simple pour gérer les paquets de leur cluster.

## 🚀 Démarrage

☑️ [Inscrit à votre compte Edgegap gratuit](https://app.edgegap.com/auth/register) et passez à l’offre à l’usage pour débloquer les Clusters.

☑️ Accédez à [Managed Clusters](https://app.edgegap.com/cluster-management/clusters/list) page.

☑️ Cliquez sur **Créer un cluster** d’abord, puis saisissez :

* **Étiquette** pour votre cluster afin de le retrouver facilement plus tard,
* **Taille du cluster -** voir [#introduction](#introduction "mention").

{% hint style="danger" %}
**Nous recommandons vivement de créer des clusters séparés pour vos environnements de développement et de production.**
{% endhint %}

☑️ Vérifiez le coût estimé et cliquez sur **Créer un cluster** pour démarrer votre nouveau cluster.

☑️ Une fois le cluster prêt, **cliquez sur Kubeconfig pour télécharger votre configuration et vos identifiants** pour vous connecter à votre nouveau cluster et l’administrer.

☑️ [Déplacez votre fichier kubeconfig](https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/) pour `kubectl` pour le trouver.

☑️ Utilisateurs de Lens : [importez votre fichier kubeconfig](https://docs.k8slens.dev/getting-started/add-cluster/#specify-kubeconfig-files).

☑️ Testez la connexion à votre cluster avec la commande `kubectl get nodes` :

```bash
kubectl get nodes
NAME                            STATUS   ROLES    AGE    VERSION
lke334087-533013-294dcfe70000   Ready    <none>   10m   v1.31.0
lke334087-533013-4e69edc10000   Ready    <none>   10m   v1.31.0
lke334087-533013-50bf39880000   Ready    <none>   10m   v1.31.0
```

🙌 Félicitations, vous avez terminé la configuration du Managed Cluster ! Vous pouvez maintenant installer vos services.

## 📦 Nakama by Heroic Labs

{% hint style="success" %}
Voir [Managed Clusters](/fr/learn/advanced-features/managed-clusters.md#getting-started) avant de configurer vos services sur les clusters gérés.
{% endhint %}

{% hint style="info" %}
Intégrez Edgegap avec [le plugin Nakama](https://github.com/edgegap/nakama-edgegap) + [le plugin Unity](https://github.com/edgegap/edgegap-server-nakama-plugin-unity)! [Contactez-nous pour d’autres plateformes/fonctionnalités.](https://discord.gg/NgCnkHbsGp)
{% endhint %}

Suivez ces étapes pour héberger votre propre [backend de jeu Nakama](https://heroiclabs.com/docs/nakama/getting-started/) sur les Managed Clusters :

☑️ Installer un **Gestionnaire de certificats** pour prendre en charge l'utilisation des requêtes HTTPS depuis les clients de jeu :

```bash
helm repo add jetstack https://charts.jetstack.io --force-update;
helm upgrade --install cert-manager jetstack/cert-manager \
  --namespace cert-manager --create-namespace \
  --version v1.16.1 --set crds.enabled=true;
```

☑️ Lens : vérifier l'installation dans la section Services / Réseau, `cert-manager` devrait être en cours d'exécution.

☑️ Écrire un **Cluster Issuer** fichier, pensez à remplacer `<YOUR_EMAIL>` ci-dessous :

<pre class="language-yaml"><code class="lang-yaml">apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: letsencrypt-staging
  namespace: cert-manager
spec:
  acme:
    server: https://acme-staging-v02.api.letsencrypt.org/directory
    email : <a data-footnote-ref href="#user-content-fn-1">&#x3C;YOUR_EMAIL></a>
    privateKeySecretRef:
      name : <a data-footnote-ref href="#user-content-fn-2">letsencrypt-staging</a>
    solvers:
    - http01:
        ingress:
          class: nginx
          
</code></pre>

{% hint style="danger" %}
Utilisez `letsencrypt-prod` pour votre cluster de production `privateKeySecretRef`.
{% endhint %}

☑️ Créez un **Cluster Issuer** en ligne de commande :

```bash
kubectl create -f <FILE_PATH>/issuer.yaml
```

☑️ Lens : vérifier l'installation dans la section Custom Resources / `cert-manager.io` - cluster issuer créé.

☑️ Installer le **Ingress nginx** pour recevoir les requêtes des clients et les transmettre aux services du cluster :

```
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm upgrade --install ingress-nginx ingress-nginx/ingress-nginx \
  --namespace ingress-nginx --create-namespace
```

☑️ Lens : vérifier l'installation dans la section Services / Réseau, `nginx` devrait être en cours d'exécution.

☑️ Créez un **enregistrement DNS de type A** chez votre fournisseur DNS (par ex. [Cloudflare](https://developers.cloudflare.com/dns/get-started/)), notez l’URL pour plus tard. Votre **adresse IP externe pour l’enregistrement DNS** se trouve dans Lens sous Services / `ingress-nginx-controller` .

☑️ Vérifiez que votre DNS est correctement configuré en effectuant une recherche [à l’aide de DNSchecker](https://dnschecker.org/ns-lookup.php).

☑️ Créez un fichier nommé `values.yaml` avec le contenu suivant (utilisez vos propres valeurs) :

<pre class="language-yaml"><code class="lang-yaml">isProductionEnvironment: true

# Le nom d’hôte externe du serveur Nakama - enregistrement DNS de l’étape précédente
externalHostName: <a data-footnote-ref href="#user-content-fn-3">&#x3C;DNS_A_RECORD_URL></a>

nakama:
  # La version de Nakama à déployer.
  # Voir https://hub.docker.com/r/heroiclabs/nakama/tags pour les versions disponibles.
  version: 3.26.0
  # Nom d’utilisateur et mot de passe pour la console Nakama
  username: <a data-footnote-ref href="#user-content-fn-4">&#x3C;USERNAME></a>
  password: <a data-footnote-ref href="#user-content-fn-5">&#x3C;PASSWORD></a>
</code></pre>

{% hint style="danger" %}
**Remplacez les \<VALUES> ci-dessus par vos propres valeurs** dans le fichier ci-dessus.
{% endhint %}

☑️ Déployez le chart Helm Nakama :

```bash
helm upgrade --install \\
  --namespace nakama --create-namespace -f <FILE_PATH>/values.yaml \\
  --version 1.0.0 <RELEASE_NAME> oci://registry-1.docker.io/edgegap/heroiclabs-nakama
```

☑️ Lens : vérifiez l’installation dans la section Workloads / Deployments, `nakama` doit être en cours d’exécution.

✅ **Connectez-vous à votre console Nakama** avec l’URL et les identifiants du `values.yaml` fichier.

🙌 Félicitations, vous avez terminé la configuration du backend de jeu Nakama auto-hébergé !

### Mises à jour du service

Suivez ces étapes pour mettre à jour votre service hébergé dans le Managed Cluster :

☑️ Mettez à jour votre `value.yaml` fichier avec de nouveaux fichiers.

☑️ Mettez à jour votre chart Helm avec cette commande :

```bash
helm upgrade --reuse-values \\
  --namespace nakama -f <FILE_PATH>/values.yaml \\
  --version 1.0.0 <RELEASE_NAME> oci://registry-1.docker.io/edgegap/heroiclabs-nakama
```

☑️ Rechargez vos modifications en fermant les pods mis à jour, ce qui fera utiliser le nouveau chart Helm après le redémarrage automatique des pods.

{% hint style="warning" %}
Ceci **cette mise à jour provoquera un court temps d'arrêt** pendant que les pods redémarrent.
{% endhint %}

🙌 Félicitations, vous avez terminé la mise à jour du cluster Nakama !

## 👷 Matchmaker avancé

{% hint style="success" %}
Voir [Managed Clusters](/fr/learn/advanced-features/managed-clusters.md#getting-started) avant de configurer vos services sur les clusters gérés.
{% endhint %}

Suivez ces étapes pour héberger votre [OpenMatch](https://open-match.dev/site/) sur un Managed Cluster.

☑️ Installer un **Gestionnaire de certificats** pour prendre en charge l'utilisation des requêtes HTTPS depuis les clients de jeu :

```bash
helm repo add jetstack https://charts.jetstack.io --force-update;
helm upgrade --install cert-manager jetstack/cert-manager \
  --namespace cert-manager --create-namespace \
  --version v1.16.1 --set crds.enabled=true;
```

☑️ Lens : vérifier l'installation dans la section Services / Réseau, `cert-manager` devrait être en cours d'exécution.

☑️ Écrire un **Cluster Issuer** fichier, pensez à remplacer `<YOUR_EMAIL>` ci-dessous :

<pre class="language-yaml"><code class="lang-yaml">apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: letsencrypt-staging
  namespace: cert-manager
spec:
  acme:
    server: https://acme-staging-v02.api.letsencrypt.org/directory
    email : <a data-footnote-ref href="#user-content-fn-1">&#x3C;YOUR_EMAIL></a>
    privateKeySecretRef:
      name : <a data-footnote-ref href="#user-content-fn-2">letsencrypt-staging</a>
    solvers:
    - http01:
        ingress:
          class: nginx
          
</code></pre>

{% hint style="danger" %}
Utilisez `letsencrypt-prod` pour votre cluster de production `privateKeySecretRef`.
{% endhint %}

☑️ Créez un **Cluster Issuer** en ligne de commande :

```bash
kubectl create -f <FILE_PATH>/issuer.yaml
```

☑️ Lens : vérifier l'installation dans la section Custom Resources / `cert-manager.io` - cluster issuer créé.

☑️ Installer le **Ingress nginx** pour recevoir les requêtes des clients et les transmettre aux services du cluster :

```
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm upgrade --install ingress-nginx ingress-nginx/ingress-nginx \
  --namespace ingress-nginx --create-namespace
```

☑️ Lens : vérifier l'installation dans la section Services / Réseau, `nginx` devrait être en cours d'exécution.

☑️ Créez un enregistrement DNS de type A chez votre fournisseur DNS (par ex. [Cloudflare](https://developers.cloudflare.com/dns/get-started/)), notez l’URL pour plus tard. Votre **adresse IP externe pour l’enregistrement DNS** se trouve dans Lens sous Services / `ingress-nginx-controller` .

☑️ Vérifiez que votre DNS est correctement configuré en effectuant une recherche [à l’aide de DNSchecker](https://dnschecker.org/ns-lookup.php).

☑️ Créez un fichier nommé `values.yaml` avec le contenu suivant (utilisez vos propres valeurs) :

```yaml
isProductionEnvironment: false

director:
  credential:
    registry: <YOUR_DIRECTOR_REGISTRY>
    username: <YOUR_DIRECTOR_REGISTRY_USERNAME>
    password: <YOUR_DIRECTOR_REGISTRY_PASSWORD>
  image: <DIRECTOR_IMAGE>
  env: {
    "KEY": "VALUE"
  }

mmf:
  credential:
    registry: <MATCHMAKER_FUNCTION_REGISTRY>
    username: <MATCHMAKER_FUNCTION_REGISTRY_USERNAME>
    password: <MATCHMAKER_FUNCTION_REGISTRY_PASSWORD>
  image: <MATCHMAKER_FUNCTION_IMAGE>
  env: {
    "KEY": "VALUE"
  }

frontend:
  credential:
    registry: <FRONTEND_REGISTRY>
    username: <FRONTEND_REGISTRY_USERNAME>
    password: <FRONTEND_REGISTRY_PASSWORD>
  externalHostName: <YOUR_CLOUDFLARE_HOST_NAME> # e.g. exemple.test.com
  image: <FRONTEND_IMAGE>
  env: {
    "KEY": "VALUE"
  }

# Configurations globales visibles par tous les sous-charts
global:
  kubernetes:
    resources:
      requests:
        memory: 100Mi
        cpu: 100m
      limits:
        memory: 100Mi
        cpu: 100m
```

{% hint style="danger" %}
**Remplacez les \<VALUES> ci-dessus par vos propres valeurs** dans le fichier ci-dessus.
{% endhint %}

☑️ Ajoutez **le dépôt Edgegap** à votre liste de dépôts :

```bash
helm repo add edgegap-public https://registry.edgegap.com/chartrepo/edgegap-public
```

☑️ Déployez le chart Helm du matchmaker avancé :

```bash
helm upgrade --install \\
  --namespace matchmaker --create-namespace -f <FILE_PATH>/values.yaml \\
  --version 1.0.1 <RELEASE_NAME> edgegap-public/open-match-edgegap
```

🙌 Félicitations, vous avez terminé la configuration du matchmaker avancé !

### Mises à jour du service

Suivez ces étapes pour mettre à jour votre service hébergé dans le Managed Cluster :

☑️ Mettez à jour votre `value.yaml` fichier avec de nouveaux fichiers.

☑️ Mettez à jour votre chart Helm avec cette commande :

```bash
helm upgrade --reuse-values \\
  --namespace matchmaker -f <FILE_PATH>/values.yaml \\
  --version 1.0.1 <RELEASE_NAME> edgegap-public/open-match-edgegap
```

☑️ Rechargez vos modifications en fermant les pods mis à jour (director, mmf, frontend), ce qui fera utiliser le nouveau chart Helm après le redémarrage automatique des pods.

{% hint style="warning" %}
Ceci **cette mise à jour provoquera un court temps d'arrêt** pendant que les pods redémarrent.
{% endhint %}

🙌 Félicitations, vous avez terminé la mise à jour du matchmaker avancé !

### Déploiement continu

Automatisez la mise à jour de vos services en ajoutant ce script shell à votre pipeline de déploiement :

```bash
#!/bin/bash

RELEASE_NAME="<RELEASE_NAME>"
NAMESPACE="matchmaker"  # Modifiez ceci si vous avez changé l’espace de noms.

helm upgrade --reuse-values -f <FILE_PATH>/value.yaml --namespace $NAMESPACE --version 1.0.1 $RELEASE_NAME edgegap-public/open-match-edgegap

echo "Installation de redis-tools"
apt-get update
apt-get install -y redis-tools

DIRECTOR_DEPLOYMENT_NAME="$RELEASE_NAME-director"
MMF_DEPLOYMENT_NAME="$RELEASE_NAME-mmf"
CUSTOM_FRONTEND_DEPLOYMENT_NAME="$RELEASE_NAME-custom-frontend"
REDIS_HOST="$RELEASE_NAME-redis-master"

declare -A replicas

# Pour chaque déploiement (director, mmf, custom-frontend) arrêter les pods
for deployment in $DIRECTOR_DEPLOYMENT_NAME $MMF_DEPLOYMENT_NAME $CUSTOM_FRONTEND_DEPLOYMENT_NAME
do
  echo "Arrêt des pods pour le déploiement : $deployment"
  replicas[$deployment]=$(kubectl get deployment $deployment -o=jsonpath='{.spec.replicas}' --namespace $NAMESPACE)
  kubectl scale deployment/$deployment --replicas=0 --namespace $NAMESPACE
done

# Attendre que les pods soient terminés
for deployment in $DIRECTOR_DEPLOYMENT_NAME $MMF_DEPLOYMENT_NAME $CUSTOM_FRONTEND_DEPLOYMENT_NAME
do

  echo "En attente de la terminaison des pods pour le déploiement : $deployment"
  kubectl wait --for=delete pod -l app=$deployment --timeout=60s --namespace $NAMESPACE

  # Vérifier si la commande d’attente a réussi. Sinon, quitter le script
  if [ $? -ne 0 ]; then
    echo "Échec de l’attente de la terminaison des pods pour le déploiement : $deployment"
    exit 1
  fi
done

# Nettoyage de la base de données Redis
echo "Nettoyage de la base de données Redis"
redis-cli -h $REDIS_HOST flushall

# Pour chaque déploiement (director, mmf, custom-frontend) réajuster les pods à leur nombre d’origine
for deployment in $DIRECTOR_DEPLOYMENT_NAME $MMF_DEPLOYMENT_NAME $CUSTOM_FRONTEND_DEPLOYMENT_NAME
do
  echo "Réajustement des pods à ${replicas[$deployment]} pour le déploiement : $deployment"
  kubectl scale deployment/$deployment --replicas=${replicas[$deployment]} --namespace $NAMESPACE
done
```

{% hint style="warning" %}
Ceci **cette mise à jour provoquera un court temps d'arrêt** pendant que les pods redémarrent.
{% endhint %}

### Validation du certificat Let's Encrypt (C#)

Pour certains clients, la validation de certificat Let's Encrypt recommandée peut échouer avec l’erreur suivante :

```bash
Erreur Curl 60 : échec de la vérification du certificat. Le certificat a expiré. Code d’erreur UnityTls : 7
```

{% hint style="success" %}
La mise à jour de votre système d’exploitation peut résoudre les problèmes liés à une autorité de certification racine obsolète.
{% endhint %}

En dernier recours, les clients de jeu peuvent implémenter une fonction de gestion de certificat personnalisée :

````csharp
```csharp
public class CustomCertificateHandler : CertificateHandler
{
  private readonly string EXPECTED_CERT = "-----BEGIN CERTIFICATE-----<key>-----END CERTIFICATE-----\r\n";
  protected override bool ValidateCertificate(byte[] certificateData)
  {
    X509Certificate2 certificate = new X509Certificate2(certificateData);
    X509Certificate2 expectedCert = new X509Certificate2(Encoding.ASCII.GetBytes(EXPECTED_CERT));

    using (SHA256 sha256 = SHA256.Create())
    {
      Debug.Log("certificate.Thumbprint: " + certificate.Thumbprint);
      Debug.Log("expectedCert.Thumbprint: " + expectedCert.Thumbprint);

      return certificate.Thumbprint == expectedCert.Thumbprint;
    }
  }
}
```
````

Utilisation :

```csharp
UnityWebRequest request = UnityWebRequest.Get(...);
request.certificateHandler = new BypassCertificateHandler();
request.SendWebRequest();
request.certificateHandler.Dispose();
```

Nous vous recommandons de stocker la valeur `EXPECTED_CERT` dans votre propre stockage de fichiers, puis de la récupérer au moment de l’exécution, afin de pouvoir la mettre à jour sans publier de mise à jour du client de jeu.

## 🟢 Opérations et observabilité

### Changements de niveau de cluster

Préparez-vous au succès et optimisez après le lancement afin de ne pas bloquer vos joueurs le jour de la sortie.

{% hint style="warning" %}
&#x20;Changer la taille du cluster nécessite d’arrêter votre cluster. Voir [déploiement bleu/vert](https://circleci.com/blog/canary-vs-blue-green-downtime/) pour des mises à jour sans interruption.
{% endhint %}

### Support et futures mises à jour

**Votre réussite est notre priorité.** Si vous souhaitez envoyer des demandes personnalisées, demander des fonctionnalités critiques manquantes, ou partager vos remarques, [veuillez nous contacter sur notre Discord communautaire](https://discord.gg/MmJf8fWjnt).

[^1]: remplacez par votre email

[^2]: utilisez letsencrypt-prod pour la production

[^3]: enregistrement DNS de l’étape précédente

[^4]: choisissez votre propre nom d’utilisateur administrateur

[^5]: choisissez un mot de passe sécurisé pour l’administrateur
