Freigeben über


Erstellen und Bereitstellen von Linux-Builds

Dieser Artikel enthält Details zum Erstellen von Linux-Builds auf PlayFab-Multiplayerservern, sowohl mithilfe von Containern als auch mithilfe von Prozessen.

Erstellen und Bereitstellen von Linux-Containerimages

In diesem Abschnitt werden bestimmte Schritte beschrieben, die Sie beim Erstellen und Bereitstellen von Linux-Containerimages unterstützen.

Wie unter Erstellen von virtuellen Computern (VMs) beschrieben, konfigurieren Sie VMs so, dass sie bei der Nutzung unseres Diensts automatisch als Spieleserver global bereitgestellt werden, je nach Budget und Bedarf. Dazu erstellen Sie VMs nicht explizit, sondern definieren Parameter, die bestimmen, wie sie in Ihrem Namen erstellt werden. Dieser Vorgang wird als Bereitstellen oder Erstellen eines Builds bezeichnet.

PlayFab Multiplayer-Server können sowohl Linux-basierte als auch Windows-basierte Spieleserver bereitstellen. Die Art und Weise, wie Builds für Linux-Container bereitgestellt werden, ähnelt Windows-Containern mit einigen wichtigen Unterschieden. Weitere Informationen finden Sie unter Unterschiede zwischen Windows- und Linux-Containerimages. Wenn Sie PowerShell/API zum Verwalten von Linux-Containern verwenden möchten, lesen Sie Verwalten von Linux-Containerimages mithilfe von APIs.

Wenn Sie Linux-basierte Spieleserver verwenden, müssen Sie anstelle eines verwalteten Containerimages Ihr Containerimage erstellen und in eine Containerregistrierung hochladen. Damit Sie Container einfach hochladen können, enthält Ihr Konto eine Azure Containerregistrierung.

Erforderliche Kenntnisse

Einrichten Ihres Windows-Entwicklungsgeräts

Dieser Schritt ist nur erforderlich, wenn Sie ein Windows-Entwicklungsgerät zum Erstellen von Linux-Containerimages verwenden möchten. Alternativ können Sie Linux-Betriebssystemgeräte, VMs oder Dual-OS-Systeme verwenden, auf denen Docker installiert ist.

mit Windows-Subsystem für Linux (WSL) können Sie Ihr Entwicklungsgerät in der vertrauten Windows-Umgebung verwenden, um Linux-Containerimages zu erstellen und zu verwalten. Die Verwendung von WSL bedeutet, dass Sie keinen Mehraufwand für einen herkömmlichen virtuellen Linux-Computer oder ein Dual-Boot-Setup benötigen.

  1. Installieren Sie WSL 2. Stellen Sie sicher, dass Sie Ihren Computer neu starten und WSL 2 verwenden. Außerdem müssen Sie das Linux-Kernelupdatepaket installieren.
  2. Installieren Sie eine Linux-Distribution, die WSL verwendet. Obwohl unsere VMs Ubuntu verwenden, können Sie eine beliebige Distribution für Ihr Containerimage auswählen. Erwägen Sie die Verwendung von Ubuntu 20.04 Long-Term Support (LTS) oder höher.
  3. Installieren Sie Docker Desktop für Windows mit WSL 2. Einen direkten Downloadlink finden Sie unter Docker Desktop für Windows (extern).

Überprüfen der Einrichtung von WSL 2

  • Öffnen von PowerShell
  • Führen Sie wsl -l -v aus, um zu überprüfen, ob sowohl docker-desktop- als auch ubuntu-Anwendungen WSL 2 (Version 2) ausführen.

Überprüfen der ordnungsgemäßen Einrichtung von Docker für WSL

  • Öffnen des WSL-Terminals
  • Führen Sie die Docker-Version aus, um zu bestätigen, dass Docker installiert ist und das verwendete Betriebssystem Linux ist.

Tipp

Verwenden Sie zum Entwickeln und Debuggen von Linux-C++-Anwendungen WSL in Visual Studio 2019.

Abrufen der Anmeldeinformationen für Die PlayFab-Containerregistrierung

Das Azure Containerregistrierungskonto ist Ihrem PlayFab-Konto zugeordnet. Nur Sie haben Zugriff auf die dort hochgeladenen Container. Diese Azure Containerregistrierung ist kostenlos.

  • Wählen Sie im Game Manager Ihren Spieltitel und dann Multiplayerserver> aus. Wählen Sie Neuer Build aus, um die Builderstellungsseite zu öffnen.
  • Wählen Sie Linux als Betriebssystem des virtuellen Computers aus.
  • Notieren Sie sich die Anmeldeinformationen – Name, Kennwort und customer5555555.azurecr.io, da diese Informationen später benötigt werden.

