uUnreal Engine

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

✔️ Préparation

chevron-rightInstaller l'extension Edgegap Quickstart Dockerarrow-up-righthashtag
circle-info

Confiant dans vos builds de serveur ? Passer à Unreal Engine et Fonctionnalités avancées.

⚙️ 1. Configurer le projet

circle-info

Cette méthode ne nécessite pas de télécharger le code source d'Unreal Engine, ni de le compiler depuis les sources !

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

☑️ Saisir le nom d'utilisateur GitHub et PAT depuis ✔️ Préparation, pour télécharger des dépendances depuis GitHub.

🔧 2. Compiler le serveur de jeu

Nous allons maintenant compiler et cuisiner votre projet, et le empaqueter dans une image docker facilement réutilisable.

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

  • Nom de l'image est un identifiant unique de votre choix, étiquetant votre build de serveur avant l'expédition.

    • Habituellement, 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 pour le marquage, par ex. 2024.01.30-16.23.00-UTC (par défaut).

☑️ Construire le projet une fois que vous êtes satisfait de votre configuration. Compléter cette étape ajoutera une nouvelle image contenant votre exécutable serveur linux dans votre client Docker local.

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

🧪 3. Tester le serveur localement

☑️ Sélectionnez le tag d'image que vous souhaitez exécuter localement (les images distantes seront téléchargées). Optionnellement, davantage arguments docker runarrow-up-right peuvent être fournis pour personnaliser votre test local :

  • -p 7777:7777/udp - il s'agit du mappage de ports,

  • -e ARBITRIUM_PORT_GAMEPORT_INTERNAL=7777 est une variable d'environnement simulant un véritable déploiement Edgegap, indiquant à votre serveur de jeu le port interne sur lequel écouter les connexions des joueurs.

☑️ Une fois que vous êtes satisfait de votre configuration cliquez sur Démarrer le serveur local. L'achèvement 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 de l'éditeur Unreal Engine (PIE) à votre conteneur 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 de port externe randomisée du conteneur dans l'interface Docker.

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

chevron-rightDépannage et FAQhashtag

Impossible de connecter des clients au serveur - La requête a expiré. , 请求超时 , ConnectionFailed , ou La vérification du port a échoué

  • Tout d'abord, assurez-vous que le conteneur est en marche et qu'il n'y a pas d'erreurs d'exécution dans vos logs.

  • Veuillez vérifier que les valeurs de ports dans la commande docker run correspondent.

  • Veuillez vous assurer que votre client de jeu se connecte au port externe indiqué sur la page de 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 ⚙️ 1. Configurer le projet.


