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

# Unreal Engine - Prise en main

Déployez votre premier serveur dédié Unreal Engine sur Edgegap. Un guide pratique couvrant le build, le téléversement et le déploiement mondial pour les jeux multijoueurs.

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 sans frais.

Construire avec Docker Desktop est la méthode la plus rapide, la plus simple et la plus fiable pour démarrer.

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

## ✔️ 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 et l’extension Docker Edgegap</a></summary>

* [Installez Docker Desktop depuis la source officielle](https://www.docker.com/products/docker-desktop/) (aucun compte requis).
* Redémarrez votre ordinateur après avoir terminé l'installation.
* Accédez à Paramètres ⚙️ > Extensions > Activer les extensions Docker.
* [Installez l'extension depuis la place de marché Docker officielle (cliquez sur ce lien).](https://www.docker.com/products/docker-desktop/)

</details>

<details>

<summary><a href="https://open.docker.com/extensions/marketplace?extensionId=edgegap/docker-extension">Installez l'extension Docker Edgegap Quickstart</a></summary>

* Installez depuis Docker Desktop / Extensions / Parcourir ou [en utilisant le lien](https://open.docker.com/extensions/marketplace?extensionId=edgegap/docker-extension).

<figure><img src="https://3008966946-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsR0dHSFv9ymoC0DO5G8J%2Fuploads%2FraFWUCJWPZYvBMLieBUZ%2Fimage.png?alt=media&amp;token=186886ac-accb-421d-b560-3ccefa7f29cb" alt=""><figcaption></figcaption></figure>

</details>

<details>

<summary><a href="https://www.unrealengine.com/en-US/ue-on-github">Accédez aux ressources Unreal Engine sur GitHub</a></summary>

* [Inscrivez-vous pour un compte GitHub.](https://github.com/)
* Accédez à votre [page du tableau de bord des comptes liés Unreal Engine](https://www.epicgames.com/account/connections).
* Liez le compte GitHub à votre compte Epic.
  * Autorisez Epic Games à accéder à votre compte GitHub.
  * Acceptez l'invitation par e-mail pour rejoindre l'organisation Epic Games sur GitHub.

</details>

<details>

<summary><a href="https://github.com/settings/tokens/new">Générer un jeton d'accès personnel GitHub (classique)</a></summary>

* activer uniquement l'autorisation `[lecture:packages]` ,
* générer le jeton - **stockez cette valeur en lieu sûr, vous ne la verrez plus**.

</details>

{% hint style="info" %}
**Vous avez confiance dans vos builds de serveur ?** Passez à [#customize-server-image](#customize-server-image "mention") et [Fonctionnalités avancées](/fr/learn/advanced-features.md).
{% endhint %}

## ⚙️ 1. Configurer le projet <a href="#id-1-configure-project" id="id-1-configure-project"></a>

Que vous utilisiez une machine Windows, Mac ou Linux, vous allez **devez construire votre serveur pour l'exécution sous Linux**, car la plupart des fournisseurs cloud aujourd'hui (y compris Edgegap) fonctionnent sous Linux. Ne vous inquiétez pas, aucune connaissance en Linux n'est requise.

{% hint style="warning" %}
Ne packagez pas votre projet dans Unreal Editor. N'installez pas manuellement la chaîne d'outils Linux. Ne définissez pas `LINUX_MULTIARCH_ROOT` . Ne compilez pas Unreal Engine à partir des sources. **Notre extension s'occupe de tout pour vous.**
{% endhint %}

☑️ Commencez par **vérifier votre version d'Unreal Engine** - prérempli avec la valeur issue des fichiers de votre projet.

☑️ **Saisissez le nom d'utilisateur GitHub et** [**PAT**](#user-content-fn-1)[^1] depuis [#preparation](#preparation "mention"), pour télécharger les dépendances depuis GitHub.

<details>

<summary><a href="https://github.com/settings/tokens/new">Générer un jeton d'accès personnel GitHub (classique)</a></summary>

* activer uniquement l'autorisation `[lecture:packages]` ,
* générer le jeton - **stockez cette valeur en lieu sûr, vous ne la verrez plus**.

</details>

☑️ **Désactiver la vérification de compatibilité de la version d'Unreal Engine** pour les serveurs dédiés et **définir `IpNetDriver` comme le pilote par défaut ou le pilote de secours** pour le réseau de réplication :

{% hint style="warning" %}
Assurez-vous de **saisir votre `DefaultServerTarget`  à la fin de cet extrait**!
{% endhint %}

<pre data-title="Config/DefaultEngine.ini"><code><a data-footnote-ref href="#user-content-fn-2">[ConsoleVariables]</a>
net.IgnoreNetworkChecksumMismatch=1
net.CurrentHandshakeVersion=2
net.MinHandshakeVersion=2
net.VerifyNetSessionID=0
net.VerifyNetClientID=0

<a data-footnote-ref href="#user-content-fn-3">[/Script/Engine.GameEngine]</a>
!NetDriverDefinitions=ClearArray
+NetDriverDefinitions=(DefName="GameNetDriver",DriverClassName="OnlineSubsystemUtils.IpNetDriver",DriverClassNameFallback="OnlineSubsystemUtils.IpNetDriver")

<a data-footnote-ref href="#user-content-fn-4">[/Script/OnlineSubsystemUtils.IpNetDriver]</a>
MaxClientRate=1000000000
MaxInternetClientRate=1000000000
InitialConnectTimeout=120.0
MaxNetTickRate=60
NetServerMaxTickRate=60

<a data-footnote-ref href="#user-content-fn-5">[/Script/BuildSettings.BuildSettings]</a>
DefaultServerTarget=LyraServer
</code></pre>

☑️ **Redémarrer Unreal Engine** pour recharger les derniers changements.

☑️ **Créer un script de cible pour serveur dédié** en copiant votre `<PROJECT>Editor.Target.cs` fichier dans le dossier racine du projet et en renommant la copie en `<PROJECT>Server.Target.cs`.

☑️ **Remplacez toutes les références à** mot **`Editor`** **par** **`Server`** dans votre script de cible serveur.

☑️ **Modifier les paramètres par défaut de la build serveur** en éditant votre script de cible serveur :

<pre data-title="Source/<PROJECT>Server.Target.cs"><code>bOverrideBuildEnvironment = true;
<a data-footnote-ref href="#user-content-fn-6">bUseLoggingInShipping = true;</a>
<a data-footnote-ref href="#user-content-fn-7">bUseChecksInShipping = false;</a>
<a data-footnote-ref href="#user-content-fn-8">bBuildWithEditorOnlyData = false;</a>
<a data-footnote-ref href="#user-content-fn-9">bUsesSlate = false;</a>
<a data-footnote-ref href="#user-content-fn-10">bCompileCEF3 = false;</a>
</code></pre>

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

<details>

<summary>Facultatif : Intégration Steam</summary>

Pour **intégrer Steam**, utilisez `IpNetDriver` comme votre pilote réseau par défaut et vérifiez que le [steamclient.so 64 bits pour Linux](https://developer.valvesoftware.com/wiki/SteamCMD#Ubuntu) est copié dans l'image sur le chemin `/home/ubuntu/.steam/sdk64/` .

{% hint style="success" %}
Ajouter `steamclient.so`  bibliothèque Linux en un clic en utilisant notre [extension Docker](/fr/unreal-engine.md).
{% endhint %}

<a href="https://github.com/edgegap/edgegap-unreal-buildutils/raw/refs/heads/main/steamclient.so" class="button secondary" data-icon="square-down">Télécharger steamclient.so</a>

<pre class="language-docker" data-title="Dockerfile"><code class="lang-docker">...
<a data-footnote-ref href="#user-content-fn-11">RUN mkdir -p /home/ubuntu/.steam/sdk64</a>
<a data-footnote-ref href="#user-content-fn-12">COPY ./steamclient.so /home/ubuntu/.steam/sdk64/steamclient.so</a>
<a data-footnote-ref href="#user-content-fn-13">RUN chmod 755 /home/ubuntu/.steam/sdk64/steamclient.so</a>
...
</code></pre>

{% hint style="warning" %}
**Assurez-vous de désactiver le réseautage Steam, qui envoie des paquets via Steam Relay et peut causer des problèmes de connexion ou des pics de latence.** Ceci ne vous empêche pas d'utiliser d'autres fonctionnalités Steamworks comme les classements, les succès, la voix ou la publication de votre jeu sur le Steam Store.
{% endhint %}

<pre data-title="Config/DefaultEngine.ini"><code>[OnlineSubsystemSteam]
bUseSteamNetworking=false
bAllowP2PPacketRelay=false
<a data-footnote-ref href="#user-content-fn-14">SteamDevAppId=480</a>
<a data-footnote-ref href="#user-content-fn-14">SteamAppId=480</a>
</code></pre>

</details>

## 🔧 2. Construire le serveur de jeu <a href="#id-2-build-game-server" id="id-2-build-game-server"></a>

Nous allons maintenant compiler et cuire votre projet, puis le packager dans une image Docker facilement réutilisable.

{% hint style="warning" %}
Ne packagez pas votre projet dans Unreal Editor. N'installez pas manuellement la chaîne d'outils Linux. Ne définissez pas `LINUX_MULTIARCH_ROOT` . Ne compilez pas Unreal Engine à partir des sources. **Notre extension s'occupe de tout pour vous.**
{% endhint %}

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

☑️ 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 son déploiement.
  * 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 sont une excellente option par défaut pour les tags, par ex. `2024.01.30-16.23.00-UTC` .

☑️ **Construire le projet** une fois que vous êtes satisfait de votre configuration. La réalisation de cette étape ajoutera une nouvelle image avec l'exécutable de votre serveur de jeu Linux dans votre client Docker local.

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

## 🧪 3. Tester le serveur localement <a href="#id-3-test-server-locally" id="id-3-test-server-locally"></a>

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).

☑️ **Sélectionnez le tag de l'image que vous souhaitez exécuter localement** (les images distantes seront téléchargées). En option, plus [d'arguments docker run](https://docs.docker.com/reference/cli/docker/image/build/#options) peuvent être fournis pour personnaliser votre test local :

* `-p 7777:7777/udp` - il s'agit de votre mappage de port [du conteneur local](/fr/learn/orchestration/application-and-versions.md#port-mapping),
* `-e ARBITRIUM_PORT_GAMEPORT_INTERNAL=7777`  est une [variable d'environnement](#environment-variables) qui simule un déploiement Edgegap réel, en indiquant à votre serveur de jeu le port interne sur lequel écouter les connexions des joueurs.

☑️ Une fois que votre configuration vous convient, cliquez sur **Démarrer le serveur local**. La réalisation de cette étape entraînera **le démarrage d'un nouveau conteneur** sur votre machine de développement.

☑️ Il est maintenant temps de connecter votre client de jeu Unreal Engine Editor (PIE) à votre conteneur de serveur local. Ouvrez la console Unreal PIE avec `~`  (tilde) et connectez-vous avec `open <ip>:<port>`:

* `ip`  = `localhost`  ou `127.0.0.1`  (équivalent dans la plupart des cas),
* `port`  = valeur du port externe randomisée du conteneur dans l'interface graphique Docker.

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

<details>

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

Impossible de connecter les clients au serveur - `Délai de requête dépassé.` , `Délai de requête dépassé.` , `Échec de la connexion` , ou `Échec de la vérification du port`

* Tout d'abord, assurez-vous que le conteneur est en cours d'exécution et qu'il n'y a aucune erreur d'exécution dans vos journaux.
* Veuillez vérifier que les valeurs de port dans la commande `docker run` correspondent.
* Veuillez vous assurer que votre client de jeu se connecte au **port externe** affiché sur la page des détails de votre conteneur ; cette valeur sera toujours randomisée pour des raisons de sécurité.
* Veuillez vous assurer d'avoir renommé votre fichier cible et configuré les builds du jeu comme décrit à l'étape [#id-1-configure-project](#id-1-configure-project "mention").

***

Mon conteneur est en cours d'exécution, mais je n'arrive pas à me connecter pendant plusieurs minutes après.

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

***

`Avertissement : impossible de créer le socket pour l'adresse de liaison`

* Veuillez installer le plugin Steam Subsystem d'Epic via la boutique d'assets Fab.
* Lorsque vous utilisez l'Edgegap Integration Kit (EGIK) avec la version source de SteamCore téléchargée depuis GitHub, le plugin Steam Subsystem d'Epic n'est pas inclus en raison des politiques de distribution des plugins d'Epic Games.

***

J'ai réussi à me connecter, mais mon écran est complètement noir.

* Vérifiez que vous avez le bon **Game Default Map** défini dans **Edit / Project Settings / Maps & Modes**.

</details>

## ☁️ 4. Publier sur Edgegap <a href="#id-4-publish-to-edgegap" id="id-4-publish-to-edgegap"></a>

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).

☑️ **Choisissez un nom d'application** pour étiqueter et regrouper des images similaires sur Edgegap.

☑️ **Sélectionnez le tag de l'image que vous souhaitez publier** et **Téléverser l'image**. La réalisation de cette étape entraînera le téléversement de l'image de votre serveur vers le registre Edgegap et la création d'une nouvelle [version d'application](/fr/learn/orchestration/application-and-versions.md) dans votre navigateur web. **Assurez-vous de créer votre** [**du conteneur local**](/fr/learn/orchestration/application-and-versions.md#port-mapping) **lorsqu'on vous le demande,** avec les valeurs par défau&#x74;**.**

{% hint style="success" %}
Vous avez trouvé un bug et devez reconstruire/publier à nouveau ? Utilisez **Reconstruire depuis la source** pour [#id-2.-build-game-server](#id-2.-build-game-server "mention") et [#id-4.-publish-to-edgegap](#id-4.-publish-to-edgegap "mention") **rapidement avec les valeurs d'entrée actuelles de l'extension.**
{% endhint %}

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

<details>

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

`refusé : ajout de 756,6 Mio de ressource de stockage, ce qui, une fois mis à jour avec l'utilisation actuelle de 4,3 Gio, dépassera la limite supérieure configurée de 4,7 Gio` , `échec de la validation sur la référence "layer-sha256:--------" : statut inattendu de la requête PUT vers https://registry.edgegap.com/`

* Il semble que vous ayez manqué d'espace de stockage d'images sur [Registre de conteneurs](https://app.edgegap.com/registry-management/repositories/list). Envisagez de supprimer les artefacts de build inutilisés (si vous en avez) ou d'optimiser la taille du build du serveur. Si vous utilisez un Dockerfile personnalisé ou un .dockerignore, vous pourriez copier des fichiers inutiles dans votre image.

***

`Vous avez atteint la limite de votre application de 2` , `Impossible de mettre à jour le tag/version docker : Vous avez atteint la limite de versions de votre application de 2`

* Vous avez atteint les limites de notre offre gratuite, veuillez envisager de mettre à niveau votre compte. Alternativement, vous pouvez supprimer vos ressources existantes via notre [Tableau de bord](https://app.edgegap.com/).

***

Ma nouvelle version d'application n'est pas répertoriée dans le plugin/extension.

* Veuillez vous assurer que vous avez rempli le formulaire de création de version d'application à la dernière étape.

</details>

## 🚀 5. Déployer dans le cloud <a href="#id-5-deploy-to-cloud" id="id-5-deploy-to-cloud"></a>

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 éditeur Unreal Engine à votre déploiement cloud**. Récupérez l' **hôte du déploiement** à la place de l'IP du serveur et le **port externe**, ouvrez la console Unreal dans le client de jeu (tilde `~`) et saisissez `open {host}:{port}` .

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

<details>

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

Impossible de connecter les clients au serveur - `Délai de requête dépassé.` , `Délai de requête dépassé.` , `Échec de la connexion` , ou `Échec de la vérification du port`

* Tout d'abord, assurez-vous que le déploiement est prêt, et qu'il n'y a aucune exception ou erreur d'exécution 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).
* Veuillez vérifier que le réglage de port dans les paramètres netcode de votre build serveur correspond au port interne de votre [version d'application](https://app.edgegap.com/application-management/applications/list). Pour les builds de plugin, le port est défini automatiquement pour vous. Vous pouvez modifier le mappage de ports en éditant le [version d'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 randomisée pour des raisons de sécurité.
* Veuillez vous assurer d'avoir renommé votre fichier cible et configuré les builds du jeu comme décrit à l'étape [#id-1-configure-project](#id-1-configure-project "mention").

***

Mon déploiement est prêt, mais je n'arrive pas à me connecter pendant plusieurs minutes après.

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

***

`Avertissement : impossible de créer le socket pour l'adresse de liaison`

* Veuillez installer le plugin Steam Subsystem d'Epic via la boutique d'assets Fab.
* Lorsque vous utilisez l'Edgegap Integration Kit (EGIK) avec la version source de SteamCore Integration Kit (SIK) téléchargée depuis GitHub, le plugin Steam Subsystem d'Epic n'est pas inclus en raison des politiques de distribution des plugins d'Epic Games.

***

J'ai réussi à me connecter, mais mon écran est complètement noir.

* Vérifiez que vous avez le bon **Game Default Map** défini dans **Edit / Project Settings / Maps & Modes**.
* Vérifiez que [la vérification de compatibilité de version d'Unreal Engine a été désactivée](#id-2.-configure-game-server-builds) dans `DefaultEngine.ini`.

***

Mon déploiement s'est arrêté/redémarré et je n'arrive plus à accéder à ses journaux.

* 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 identifier la cause racine.
* Nous conservons les journaux uniquement pendant la durée du déploiement ; si vous souhaitez les consulter 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 [/pages/5d7a2f9e0583a99d78071f1c4b8a7892a518534a#id-5.-deployment-stopped](https://docs.edgegap.com/fr/pages/5d7a2f9e0583a99d78071f1c4b8a7892a518534a#id-5.-deployment-stopped "mention") pour découvrir toutes les causes de l'arrêt de votre déploiement.

***

Mon déploiement s'est arrêté automatiquement après X minutes.

* Les déploiements du niveau gratuit ont une limite de 60 minutes ; veuillez envisager de mettre à niveau votre compte.
* Tous les déploiements seront terminés après 24 heures d'exécution conformément à notre politique d'assainissement 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 longue durée, envisagez d'utiliser [Flottes privées](/fr/learn/orchestration/flottes-privees.md) avec [Persistance](/fr/learn/orchestration/persistance.md).
* Voir [/pages/5d7a2f9e0583a99d78071f1c4b8a7892a518534a#id-5.-deployment-stopped](https://docs.edgegap.com/fr/pages/5d7a2f9e0583a99d78071f1c4b8a7892a518534a#id-5.-deployment-stopped "mention") pour découvrir toutes les causes de l'arrêt de votre déploiement.

***

Que se passera-t-il si un joueur quitte mon déploiement ?

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

***

Mon serveur affiche une utilisation CPU de 100 % après être devenu prêt.

* Ce n'est peut-être pas un problème, car les moteurs de jeu ont tendance à effectuer des opérations gourmandes en CPU lors de l'initialisation des serveurs. Si l'utilisation du CPU ne baisse pas après 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 d'application.
* Réduire le tick rate peut aider à maîtriser l'utilisation du CPU en traitant moins de messages.
* Vous êtes limité à 1,5 vCPU et 3 Go de mémoire (RAM) dans le niveau gratuit.
* Vous pouvez modifier les ressources allouées pour les versions existantes, ou dupliquer votre version et modifier les ressources dans la nouvelle copie. Aucune de ces actions ne nécessite de reconstruire votre serveur.

***

Mon déploiement redémarre à répétition et affiche l'erreur `arrêt OOM`

* Cela est dû au dépassement de la quantité de mémoire allouée. Envisagez d'optimiser l'utilisation mémoire avec le pooling d'objets, la compression ou la suppression des objets inutiles dans votre scène.
* Vous êtes limité à 1,5 vCPU et 3 Go de mémoire (RAM) dans le niveau gratuit.
* Vous pouvez modifier les ressources allouées pour les versions existantes, ou dupliquer votre version et modifier les ressources dans la nouvelle copie. Aucune de ces actions ne nécessite de reconstruire votre serveur.

***

Parfois, l'utilisation de la mémoire (RAM) de mon serveur monte en flèche jusqu'à une valeur élevée ; est-ce un problème ?

* Tant que vous restez dans la quantité de mémoire allouée à la version d'application, ce n'est pas un problème.
* Dépasser la quantité de mémoire allouée à la version d'application entraînera `arrêt OOM` (voir ci-dessus).

***

Les performances de mon serveur seront-elles affectées par d'autres serveurs exécutés sur la même machine ?

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

</details>

## 👉 Étapes suivantes

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é.

### Arrêter les déploiements

Une fois que le match se termine (ou que les joueurs partent), votre déploiement peut être arrêté pour économiser des coûts. [Des déploiements ](https://edgegap.com/blog/how-session-fill-rate-affects-your-multiplayer-hosting-costs)[vides ou seulement partiellement remplis ](https://edgegap.com/blog/how-session-fill-rate-affects-your-multiplayer-hosting-costs)[peuvent augmenter inutilement vos coûts !](https://edgegap.com/blog/how-session-fill-rate-affects-your-multiplayer-hosting-costs)

Si vous avez suivi ce guide et construit avec notre extension Docker, vous pouvez simplement appeler la méthode `FGenericPlatformMisc::RequestExit` . Nous avons ajouté un script qui gère le processus de votre serveur dans l'image packagée, lequel effectuera automatiquement un arrêt gracieux du déploiement.

Pour personnaliser la gestion du cycle de vie du serveur, modifiez notre [exemple `StartServer.sh`](https://github.com/edgegap/edgegap-unreal-buildutils/blob/main/StartServer.sh)  script.

{% hint style="info" %}
Vous préférez gérer le cycle de vie depuis Unreal ? Voir [Outils pour développeurs](/fr/unreal-engine/developer-tools.md#integration-kit) pour le blueprint d'auto-arrê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/matchmaking/matchmaker-in-depth.md#injected-environment-variables) - fournies automatiquement par Edgegap lors de l'utilisation de [Matchmaking](/fr/learn/matchmaking.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" %}
Importez notre [Outils pour développeurs](/fr/unreal-engine/developer-tools.md#integration-kit) pour **lire facilement des variables typées à l'aide des Blueprints**.
{% endhint %}

### Profilage des serveurs

Pour comprendre et optimiser les problèmes de performance du serveur sur Edgegap, explorez [Déploiements](/fr/learn/orchestration/deployments.md#container-logs), [Déploiements](/fr/learn/orchestration/deployments.md#container-metrics), et plus encore [Déploiements](/fr/learn/orchestration/deployments.md#dashboard-monitoring) outils à votre disposition.

Vous pouvez également utiliser les outils de profilage Unreal Engine existants avec Edgegap :

* [Configurez le traçage dans votre serveur Unreal Engine](https://dev.epicgames.com/documentation/en-us/unreal-engine/developer-guide-to-tracing-in-unreal-engine) (événements intégrés et personnalisés) :
  * enregistrez la trace sur le disque du serveur avec `-tracefile`, téléversez vers un stockage tiers et analysez hors ligne,
  * ou diffusez les données de trace avec [Déploiements](/fr/learn/orchestration/deployments.md#port-mapping) pour le port interne `1981` sur le protocole UDP.
* Analyser [Insights mémoire](https://dev.epicgames.com/documentation/en-us/unreal-engine/memory-insights-in-unreal-engine) et [Insights réseau](https://dev.epicgames.com/documentation/en-us/unreal-engine/networking-insights-in-unreal-engine) et [#optimize-server-builds](#optimize-server-builds "mention").

### Automatisation des sessions

Lors des tests de nouvelles versions avec des développeurs ou des équipes QA, l’étape de session est souvent ignorée et les joueurs se connectent directement aux déploiements, tout en codant en dur ou en désactivant les fonctionnalités liées à la session. Cela permet d’accélérer l’itération de développement et d’isoler les effets secondaires de la session des fonctionnalités du serveur.

{% hint style="warning" %}
**Démarrer vos déploiements manuellement et coller les URL et les ports ne suffira pas pour un jeu en direct.**
{% endhint %}

Automatisez les flux de jeu populaires pour [Sessions de joueur](/fr/learn/orchestration/sessions-de-joueur.md) et la montée en charge des serveurs avec l’une des options suivantes :

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

* Jeux compétitifs
* Matchs à la demande
* Classement de compétence et/ou\
  Règles personnalisées
  {% endcolumn %}

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

* Persistant ou social
* Sessions longues
* Affectation automatique et/ou\
  Recherche personnalisée
  {% endcolumn %}

{% column width="33.33333333333333%" %}
Back-end personnalisé :

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

### Optimiser les builds

**Configurez le découpage des assets afin d'isoler les assets réservés au client des assets du serveur.**

* Explorez [les techniques et recommandations de découpage des assets](https://dev.epicgames.com/documentation/en-us/unreal-engine/preparing-assets-for-chunking-in-unreal-engine) d'Epic.

**Excluez les assets et plugins réservés au client, qui ne sont pas nécessaires au fonctionnement du serveur.**

* En savoir plus sur [l'exclusion d'assets et de plugins au moment du build](https://dev.epicgames.com/community/learning/tutorials/Kp1k/unreal-engine-build-time-asset-and-plugin-exclusion).

**Passez en revue votre stratégie de cuisson du contenu.**

* Envisagez [Cooking on the Fly (COTF)](https://dev.epicgames.com/documentation/en-us/unreal-engine/build-operations-cooking-packaging-deploying-and-running-projects-in-unreal-engine#cookonthefly) pour retarder la cuisson des assets client et accélérer les builds du serveur.

**Implémentez le Level Streaming pour réduire la charge mémoire à l'exécution.**

* Si votre conception maintient les joueurs principalement ensemble dans la même zone de la carte, [le level streaming peut réduire l'utilisation mémoire de votre serveur](https://dev.epicgames.com/documentation/en-us/unreal-engine/level-streaming-in-unreal-engine) de plus de 60 % et améliorer les performances du client !

**N'incluez que ce dont vous avez absolument besoin pour que votre serveur fonctionne.**

* Copier des fichiers inutilisés dans vos images entraîne un gonflement de l'image, des téléchargements plus longs, des vitesses de cache plus lentes et un démarrage global du serveur plus lent. [Passez en revue les suggestions d'optimisation des images Docker](https://docs.docker.com/build-cloud/optimization/#dockerignore-files).

<details>

<summary>Exemple <code>fichier .dockerignore</code> pour supprimer les fichiers supplémentaires.</summary>

```docker
# Fichiers objets compilés
*.slo
*.lo
*.o
*.obj

# En-têtes précompilés
*.gch
*.pch

# Bibliothèques dynamiques compilées
*.so
*.dylib
*.dll

# Fichiers de module Fortran
*.mod

# Bibliothèques statiques compilées
*.lai
*.la
*.a
*.lib

# Exécutables
*.exe
*.out
*.app
*.ipa

# Ces fichiers de projet peuvent être générés par le moteur
*.xcodeproj
*.xcworkspace
*.sln
*.suo
*.opensdf
*.sdf
*.VC.db
*.VC.opendb

# Assets précompilés
**/SourceArt/**/*.png
**/SourceArt/**/*.tga

# Builds
**/Build/*

# Autoriser les fichiers PakBlacklist-<BuildConfiguration>.txt
!**/Build/*/
**/Build/*/**
!**/Build/*/PakBlacklist*.txt

# Ne pas ignorer les fichiers d'icône dans Build
!**/Build/**/*.ico

# Fichiers de configuration générés par l'éditeur
**/Saved/*
**/Intermediate/*
**/DerivedDataCache/*
**/Binaries/*
**/Build/*
**/Releases/*
**/Packaged/*
```

</details>

**Envisagez d'utiliser** [**des builds Docker multi-étapes (lien)**](https://docs.docker.com/build/building/multi-stage/)**.**

* Séparez les grandes dépendances du serveur dans une image distincte à réutiliser dans les builds multi-étapes. Docker mettra en cache chaque couche et réutilisera simplement la version précédente en ignorant le téléversement de cette partie, sauf instruction explicite, ce qui vous fera économiser de la bande passante et du temps d'attente jusqu'à la fin du téléversement.
* Si vous ne savez pas pourquoi l'une de vos commandes Dockerfile renvoie une erreur, essayez de déboguer localement. Créez une nouvelle étape juste avant que le problème ne se produise (ajoutez une deuxième `FROM` commande), utilisez `--target` pour indiquer au processus de build de s'arrêter à l'étape problématique, puis `docker exec -it {container} /bin/bash` pour entrer dans un terminal interactif à l'intérieur de votre conteneur. Ensuite, vous pouvez utiliser les commandes shell de votre image de base pour approfondir l'analyse (par exemple, `top` sur Ubuntu).

### Personnaliser l'image

Nous prenons également en charge l'ajout de votre propre Dockerfile pour les utilisateurs qui ont besoin de davantage 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. Nous allons maintenant partager quelques conseils et bonnes pratiques « à faire soi-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.

[^1]: jeton d'accès personnel

[^2]: désactiver la vérification de compatibilité

[^3]: utiliser IpNetDriver

[^4]: définir les taux de tick client/serveur et le délai d'attente

[^5]: définir la build serveur comme cible par défaut

[^6]: activer les journaux

[^7]: ne pas utiliser de vérifications

[^8]: ne pas empaqueter le contenu de l'éditeur

[^9]: ne pas empaqueter l'interface Slate (éditeur)

[^10]: ne pas compiler CEF3 (éditeur)

[^11]: créer le répertoire parent

[^12]: copier le fichier steamclient.so

[^13]: autoriser l'exécution du client Steam

[^14]: trouver dans votre portail éditeur Steam