Neuer Build mit ausgewählter Linux-Plattform

Wenn Sie PowerShell/API verwenden möchten, rufen Sie die GetContainerRegistryCredentials-API auf, um eine Containerregistrierungsadresse, einen Benutzernamen und ein Kennwort abzurufen.

Erstellen und Pushen von Linux-Containerimages in Azure Container Registry

Mithilfe dieser Schritte können Sie Ihr benutzerdefiniertes Linux-Containerimage erstellen und pushen.

Integrieren Ihrer Spieleserveranwendung in GSDK

Ähnlich wie bei der Verwendung von Windows-Servern müssen Sie Ihren Spielservercode in das PlayFab Multiplayer Server SDK (GSDK) integrieren. Die GSDK-Integration kann Teil Ihres Containerimages sein.

Anweisungen finden Sie unter Erstellen eines Spieleserverbuilds und Integrieren Ihres Titels in das PlayFab Game Server SDK (GSDK).

Erstellen einer Dockerfile-Datei

Ein Dockerfile ist eine Textdatei ohne Erweiterung und enthält alle Befehle, die zum Erstellen eines bestimmten Containerimages erforderlich sind.

  1. Editor oder einen geeigneten Editor öffnen
  2. Fügen Sie bestimmte Befehle hinzu, die zum Ausführen und Erstellen eines Containers erforderlich sind. Ein Beispiel für diese Datei finden Sie im DockerFile-Beispiel im Wrapper-Beispiel. Weitere Informationen zum Erstellen dieser Datei finden Sie unter Dockerfile-Format (extern) und Bewährte Methoden beim Erstellen von Dockerfile (extern).
  3. Speichern Sie die Datei als Dockerfile, idealerweise in einem leeren Ordner/Verzeichnis. Sie sollten weitere Dateien hinzufügen, die zum Erstellen des Containerimages in diesem Ordner erforderlich sind.

Speichern von Anweisungen bei Verwendung von Editor:

  • Wählen Sie Datei>Speichern unter... aus, um die Speicheroptionen zu öffnen.
  • Wechseln Sie zu dem Ordner, in dem Sie die Datei speichern möchten.
  • Verwenden Sie unter Dateiname:"Dockerfile", einschließlich der Anführungszeichen.
  • Wählen Sie für Dateityp die Option Alle Files
  • Utf-8-Codierung auswählen
  • Wählen Sie Speichern aus.

Erstellen und Hochladen eines Linux-Containerimages

  1. Öffnen Sie Ihr Linux-Terminal, auf dem Docker installiert ist.
  2. Führen Sie die folgenden Docker-Befehle mit den Anmeldeinformationen aus, die Sie aus dem vorherigen Schritt erhalten haben. Befolgen Sie dann die Anweisungen auf dem Bildschirm, um Ihren Benutzernamen und Ihr Kennwort einzugeben.
docker login customer5555555.azurecr.io

Docker sign in meldet Sie bei der Azure Containerregistrierung an, wie in Game Manager gezeigt.

username: customer5555555
password: HRDFOdIebJkvBAS+usa55555555
  1. Erstellen des Containerimages

Führen Sie den folgenden Befehl aus, um das Containerimage mithilfe der Dockerfile-Datei in Ihrem aktuellen Verzeichnis zu erstellen. Am Ende des Docker-Buildbefehls befindet sich ein ".".

Das Flag -t gibt die Name:Tag-Informationen für Ihr neues Containerimage an. Der Name und das Tag werden verwendet, wenn der Build erfolgreich ist. Wenn Buildfehler vorhanden sind, müssen Sie diese beheben, bevor Sie mit dem nächsten Schritt fortfahren.

Im folgenden Beispiel ist der Repositoryname customer5555555.azurecr.io/pvp_gameserver und tag ist v1. Weitere Informationen finden Sie unter docker build command reference (externer Link) und Building Dockerfile (externer Link).For more information, see docker build command reference (external link) and Building Dockerfile (external link).For more information, see docker build command reference (external link) and Building Dockerfile (external link).For more information

Bei Verwendung von WSL wird das Windows C:-Laufwerk unter /mnt/c eingebunden.

  • Führen Sie dann cd /mnt/c/path/to/your/Dockerfile aus, um zu dem Pfad zu wechseln, in dem sich Ihre Dockerfile-Datei befindet. Weitere Informationen finden Sie unter Zugreifen auf Laufwerk C.
