> 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/orchestration/deployments.md).

# Déploiements

En savoir plus sur les déploiements et leur cycle de vie - concepts et bonnes pratiques pour une compréhension approfondie.

## 🗺️ Orchestration

Lancez de nouveaux serveurs en quelques secondes pour répondre aux besoins de capacité grâce à notre approche de calcul en périphérie cloud native. Nous traitons les serveurs comme [du bétail plutôt que des animaux de compagnie](https://cloudscaling.com/blog/cloud-computing/the-history-of-pets-vs-cattle/) - en remplaçant entièrement les instances défaillantes au lieu de les soigner manuellement une par une.

{% hint style="info" %}
Votre choix d’orchestration aura **un impact sur vos coûts DevOps, le coût des serveurs et la scalabilité**.
{% endhint %}

{% hint style="success" %}
[Contactez-nous sur Discord](https://discord.gg/MmJf8fWjnt) pour en savoir plus sur les options d’orchestration hybride et sur l’optimisation de vos coûts d’hébergement.
{% endhint %}

Pour bien comprendre tous les avantages et inconvénients, comparons différentes méthodes d’orchestration. Certains jeux utiliseront plusieurs méthodes d’orchestration selon la conception de la boucle de jeu.

### Lié au match

Les serveurs à courte durée de vie (limitée dans le temps) se réduisent à la fin du match, offrant **le meilleur rapport coût-performance**.

Les sessions sont généralement automatisées via un [Appariement](/fr/unity/appariement.md) service, qui déploie des serveurs juste à temps selon des règles strictes, et permet éventuellement de remplir les serveurs en cours pour [améliorer les taux de remplissage des matchs](https://edgegap.com/blog/how-session-fill-rate-affects-your-multiplayer-hosting-costs).

👍 **Avantages**

* Meilleure efficacité des coûts - mise à l’échelle en temps réel pour répondre à la demande des joueurs minute par minute.
* Coût DevOps le plus faible grâce à un hébergement sans région ; Edgegap automatise 99 % des tâches.
* Ping le plus faible grâce à plus de 615 sites dans l’infrastructure cloud publique d’Edgegap.
* Mise à l’échelle la plus rapide (capacité de pic) en cas de hausse inattendue du trafic.
* Plus haut niveau de sécurité et de prévention de la triche des joueurs (autorité serveur).
* Impact minimal d’une panne serveur inattendue sur les joueurs, n’affectant qu’un seul match.

👎 **Inconvénients**

* L’adoption d’un nouveau modèle mental d’orchestration nécessite initialement un certain effort d’adaptation.
* Les serveurs exécutés pendant plus de 24 heures seront automatiquement arrêtés.

🧩 **Le mieux adapté pour**

* Jeux sensibles à la latence - **lorsque l’optimisation du netcode ne peut pas compenser un ping élevé :**
  * FPS, jeux de combat, VR et XR (réalité virtuelle et étendue), …
* Jeux avec une **limite supérieure de durée de match par conception**,
  * Battle Royale, PvPvE[^1], jeux coopératifs, MOBA, jeux de sport, ARPG et dungeon crawlers, …

{% hint style="info" %}
Edgegap ajuste automatiquement à la hausse/à la baisse tous les plus de 615 emplacements de serveurs en fonction de l’activité des joueurs dans chaque région. Préparez-vous au succès - passez sans friction à 14 millions d’utilisateurs simultanés en 60 minutes [passer à 14 millions d’utilisateurs simultanés en 60 minutes](https://edgegap.com/resources/performance-benchmark).
{% endhint %}

### Veille régionale

Jeu MMO à monde persistant et social **la durée de vie du serveur dépasse souvent les sessions individuelles des joueurs**.

Les sessions sont généralement attribuées via un [Navigateur de serveurs](/fr/learn/navigateur-de-serveurs.md) en fonction de la préférence du joueur (automatisée par région ou recherche personnalisée), avec une pré-mise à l’échelle du déploiement horizontal basée sur la capacité régionale.

👍 **Avantages**

* Approche familière et facile à comprendre, à l’ancienne, pour les vétérans aguerris.
* Plus haut niveau de sécurité et de prévention de la triche des joueurs (autorité serveur).
* Coût facilement prévisible basé sur un engagement mensuel.

👎 **Inconvénients**

* Coût d’hébergement plus élevé - chaque région nécessite un ou plusieurs serveurs de veille inactifs (capacité de pic).
* Coût DevOps plus élevé - mise à l’échelle, opérations et maintenance dupliquées par région.
* Les régions avec une base de joueurs plus réduite subissent un ping élevé en raison de la connexion à des serveurs éloignés.

🧩 **Le mieux adapté pour**

* Mondes persistants avec contenu généré par les utilisateurs stocké sur le serveur même lorsque les joueurs sont hors ligne.
  * MMO, sandbox avec construction de bases ou placement d’objets, Extraction Shooters, ...
* jeux tolérants à la latence - **lorsque la physique en temps réel avec autorité serveur n’est pas requise**:
  * jeux mobiles, jeux coopératifs, TCG/CCG, stratégies au tour par tour, …
* Multijoueur asynchrone, **où les pannes serveur ont un impact minimal sur l’expérience du joueur :**
  * course contre des fantômes, piller la base ennemie, jeux de construction/agriculture à minuterie, …
* applications avec un processus d’initialisation lourd - lorsque la préparation des serveurs prend plusieurs minutes.

### Pair à pair

Déplacez les efforts de développement des ~~serveurs dédiés~~ vers **netcode relais pour les jeux non compétitifs**.

Sujets connexes : serveurs d’écoute, autorité de l’hôte-joueur, traversée NAT.

👍 **Avantages**

* Coût d’hébergement le plus faible, ne nécessitant que des serveurs relais pour résoudre la traversée NAT.
* Coût DevOps le plus faible - maintenance requise uniquement pour les builds client et les canaux de distribution.
* Impact minimal d’une panne serveur inattendue sur les joueurs, n’affectant qu’un seul match.
* Facile à mettre en œuvre et rapide à prototyper, sans aucun développement backend requis.

👎 **Inconvénients**

* Effort de développement du netcode pair à pair accru, nécessitant des compétences en programmation concurrente.
* Les pings les plus mauvais et la plus grande sensibilité aux conditions réseau défavorables (par ex. Internet mobile).
* Sécurité la plus faible, vulnérable aux attaques de l’homme du milieu et au détournement de session.
* Risque de perte de sessions lorsque l’hôte quitte, sauf si vous implémentez une migration d’hôte personnalisée.

🧩 **Le mieux adapté pour**

* Jeux coopératifs et casual - **lorsque la triche ne gâche pas le plaisir ni ne casse le jeu**,
  * Jeux pour enfants, jeux d’exploration, aventures, …

{% hint style="success" %}
Voir nos [Relais distribués](https://docs.edgegap.com/docs/distributed-relay-manager) pour un service permettant le pair à pair avec une latence et une sécurité de premier ordre.
{% endhint %}

## 📍 Placement des serveurs

Quelle que soit la méthode d’orchestration que vous choisissez, sélectionner le bon emplacement de serveur pour un groupe de joueurs est crucial pour garantir le meilleur ping possible et une expérience joueur optimale. Découvrez différentes stratégies de placement des serveurs et leur impact sur vos joueurs.

{% hint style="info" %}
Votre stratégie de placement des serveurs aura **un impact sur l’expérience de vos joueurs, leur rétention et les avis sur votre jeu**.
{% endhint %}

{% hint style="success" %}
**Edgegap déploie dans le** [**meilleur emplacement possible**](#server-score) **avec la capacité disponible**, pour des matchs rapides et à faible latence.
{% endhint %}

<figure><img src="https://3008966946-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsR0dHSFv9ymoC0DO5G8J%2Fuploads%2FjiPRa6gGEku2oGm3qW5s%2Fimage.png?alt=media&amp;token=306897d4-8ab1-4766-bc90-5d02882b573c" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
Voir [#deployment-balance-points](#deployment-balance-points "mention") vers **analyser le placement des serveurs en temps réel**, à grande échelle.
{% endhint %}

### Score serveur

La stratégie Server Score utilise la méthode brevetée d’Edgegap, qui **optimise le placement des serveurs pour chaque match individuellement**. Effectue une télémétrie non intrusive pour approximer la proximité réseau de chaque joueur à nos emplacements de serveurs et choisir le serveur qui offre le meilleur :

* **temps de réponse** - offre en moyenne le ping le plus faible pour tous les joueurs,
* **équité** - offre un ping équilibré et équitable pour tous les joueurs.

{% hint style="success" %}
Notre [Matchmaker](/fr/learn/appariement.md) utilise **par défaut la stratégie Server Score, afin de garantir la meilleure expérience possible**. Pour utiliser cette stratégie avec [les API de déploiement](https://docs.edgegap.com/api/#tag/Deployments), saisissez les IP publiques des joueurs ou les coordonnées géographiques dans votre requête de déploiement.
{% endhint %}

**Placement non réactif** - le serveur est éloigné, ping élevé pour tous les joueurs :

<figure><img src="https://3008966946-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsR0dHSFv9ymoC0DO5G8J%2Fuploads%2FNszxk3uRY78L7V6nLPlp%2Fimage.png?alt=media&amp;token=904b9b3d-7499-45d3-81c6-cc2b5cb6dd32" alt=""><figcaption></figcaption></figure>

**Placement injuste** - ping inégal, un joueur est désavantagé en raison d’une latence plus élevée :

<figure><img src="https://3008966946-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsR0dHSFv9ymoC0DO5G8J%2Fuploads%2FxjsD6ijYWHljBAVuV57w%2Fimage.png?alt=media&amp;token=ab477e89-4afe-4203-9b7f-b85b035dc9eb" alt=""><figcaption></figcaption></figure>

**Exemple de bon placement** - ping réactif et équitable pour tous les joueurs :

<figure><img src="https://3008966946-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsR0dHSFv9ymoC0DO5G8J%2Fuploads%2FQfSd4uo9twyxEWCkPLqu%2Fimage.png?alt=media&amp;token=8d3cd64b-9527-48fe-886b-96393c15449d" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
Cette stratégie est **particulièrement efficace pour héberger un groupe de joueurs éloignés les uns des autres** (Amérique du Nord vs Amérique du Sud, ou côte ouest vs côte est), cas fréquent avec une base de joueurs plus réduite.
{% endhint %}

### Géolocalisation

Sinon, **indiquez les coordonnées latitude et longitude de l’emplacement de serveur souhaité :**

⭐ **Recommandé :** Trouvez la balise de ping la plus rapide et envoyez ses coordonnées, ou son IP dans le champ utilisateur.

⚙️ **Personnalisé**: Définissez des régions (avec leurs coordonnées) dans le backend de votre jeu, récupérez-les via une API personnalisée.

👉 **Le plus simple pour les tests :** Définissez des régions (avec leurs coordonnées) en dur dans les builds de développement du client du jeu.

{% hint style="warning" %}
Cette stratégie n'est pas recommandée pour [#match-bound](#match-bound "mention") l'orchestration, sauf pour les applications soumises à des exigences réglementaires strictes en matière de transferts de données interrégionaux, ou lorsque l'adresse IP du joueur n'est pas disponible.
{% endhint %}

{% hint style="success" %}
Alternativement, laissez les joueurs **choisir un serveur persistant (toujours en ligne)** d'une liste avec [Navigateur de serveurs](/fr/learn/navigateur-de-serveurs.md).
{% endhint %}

### Verrouillage régional

Certains studios préfèrent verrouiller des emplacements stables et prévisibles (p. ex. des MMO avec [Persistance](/fr/learn/orchestration/persistance.md)). Envisagez [Navigateur de serveurs](/fr/learn/navigateur-de-serveurs.md) avec [des politiques de mise à l’échelle régionales](/fr/learn/navigateur-de-serveurs.md#automated-scaling) et [des réservations attribuées automatiquement](/fr/learn/navigateur-de-serveurs.md#auto-assigned-reservation).

{% hint style="warning" %}
Cette stratégie n'est pas recommandée pour [#match-bound](#match-bound "mention") l'orchestration, sauf pour les applications soumises à des exigences réglementaires strictes en matière de transferts de données interrégionaux, ou lorsque l'adresse IP du joueur n'est pas disponible.
{% endhint %}

## 🟢 Qualité de connexion

Certains jeux (et joueurs) sont plus sensibles à la latence ou au lag que d’autres. Bien que les signalements des joueurs soient un excellent indicateur d’incidents ou de régressions à grande échelle, **les joueurs peuvent manquer d’une compréhension approfondie des concepts de réseau** et attribuent rapidement la faute aux studios, au netcode ou aux serveurs.

La cause profonde de certains problèmes peut être cachée aux joueurs, de sorte que la coopération entre le studio et le fournisseur d’hébergement peut être cruciale. **La priorité d’Edgegap est toujours de fournir le meilleur service possible.**

Si vous recevez de nombreux signalements de joueurs, si vous subissez des pannes généralisées ou des problèmes répétés, veuillez nous contacter immédiatement via un ticket de support sur notre plateforme.

{% hint style="info" %}
Si vous avez besoin d’aide, [veuillez nous contacter sur Discord](https://discord.gg/MmJf8fWjnt). Pour l’assistance aux jeux en direct, consultez notre [système de tickets](https://edgegap.atlassian.net/servicedesk/customer/portal/3).
{% endhint %}

#### Faible latence

La latence du joueur est une combinaison des latences liées au transfert des données entre :

* **Appareils physiques -** le signal physique voyageant à travers [la topologie du réseau Internet](https://en.wikipedia.org/wiki/Internet#Routing).
* **De serveur à serveur** - résultant des mesures de protocole, de transport et de sécurité.
* **De processus à processus** - résultant du déballage et du traitement des données côté client/serveur.

Edgegap réduit la latence physique en plaçant les serveurs plus près de vos joueurs pour des réponses plus rapides et un nombre de sauts réseau réduit. Avec des emplacements répartis sur 17 fournisseurs cloud et bare metal, vous obtenez **le meilleur ping du marché pour les joueurs partout dans le monde**.

La couverture mondiale des serveurs et d’Internet (pas seulement chez Edgegap) est limitée par des facteurs tels que :

* **Disponibilité de l’infrastructure** - la qualité de la connexion Internet dans une région donnée peut ne pas être suffisante.
* **Facteurs naturels** - les serveurs incluent des composants sensibles, nécessitant de la stabilité (pas de tremblements de terre).

#### Haute disponibilité

La disponibilité des serveurs dans différentes régions du monde varie au fil du temps, changeant de nombreuses fois au cours de la journée. Edgegap ajuste automatiquement **à la hausse/à la baisse** les emplacements **à la demande**, en tenant compte de :

* **Trafic en pic** - les déploiements effectués sur une période de 15 minutes informent les tendances de mise à l’échelle.
* **Besoins en ressources** - la demande totale en vCPU dans chaque emplacement détermine le rythme de mise à l’échelle.
* **Alternatives de fournisseurs** - certains emplacements éloignés disposent de moins d’options de fournisseurs.
* **Capacité des fournisseurs** - certains emplacements n’offrent peut-être que des machines 4 vCPU ou 8 vCPU.
* **Qualité de service** - certains fournisseurs offrent une meilleure qualité réseau entre les FAI d’une même zone.
* **Planning du studio** - demandes spéciales pour les tests et l’assurance qualité, les bêtas fermées ou les tournois.

Toutes les requêtes de déploiement des applications sont combinées pour évaluer la demande dans chaque emplacement. Toutes les organisations ont par défaut la même priorité d’allocation. **Les studios ont la possibilité d’ajouter des éléments personnalisés** [Flottes privées](/fr/learn/orchestration/flottes-privees.md).

{% hint style="success" %}
Veuillez **nous contacter pour planifier une mise en production**, ou si vous avez des demandes concernant la disponibilité des emplacements.
{% endhint %}

#### Résolution des problèmes des joueurs

Les problèmes des joueurs peuvent parfois être causés par des bugs de serveur ou d’hébergement, mais ils sont souvent sans rapport - pensez aussi aux problèmes de connexion câble/Wi‑Fi, au fournisseur d’accès Internet, aux services backend ou aux bugs dans les bibliothèques bas niveau client/serveur.

Lors du dépannage des signalements ou incidents des joueurs, tenez compte des facteurs suivants :

* **Qualité du matchmaking** - optimisez autant que possible pour des matchs dans la même région :
  * [Appariement](/fr/learn/appariement.md) et [Balises de ping](/fr/learn/orchestration/ping-beacons.md) pour nos recommandations,
  * [Analyse approfondie](/fr/learn/appariement/matchmaker-in-depth.md#player-tracing) pour trouver les journaux de serveur liés aux signalements des joueurs.
* **Problèmes régionaux de réseau et de FAI :**
  * les fournisseurs d’accès à Internet (FAI) localisés peuvent être en train de résoudre un incident momentanément,
  * certaines régions (par ex. la Chine, la Russie) peuvent être restreintes en raison de sanctions localisées.
* **Niveau de cache** - sans cache, vos sessions peuvent expirer en raison de déploiements plus lents :
  * [activez la mise en cache pour déployer vos serveurs en quelques secondes](/fr/learn/orchestration/application-and-versions.md#other-parameters-optional).
* **Temps maximum de déploiement** - les déploiements peuvent échouer en raison d’un processus d’initialisation lent et lourd :
  * voir [Applications et versions](/fr/learn/orchestration/application-and-versions.md#safety-guardrails) pour augmenter la durée du délai d’attente.
* **Problèmes d’image serveur ou d’intégration** dans les premières itérations de pipelines de build personnalisés.

{% hint style="success" %}
**Afficher les ID de déploiement dans l’interface d’historique des matchs du client** pour suivre les signalements des joueurs lors du dépannage.
{% endhint %}

{% hint style="info" %}
Informer les utilisateurs des bugs généralisés, des problèmes temporaires et des pannes afin d’atténuer le sentiment négatif.
{% endhint %}

## 🔄 Cycle de vie du déploiement

Les déploiements Edgegap passent par plusieurs étapes de cycle de vie, indiquées par l’état du déploiement.

#### 1. Démarrer un déploiement

Un déploiement à **des fins de test** peut être lancé avec :

* [Unreal Engine](/fr/unreal-engine.md) - l’extension Docker ou le plugin EGIK pour les projets Unreal Engine.
* [Unity](/fr/unity.md) - le plugin de démarrage rapide d’hébergement pour les projets Unity.
* [Godot](/fr/godot.md) - le plugin de démarrage rapide d’hébergement pour les projets Godot.
* [Interface web du tableau de bord](https://app.edgegap.com/deployment-management/deployments/list) - interface web simple pour des tests rapides de serveur et l’itération.

{% hint style="warning" %}
**Lancer vos déploiements manuellement, en collant l’URL et les ports, ne suffira pas pour un jeu en direct.**
{% endhint %}

Automatisez les flux de jeu populaires pour gérer les sessions et la mise à l’échelle à la demande avec l’une ou l’autre des options suivantes :

{% columns %}
{% column width="33.33333333333333%" %}
[Appariement](/fr/learn/appariement.md):

* Manches plus courtes
* Parties à la demande
* Classement par niveau et/ou\
  Règles personnalisées
  {% endcolumn %}

{% column width="33.33333333333333%" %}
[Navigateur de serveurs](/fr/learn/navigateur-de-serveurs.md):

* Persistant ou en manches
* Hubs régionaux sociaux
* Affectation automatique et/ou\
  Recherche personnalisée
  {% endcolumn %}

{% column width="33.33333333333333%" %}
Backend personnalisé :

* Migrer des parties en cours
* [Déployer avec l’API v2](/fr/docs/api/serveurs-dedies.md)
* [Observer les webhooks](/fr/learn/orchestration/deployments.md#webhooks)
  {% endcolumn %}
  {% endcolumns %}

{% hint style="success" %}
**Enregistrer** `request_id`  **(ID de déploiement) et taguer les déploiements** pour identifier et dépanner les problèmes plus tard.
{% endhint %}

#### 2. Déploiement

Une fois un déploiement lancé, notre système effectuera un certain nombre d’étapes à la suite, très rapidement :

* Télémétrie - nous mesurons la réactivité du réseau depuis les centres de données disponibles vers chaque joueur,
* Déploiement - nous réservons de la capacité et préparons le démarrage de votre conteneur serveur,
* Démarrage du conteneur - nous démarrons le conteneur, installons les dépendances et initialisons,
* Post-traitement - nous ajoutons le stockage des journaux, la surveillance et finalisons le déploiement.

{% hint style="success" %}
Activer [Activer la mise en cache dans la version de votre application](/fr/learn/orchestration/application-and-versions.md#active-caching) pour déployer des serveurs en quelques secondes.
{% endhint %}

{% hint style="warning" %}
**Trop de requêtes 429** - pour garantir la stabilité et éviter les factures surprises, nous limitons le débit de votre organisation à **40 req/s**. [Contactez-nous](mailto:info@edgegap.com) pour planifier les lancements, estimer le trafic de lancement et préparer le succès.
{% endhint %}

#### 3. Déploiement prêt

Une fois un déploiement prêt, votre moteur a encore du travail à faire. Les moteurs initialisent les sous-systèmes et les frameworks, puis chargent les ressources, y compris les cartes, en mémoire. Cela se produit après que votre déploiement devient prêt et prend généralement jusqu’à 1 minute selon votre degré d’optimisation.

{% hint style="success" %}
**Réessayez la connexion du joueur plusieurs fois**, jusqu’à ce qu’une période de délai d’attente prédéfinie s’écoule, avant de revenir en arrière et de démarrer une nouvelle session. Les serveurs n’acceptent généralement pas de nouvelles connexions de joueurs tant qu’ils ne sont pas complètement initialisés.
{% endhint %}

{% hint style="danger" %}
**La gestion des plantages du serveur dépend de votre** [**politique de redémarrage du processus**](/fr/learn/orchestration/application-and-versions.md#safety-guardrails)**.** [L'état du serveur peut être perdu](/fr/learn/orchestration/persistance.md#state-management).
{% endhint %}

Selon le statut de la version, [Applications et versions](/fr/learn/orchestration/application-and-versions.md#active-caching) vous pouvez recevoir :

🟢 **Succès de cache**

La mise en cache est activée. Le déploiement a été plus rapide grâce à la réutilisation de l’image préchargée sur cette machine.

🟡 **Démarrage à chaud**

La mise en cache est désactivée. Le déploiement a été plus rapide grâce à la réutilisation de l’image téléchargée pour un déploiement précédent sur la même machine. Activez la mise en cache pour garantir des déploiements constamment rapides dans le monde entier.

🔴 **Échec de cache**

La mise en cache est activée. Le déploiement a été plus lent en raison d’un pic de trafic soudain avant la fin de la propagation du cache. L’activation de « require cached locations » dans votre requête de déploiement empêchera cela, mais peut entraîner davantage de déploiements non traitables lors de pics de trafic inattendus.

🔴 **Démarrage à froid**

La mise en cache est désactivée. Le déploiement a été plus lent, l’image a été téléchargée au moment du déploiement. Activez la mise en cache pour un déploiement plus rapide.

#### 4. Erreur de déploiement

Votre déploiement peut passer à l’état Non traitable à tout moment, pour des raisons inattendues. Cela est plus susceptible de se produire lors des tests de votre intégration ou lors des tests de nouvelles versions serveur.

**Les déploiements en erreur ne vous sont pas facturés et sont automatiquement arrêtés après 24 heures.**

Étapes de dépannage :

* Vérifiez l’état du service Edgegap avec [notre page de surveillance de disponibilité](https://status.edgegap.com/).
* Essayez de tester votre conteneur serveur localement à l’aide de Docker Desktop pour exclure un problème lié à Edgegap.

{% hint style="info" %}
Si vous avez besoin d’aide, [veuillez nous contacter sur Discord](https://discord.gg/MmJf8fWjnt). Pour l’assistance aux jeux en direct, consultez notre [système de tickets](https://edgegap.atlassian.net/servicedesk/customer/portal/3).
{% endhint %}

{% hint style="success" %}
**Lorsque vous demandez de l’aide,** **incluez votre ID de déploiement et tout détail utile** afin que nous puissions enquêter rapidement !
{% endhint %}

#### 5. Déploiement arrêté

**Les déploiements cloud seront arrêtés après 24 heures d’exécution** conformément à notre politique de nettoyage des serveurs pour la maintenance de l’infrastructure, et afin d’éviter d’engendrer des coûts inattendus lorsqu’un déploiement n’a pas été correctement arrêté à cause d’un bug inattendu.

Pour des serveurs de longue durée de plus de 24 heures, envisagez d’utiliser [Flottes privées](/fr/learn/orchestration/flottes-privees.md) avec [Persistance](/fr/learn/orchestration/persistance.md).

Optimisez vos coûts et arrêtez plus tôt les déploiements inactifs grâce aux méthodes suivantes :

* **Version de l’application** [**Politique de redémarrage**](/fr/learn/orchestration/application-and-versions.md#safety-guardrails) - empêcher le redémarrage automatique à l’arrêt ou en cas de plantage.
* **Durée maximale du jeu** - le temps alloué dans votre [Applications et versions](/fr/learn/orchestration/application-and-versions.md#safety-guardrails) est expiré.
* **Arrêt automatique via** [**DELETE\_URL**](/fr/learn/orchestration/deployments.md#injected-environment-variables) - le déploiement s’est arrêté de lui-même après le départ des joueurs et la fin du match.
  * Voir [Unreal Engine](/fr/unreal-engine.md#stop-deployments) et [Unity](/fr/unity.md#stop-deployments) guides pour les utilitaires du SDK et une intégration facile, ou utilisez l’API.
* **Arrêt depuis un backend personnalisé** - votre orchestration de session personnalisée peut utiliser [API des déploiements](https://docs.edgegap.com/api/#tag/Deployments/operation/deployment-delete).
* [Flottes privées](/fr/learn/orchestration/flottes-privees.md) L’hôte exécutant votre déploiement a été supprimé via une action planifiée.

{% hint style="info" %}
Une fois qu’un déploiement est arrêté, **nous déclenchons une terminaison gracieuse** en envoyant `SIGTERM` un signal à votre processus principal, ce qui permet un court délai d’arrêt. Une fois ce délai expiré, un `SIGKILL` signal est envoyé pour arrêter le déploiement.
{% endhint %}

## 👀 Observabilité

Permettre aux serveurs de jeu d’interopérer avec des tiers et d’obtenir des informations opérationnelles.

{% hint style="info" %}
**Vous vous inquiétez des coûts cloud inattendus ?** [Configurer des alertes cloud](https://app.edgegap.com/notifications?notification-table-limit=10\&notification-table-page=1#alarms) pour être averti lorsque des seuils de facturation personnalisés sont atteints, ou [contactez-nous](https://discord.com/invite/NgCnkHbsGp) au sujet de mesures de sécurité automatisées.
{% endhint %}

### Découvrabilité

Une fois prêt, le déploiement reçoit une URL ([fqdn](https://en.wikipedia.org/wiki/Fully_qualified_domain_name)) et un port externe pour chaque port interne.

{% hint style="success" %}
Utilisez **des tags de déploiement (jusqu’à 40 caractères) pour marquer facilement vos déploiements** pour les retrouver plus tard.
{% endhint %}

{% hint style="info" %}
**Le trafic sortant (vers les clients ou le backend) depuis vos serveurs de jeu n’est jamais bloqué** ou filtré.
{% endhint %}

#### **WebSockets (WS) et WebSockets sécurisés (WSS)**

Pour utiliser un netcode basé sur les WebSockets avec Edgegap, vous avez deux options :

* **certificat géré**, configuré en 1 minute sans écrire de code :
  * configurez votre [Applications et versions](/fr/learn/orchestration/application-and-versions.md) vers **utilisez WebSocket (WS) et activez la mise à niveau TLS,**
  * utilisez l’URL Edgegap pour connecter les clients (p. ex. `https://5fa53fa00a57.pr.edgegap.net/`)
* **certificat autogéré**, si vous souhaitez utiliser votre propre domaine personnalisé :
  * configurez votre [Applications et versions](/fr/learn/orchestration/application-and-versions.md) vers **utilisez Secure WebSocket (WSS)**,
  * configurez votre propre flux de certificat TLS avec un enregistrement DNS personnalisé (par ex. sur [Cloudflare](https://www.cloudflare.com/application-services/products/ssl/)).

{% hint style="danger" %}
Les exceptions serveur non capturées entraîneront le redémarrage du conteneur du déploiement et invalideront la sécurité TLS. Dans ce cas, [arrêtez votre serveur](#id-5.-deployment-stopped) et [réattribuez les joueurs à un nouveau déploiement](/fr/learn/appariement.md#custom-lobby). [L'état du serveur peut être perdu](/fr/learn/orchestration/persistance.md#state-management).
{% endhint %}

### Variables injectées <a href="#injected-environment-variables" id="injected-environment-variables"></a>

Les serveurs de jeu ont souvent besoin d'informations supplémentaires, telles que l'IP du serveur, les valeurs de ports internes ou autres. Injecter des variables d'environnement en lecture seule est un moyen fiable et indépendant du cloud pour transmettre des paramètres.

{% hint style="success" %}
Obtenez les valeurs des variables avec [Unity SDK](/fr/unity/developer-tools.md#software-development-kit), [Unreal EGIK](/fr/unreal-engine/developer-tools.md#integration-kit), ou avec les méthodes de variables d'env. de votre runtime.
{% endhint %}

{% hint style="info" %}
Voir [Variables de version d'application](/fr/learn/orchestration/application-and-versions.md#injected-variables) et [Variables du matchmaking](/fr/learn/appariement/matchmaker-in-depth.md#injected-variables) en plus des variables de déploiement ci-dessous.
{% endhint %}

#### **Variables personnalisées**

Définissez jusqu'à 20 variables personnalisées pour chaque déploiement, chacune contenant jusqu'à 4 Ko de données texte.

{% hint style="warning" %}
**Évitez d'utiliser les noms réservés ci-dessous, sinon vos variables personnalisées seront écrasées !**
{% endhint %}

Accédez aux informations importantes en lisant les variables injectées par Edgegap à vos serveurs :

#### **Identifiants**

* **`ARBITRIUM_REQUEST_ID`**  - p. ex. `f68e011bfb01` .
  * Identifiant unique du déploiement, également appelé identifiant de requête. Utilisé pour obtenir plus d'informations.
  * Les URL de déploiement ont toujours le format `{ARBITRIUM_REQUEST_ID}.pr.edgegap.net`.
* **`ARBITRIUM_PUBLIC_IP`**  - p. ex. `162.254.141.66` .
  * Adresse IP publique de cet hôte, peut être utilisée pour se connecter à la place de l'URL.
* **`ARBITRIUM_HOST_ID`**  - p. ex. `alpha-north-america-70364ef8` .
  * Identifiant unique de la machine hébergeant votre déploiement, partagé avec d'autres déploiements.
* **`ARBITRIUM_DEPLOYMENT_TAGS`**  - p. ex. `tag1,tag2` .
  * Balises de déploiement définies par l'utilisateur, séparées par des virgules, [utiles pour une recherche et un filtrage faciles](#filter-deployments).
* **`ARBITRIUM_PRIVATE_FLEET_ID`** - p. ex. `PUBLIC_CLOUD` , ou l'identifiant du parc si hébergé sur [Flottes privées](/fr/learn/orchestration/flottes-privees.md).

#### Spécifications des ressources

* **`ARBITRIUM_HOST_IN_PRIVATE_FLEET`** - p. ex. `false` , indiquant si hébergé sur [Flottes privées](/fr/learn/orchestration/flottes-privees.md).
* **`ARBITRIUM_HOST_BASE_CLOCK_FREQUENCY`**  - p. ex. `2300` , fréquence du processeur en MHz.
* **`ARBITRIUM_DEPLOYMENT_VCPU_UNITS`**  - p. ex. `256`, unités vCPU allouées (1024 = 1 vCPU).
* **`ARBITRIUM_DEPLOYMENT_MEMORY_MB`**  - p. ex. `512`, RAM allouée en MB (1024 = 1 GB).

#### **Gestion du cycle de vie**

* **`ARBITRIUM_DELETE_URL`**  - p. ex. `https://api.edgegap.com/v1/self/stop/9f511e17/660`.
  * Appelable depuis le déploiement, [le déploiement sera arrêté proprement](#id-5.-deployment-stopped).
  * Nécessite un jeton unique à usage unique `ARBITRIUM_DELETE_TOKEN` dans `Authorization` en-tête.
* **`ARBITRIUM_DELETE_TOKEN`**  - p. ex. `7df4cd933df87084b34ae80d8abde293`.
* **`ARBITRIUM_CONTEXT_URL`**  - p. ex. `https://api.edgegap.com/v1/context/9170f5211e17/17`.
  * Appelable uniquement depuis le déploiement, renvoie plus de détails sur le déploiement.
  * Nécessite un jeton unique `ARBITRIUM_CONTEXT_TOKEN` dans `Authorization` en-tête.
* **`ARBITRIUM_CONTEXT_TOKEN`**  - p. ex. `dfaf50b9333b9ee07b22ed247e4a17e6`.

#### **Découvrabilité**

* **`ARBITRIUM_PORT_GAMEPORT_INTERNAL`**  - p. ex. `7777` , port interne pour l'écoute du serveur.
* **`ARBITRIUM_PORT_GAMEPORT_EXTERNAL`**  - p. ex. `31504` , port externe pour les connexions client.
  * Les valeurs du port externe sont randomisées pour chaque déploiement à des fins de sécurité.
* **`ARBITRIUM_PORT_GAMEPORT_PROTOCOL`**  - p. ex. `UDP` , protocole de votre transport netcode.

{% hint style="success" %}
Les exemples supposent que vous avez nommé votre port `gameport` (par défaut). **Chaque port ajoute un ensemble supplémentaire de variables assainies** [Applications et versions](/fr/learn/orchestration/application-and-versions.md#port-mapping) **variables :** `@Super Port !` ⇒ `ARBITRIUM_PORT_SUPER_PORT_INTERNAL` .
{% endhint %}

* **`ARBITRIUM_BEACON_ENABLED`**  - p. ex. `true`, si le déploiement est hébergé sur [Flottes privées](/fr/learn/orchestration/flottes-privees.md) avec [Balises de ping](/fr/learn/orchestration/ping-beacons.md).
* **`ARBITRIUM_HOST_BEACON_PUBLIC_IP`**  - p. ex. `139.177.198.69` , IP publique du point de référence le plus proche.
* **`ARBITRIUM_HOST_BEACON_PORT_UDP_EXTERNAL`**  - p. ex. `30199`, pour la mesure du ping via UDP.
* **`ARBITRIUM_HOST_BEACON_PORT_TCP_EXTERNAL`**  - p. ex. `30456`, pour la mesure du ping via TCP.

#### **Informations structurées (JSON sous forme de chaîne)**

{% hint style="info" %}
Les variables d'environnement sont **stockées sous forme de JSON sérialisés en chaîne**, analysez-les à l'aide d'un SDK ou d'une méthode personnalisée.
{% endhint %}

<details>

<summary><strong><code>ARBITRIUM_DEPLOYMENT_LOCATION</code></strong></summary>

```json
ARBITRIUM_DEPLOYMENT_LOCATION="{
  "city": "Montréal",
  "country": "Canada",
  "continent": "Amérique du Nord",
  "administrative_division": "Québec",
  "timezone": "heure de l'Est",
  "latitude": 45.513707,
  "longitude": -73.619073
}"
```

</details>

<details>

<summary><strong><code>ARBITRIUM_PORTS_MAPPING</code></strong></summary>

```json
ARBITRIUM_PORTS_MAPPING="{
  "ports": {
    "gameport": {
      "name": "Port du jeu",
      "internal": 7777,
      "external": 31504,
      "protocol": "UDP"
    },
    "webport": {
      "name": "Port Web",
      "internal": 8888,
      "external": 31553,
      "protocol": "TCP"
    }
  }
}"
```

</details>

### Surveillance du tableau de bord

Notre [Tableau de bord](https://app.edgegap.com/) fournit des outils pour surveiller la montée en charge de votre serveur et faciliter les opérations.

#### Analyses

{% hint style="success" %}
Trouvez [les tableaux de bord d'analyses dans le menu latéral](https://app.edgegap.com/analytics/dashboards/list) dans la catégorie Hébergement et orchestration de serveurs.
{% endhint %}

:star2: [**Passez à l'offre Pay as You Go**](https://app.edgegap.com/user-settings?tab=memberships) **pour débloquer des métriques et des analyses détaillées des performances du serveur :**

* **Aperçus généraux :** surveillez les déploiements avec le nombre de serveurs en direct par version + aperçu de l'utilisation des ressources,
* **Aperçus CPU**: dépannez les serveurs ralentis en raison d'opérations gourmandes en processeur,
* **Aperçus mémoire**: réduisez les redémarrages du serveur dus au dépassement de la mémoire allouée,
* **Aperçus réseau :** détectez les schémas réseau inefficaces et optimisez le netcode.

<figure><img src="https://3008966946-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsR0dHSFv9ymoC0DO5G8J%2Fuploads%2FLxDp1yFvkj5kB6AC4xVb%2Fimage.png?alt=media&amp;token=c0eff5f1-a374-41e0-a49a-9b3ecf0bfd1b" alt=""><figcaption></figcaption></figure>

#### Carte de déploiement

{% hint style="success" %}
Trouvez la carte de déploiement dans [la page des détails de votre déploiement sur le tableau de bord](https://app.edgegap.com/deployment-management/deployments/list).
{% endhint %}

Prévisualisez l'emplacement du déploiement, les emplacements disponibles et les emplacements estimés des joueurs sur la carte :

<figure><img src="https://3008966946-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsR0dHSFv9ymoC0DO5G8J%2Fuploads%2FM4h0itPU5ntPaV5N5ZlW%2Fimage.png?alt=media&amp;token=98028901-9a40-4a2d-969e-db5f990e334f" alt=""><figcaption></figcaption></figure>

#### Points d'équilibre du déploiement

{% hint style="success" %}
Trouvez la carte thermique des points d'équilibre du déploiement dans [la page des détails de votre application sur le tableau de bord](https://app.edgegap.com/application-management/applications/list).
{% endhint %}

Prévisualisez la carte thermique des points d'équilibre du déploiement et filtrez par [Applications et versions](/fr/learn/orchestration/application-and-versions.md). Les points d'équilibre sont des emplacements approximatifs présentant une proximité réseau égale pour chaque joueur dans un déploiement donné :

<figure><img src="https://3008966946-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsR0dHSFv9ymoC0DO5G8J%2Fuploads%2FfDpIQxoFUJZNE77LJIwZ%2Fimage.png?alt=media&amp;token=94e730ad-3907-486b-8a06-0f469acd19ea" alt=""><figcaption></figcaption></figure>

{% hint style="warning" %}
Les points chauds des points d'équilibre dans des endroits inhabituels (p. ex. le Groenland) indiquent un matchmaking de joueurs éloignés les uns des autres. En savoir plus sur [#connection-quality](#connection-quality "mention") et [Balises de ping](/fr/learn/orchestration/ping-beacons.md) pour optimiser votre matchmaking.
{% endhint %}

#### Journaux de déploiement

{% hint style="success" %}
Trouvez les journaux de déploiement dans [la page des détails de votre déploiement sur le tableau de bord](https://app.edgegap.com/deployment-management/deployments/list).
{% endhint %}

Les journaux de déploiement affichent des informations sur [#deployment-lifecycle](#deployment-lifecycle "mention"):

<figure><img src="https://3008966946-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsR0dHSFv9ymoC0DO5G8J%2Fuploads%2FfkyAYtylnOFmSp3yyiId%2Fimage.png?alt=media&amp;token=6a4f6ac4-5780-46a7-bcdd-1d8829c4abd7" alt=""><figcaption></figcaption></figure>

#### Journaux du conteneur

{% hint style="success" %}
Trouvez les journaux du conteneur dans [la page des détails de votre déploiement sur le tableau de bord](https://app.edgegap.com/deployment-management/deployments/list).
{% endhint %}

Inspectez les journaux de votre serveur de jeu en cas de problème ou lors du débogage :

<figure><img src="https://3008966946-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsR0dHSFv9ymoC0DO5G8J%2Fuploads%2FTiaARmb6aAZfm0rjQmiT%2Fimage.png?alt=media&amp;token=7eb49138-954d-44a1-a025-1f88ed855366" alt=""><figcaption></figcaption></figure>

{% hint style="warning" %}
**Une fois le déploiement arrêté, les journaux du conteneur sont supprimés.** Configurez [le stockage de journaux S3 tiers](/fr/docs/endpoint-storage.md) pour enregistrer les journaux.
{% endhint %}

#### Métriques du conteneur

{% hint style="success" %}
Trouvez les métriques du conteneur dans [la page des détails de votre déploiement sur le tableau de bord](https://app.edgegap.com/deployment-management/deployments/list).
{% endhint %}

Examinez les métriques du conteneur (processeur, mémoire, réseau) pour :

* identifier les problèmes de connexion courants lorsque [#troubleshooting](#troubleshooting "mention"),
* détecter des schémas d'implémentation inefficaces provoquant des pics d'utilisation des ressources,
* repérer une utilisation inefficace des ressources dans des scénarios particuliers,
* vérifier les changements dans l'utilisation des ressources de votre serveur pendant l'optimisation,
* mesurer la consommation de ressources et la durée d'initialisation de votre serveur.

Les métriques d'historique affichent des moyennes sur des périodes d'une minute, disponibles dans l'offre Free.

:star2: [**Passez à l'offre Pay as You Go**](https://app.edgegap.com/user-settings?tab=memberships) **pour débloquer des métriques précises avec des intervalles d'une seconde.**

<figure><img src="https://3008966946-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsR0dHSFv9ymoC0DO5G8J%2Fuploads%2FoIpCR3x9ibiXMEIWFgKG%2Fimage.png?alt=media&amp;token=86dcd914-db9f-4e81-8444-6c83805be9b6" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
[Contactez-nous](mailto:info@edgegap.com) avant votre publication afin de demander une assistance à l'hébergement en direct pour les lancements à grande échelle.
{% endhint %}

### Contexte et statut

Des informations supplémentaires sur le déploiement peuvent être récupérées au format JSON :

* depuis l'intérieur du déploiement (serveur de jeu), en utilisant [API de contexte du déploiement](https://docs.edgegap.com/api/#tag/Context/operation/context-get),
* depuis l'extérieur du déploiement (backend / tiers), en utilisant [API de statut du déploiement](https://docs.edgegap.com/api/#tag/Deployments/operation/deployment-status-get).

{% hint style="info" %}
L'API Context (depuis le déploiement) nécessite un jeton d'API Context, tandis que l'API Status utilise votre jeton Edgegap.
{% endhint %}

{% hint style="danger" %}
**Trop de requêtes 429 - les API Context et Status sont limitées à 20 req/s par organisation.** Ces API sont destinées à être utilisées lors d'opérations spéciales, et non pour l'orchestration automatisée de sessions.
{% endhint %}

{% hint style="success" %}
**Utilisez** [#webhooks](#webhooks "mention") **pour une orchestration personnalisée des sessions afin d'éviter la limitation de débit et d'assurer l'évolutivité.**
{% endhint %}

### Filtrer les déploiements

Pour rechercher rapidement parmi tous les déploiements, vous pouvez [utiliser notre tableau de bord](https://app.edgegap.com/deployment-management/deployments/list):

<figure><img src="https://3008966946-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsR0dHSFv9ymoC0DO5G8J%2Fuploads%2F42IaKG0pFQXSkvPCRH1T%2Fimage.png?alt=media&amp;token=6aba8781-13c9-4c0f-87e9-2d9612a57342" alt=""><figcaption></figcaption></figure>

{% hint style="success" %}
Alternativement, laissez les joueurs **choisir un serveur persistant (toujours en ligne)** d'une liste avec [Navigateur de serveurs](/fr/learn/navigateur-de-serveurs.md).
{% endhint %}

[Lister les déploiements avec l'API](https://docs.edgegap.com/api/#tag/Deployments/operation/deployments-get) et appliquer des filtres avec les intégrations backend :

<table><thead><tr><th width="237">Attribut de déploiement</th><th width="193">Opérateurs</th><th>Valeur d'exemple</th></tr></thead><tbody><tr><td><a href="/fr/learn/orchestration/deployments.md#deployment-lifecycle"><code>status</code></a></td><td><a data-footnote-ref href="#user-content-fn-2"><code>eq</code></a>  ou <a data-footnote-ref href="#user-content-fn-3"><code>neq</code></a></td><td><code>"ready"</code> ou <code>"error"</code></td></tr><tr><td><a href="#observability"><code>request_id</code></a></td><td><a data-footnote-ref href="#user-content-fn-2"><code>eq</code></a> </td><td><a data-footnote-ref href="#user-content-fn-4"><code>"7e709a0d8efd"</code></a></td></tr><tr><td></td><td><a data-footnote-ref href="#user-content-fn-5"><code>dans</code></a>  ou <a data-footnote-ref href="#user-content-fn-6"><code>nin</code></a></td><td><a data-footnote-ref href="#user-content-fn-4"><code>[ "7e709a0d8efd", "4ba353100b4b" ]</code></a></td></tr><tr><td><a href="#discoverability"><code>tags</code></a></td><td><a data-footnote-ref href="#user-content-fn-2"><code>eq</code></a>  ou <a data-footnote-ref href="#user-content-fn-3"><code>neq</code></a></td><td><code>"tagA"</code></td></tr><tr><td></td><td><a data-footnote-ref href="#user-content-fn-5"><code>dans</code></a>  ou <a data-footnote-ref href="#user-content-fn-6"><code>nin</code></a></td><td><code>[ "tagA", "tagB" ]</code></td></tr><tr><td><a href="#id-1.-start-a-deployment"><code>created_at</code></a></td><td><a data-footnote-ref href="#user-content-fn-2"><code>eq</code></a>  ou <a data-footnote-ref href="#user-content-fn-7"><code>lte</code></a>  ou <a data-footnote-ref href="#user-content-fn-8"><code>gte</code></a></td><td><a href="https://en.wikipedia.org/wiki/ISO_8601"><code>2025-05-12T20:03:20Z</code></a></td></tr><tr><td><a href="/fr/learn/orchestration/application-and-versions.md"><code>application</code></a></td><td><a data-footnote-ref href="#user-content-fn-2"><code>eq</code></a>  ou <a data-footnote-ref href="#user-content-fn-3"><code>neq</code></a></td><td><code>"my-app"</code></td></tr><tr><td></td><td><a data-footnote-ref href="#user-content-fn-5"><code>dans</code></a>  ou <a data-footnote-ref href="#user-content-fn-6"><code>nin</code></a></td><td><code>[ "my-app", "my-other-app" ]</code></td></tr><tr><td><a href="/fr/learn/orchestration/application-and-versions.md"><code>version</code></a></td><td><a data-footnote-ref href="#user-content-fn-2"><code>eq</code></a>  ou <a data-footnote-ref href="#user-content-fn-3"><code>neq</code></a></td><td><code>"1.0.0"</code></td></tr><tr><td></td><td><a data-footnote-ref href="#user-content-fn-9"><code>dans</code></a>  ou <a data-footnote-ref href="#user-content-fn-6"><code>nin</code></a></td><td><code>[ "1.0.0", "prod" ]</code></td></tr><tr><td><a href="/fr/learn/orchestration/flottes-privees.md"><code>fleet_name</code></a></td><td><a data-footnote-ref href="#user-content-fn-2"><code>eq</code></a>  ou <a data-footnote-ref href="#user-content-fn-3"><code>neq</code></a></td><td><code>"my-app-fleet-europe"</code></td></tr><tr><td></td><td><a data-footnote-ref href="#user-content-fn-5"><code>dans</code></a>  ou <a data-footnote-ref href="#user-content-fn-6"><code>nin</code></a></td><td><code>[ "fleet-eu", "fleet-us" ]</code></td></tr><tr><td></td><td><a data-footnote-ref href="#user-content-fn-10"><code>ilike</code></a></td><td><code>"%-eu%"</code></td></tr><tr><td><a href="/fr/learn/orchestration/flottes-privees.md"><code>host_name</code></a></td><td><a data-footnote-ref href="#user-content-fn-2"><code>eq</code></a>  ou <a data-footnote-ref href="#user-content-fn-3"><code>neq</code></a></td><td><code>"alpha-north-america-95fab093"</code></td></tr><tr><td></td><td><a data-footnote-ref href="#user-content-fn-5"><code>dans</code></a>  ou <a data-footnote-ref href="#user-content-fn-6"><code>nin</code></a></td><td><code>[ "alpha-north-america-95fab093" ]</code></td></tr><tr><td></td><td><a data-footnote-ref href="#user-content-fn-10"><code>ilike</code></a></td><td><code>"%north-america%"</code></td></tr></tbody></table>

{% hint style="info" %}
Chaque attribut peut avoir au plus 1 opérateur de filtre dans une seule requête. Voir [Référence de l'API](/fr/docs/api.md) pour en savoir plus.
{% endhint %}

Triez les résultats par plusieurs champs dans l'ordre dans lequel ils apparaissent dans la requête :

| Attribut de déploiement                                                                | Ordre                                                                   |
| -------------------------------------------------------------------------------------- | ----------------------------------------------------------------------- |
| [`created_at`](#id-1.-start-a-deployment)                                              | [`asc`](#user-content-fn-11)[^11] ou [`desc`](#user-content-fn-12)[^12] |
| [`available_session_sockets`](broken://pages/dd71be7f2a95f8fbefe2dda78022306ba0259251) | [`asc`](#user-content-fn-13)[^13] ou [`desc`](#user-content-fn-14)[^14] |

Exemples de requêtes de filtre :

<details>

<summary>Lister <a href="#id-4.-deployment-error">Déploiements en erreur</a> pour les dépanner et les supprimer.</summary>

URL encodée :

```
https://api.edgegap.com/v1/deployments?query={"filters":[{"field":"status","operator":"eq","value":"error"},{"field":"application","operator":"eq","value":"my-app"},{"field":"version","operator":"eq","value":"green"}],"order_by":[{"field":"created_at","order":"desc"}]}
```

Requête JSON formatée :

```json
{
  "filters": [
    {
      "field": "status",
      "operator": "eq",
      "value": "error"
    },
    {
      "field": "application",
      "operator": "eq",
      "value": "my-app"
    },
    {
      "field": "version",
      "operator": "eq",
      "value": "green"
    }
  ],
  "order_by": [
    {
      "field": "created_at",
      "order": "desc"
    }
  ]
}
```

</details>

<details>

<summary>Lister <a href="/fr/learn/appariement/matchmaker-in-depth.md#rolling-updates-and-ab-tests">Déploiements avec une version d'application obsolète</a> pour confirmer qu'une publication est terminée.</summary>

URL encodée :

```
https://api.edgegap.com/v1/deployments?query={"filters":[{"field":"status","operator":"eq","value":"ready"},{"field":"application","operator":"eq","value":"my-app"},{"field":"version","operator":"eq","value":"blue"}],"order_by":[{"field":"created_at","order":"desc"}]}
```

Requête JSON formatée :

```json
{
  "filters": [
    {
      "field": "status",
      "operator": "eq",
      "value": "ready"
    },
    {
      "field": "application",
      "operator": "eq",
      "value": "my-app"
    },
    {
      "field": "version",
      "operator": "eq",
      "value": "blue"
    }
  ],
  "order_by": [
    {
      "field": "created_at",
      "order": "desc"
    }
  ]
}
```

</details>

{% hint style="success" %}
N'oubliez pas d'ajouter l' `Authorization` en-tête avec votre jeton d'API Edgegap dans la requête.
{% endhint %}

### Webhooks

Recevez de simples notifications HTTP dans le backend de votre jeu pour les changements de [#deployment-lifecycle](#deployment-lifecycle "mention") en spécifiant une URL de webhook dans votre [requête API de déploiement](/fr/docs/api/serveurs-dedies.md#post-deployments). Disponible pour :

* À l'état Prêt : le conteneur du déploiement [a démarré avec succès](#id-1.-start-a-deployment) (le serveur commence à s'initialiser ensuite).
* En cas d'erreur : le déploiement n'a pas pu démarrer et une [#id-4.-deployment-error](#id-4.-deployment-error "mention") s'est produite.
* À la terminaison : [#id-5.-deployment-stopped](#id-5.-deployment-stopped "mention") et le serveur de jeu n'est plus joignable.

Les webhooks Ready et Error ne seront jamais déclenchés pour un même déploiement.

<details>

<summary>Exemple de payload de webhook</summary>

```json
{
  "request_id": "f68e011bfb01",
  "application": "my-game-server",
  "version": "2024.01.30-16.23.00-UTC",
  "fqdn": "f68e011bfb01.pr.edgegap.net",
  "public_ip": "162.254.141.66",
  "deployed_at": "2026-02-10T20:35:48Z",
  "termination_scheduled_at": "2026-02-10T21:35:48Z",
  "ports": {
    "gameport": {
      "external": 31504,
      "internal": 7777,
      "protocol": "UDP",
      "name": "gameport",
      "tls_upgrade": false,
      "link": "f68e011bfb01.pr.edgegap.net:31504",
      "proxy": null
    }
  },
  "location": {
    "city": "Montréal",
    "country": "Canada",
    "continent": "Amérique du Nord",
    "administrative_division": "Québec",
    "timezone": "heure de l'Est",
    "latitude": 45.513707,
    "longitude": -73.619073
  },
  "tags": [
    "tag1",
    "tag2"
  ],
  "host_id": "alpha-north-america-70364ef8",
  "host_in_private_fleet": false,
  "private_fleet_id": "PUBLIC_CLOUD",
  "vcpu_units": 256,
  "memory_mib": 512
}
```

</details>

{% hint style="success" %}
**Les webhooks sont la méthode principale recommandée pour les intégrations personnalisées du déploiement côté backend.**
{% endhint %}

{% hint style="warning" %}
**Les webhooks ne sont pas retentés**, et peuvent être perdus si votre backend ne traite pas la requête en raison d'une limitation de débit ou d'une erreur. Revenez à l'API Status au cas où vous ne recevriez pas de webhook dans le délai attendu.
{% endhint %}

{% hint style="info" %}
Les webhooks suivent le cycle de vie du déploiement, mais ne connaissent pas l’état d’initialisation de votre scène/niveau. Pour suivre la progression du chargement de votre scène/niveau, implémentez un webhook personnalisé dans votre serveur de jeu.
{% endhint %}

## 🚨 Dépannage

Lors du dépannage des déploiements :

1. vérifiez qu’il n’y a aucune erreur dans votre [#deployment-logs](#deployment-logs "mention") et [#container-logs](#container-logs "mention"),
2. exécutez votre serveur localement pour écarter les bogues d’intégration,
3. consultez les étapes de dépannage sur cette page,
4. contactez-nous sur [le Discord communautaire](https://discord.gg/MmJf8fWjnt) et incluez votre ID de déploiement.

{% hint style="info" %}
Voir [#player-issue-resolution](#player-issue-resolution "mention") pour nos recommandations sur la manière de gérer les retours de la communauté de joueurs.
{% endhint %}

<details>

<summary>Impossible de connecter les clients au serveur - <code>La requête a expiré.</code>, <code>La requête a expiré</code> , <code>Échec de connexion</code> , ou <code>Échec de la vérification du port</code>.</summary>

* Tout d’abord, assurez-vous que le déploiement est prêt, et qu'il n'y a aucune exception d’exécution ni erreur dans le journal de votre déploiement. Si votre déploiement s’est arrêté, inspectez les journaux dans notre [Tableau de bord](https://app.edgegap.com/deployment-management/deployments/list).
* Si vous utilisez le netcode Mirror, vous devez avoir [« Démarrer automatiquement le serveur »](https://mirror-networking.gitbook.io/docs/hosting/edgegap-hosting-plugin-guide#build-and-push) sélectionné dans votre `NetworkManager` , reconstruisez, poussez et redéployez votre serveur.
* Si vous utilisez le netcode FishNet, vous devez activer [« Démarrer en mode sans tête »](https://fish-networking.gitbook.io/docs/manual/components/managers/server-manager#settings-are-general-settings-related-to-the-servermanager) dans votre `ServerManager`, reconstruisez, poussez et redéployez votre serveur.
* Si vous utilisez le netcode Photon Fusion 2, veuillez vous assurer que votre serveur transmet l'adresse IP publique du déploiement, le port externe et le `roomCode` sur le serveur, et le même code de salle dans le client dans le [« NeworkRunner.StartGame »](https://doc.photonengine.com/fusion/current/manual/network-runner#creating-or-joining-a-room) paramètre `StartGameArgs`. L'ID de déploiement (p. ex. `b63e6003b19f`) est un excellent choix, car il est unique à l’échelle mondiale et facilement accessible au client par [Matchmaker](/fr/learn/appariement/matchmaker-in-depth.md) affectation et à la [Analyse approfondie](/fr/learn/appariement/matchmaker-in-depth.md#injected-environment-variables).
* Ensuite, veuillez vérifier que le réglage de port dans les paramètres netcode de la build de votre serveur correspond au port interne dans votre [version de l’application](https://app.edgegap.com/application-management/applications/list). Vous pouvez modifier le mappage des ports en éditant le [version de l’application](https://app.edgegap.com/application-management/applications/list) sans reconstruire. Trouvez votre protocole dans votre intégration netcode.
* Veuillez vous assurer que votre client de jeu se connecte au **port externe** affiché sur la page des détails de votre déploiement ; cette valeur sera toujours aléatoire pour des raisons de sécurité.
* Si vous utilisez le protocole Secure Websocket (WSS) dans votre intégration netcode, veuillez vous assurer que votre [version de l’application](https://app.edgegap.com/application-management/applications/list) la configuration du port pour le WSS a la mise à niveau TLS activée.
* Êtes-vous situé en Chine et utilisez-vous [Smart Fleets](https://docs.edgegap.com/docs/deployment/session/fleet-manager/fleet)? Votre connexion peut être bloquée par le Grand Pare-feu. Envisagez d'ajouter à votre flotte un serveur situé en Chine, ou d'utiliser un VPN pour vous connecter.

</details>

<details>

<summary>Mon déploiement s’est arrêté/redémarré et je ne peux plus accéder à ses journaux.</summary>

* Si le processus du serveur plante en raison d'une exception, notre système tentera de redémarrer automatiquement le serveur. Envisagez de tester votre serveur localement pour découvrir la cause racine.
* Nous conservons les journaux uniquement pendant la durée du déploiement ; si vous souhaitez inspecter les journaux après l’arrêt du déploiement, veuillez [intégrer un stockage de journaux tiers](https://docs.edgegap.com/docs/deployment/endpoint-storage).
* Voir [#id-5.-deployment-stopped](#id-5.-deployment-stopped "mention") pour découvrir toutes les causes de l’arrêt de votre déploiement.

</details>

<details>

<summary>Mon déploiement s’est arrêté automatiquement après X minutes.</summary>

* Les déploiements du niveau gratuit ont une limite de 60 minutes ; veuillez envisager de mettre à niveau votre compte.
* Les déploiements cloud seront interrompus après 24 heures d'exécution conformément à notre politique de nettoyage des serveurs, pour la maintenance de l'infrastructure et pour éviter d'engendrer des coûts inattendus lorsque le déploiement n'a pas été arrêté correctement. Pour les serveurs de longue durée de plus de 24 heures, envisagez d'utiliser [Flottes privées](/fr/learn/orchestration/flottes-privees.md) avec [Persistance](/fr/learn/orchestration/persistance.md).
* Voir [#id-5.-deployment-stopped](#id-5.-deployment-stopped "mention") pour découvrir toutes les causes de l’arrêt de votre déploiement.

</details>

<details>

<summary>Mon déploiement est prêt mais je ne parviens pas à m'y connecter pendant plusieurs minutes ensuite.</summary>

* Une fois qu’un déploiement est prêt, l’initialisation de votre moteur de jeu commence. Ce processus peut prendre de quelques secondes à plusieurs minutes, et le serveur n’accepte pas les connexions des joueurs pendant cette période.
* Envisagez d’optimiser l’initialisation de votre serveur pour réduire cette durée.
* Les clients de jeu doivent retenter la connexion à intervalles de 1 seconde pendant une durée limitée (selon la durée de votre initialisation), après quoi ils reviennent au matchmaking.
* Envisagez d’ajouter une scène de chargement afin que le serveur puisse effectuer l’initialisation (et le déplacement dans le cas d’Unreal Engine) en même temps que les clients, tout en synchronisant l’état des deux.

</details>

<details>

<summary>Mon appareil Meta Quest renvoie <code>HTTP 0 : impossible de résoudre l’hôte de destination</code> .</summary>

* Lors de la compilation d’applications Unity pour la cible Android, votre autorisation d’accès à Internet peut être automatiquement supprimée de l’artefact APK client généré.
* Réajoutez les autorisations dans (nécessite de reconstruire le client ensuite) :
  * Paramètres du projet / OpenXR / :gear: Support Meta Quest / Suppression forcée des autorisations Internet (désélectionner).
  * Paramètres du joueur / Accès à Internet (définir sur requis).

</details>

<details>

<summary>Que se passera-t-il si un joueur quitte mon déploiement ?</summary>

* Par défaut, les serveurs ne rejettent pas les connexions des joueurs. L’authentification des joueurs dépend de vos développeurs, car de nombreuses méthodes et divers fournisseurs d’authentification des joueurs peuvent être utilisés.
* Les clients de jeu peuvent stocker localement les informations de connexion afin de tenter une reconnexion en cas de plantage inattendu du client.
* Pour permettre aux joueurs de rejoindre des parties en cours, envisagez d’utiliser [Analyse approfondie](/fr/learn/appariement/matchmaker-in-depth.md#backfill) ou [Sessions](https://docs.edgegap.com/docs/deployment/session).

</details>

<details>

<summary>Mon serveur affiche une utilisation du CPU à 100 % après être devenu prêt.</summary>

* Cela peut ne pas être un problème, car les moteurs de jeu ont tendance à effectuer des opérations gourmandes en CPU lors de l’initialisation du serveur. Si l’utilisation du CPU ne baisse pas 2 à 3 minutes après le démarrage du déploiement, vous devrez peut-être optimiser votre serveur ou augmenter les ressources de la version de l’application.
* Réduire la fréquence des ticks peut avoir un impact sur l’utilisation du CPU, car le serveur effectue moins d’opérations de messagerie.
* Si vous utilisez le netcode Mirror, vous devez avoir [« Démarrer automatiquement le serveur »](https://mirror-networking.gitbook.io/docs/hosting/edgegap-hosting-plugin-guide#build-and-push) sélectionné dans votre `NetworkManager` , reconstruisez, poussez et redéployez votre serveur.
* Si vous utilisez le netcode FishNet, vous devez activer [« Démarrer en mode sans tête »](https://fish-networking.gitbook.io/docs/manual/components/managers/server-manager#settings-are-general-settings-related-to-the-servermanager) dans votre `ServerManager`, reconstruisez, poussez et redéployez votre serveur.
* Vous êtes limité à 1,5 vCPU et 3 Go de mémoire (RAM) dans le niveau gratuit.
* Vous pouvez augmenter les ressources allouées lors de la création d’une nouvelle version de l’application. Vous pouvez dupliquer votre version d’application dans notre tableau de bord et ajuster ces valeurs selon vos besoins, sans reconstruire votre serveur ou votre image.

</details>

<details>

<summary>Mon déploiement redémarre en boucle et affiche l’erreur `OOM kill` .</summary>

* Ce comportement est causé par le dépassement de la quantité de mémoire allouée. Envisagez d’optimiser l’utilisation de la mémoire avec le pooling d’objets, la compression, ou en supprimant les objets inutiles dans votre scène.
* Assurez-vous que votre projet charge la scène par défaut contenant votre `NetworkManager` et que la scène est incluse dans les paramètres de build de Unity.
* Vous êtes limité à 1,5 vCPU et 3 Go de mémoire (RAM) dans le niveau gratuit.
* Vous pouvez augmenter les ressources allouées lors de la création d’une nouvelle version de l’application. Vous pouvez dupliquer votre version d’application dans notre tableau de bord et ajuster ces valeurs selon vos besoins, sans reconstruire votre serveur ou votre image.

</details>

<details>

<summary>Parfois, l'utilisation de la mémoire (RAM) de mon serveur atteint un pic très élevé, est-ce un problème ?</summary>

* Tant que vous restez dans la quantité de mémoire allouée à la version de l’application, ce n’est pas un problème.&#x20;
* Le dépassement de la quantité de mémoire allouée à la version de l’application entraînera \`OOM kill\` (voir ci-dessus).

</details>

<details>

<summary>Les performances de mon serveur seront-elles affectées par d’autres serveurs fonctionnant sur la même machine ?</summary>

* Non, notre plateforme garantit que les ressources allouées ne seront pas utilisées par d’autres studios ni par d’autres serveurs sur l’infrastructure partagée. Avec Edgegap, il n’y a pas de voisins bruyants.

</details>

[^1]: les sessions peuvent durer jusqu’à 24 heures

[^2]: égal à

[^3]: différent de

[^4]: request\_id (identifiant de déploiement)

[^5]: dans le tableau

[^6]: pas dans le tableau

[^7]: inférieur ou égal

[^8]: supérieur ou égal

[^9]: &#x20;dans le tableau

[^10]: correspondance de motif insensible à la casse :

    * utilisez `%`  pour n'importe quelle séquence
    * utilisez `_`  pour n'importe quel caractère

[^11]: croissant, plus ancien d'abord

[^12]: décroissant, plus récent d'abord

[^13]: croissant, pleins d'abord

[^14]: décroissant, vides d'abord
