> 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/docs.edgegap.com-fr/learn/orchestration/application-and-versions.md).

# Applications et versions

Découvrez la gestion des versions et les applications - concepts et bonnes pratiques pour mieux comprendre.

## 📦 Applications

Les applications encapsulent les projets serveur. Cette séparation de contexte est particulièrement utile si vous :

* travaillez sur plusieurs jeux ou projets non liés au jeu (facturation consolidée),
* travaillez sur des projets externes en tant que co-développeur (transférez la propriété plus tard),
* dépendez de plusieurs types de serveurs faiblement couplés avec des schémas de montée en charge ou des exigences différentes.

Vous pouvez gérer vos applications sur Edgegap à l'aide de nos plugins, [tableau de bord](https://app.edgegap.com/application-management/applications/list), ou via notre API.

{% hint style="success" %}
Découvrez notre [référence de l'API des applications](https://docs.edgegap.com/api/#tag/Applications), ou en savoir plus sur notre [API de gestion](https://docs.edgegap.com/api/).
{% endhint %}

## 🏷️ Versions d'application

À mesure que vous développez votre application et produisez continuellement de nouveaux builds, vous devrez stocker chaque build comme une version distincte afin de :

* **maintenir la compatibilité** entre vos clients et le serveur,
* comparer divers aspects de vos **versions incrémentales** (performances, ressenti des utilisateurs),
* tester **plusieurs versions d'application simultanément** (développement, assurance qualité, préproduction, bêta).

{% hint style="info" %}
Chaque version d'application pointe vers un artefact de build de votre choix. Plusieurs versions peuvent pointer vers le même build.
{% endhint %}

Vous pouvez gérer vos versions d'application sur Edgegap à l'aide de notre [tableau de bord](https://app.edgegap.com/application-management/applications/list), ou via notre API.

{% hint style="success" %}
Découvrez notre [référence de l'API des versions d'application](https://docs.edgegap.com/api/#tag/Applications/operation/app-version-post), ou en savoir plus sur [l'API](https://docs.edgegap.com/api/).
{% endhint %}

Chaque version est identifiée de manière unique au sein de son application parente par **nom de la version d'application**. Vous êtes libre de définir votre propre convention de nommage. Voici quelques exemples populaires pour vous inspirer :

* `2024.01.30-16.23.00-UTC` - les horodatages sont explicites pour conserver de nombreuses versions passées,
* `1.1.0` - [le versionnement sémantique](https://semver.org/) est un excellent choix pour communiquer l'ampleur des changements,
* `dev` , `staging`, `qa`, `prod` - ne conserver que la dernière version par environnement est très simple,
* `bleu`, `vert` - les versions peuvent être utilisées comme alias pour une stratégie de déploiement progressif (rolling update).

{% hint style="success" %}
Vous pouvez changer d'approche à tout moment, tant que vous maintenez la compatibilité client/serveur.
{% endhint %}

{% hint style="info" %}
Vous pouvez désactiver toute application ou version dans notre [tableau de bord](https://app.edgegap.com/application-management/applications/list) pour **vous prémunir contre les erreurs humaines (dev)**.
{% endhint %}

{% hint style="info" %}
L'offre gratuite est limitée à 2 applications, 2 versions et 5 Go de stockage du Container Registry.
{% endhint %}

### Combinez les stratégies de versioning

Souvent, la meilleure solution est un mélange de stratégies de versioning, par exemple :

* utiliser des horodatages ou le versionnement sémantique pour les builds de développement, afin d'obtenir un suivi plus granulaire ;
* conserver `staging`, `qa` et `prod` des versions avec des paramètres spécifiques à l'environnement ;
* alterner `bleu` et `vert` des versions comme alias pour [des mises à jour sans temps d'arrêt du matchmaking](https://docs.edgegap.com/docs/gen2-matchmaker#rolling-updates-ab-tests).

## 🧱 Paramètres requis

Ces paramètres fondamentaux doivent toujours être définis.

### Exigences en ressources

En plus du **nom de la version**, plusieurs paramètres sont nécessaires pour créer une nouvelle version :

* **vCPU** - combien d'unités CPU virtuelles votre application nécessite pour s'exécuter (1024 unités = 1 vCPU),
  * **la quantité minimale de vCPU autorisée est de 0,25 vCPU (256 unités),**
  * ce paramètre ne peut pas être modifié sur une version d'application existante, vous devez créer une nouvelle version.
* **Mémoire** - combien de mégaoctets de RAM votre application nécessite pour s'exécuter (1024 Mo = 1 Go),
  * ce paramètre ne peut pas être modifié sur une version d'application existante, vous devez créer une nouvelle version.
* **GPU** - combien d'unités de traitement graphique votre application nécessite pour s'exécuter,
  * cette fonctionnalité n'est pas encore disponible, veuillez nous contacter si vous êtes intéressé.

{% hint style="success" %}
Les versions incluent automatiquement la RAM dans un ratio RAM-vCPU de 2:1, **permettant jusqu'à 512 Mo de RAM par 0,25 vCPU**.
{% endhint %}

{% hint style="info" %}
Nos machines serveur utilisent des processeurs AMD/Intel avec une fréquence d'horloge de 2,4 à 3,2 GHz, selon la localisation. Pour vous assurer que votre serveur dispose de ressources suffisantes, contactez-nous sur [Discord communautaire](https://discord.gg/MmJf8fWjnt).
{% endhint %}

### Détails de l'image

Ces paramètres aideront notre système à déterminer quel build de votre serveur devra être lancé ultérieurement :

* **Registre** - `registry.edgegap.com` si vous utilisez notre [Container Registry](https://docs.edgegap.com/docs/container/edgegap-container-registry),
  * pour utiliser un registre tiers, saisissez les identifiants Docker de votre registre tiers,
  * le registre sert de service de stockage partagé pour vos dépôts et ceux des autres utilisateurs.
* **Dépôt d'images** - désigne le dépôt dédié à votre application,
  * retrouvez tous vos dépôts sur notre [page Container Registry du tableau de bord](https://app.edgegap.com/registry-management/repositories/list),
  * chaque dépôt peut inclure plusieurs tags de votre image serveur.
* **Tag** - désigne un artefact de build spécifique (version) de votre image serveur,
  * nos plugins copient par défaut les valeurs des tags à partir des noms des versions d'application,
  * vous pouvez consulter les tags stockés localement dans Images de Docker Desktop ou à l'aide de l'interface CLI Docker.

{% hint style="danger" %}
:x: **NE PAS - écraser les tags existants ni utiliser `latest` le tag** afin d'éviter de déployer des builds obsolètes (mis en cache).\
:white\_check\_mark: **À FAIRE - incrémentez toujours le tag de votre version** pour déployer le build prévu et éviter les problèmes de mise en production.
{% endhint %}

* **Registre privé** - si l'accès à votre dépôt est protégé (dépôt privé), nous aurons également besoin :
  * **Jeton de nom d'utilisateur** - du nom d'utilisateur d'accès programmatique de votre registre,
  * **Jeton de mot de passe** - du mot de passe d'accès programmatique de votre registre,
  * pour Edgegap [Container Registry](https://docs.edgegap.com/docs/container/edgegap-container-registry), vous pouvez [copier ces valeurs depuis notre tableau de bord](https://app.edgegap.com/registry-management/repositories/list),
  * elles ne sont pas requises pour les dépôts publics.

<details>

<summary>Dépannage et FAQ</summary>

J'ai reçu l'erreur `401 Unauthorized` lors du push de mon image serveur.

* Cela signifie que vous n'êtes pas connecté à votre registre de conteneurs. Consultez Container Registry pour [les instructions du Container Registry Edgegap](https://docs.edgegap.com/docs/container/edgegap-container-registry#getting-your-credentials), ou l'équivalent chez votre fournisseur de registre. Répéter votre dernière opération ne résoudra pas l'erreur.

***

J'ai reçu l'erreur `403 Forbidden` lors du push de mon image serveur.

* Cela signifie soit que l'utilisateur actuellement connecté à votre registre ne dispose pas des autorisations suffisantes (généralement pour pousser une nouvelle image), soit que vous êtes connecté au mauvais fournisseur de registre. Essayez de vous déconnecter puis de vous reconnecter avec le bon fournisseur et un utilisateur disposant des autorisations suffisantes. Répéter votre dernière opération ne résoudra pas l'erreur.

***

Quelle est la différence entre un registre, un dépôt et un projet ?

* Considérez le registre comme un entrepôt, le dépôt comme une unité de stockage et le projet comme un numéro d'unité de stockage. Chaque registre comprend généralement de nombreux dépôts, certains publics, d'autres privés pour les organisations et les utilisateurs.
* Exemple de registre : `registry.edgegap.com` .
* Exemple de dépôt : `registry.edgegap.com/my-edgegap-org/my-game-server`.
* Exemple de nom de projet : `my-game-server` .

***

Lorsque je pousse de nouveaux tags / builds d'image, mes modifications ne se rechargent pas correctement.

* Assurez-vous qu'à chaque reconstruction, vous poussez avec un nouveau tag d'image. Le système de mise en cache interne d'Edgegap utilise les noms des tags et si vous écrasez une valeur de tag (par ex. `latest`) il ne prendra pas en compte le nouveau build.

***

Puis-je taguer plusieurs fois le même artefact de build ?

* Oui, vous pouvez taguer le même artefact plusieurs fois sans problème, ce qui sert de multiples alias au même build. Continuez à lire pour apprendre comment supprimer les tags plus tard.

***

Que se passe-t-il lorsque je supprime un tag ? Pourquoi ne puis-je pas supprimer un artefact spécifique à l'aide d'un hash ?

* La suppression d'un tag entraînera également la suppression de l'artefact de build associé, s'il n'y a pas d'autres tags associés à l'artefact au moment de [la requête API](https://docs.edgegap.com/api/#tag/Container-Registry/operation/image-tag-delete).
* En raison des normes de l'API Docker et afin de garantir la meilleure expérience utilisateur possible, nous ne fournissons qu'une interface permettant de supprimer des tags. Voir le point ci-dessus concernant la suppression des artefacts de build.

</details>

## ⚙️ Paramètres facultatifs

Ces paramètres peuvent être configurés pour personnaliser davantage vos déploiements.

### Variables injectées

Des variables d'environnement personnalisées seront injectées pour tous les déploiements de cette version :

* les exemples courants incluent : les arguments du moteur, les secrets et points de terminaison tiers,
* voir [Déploiements](/docs.edgegap.com-fr/learn/orchestration/deployments.md#injected-environment-variables) pour comprendre les différentes façons dont les variables d'environnement peuvent être injectées selon le contexte du déploiement, en plus des variables de version d'application,
* chaque variable d'environnement peut contenir jusqu'à 4 Ko (kilooctets) de données textuelles.

{% hint style="warning" %}
Veillez à **définir vos variables sensibles (secrets, jetons) comme masquées** pour une sécurité renforcée !
{% endhint %}

### Mise en cache active

:star2: [**Passez au niveau Pay as You Go**](https://app.edgegap.com/user-settings?tab=memberships) **pour débloquer un temps de déploiement de 0,5 seconde dans le monde entier !**

**Accélérez les déploiements et lancez des serveurs en quelques secondes, sans serveur de secours requis.** L'image serveur associée à cette version d'application sera préchargée automatiquement dans tous nos emplacements mondiaux.

La mise en cache prendra tout son effet une fois que le niveau de cache de votre version d'application atteindra 🟢 Bon.

{% hint style="success" %}
Plusieurs versions d'application peuvent réutiliser le même tag d'image. **L'activation du cache pour une version l'activera automatiquement pour toutes les versions liées au même tag d'image**, ce qui facilite les déploiements paramétrés.
{% endhint %}

{% hint style="info" %}
L'image est également mise en cache passivement au déploiement, uniquement sur la machine hôte où elle a été déployée.
{% endhint %}

{% hint style="warning" %}
**Les images sont retirées du cache si elles ne sont pas déployées pendant 72 heures consécutives.**
{% endhint %}

### Mappage des ports

Chaque serveur nécessite au moins un port afin d'accepter les connexions entrantes des clients :

* **Port** valeur désigne le **port interne** valeur, généralement issue de votre intégration netcode,
* **Protocole** dépendra du transport de votre intégration netcode,
* **Nom** est un identifiant lisible par l'humain pour vos besoins, peut être identique au Port,
* **Vérifications** peuvent être activées pour garantir que votre conteneur est initialisé avant d'être marqué READY.

{% hint style="success" %}
La plupart des jeux n'auront besoin que d'ajouter un seul mappage de port UDP pour le port `7777`.
{% endhint %}

Alors que les ports internes du processus serveur sont définis dans la version d'application, **les ports externes sont attribués aléatoirement une fois qu'un déploiement est créé**, afin qu'un éventuel acteur malveillant (pirate) soit ralenti et détecté avant de pouvoir causer des dommages.

<figure><img src="/files/1b2bc4dd356307ed46d54df7a30c531fa37b4a34" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
Ajoutez davantage de ports dans votre mappage de ports si votre serveur communique via plusieurs protocoles.
{% endhint %}

### Garde-fous de sécurité

Ces paramètres aident à gérer divers cas limites et le dépannage général du serveur :

* **Contraintes de temps** - ces fonctionnalités peuvent vous aider à gérer le cycle de vie des ressources des déploiements :
  * **Durée maximale de la partie** peut être défini pour arrêter vos serveurs proprement après une période donnée, ou être défini sur `-1`  avec [création/modification de l'API des versions d'application](/docs.edgegap.com-fr/docs/api/gestion-des-versions.md#post-v1-app-app_name-version) pour [Persistance](/docs.edgegap.com-fr/learn/orchestration/persistance.md) avec [Flottes privées](/docs.edgegap.com-fr/learn/orchestration/flottes-privees.md).
  * **Temps maximal de déploiement** peut vous aider à nettoyer les déploiements qui mettent trop de temps à démarrer.
* **Politique de redémarrage du processus** - contrôle le comportement du déploiement lorsque votre processus serveur s'arrête.
  * Toujours redémarrer (par défaut) - redémarrera en cas de code de sortie réussi (0) et de toute sortie sur erreur.
  * Ne jamais redémarrer (recommandé) - le déploiement s'arrête sur les codes de sortie de succès et d'erreur.
  * Redémarrer en cas de crash - redémarre uniquement sur les codes de sortie d'erreur, utile pour les serveurs persistants.

{% hint style="info" %}
L'offre gratuite est limitée à 2 applications, 2 versions et 5 Go de stockage du Container Registry.
{% endhint %}

### Stockage des journaux

Pour exporter les journaux du serveur après l'arrêt du déploiement, configurez [Stockage des points de terminaison](/docs.edgegap.com-fr/docs/endpoint-storage.md) à l'aide d'un bucket S3.

{% hint style="warning" %}
Les journaux des versions sans stockage externe seront supprimés à la fin du déploiement.
{% endhint %}

## ⏩ Cohérence des mises à jour

Afin de garantir qu'aucun paramètre ne change lorsque vous créez une nouvelle version d'application via notre [tableau de bord](https://app.edgegap.com/application-management/applications/list), nous vous recommandons d'utiliser la **Dupliquer** fonctionnalité en haut à droite de la page du tableau de bord de votre version d'application précédente. Lors de la duplication, vous pouvez modifier n'importe quel paramètre avant d'enregistrer.

{% hint style="success" %}
**Dupliquer ou modifier vos versions d'application ne nécessite pas de reconstruire votre image serveur.**
{% endhint %}

{% hint style="info" %}
Voir [Matchmaker Rolling Updates](https://docs.edgegap.com/docs/gen2-matchmaker#rolling-updates-ab-tests) pour plus **d'automatisation des mises en production**.
{% endhint %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.edgegap.com/docs.edgegap.com-fr/learn/orchestration/application-and-versions.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