docker build -t customer5555555.azurecr.io/pvp_gameserver:v1 .

Tipp

Wenn Sie Linux verwenden, führen Sie pwd aus, um herauszufinden, in welchem Verzeichnis Sie sich derzeit befinden.

  1. Hochladen des Containerimages

Führen Sie die Befehle aus, um das Image an Ihre PlayFab-Containerregistrierung zu pushen. Wählen Sie eine aussagekräftige und hilfreiche Kombination aus Name:Tag für Ihr hochgeladenes Containerimage aus. Verwenden Sie docker push oder einen anderen Containerregistrierungsclient, um Ihren Container in die von PlayFab betriebene Registrierung hochzuladen.

docker tag hello-world customer5555555.azurecr.io/pvp_gameserver:v1
docker push customer5555555.azurecr.io/pvp_gameserver:v1

Überprüfen, ob Ihr Container hochgeladen wurde

Wechseln Sie nach dem Hochladen des Containers zurück zur Seite Neuer Build in Game Manager, und wählen Sie Images aktualisieren aus. Sie können das Bild in der Liste sehen und auswählen. Alternativ können Sie den API-Aufruf ListContainerImages verwenden, um Ihre hochgeladenen Containerimages aufzulisten.

Jetzt können Sie Server bereitstellen. Anweisungen finden Sie unter PlayFab-Portal – Game Manager und Verwenden von PowerShell/API.

Unterschiede zwischen Windows- und Linux-Containerimages

Für viele Entwickler ist die Verwendung von verwalteten Windows-Containern die bevorzugte einfache und standardmäßige Wahl. Linux-Containerimages, die auf virtuellen Computern bereitgestellt werden, profitieren jedoch von einem günstigeren Stundensatz.

Notiz

Sie können Ihre Spieleserver vollständig anpassen, unabhängig davon, ob Sie Windows- oder Linux-Containerimages verwenden. Wenn Sie Windows-Server verwenden, passen Sie das verwaltete Containerimage an, indem Sie Ressourcen hochladen.

In der folgenden Tabelle sind einige Unterschiede beim Erstellen und Verwenden aufgeführt.

Entwickleroptionen Windows Linux
Entwicklungsgerätebetriebssystem Windows-Betriebssystem Windows-Subsystem für Linux (WSL) oder Linux-Betriebssystem (mit dualen Betriebssystemen oder VMs)
Containerimage Einfache Bereitstellung mithilfe unseres verwalteten Containerimages. Sie können den Container weiterhin anpassen, indem Sie zusätzliche Dateien als Ressourcen hochladen. Es ist mehr Arbeit erforderlich, da Sie ein eigenes benutzerdefiniertes Containerimage erstellen müssen, das Ihnen die vollständige Kontrolle bietet.

Verwalten von Linux-Containerimages mithilfe von APIs

Sie können APIs verwenden, um Linux-Containerimages zu verwalten. Verwalten Sie sie für den Rest des Buildlebenszyklus (Anzeigen der Nutzung, Aktualisieren von Regionen und StandingBy-Konfigurationen, Löschen) mithilfe von Game Manager.

  • GetContainerRegistryCredentials: Abrufen einer Containerregistrierungsadresse, eines Benutzernamens und eines Kennworts
  • ListContainerImages und ListContainerImageTags: Stellen Sie sicher, dass Ihr neues Image und Tag aufgelistet sind (manchmal kann es einige Minuten dauern, bis das Image vollständig im System registriert ist).
  • CreateBuildWithCustomContainer: Erstellen Sie einen Build mit einem benutzerdefinierten Container. Geben Sie das markierte Bild an, das Sie zuvor hochgeladen haben. Stellen Sie sicher, dass die folgenden Eigenschaften für die Anforderung festgelegt sind:
    • ContainerImageReference : Der Imagename und das Tag, das zuvor hochgeladen wurde. Diese Werte sind in ListContainerImages und ListContainerImageTags sichtbar.
    • ContainerFlavor – "CustomLinux"
    • ContainerRunCommand (Optional): Wenn Ihr Container nicht über einen Standardbefehl verfügt, verwenden Sie diese Eigenschaft, um den auszuführenden Befehl zusammen mit allen Argumenten bereitzustellen.

Packen von Ressourcen für prozessbasierte Linux-Server

