> 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/application-and-versions.md).

# Applications et versions

Fonctionnement des applications et versions Edgegap, avec les bonnes pratiques pour versionner les builds de serveurs de jeu et séparer les environnements.

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

## 📦 Applications

Les applications encapsulent des projets serveur. Cette séparation des contextes 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 (transfert de propriété ultérieur),
* dépendez de plusieurs types de serveurs faiblement couplés avec différents modèles de mise à l'échelle ou différentes exigences.

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 notre API.

{% hint style="success" %}
Découvrez notre [documentation 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 nouvelles compilations, vous devrez stocker chaque compilation comme une version distincte pour :

* **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 compilation de votre choix. Plusieurs versions peuvent pointer vers la même compilation.
{% 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 notre API.

{% hint style="success" %}
Découvrez notre [documentation de l'API des versions d'application](https://docs.edgegap.com/api/#tag/Applications/operation/app-version-post), ou en savoir plus sur [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 de l'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 pratiques pour conserver de nombreuses versions passées,
* `1.1.0` - [versionnement sémantique](https://semver.org/) est un excellent choix pour communiquer l'ampleur des changements,
* `dév` , `préprod`, `AQ`, `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.

{% 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" %}
Le niveau gratuit est limité à 2 applications, 2 versions et 5 Go de stockage du registre de conteneurs.
{% endhint %}

### Combiner les stratégies de versionnement

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

* utiliser des horodatages ou le versionnement sémantique pour les compilations de développement, pour un suivi plus granulaire ;
* conserver `préprod`, `AQ` et `prod` des versions avec des paramètres spécifiques à l'environnement ;
* alterner `bleu` et `vert` des versions comme alias pour [les mises à jour sans interruption 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 de CPU virtuel votre application a besoin pour fonctionner (1024 unités = 1 vCPU),
  * **la quantité minimale de vCPU autorisée est de 0,25 vCPU (256 unités),**

{% hint style="info" %}
Besoin de moins de 0,25 vCPU par déploiement ? [Contactez-nous pour explorer les options d'optimisation.](mailto:info@edgegap.com)
{% endhint %}

* **Mémoire** - combien de mégaoctets de RAM votre application a besoin pour fonctionner (1024 Mo = 1 Go),
* **GPU** - combien d'unités de traitement graphique votre application a besoin pour fonctionner,
  * cette fonctionnalité n'est pas encore disponible, veuillez nous contacter si vous êtes intéressé.

{% hint style="success" %}
Les versions incluent automatiquement la RAM selon un ratio RAM-vCPU de 2:1, **accordant 512 Mo de RAM avec 0,25 vCPU**.
{% endhint %}

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

### Détails de l'image

Ces paramètres aideront notre système à décider quelle compilation de votre serveur devra être lancée ultérieurement :

* **Registre** - `registry.edgegap.com` si vous utilisez notre [registre de conteneurs](https://docs.edgegap.com/docs/container/edgegap-container-registry),
  * pour utiliser un registre tiers, saisissez vos identifiants Docker du 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 Registre de conteneurs 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 compilation 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 afficher les tags stockés localement dans Docker Desktop Images ou à l'aide de l'interface CLI de Docker.

{% hint style="danger" %}
:x: **NE PAS - écraser les balises existantes ou utiliser `latest` balise** - cela déploiera un cache obsolète.\
:white\_check\_mark: **FAITES - augmentez toujours votre balise de version** et déployez la nouvelle build.
{% endhint %}

* **Registre privé** - si l'accès à votre dépôt est protégé (dépôt privé), nous aurons également besoin de :
  * **Jeton de nom d'utilisateur** - le nom d'utilisateur d'accès programmatique de votre registre,
  * **Jeton de mot de passe** - le mot de passe d'accès programmatique de votre registre,
  * pour Edgegap [registre de conteneurs](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 Non autorisé` lors du push de mon image serveur.

* Cela signifie que vous ne vous êtes pas connecté à votre registre de conteneurs. Consultez Registre de conteneurs pour [les instructions du registre de conteneurs 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 Interdit` lors du push de mon image serveur.

* Cela signifie que l'utilisateur du registre actuellement connecté n'a pas suffisamment d'autorisations (généralement pour pousser une nouvelle image), ou 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 d'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 centre de stockage, le dépôt comme une unité de stockage, et le projet comme le numéro de l'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 / compilations d'image, mes modifications ne se rechargent pas correctement.

* Assurez-vous que chaque fois que vous recompiliez, vous poussiez avec un nouveau tag d'image. Le système de cache interne d'Edgegap utilise les noms de tags et, si vous écrasez la valeur d'un tag (par ex. `latest`) il ne détectera pas la nouvelle compilation.

***

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

* Oui, vous pouvez taguer le même artefact plusieurs fois sans problème, en servant de plusieurs alias pour la même compilation. Poursuivez votre lecture pour apprendre à 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 ?

* Vous devez supprimer tous les tags associés à un artefact spécifique afin de libérer de l'espace dans le registre.
* En raison des normes de l'API Docker et afin d'assurer la meilleure expérience utilisateur possible, nous fournissons uniquement une interface pour supprimer des tags. Voir le point ci-dessus concernant la suppression des artefacts de compilation.

</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 :

* exemples courants : arguments du moteur, secrets et points de terminaison de tiers,
* voir [Déploiements](/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 de chaîne.

{% hint style="warning" %}
Assurez-vous de **définir vos variables sensibles (secrets, jetons) comme masquées** pour plus de sécurité !
{% endhint %}

### Cache actif

: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 démarrez les serveurs en quelques secondes, sans serveur de veille requis.** L'image serveur associée à cette version d'application sera automatiquement préchargée dans tous nos sites mondiaux.

Le cache prendra pleinement 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 supprimé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 pour accepter les connexions entrantes des clients :

* **Port** la valeur fait référence au **port interne** valeur, généralement issue de votre intégration de netcode,
* **Protocole** dépendra du transport de votre intégration de netcode,
* **Nom** est un identifiant lisible par l'humain pour vos besoins, peut être le même que le port,
* **Vérifications** peuvent être activées pour s'assurer que votre conteneur est initialisé avant d'être marqué PRÊT.

{% hint style="success" %}
La plupart des jeux nécessiteront seulement l'ajout d'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'une partie malveillante potentielle (pirate) soit ralentie et détectée avant de pouvoir causer des dommages.

<figure><img src="https://3008966946-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsR0dHSFv9ymoC0DO5G8J%2Fuploads%2FXfDDoCk7J4O9qtkkjurh%2Fimage.png?alt=media&amp;token=a509cc92-a410-4658-9dcd-b032497debb5" 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 particuliers 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éfinie pour arrêter proprement vos serveurs après une période donnée, ou définie sur `-1`  avec [création/modification de l'API de version d'application](/fr/docs/api/gestion-des-versions.md#post-v1-app-app_name-version) pour [Persistance](/fr/learn/orchestration/persistance.md) avec [Flottes privées](/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 en erreur.
  * Ne jamais redémarrer (recommandé) - le déploiement s'arrête en cas de codes de sortie réussis et d'erreur.
  * Redémarrer en cas de crash - redémarre uniquement en cas de codes de sortie d'erreur, utile pour les serveurs persistants.

{% hint style="info" %}
Le niveau gratuit est limité à 2 applications, 2 versions et 5 Go de stockage du registre de conteneurs.
{% endhint %}

### Stockage des journaux

Pour exporter les journaux du serveur après l'arrêt du déploiement, configurez [Stockage des points de terminaison](/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 des paramètres 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 recommandons d'utiliser la **Dupliquer** fonctionnalité dans le coin supérieur droit 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" %}
**La duplication ou la modification de vos versions d'application ne nécessite pas de reconstruire votre image serveur.**
{% endhint %}

{% hint style="info" %}
Voir [Mises à jour progressives du matchmaker](https://docs.edgegap.com/docs/gen2-matchmaker#rolling-updates-ab-tests) pour davantage **d'automatisation des mises en production**.
{% endhint %}
