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

# Godot - Prise en main

Apprenez en pratiquant et déployez votre premier serveur dédié sur Edgegap. À la fin de ce guide, vous aurez déployé un serveur dédié avec Edgegap gratuitement.

{% embed url="<https://youtu.be/fcwnUrlkjhA>" %}

## ✔️ Préparation

Avant de commencer, assurez-vous de [créer un compte gratuit avec Edgegap](https://app.edgegap.com/auth/register) (aucune carte de crédit requise). Vous pouvez [inviter les membres de votre équipe ensuite](https://app.edgegap.com/user-settings?tab=organizations), même s’ils n’ont pas encore de compte Edgegap.

**Configurez quelques éléments essentiels sur votre machine de développement :**

<details>

<summary><a href="https://www.docker.com/products/docker-desktop/">Installez Docker Desktop (ou Docker CLI)</a></summary>

* [Installez Docker Desktop à partir de la source officielle](https://www.docker.com/products/docker-desktop/) (aucun compte requis).
* Redémarrez votre ordinateur après avoir terminé l'installation.

</details>

<details>

<summary><a href="https://store.godotengine.org/asset/edgegap-godot/dedicated-game-server-hosting-for-godot/">Installez le plugin de démarrage rapide des serveurs dédiés Godot d’Edgegap</a></summary>

Ce plugin a été testé et prend en charge les versions 4.3.x et plus récentes de Godot.

Option 1) Installer depuis l’Asset Store :

1. Ouvrez votre projet dans l’éditeur Godot.
2. Ouvrez l’onglet Asset Store et recherchez « edgegap ».
3. Choisissez « Game Server Hosting for Godot » puis téléchargez.

{% hint style="info" %}
Pour mettre à jour le plugin, allez dans Projet / Paramètres du projet / Plugins / Modifier et choisissez Mettre à jour.
{% endhint %}

Option 2) Installer depuis la source :