Mon conteneur est en marche mais je ne peux pas me connecter pendant plusieurs minutes après.

  • Une fois qu'un conteneur est lancé, l'initialisation de votre moteur de jeu commence. Ce processus peut prendre de quelques secondes à plusieurs minutes, et le serveur n'accepte pas les connexions de joueurs pendant cette période.

  • Envisagez d'optimiser l'initialisation de votre serveur pour réduire cette durée.

  • Les clients de jeu doivent réessayer la connexion par intervalles d'une seconde pendant un temps limité (selon la durée d'initialisation), après quoi ils devraient revenir au matchmaking.

  • Envisagez d'ajouter une scène de chargement afin que le serveur puisse effectuer l'initialisation (et le travel dans le cas d'Unreal Engine) en même temps que les clients, tout en synchronisant l'état des deux.


Attention : Impossible de créer une socket pour l'adresse de liaison

  • Veuillez installer le plugin Steam Subsystem d'Epic via la boutique d'assets Fab.

  • Lors de l'utilisation de 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.


Je me suis connecté mais mon écran est complètement noir.

  • Vérifiez que vous avez la bonne Carte par défaut du jeu définie sous Édition / Paramètres du projet / Cartes & Modes.

☁️ 4. Publier sur Edgegap

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

☑️ Sélectionnez le tag d'image que vous souhaitez publier et Télécharger l'image. L'achèvement de cette étape entraînera le téléchargement de votre image serveur vers le registre Edgegap et la création d'une nouvelle version d'application dans votre navigateur web. Assurez-vous de créer votre mappage de ports lorsqu'on vous le demande, avec les valeurs par défaut.

circle-check

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

🚀 5. Déployer dans le cloud

☑️ Nous allons maintenant effectuer le test final et connecter votre éditeur Unreal Engine à votre déploiement cloud. Récupérez votre Hôte du déploiement à la place de l'IP du serveur et le port externedu déploiement, ouvrez la console Unreal dans le client de jeu (tilde ~) et tapez open {host}:{port} .

chevron-rightDépannage et FAQhashtag

Impossible de connecter des clients au serveur - La requête a expiré. , 请求超时 , ConnectionFailed , ou La vérification du port a échoué

  • Tout d'abord, assurez-vous que le déploiement est Prêt et qu'il n'y a pas d'exceptions ou d'erreurs d'exécution dans le journal de votre déploiement. Si votre déploiement s'est arrêté, inspectez les logs dans notre Tableau de bordarrow-up-right.

  • Veuillez vérifier que le paramètre de port dans les réglages netcode de votre build serveur correspond au port interne dans votre version d'apparrow-up-right. Pour les builds utilisant un plugin, le port est défini automatiquement pour vous. Vous pouvez changer le mappage de port en modifiant le version d'apparrow-up-right 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 de 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 Unreal Engine.

  • Êtes-vous situé en Chine et utilisez-vous Smart Fleetsarrow-up-right? Votre connexion peut être bloquée par la Grande Muraille (Great Firewall). Envisagez d'ajouter un serveur situé en Chine à votre flotte, ou d'utiliser un VPN pour vous connecter.


Mon déploiement est prêt mais je ne peux 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 à plusieurs minutes, et le serveur n'accepte pas les connexions de joueurs pendant cette période.

  • Envisagez d'optimiser l'initialisation de votre serveur pour réduire cette durée.

  • Les clients de jeu doivent réessayer la connexion par intervalles d'une seconde pendant un temps limité (selon la durée d'initialisation), après quoi ils devraient revenir au matchmaking.

  • Envisagez d'ajouter une scène de chargement afin que le serveur puisse effectuer l'initialisation (et le travel dans le cas d'Unreal Engine) en même temps que les clients, tout en synchronisant l'état des deux.


Attention : Impossible de créer une socket pour l'adresse de liaison

  • Veuillez installer le plugin Steam Subsystem d'Epic via la boutique d'assets Fab.

  • Lors de l'utilisation de 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.


Je me suis connecté mais mon écran est complètement noir.


Mon déploiement s'est arrêté/redémarré et je ne peux plus accéder à ses logs.

  • Dans le cas où le processus serveur plante à cause d'une exception, notre système tentera de redémarrer automatiquement le serveur. Envisagez de tester votre serveur localement pour découvrir la cause racine.

  • Nous ne conservons les logs que pendant la durée du déploiement, si vous souhaitez inspecter les logs après l'arrêt du déploiement, veuillez intégrer un stockage de logs tiersarrow-up-right.

  • Voir Déploiements pour découvrir toutes les causes d'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 de nettoyage des serveurs, pour la maintenance de l'infrastructure, et pour éviter l'accumulation de coûts inattendus lorsque le déploiement n'a pas été correctement arrêté. Pour les serveurs fonctionnant longtemps, envisagez d'utiliser Flottes privées avec Persistance.

  • Voir Déploiements pour découvrir toutes les causes d'arrêt de votre déploiement.


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

  • Par défaut, les serveurs n'acceptent pas le rejet des connexions des joueurs. L'authentification des joueurs relève de vos développeurs, car de nombreuses méthodes et fournisseurs d'authentification peuvent être utilisés.

  • Les clients de jeu peuvent stocker localement les informations de connexion pour tenter une reconnexion en cas de crash inattendu du client.

  • Pour permettre aux joueurs de rejoindre des parties en cours, envisagez d'utiliser Regard approfondi ou Sessionsarrow-up-right.


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

  • Cela peut ne pas être un problème, car les moteurs de jeu ont tendance à effectuer des opérations lourdes en CPU pendant les initialisations serveur. Si l'utilisation du CPU ne diminue pas après 2-3 minutes depuis le démarrage du déploiement, vous devrez peut-être optimiser votre serveur ou augmenter les ressources de la version d'app.

  • Réduire le tick rate peut aider à contrôler 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 augmenter les ressources allouées lors de la création d'une nouvelle version d'app. Vous pouvez dupliquer votre version d'app dans notre Tableau de bord et ajuster ces valeurs selon vos besoins, sans reconstruire votre serveur ou image.


Mon déploiement redémarre de manière répétée et affiche l'erreur OOM kill

  • Ceci est causé par le dépassement de la quantité de mémoire allouée. Envisagez d'optimiser l'utilisation de la mémoire avec du pooling d'objets, de la compression, ou en supprimant les objets inutiles de votre scène.

  • Vous êtes limité à 1,5 vCPU et 3 Go de mémoire (RAM) dans le niveau gratuit.

  • Vous pouvez augmenter les ressources allouées lors de la création d'une nouvelle version d'app. Vous pouvez dupliquer votre version d'app dans notre Tableau de bord et ajuster ces valeurs selon vos besoins, sans reconstruire votre serveur ou image.


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

  • Tant que vous restez dans la quantité de mémoire allouée à la version d'app, ce n'est pas un problème.

  • Le dépassement de la quantité de mémoire allouée à la version d'app provoquera OOM kill (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 ou d'autres serveurs sur l'infrastructure partagée. Avec Edgegap, il n'y a pas de voisins bruyants.

👉 Prochaines étapes

Arrêter les déploiements

En savoir plus sur les différentes méthodes pour arrêter les déploiements une fois le match terminé et les joueurs partis.

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 gérant votre processus serveur dans l'image empaquetée, qui effectuera automatiquement un arrêt gracieux du déploiement.

Pour personnaliser la gestion du cycle de vie du serveur, modifiez notre exemple StartServer.sharrow-up-right script.

circle-info

Vous préférez gérer le cycle de vie depuis Unreal ? Voir Outils pour développeurs pour le blueprint d'API d'arrêt autonome.

circle-exclamation

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 :

Vérifier si l'instance actuelle est un client de jeu ou un serveur en vérifiant si la variable Edgegap est définie :

Profilage des serveurs

Pour comprendre et optimiser les problèmes de performance des serveurs sur Edgegap, explorez Déploiements, Déploiements, et plus Déploiements d'outils à votre disposition.

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

Matchmaking

Démarrer vos déploiements manuellement, coller l'URL et les ports ne suffira pas pour un jeu en ligne.

circle-check

Optimiser les builds serveur

Configurer le découpage des assets pour isoler les assets réservés au client des assets serveur.

Exclure les assets et plugins qui sont uniquement client et non nécessaires pour l'exécution du serveur.

Révisez votre stratégie de cuisson du contenu.

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

N'incluez que ce dont votre serveur a absolument besoin pour fonctionner.

chevron-rightExemple .dockerignore fichier pour supprimer les fichiers supplémentaires.hashtag

Envisagez d'utiliser les builds Docker multi-étapes (lien)arrow-up-right.

  • Séparez les grandes dépendances serveur dans une image séparée à réutiliser dans des builds multi-étapes. Docker mettra en cache chaque couche et réutilisera simplement la version précédente et évitera de téléverser cette partie sauf instruction contraire, vous faisant ainsi économiser de la bande passante et du temps d'attente pour la fin du téléversement.

  • Si vous ne comprenez 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 seconde FROM commande), utilisez --target pour demander 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 des commandes shell dans votre image de base pour enquêter davantage (par ex. top sur ubuntu).

Personnaliser l'image serveur

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 de build, de dépendances superflues, ou nécessitant un processus de démarrage plus complexe. Nous allons maintenant partager quelques conseils et bonnes pratiques "faites-le vous-même".

Mis à jour

Ce contenu vous a-t-il été utile ?