Wenn Sie Linux im Prozessmodus (anstelle des Containermodus) verwenden, laden Sie Ihren Spielserver als Medienobjektarchiv und nicht als Containerimage hoch. In diesem Abschnitt werden wichtige Verpackungsanforderungen behandelt.

Unterstützte Archivformate

Assets sollten als .tar.gzDateien oder .tar hochgeladen werden, damit Unix-Dateiberechtigungen (z. B. das Execute-Bit) während der Extraktion beibehalten werden können.

Warnung

.zip -Dateien behalten unix-Dateiberechtigungen unter Linux nicht bei. Wenn Sie die ausführbare Datei Ihres Linux-Spielservers in ein .zip Archiv hochladen, verliert er die Ausführungsberechtigung und kann nicht mit dem Fehler "Berechtigung verweigert" gestartet werden. Um dieses Problem zu umgehen, verwenden Sie stattdessen stattdessen .tar.gz , oder legen Sie den Startbefehl auf ein Shellskript fest, das auf Ihrer ausführbaren Datei ausgeführt wird chmod +x , bevor Sie sie starten.

Anforderungen an Tar.gz- und TAR-Archivstruktur

Beim Extrahieren .tar oder .tar.gz Archiven entfernt PlayFab Multiplayer Server die erste Verzeichnisebene aus dem Archiv (entspricht tar --strip-components=1). Ihr Archiv muss ein einzelnes Wrapperverzeichnis der obersten Ebene mit allen Darin enthaltenen Spieldateien enthalten.

Ordnungsgemäße Struktur – Dateien in einem Verzeichnis der obersten Ebene:

MyGameServer/
├── MyGame.x86_64
├── MyGame_Data/
│   └── ...
├── UnityPlayer.so
└── start_server.sh

Erstellen Sie das Archiv mit:

tar czf MyGameServer.tar.gz MyGameServer/

Achtung

Wenn sich Ihre Dateien im Stammverzeichnis des Archivs ohne Wrapperverzeichnis befinden, werden sie während der Extraktion im Hintergrund übersprungen . Ihr Spielserver schlägt mit dem Fehler "Keine solche Datei oder Verzeichnis" fehl, da die ausführbare Datei nie auf den Datenträger geschrieben wird.

Festlegen des Startbefehls

Bei prozessbasierten Servern sollte der Startbefehl nach der Extraktion relativ zum Stammobjektordner sein (d. a. relativ zu dem Speicherort, an dem Dateien enden, nachdem das Verzeichnis der obersten Ebene entfernt wurde).

Wenn Ihr Archiv z. B. enthält MyGameServer/MyGame.x86_64, befindet sich die Datei nach der Extraktion im Stammverzeichnis des Ressourcenordners. Legen Sie den Startbefehl auf Folgendes fest:

MyGame.x86_64

Wenn sich Ihre ausführbare Datei in einem Unterordner befindet (z. B MyGameServer/bin/MyGame.x86_64. ), legen Sie den Startbefehl auf Folgendes fest:

bin/MyGame.x86_64

Verwalten prozessbasierter Linux-Builds mithilfe von APIs

Sie können APIs verwenden, um prozessbasierte Linux-Builds zu verwalten. Verwalten Sie sie für den Rest des Buildlebenszyklus (Anzeigen der Nutzung, Aktualisieren von Regionen und StandingBy-Konfigurationen, Löschen) mithilfe von Game Manager.

  • CreateBuildWithProcessBasedServer: Erstellen Sie einen Build, bei dem der Spielserver als Prozess ausgeführt wird. Stellen Sie sicher, dass die folgenden Eigenschaften für die Anforderung festgelegt sind:
    • OsPlatform – "Linux"
    • GameAssetReferences : Die Liste der Spielressourcen (hochgeladen als .tar.gz - oder .tar -Dateien). Für jedes Medienobjekt ist ein FileName erforderlich, der mit dem Namen des hochgeladenen Medienobjekts übereinstimmt.
    • StartMultiplayerServerCommand : Der Befehl, der beim Starten des Spielservers ausgeführt werden soll. Der Pfad sollte nach der Extraktion relativ zum Stammobjektordner sein (z. B MyGame.x86_64 -server. ).
    • Ports : Die Ports, die für den Build zugeordnet werden sollen.
    • MultiplayerServerCountPerVm : Die Anzahl der Spielserverinstanzen, die auf einem einzelnen virtuellen Computer gehostet werden sollen.
    • RegionConfigurations: Die Regionen, in denen die Bereitstellung erfolgen soll, mit Standby- und maximaler Serveranzahl.

Weitere Informationen