1. [Installez un client git (par exemple git-scm)](https://git-scm.com/).
2. Clonez le dépôt de notre plugin dans le dossier `addons` de votre projet.

```bash
git clone git@github.com:edgegap/edgegap-godot-plugin.git
```

{% hint style="info" %}
Pour mettre à jour un plugin installé avec git, ouvrez la ligne de commande dans le dossier du plugin et exécutez `git pull`.
{% endhint %}

</details>

{% hint style="info" %}
**Activez votre nouveau plugin Edgegap Servers Quickstart dans Projet / Paramètres du projet / Plugins.** Un nouvel onglet intitulé « Edgegap » apparaîtra dans votre panneau de droite, à côté de l’Inspecteur. Si vous fermez le panneau plus tard et devez le rouvrir, vous trouverez l’option sous Projet / Outils / Edgegap.
{% endhint %}

## ⚙️ 1. Connecter le compte

☑️ Connectez-vous et vérifiez qu’il n’y a aucune nouvelle erreur dans votre sortie liée au plugin d’Edgegap.

✅ Vous pouvez maintenant passer à l’étape suivante.

## 🔧 2. Compiler le serveur de jeu

Que vous utilisiez une machine Windows, Mac ou Linux, vous devrez **compiler votre serveur pour le runtime Linux**, car la plupart des fournisseurs cloud aujourd’hui (y compris Edgegap) fonctionnent sous Linux. Ne vous inquiétez pas, aucune connaissance de Linux n’est requise pour y parvenir avec notre plugin.

☑️ **Validez les modèles d’exportation pour vous assurer que le plugin a correctement configuré le modèle de votre serveur Linux.**

{% hint style="info" %}
**Utilisateurs avancés** - personnaliser éventuellement [le modèle d’exportation](https://docs.godotengine.org/en/latest/tutorials/export/exporting_projects.html). Attention ! Cela peut casser votre build.
{% endhint %}

☑️ **Ajoutez un nouveau script de démarrage à votre projet pour lancer automatiquement en tant que serveur dédié.** Créez un nouveau nœud sous votre scène principale, et liez le nouveau script dans Inspecteur / Script / Charger.

{% tabs %}
{% tab title="Exemple de bootstrap par défaut" %}
Il s’agit d’un script minimal de modèle qui peut être étendu pour répondre aux besoins de votre projet.

{% file src="/files/5934f234fc63fedd6e13cb931544ee4a29c66c2f" %}
{% endtab %}

{% tab title="Exemple Netfox Forest Brawl" %}
Il s’agit d’une version personnalisée du script de démarrage pour [netfox forest brawl](#netfox-forest-brawl-example) exemple.

{% file src="/files/16d88e9ef8050b7f67d58a6dfdfa21a424e9c0e7" %}
{% endtab %}
{% endtabs %}

{% hint style="success" %}
Les builds de serveur utilisent généralement le port par défaut `7777`. Si vous personnalisez votre port, veuillez préciser le sam~~e~~ dans votre [Applications et versions](/fr/learn/orchestration/application-and-versions.md#port-mapping) une fois que vous [#id-5.-upload-to-edgegap](#id-5.-upload-to-edgegap "mention").
{% endhint %}

☑️ Une fois que vous êtes satisfait de votre configuration, cliquez sur **Compiler le serveur**, attendez la fin du processus et vérifiez qu’il n’y a aucune nouvelle erreur dans votre sortie. La réalisation de cette étape fera apparaître un **nouveau build apparaissant dans votre projet dans le dossier** `build`**.**

✅ Vous pouvez maintenant passer à l’étape suivante.

## 🐋 3. Conteneuriser le serveur

Travailler en équipe de développeurs signifie partager votre code. Quand les choses tournent mal, la dernière chose que vous voulez entendre est « ça marche sur ma machine ». Les serveurs de jeu doivent fonctionner de manière fiable sur n'importe quelle machine, car les serveurs d'un jeu à succès tourneront sur des milliers de machines serveur à travers le monde.

Pour aider à rendre votre serveur fiable, nous utilisons Docker - un logiciel de virtualisation garantissant que toutes les dépendances de votre code serveur jusqu'au niveau du système d'exploitation seront toujours exactement les mêmes, peu importe comment ou où le serveur est lancé.

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

☑️ Commencez en cliquant sur le bouton **Valider Docker** pour vous assurer que vous avez terminé [#preparation](#preparation "mention").

<details>

<summary><a href="https://www.docker.com/products/docker-desktop/">Installez Docker Desktop (ou Docker CLI)</a></summary>

* [Installez Docker Desktop à partir de la source officielle](https://www.docker.com/products/docker-desktop/) (aucun compte requis).
* Redémarrez votre ordinateur après avoir terminé l'installation.

</details>

☑️ Vous pouvez configurer les options suivantes (ou conserver les valeurs par défaut) :

* **Nom de l’image** est un identifiant unique de votre choix, qui étiquette votre build de serveur avant l’envoi.
  * En général, cela inclura le nom de votre jeu - par exemple « my-game-server ».
* **Tag de l’image** est un identifiant pointant vers une version spécifique de votre image.
  * Le terme « artefact de build » est parfois utilisé pour désigner une version spécifique de votre image.
  * Les horodatages constituent une excellente option par défaut pour le tag, par ex. `2026.07.30-16.25.00-UTC` .
* **Chemin vers le Dockerfile** peut être utilisé pour personnaliser la recette de vos images.
  * Nous vous recommandons de conserver le paramètre par défaut pour l’instant, vous pourrez en savoir plus plus tard dans la section [#customize-image](#customize-image "mention").
* **Paramètres optionnels de build Docker** peuvent être utilisés pour donner à Docker des instructions supplémentaires sur des nuances plus fines.
  * Nous vous recommandons de conserver le paramètre par défaut pour l’instant, vous pouvez [en savoir plus plus tard dans la documentation Docker](https://docs.docker.com/reference/cli/docker/image/build/#options).

{% hint style="info" %}
**Reconstruire à partir du code source** sera automatiquement compilé et conteneurisé, afin de **accélérer votre prochaine compilation**.
{% endhint %}

☑️ Une fois que vous êtes satisfait de votre configuration, cliquez sur **Conteneuriser avec Docker**, attendez la fin du processus et vérifiez qu’il n’y a aucune nouvelle erreur dans votre sortie. La réalisation de cette étape fera apparaître un **nouvelle image apparaissant sur votre machine locale**. Vous pouvez le vérifier soit dans Docker Desktop, dans l’onglet Images sous Local (par défaut), soit dans le CLI Docker en exécutant `docker images` .

✅ Vous pouvez maintenant passer à l’étape suivante.

## 🧪 4. Tester le serveur localement

Essayons de déployer localement (sur votre machine) et de connecter un client de jeu, pour nous assurer que l'image du serveur fonctionne correctement avant de l'uploader et de la déployer (ce qui peut prendre un certain temps).

☑️ Vous pouvez configurer les options suivantes (ou conserver les valeurs par défaut) :

* **Tag de l’image du serveur** de l’étape précédente.
  * Par défaut, il s’agit du dernier tag que vous avez créé avec le plugin.
  * :cloud: apparaissant devant le nom de votre image indique que cette image a été envoyée.
* **Paramètres optionnels de docker run** peuvent être fournis pour exposer plusieurs ports ou exécuter votre image sur des machines macOS.
  * Vous pouvez publier plusieurs ports pour votre conteneur si nécessaire, ajoutez simplement le paramètre `-p {port interne}/{protocole}` pour chacun, par exemple `-p 8080/tcp -p 7777/udp` pour publier et mapper votre port serveur `8080` vers un port externe aléatoire pour la connexion TCP et le port du serveur `7777` vers un port externe aléatoire pour la connexion UDP en même temps. **Trouvez la configuration du port du serveur dans votre script de démarrage.**
  * Si vous utilisez une machine avec architecture ARM (macOS M1, M2, M3, etc.), vous devriez voir ce paramètre optionnel inclus dans vos Paramètres optionnels de build Docker : `--platform=linux/amd64` .

☑️ Une fois que vous êtes satisfait de votre configuration, cliquez sur **Déployer le conteneur local**, attendez la fin du processus et vérifiez qu’il n’y a aucune nouvelle erreur dans votre sortie. La réalisation de cette étape entraînera un **nouveau conteneur démarré** sur votre machine de développement.

{% hint style="info" %}
Pour plus de détails, voir Docker Desktop / Containers, ou la commande Docker CLI `docker ps` .
{% endhint %}

☑️ Il est maintenant temps de **connecter votre client de jeu de l’éditeur Godot à votre conteneur Docker local** pour vérifier que votre image serveur fonctionne correctement. Trouvez les détails de connexion de votre client et saisissez :

* `localhost` ou `0.0.0.0` (équivalent dans la plupart des cas) à la place de l’IP du serveur,
* la valeur du port externe aléatoire trouvée dans Docker Desktop / Conteneurs.

<figure><img src="https://3008966946-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsR0dHSFv9ymoC0DO5G8J%2Fuploads%2FCDGTUe5ests3DI3u9rTV%2Fimage.png?alt=media&amp;token=8c4799d8-0622-4142-91a5-93fd1816149c" alt=""><figcaption></figcaption></figure>

☑️ Une fois que vous avez vérifié que vous pouvez vous connecter à votre conteneur de serveur local et jouer sans problème, vous pouvez supprimer le conteneur 🗑️ pour libérer des ressources sur votre machine pour d’autres programmes.

✅ Vous pouvez maintenant passer à l’étape suivante.

## ☁️ 5. Téléverser sur Edgegap

Il est temps de mettre votre serveur en ligne ! Maintenant que votre image peut héberger des joueurs avec succès, nous pouvons la téléverser sur Edgegap et commencer à l’exécuter n’importe où dans le monde. Dans ce guide, nous utiliserons [**le registre de conteneurs d’Edgegap**](/fr/learn/advanced-features/edgegap-container-registry.md) (stockage pour les images).

☑️ Vous pouvez configurer les options suivantes (ou conserver les valeurs par défaut) :

* **Nom de l’application** sur Edgegap peut correspondre au nom de votre image ou être personnalisé.
  * Nous avons choisi de copier le nom de votre image pour l’instant.
* **Version de l’application** sur Edgegap peut correspondre à votre tag ou être personnalisée.
  * Les horodatages constituent une excellente option pour les noms de version d’application, par ex. `2024.01.30-16.50.20-UTC` .
  * Plusieurs versions d’application peuvent pointer vers le même tag d’image, par exemple `v1.1.0` et `dev` .
  * En savoir plus sur [Applications et versions](/fr/learn/orchestration/application-and-versions.md) plus tard.
* **Image du serveur** de l’étape [#id-3.-containerize-server](#id-3.-containerize-server "mention").

{% hint style="success" %}
Trouvez n’importe quel nom et tag d’image stockés sur votre machine dans **Docker Desktop / Images**.
{% endhint %}

☑️ Une fois que vous êtes satisfait de votre configuration, cliquez sur **Téléverser l’image et créer la version de l’application**, attendez la fin du processus et vérifiez qu’il n’y a aucune nouvelle erreur dans votre sortie.

☑️ Vous serez dirigé vers notre [Tableau de bord](https://app.edgegap.com/), où vous pourrez configurer des paramètres optionnels. La réalisation de cette étape entraînera [la création d’une nouvelle version de l’application](https://app.edgegap.com/application-management/applications/list), et votre [artefact de build sera étiqueté et téléversé dans le registre de conteneurs d’Edgegap](https://app.edgegap.com/registry-management/repositories/list).

* **Version de l’application** sur Edgegap peut correspondre à votre tag ou être personnalisée.
  * Les horodatages constituent une excellente option pour les noms de version d’application, par ex. `2024.01.30-16.50.20-UTC` .
  * Plusieurs versions d’application peuvent pointer vers le même tag d’image, par exemple `v1.1.0` et `dev` .
  * En savoir plus sur [Applications et versions](/fr/learn/orchestration/application-and-versions.md) plus tard.

☑️ On vous demandera maintenant de définir un port pour votre nouvelle version de l’application. Assurez-vous de définir la même valeur de port serveur que dans l’étape [#id-4.-test-server-locally](#id-4.-test-server-locally "mention") (par défaut 7777).

✅ Vous pouvez maintenant passer à l’étape suivante.

## 🚀 6. Déployer dans le cloud

Ceci est l'étape finale de ce guide, après laquelle vous disposerez d'un serveur déployé sur le cloud Edgegap, auquel des joueurs du monde entier pourront se connecter.

☑️ **Choisissez une application et une version** de l'étape précédente à déployer.

☑️ Une fois prêt, cliquez sur **Déployer sur le Cloud**, attendez d'atteindre [/pages/5d7a2f9e0583a99d78071f1c4b8a7892a518534a#id-3.-deployment-ready](https://docs.edgegap.com/fr/pages/5d7a2f9e0583a99d78071f1c4b8a7892a518534a#id-3.-deployment-ready "mention"). L'achèvement de cette étape entraînera le démarrage d'un [nouveau déploiement](https://app.edgegap.com/deployment-management/deployments/list) sur votre compte Edgegap.

☑️ Vérifiez qu'il n'y a pas de nouvelles erreurs dans la sortie de la console. Assurez-vous également que vos [Déploiements](/fr/learn/orchestration/deployments.md#container-logs) n'affichent aucune erreur et que vos [Déploiements](/fr/learn/orchestration/deployments.md#container-metrics) n'indiquent pas une utilisation des ressources à 100 % (vCPU ou mémoire), sinon de nouvelles connexions de joueurs peuvent être rejetées, ou votre serveur bloqué dans une boucle de redémarrage. Consultez les étapes de dépannage ci-dessous pour résoudre tout problème.

☑️ Nous allons maintenant effectuer le test final et **connecter votre client de jeu de l’éditeur Godot à votre déploiement cloud**. Prenez votre **Hôte du déploiement** à la place de l’IP du serveur et du **Port externe**, configurez-les dans les détails de connexion de votre client et lancez le jeu.

<figure><img src="https://3008966946-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsR0dHSFv9ymoC0DO5G8J%2Fuploads%2Fz9xjzvZwKSIp9IeC9qo8%2Fimage.png?alt=media&amp;token=e3f345ac-848d-4469-b66f-3655cd393cf3" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
Le port externe de votre déploiement sur le cloud Edgegap sera choisi aléatoirement, afin qu'un attaquant potentiel (hacker) soit ralenti et détecté avant de pouvoir causer des dommages.
{% endhint %}

{% hint style="warning" %}
**Désactiver le VPN lors des tests** pour des conditions plus réalistes et recevoir un [déploiement à faible latence](/fr/learn/orchestration/deployments.md#server-placement).
{% endhint %}

☑️ Une fois que vous avez vérifié que vous pouvez vous connecter à votre déploiement sans problème et que vous avez fini les tests, **Arrêtez votre déploiement** pour libérer de la capacité dans votre compte pour la prochaine build.

* En cas de problème, [inspectez les journaux du tableau de bord de votre déploiement](https://app.edgegap.com/deployment-management/deployments/list).
* Si vous ne parvenez pas à identifier le problème, nous traînons dans notre [Discord Communautaire](https://discord.gg/NgCnkHbsGp) et heureux de vous aider.

🙌 Félicitations pour votre premier déploiement sur Edgegap ! Si vous souhaitez en savoir plus, continuez à lire.

## 👉 Prochaines étapes

Une fois que vous disposez d'une configuration client/serveur fonctionnelle, assurez-vous de **sauvegarder une copie de votre projet** (en utilisant un logiciel de contrôle de version comme git) afin de toujours pouvoir retracer vos étapes en cas de problème.

Continuez à lire pour en savoir plus sur les sujets liés au cycle de vie des serveurs et à leur découvrabilité.

{% 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 %}

### Arrêter les déploiements

Une fois le match terminé (ou les joueurs partis), votre déploiement peut être arrêté pour économiser des coûts. [Le fait de rester en cours d’exécution vide ou partiellement rempli peut augmenter inutilement vos coûts !](https://edgegap.com/blog/how-session-fill-rate-affects-your-multiplayer-hosting-costs)

{% hint style="success" %}
Des exemples de scripts Godot arrivent bientôt !
{% endhint %}

{% hint style="warning" %}
Connectez votre [Stockage des points de terminaison](/fr/docs/endpoint-storage.md) pour enregistrer les journaux de déploiement, sinon ils seront supprimés !
{% endhint %}

### Variables injectées

Lisez des informations utiles comme l’ID du déploiement, l’adresse IP du serveur, l’emplacement du serveur, et plus encore, en accédant aux variables d’environnement injectées. Chaque déploiement inclut automatiquement :

* [Variables de déploiement](/fr/learn/orchestration/deployments.md#injected-environment-variables) - fournies automatiquement par Edgegap,
* [Variables de matchmaking](/fr/learn/appariement/matchmaker-in-depth.md#injected-environment-variables) - fournies automatiquement par Edgegap lors de l’utilisation de [Appariement](/fr/learn/appariement.md),
* [Variables de version d’application](/fr/learn/orchestration/application-and-versions.md#injected-variables) - paires clé-valeur personnalisées configurables par vous.

{% hint style="success" %}
Des exemples de scripts Godot arrivent bientôt !
{% endhint %}

### Automatisation des sessions

{% 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" %}
Des exemples de scripts Godot arrivent bientôt !
{% endhint %}

### Optimiser l’utilisation

Quelques conseils pour bien commencer à optimiser l’utilisation de votre serveur :

**Un taux de ticks plus élevé signifie plus de mises à jour, nécessitant plus d’utilisation du CPU et de bande passante sortante.**

* Godot utilise par défaut 60 ticks par seconde, ce qui fonctionne très bien pour les jeux de tir rapides ou les jeux très sensibles à la latence. D’autres genres peuvent se contenter de 30 Hz voire 15 Hz.
* Le coût caché d’un taux de ticks plus élevé est davantage de cycles CPU (par seconde) pour (dé)compresser les données et recalculer les propriétés et procédures faisant autorité côté serveur. Soyez prudent si votre jeu comporte beaucoup de joueurs par match (10+), de nombreux nœuds avec des collisions, des simulations physiques complexes ou de nombreux bots adverses/alliés.
* Testez la réactivité du jeu avec différents taux de ticks dans les paramètres de votre netcode. Pour ENET, voir Paramètres du projet / Physique / Commun / Ticks de physique par seconde.

**Comment choisir le bon protocole réseau ? Faites-le fonctionner d’abord, puis améliorez-le.**

* L’ENET intégré à Godot avec le protocole UDP par défaut est un excellent choix par défaut, offrant performance et compatibilité sur la plus grande gamme d’appareils et de cas d’usage.
* Certains jeux peuvent vouloir expérimenter avec TCP, WS, WebRTC ou d’autres protocoles. Cela peut améliorer la fiabilité de votre connexion avec les appareils mobiles et les consoles, surtout sur les réseaux publics (cellulaire, entreprise, cybercafé, wifi d’hôtel, etc.), mais cela nécessitera certainement un effort de développement supplémentaire. Demandez-vous si cela est critique pour votre public cible.
* Utiliser plusieurs protocoles côte à côte pour garantir que les mises à jour importantes soient transmises en priorité peut améliorer l’expérience des joueurs pour certains genres (par ex. MMO), mais cela entraîne beaucoup d’efforts de développement supplémentaires et peut ajouter une complexité énorme à votre projet.
* Choisissez vos combats avec soin, le développement de jeux ne manque pas de défis.

### Personnaliser l’image

Nous prenons également en charge l’ajout de votre propre Dockerfile pour les utilisateurs qui ont besoin de plus de contrôle sur leurs images en raison de l’optimisation de la taille du build, de dépendances superflues ou d’un processus de démarrage plus complexe. Vous pouvez éventuellement fournir un chemin vers votre Dockerfile personnalisé à l’étape [#id-3.-containerize-server](#id-3.-containerize-server "mention"). Nous allons maintenant partager quelques conseils et bonnes pratiques « faites-le vous-même ».

**Assurez-vous toujours de travailler avec une version de serveur fonctionnelle.**

* Avant de supposer qu’un problème est lié au Dockerfile personnalisé, assurez-vous que votre build de serveur peut être démarré, et que le processus de build dans votre moteur de jeu n’a déclenché aucune exception ni erreur.

**Testez toujours en local avant de téléverser.**

* Tester votre image localement vous fera gagner beaucoup de temps pendant que vous attendez la fin du téléversement. C’est aussi entièrement gratuit ✨ car cela ne nécessite aucune ressource Edgegap.
* Lors des tests en local, assurez-vous de définir correctement votre port interne :

  ```bash
  docker run \
    -p 7777/udp \
    -e ARBITRIUM_PORTS_MAPPING='{"ports":{"gameport":{"internal":7777}}}' \
    'registry.edgegap.com/<repository>:<tag>'
  ```

**Assurez-vous de maîtriser les bases. Chaque Dockerfile a besoin de quelques commandes essentielles :**

* `FROM {image}` est votre image de base ; nous utilisons généralement un Linux pris en charge à long terme, mais toute image de base basée sur Linux fera l’affaire. Il s’agit généralement d’images publiques stockées sur Docker Hub. Référence Dockerfile ici. [Référence Dockerfile ici](https://docs.docker.com/reference/dockerfile/#from).
* `COPY {source} {destination}` pour copier votre build de serveur Linux depuis votre machine hôte dans l’image, afin de pouvoir le démarrer plus tard. [Référence Dockerfile ici](https://docs.docker.com/reference/dockerfile/#copy).
* `USER {user}` doit suivre un [commande useradd (Ubuntu)](https://manpages.ubuntu.com/manpages/bionic/man8/useradd.8.html) ou équivalent ; il vaut mieux ne pas tout exécuter en tant que `root` pour plus de sécurité. [Référence Dockerfile ici](https://docs.docker.com/reference/dockerfile/#user).
* `CMD {command}` sera la dernière ligne, appelant très probablement un `StartServer.sh` ou un script de démarrage de quelque sorte afin de vous assurer que votre serveur s’initialise correctement une fois que tout est configuré. [Référence Dockerfile ici](https://docs.docker.com/reference/dockerfile/#cmd).
* N’utilisez PAS `VOLUME` - vous ne pourrez pas monter de stockage local de cette façon sur Edgegap ; envisagez plutôt notre fonctionnalité de stockage de point de terminaison et utilisez un bucket S3, voir [Stockage de point de terminaison](https://docs.edgegap.com/docs/deployment/endpoint-storage),
* `EXPOSE 7777/UDP`  n’est pas requis ! Cela ne rendra pas réellement le port interne du serveur disponible depuis l’extérieur du conteneur ; ce n’est qu’une indication pour le développeur et le port doit être
  * publié lors des tests en local avec `docker run <image> -p 7777/udp` ,
  * ou mappé dans [le mappage de ports Edgegap](/fr/learn/orchestration/application-and-versions.md#other-parameters-optional).

**Retardez la déclaration des paramètres jusqu’au dernier moment possible. La configurabilité > la composabilité en raison des longs temps de build du serveur.** [**Appliquez cette approche aux commandes du Dockerfile afin de construire et téléverser plus rapidement.**](https://medium.com/@esotericmeans/optimizing-your-dockerfile-dc4b7b527756)

* Scénario : vous devez définir des paramètres comme le stade de déploiement, la version, le mode de jeu, la carte, le nombre de joueurs par serveur, la fréquence de sauvegarde, ou similaires.
* Mauvaise solution : créer une image séparée pour chaque combinaison de vos paramètres. Vous passerez tout votre temps à reconstruire les images pour très peu d’avantages avec cette approche.
* Meilleure solution - remplacez les paramètres de configuration juste à temps :
  1. paramètres de déploiement - fournis juste avant le déploiement - sélecteurs de matchmaking transmis sous forme de variables d’environnement, ou votre système personnalisé de gestion de session transmettant des variables d’environnement au moment du déploiement,
  2. paramètres de version - partagés pour tous les déploiements d’une version d’application - stade de déploiement, tag de l’artefact, secrets et points de terminaison tiers, et similaires ; puis
  3. une seule image - contient et charge toutes les options de configuration au lancement.

**N’exécutez PAS de bases de données sur les déploiements Edgegap.**

* Les déploiements Edgegap ne sont pas destinés à des processus de longue durée et peuvent être arrêtés après une longue période d’exécution sans préavis. Une base de données (même distribuée) fonctionnant de cette manière peut être arrêtée et entraîner une perte irréversible de données. Si vous avez besoin d’une base de données, veuillez envisager un DBaaS tiers.
* Envisagez d’utiliser nos [Clusters gérés](https://app.edgegap.com/cluster-management/clusters/list) pour héberger des bases de données et des services de longue durée.
