> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Creación e implementación de compilaciones de Linux

> Cree e implemente compilaciones de servidores de juegos Linux en PlayFab Multiplayer Servers usando imágenes de contenedor Linux o servidores basados en procesos con el GSDK.

Este artículo contiene detalles sobre cómo crear compilaciones de Linux en PlayFab Multiplayer Servers, tanto mediante contenedores como mediante procesos.

## Creación e implementación de imágenes de contenedor Linux

Esta sección describe los pasos específicos para ayudarle a crear e implementar imágenes de contenedor Linux.

Como se describe en [Creación de máquinas virtuales (VM)](/services/playfab/multiplayer/servers/deploying-playfab-multiplayer-server-builds), al usar nuestro servicio, usted configura las máquinas virtuales para que se pongan en marcha automáticamente como servidores de juegos a nivel mundial según su presupuesto y demanda. Para ello, no crea explícitamente las máquinas virtuales, sino que define parámetros que determinan cómo se crean en su nombre. Este proceso se denomina implementar o crear una compilación.

PlayFab Multiplayer Servers puede implementar servidores de juegos basados tanto en Linux como en Windows. La forma en que se implementan las compilaciones para contenedores Linux es similar a la de los contenedores Windows, con algunas diferencias importantes. Para obtener más información, consulte [Diferencias entre las imágenes de contenedor de Windows y Linux](#windows-and-linux-container-image-differences). Si quiere usar PowerShell/API para administrar contenedores Linux, consulte [Administración de imágenes de contenedor Linux mediante las API](#manage-linux-container-images-using-apis).

Al usar servidores de juegos basados en Linux, en lugar de usar una imagen de contenedor administrada, tiene que crear y cargar su imagen de contenedor en un registro de contenedores. Para facilitarle la carga de contenedores, su cuenta incluye un registro de contenedores de Azure.

## Conocimientos necesarios

* [Contenedores de Docker](https://learn.microsoft.com/en-us/training/modules/intro-to-docker-containers/)

## Configuración del dispositivo de desarrollo Windows

Este paso solo es necesario si quiere usar un dispositivo de desarrollo Windows para crear imágenes de contenedor Linux. Como alternativa, puede usar dispositivos con Linux OS, máquinas virtuales o sistemas de doble sistema operativo con Docker instalado.

El [Subsistema de Windows para Linux (WSL)](https://learn.microsoft.com/en-us/windows/wsl/) le permite usar su dispositivo de desarrollo en el entorno familiar de Windows para crear y administrar imágenes de contenedor Linux. Usar WSL significa que no necesitaría la sobrecarga de una máquina virtual Linux tradicional ni de una configuración de arranque dual.

1. [Instale WSL 2](https://learn.microsoft.com/en-us/windows/wsl/). Asegúrese de reiniciar la máquina y de estar usando WSL 2. También debe instalar el paquete de actualización del kernel de Linux.
2. [Instale una distribución de Linux que use WSL](https://learn.microsoft.com/en-us/windows/wsl/install#step-6---install-your-linux-distribution-of-choice). Aunque nuestras máquinas virtuales usan Ubuntu, puede seleccionar la distribución que quiera para su imagen de contenedor. Considere usar [Ubuntu 20.04 Long-Term Support (LTS)](https://www.microsoft.com/store/apps/9n6svws3rx71) o versiones posteriores.
3. [Instale Docker Desktop para Windows con WSL 2](https://learn.microsoft.com/en-us/windows/wsl/tutorials/wsl-containers). Para el vínculo de descarga directa, vaya a [Docker Desktop para Windows (externo)](https://hub.docker.com/editions/community/docker-ce-desktop-windows/).

**Verificación de la configuración de WSL 2**

* Abra PowerShell
* Ejecute **wsl -l -v** para comprobar que tanto la aplicación docker-desktop como ubuntu están ejecutando WSL 2 (versión 2)

**Verificación de que Docker está configurado correctamente para WSL**

* Abra el terminal de WSL
* Ejecute **docker version** para confirmar que Docker está instalado y que el sistema operativo usado es Linux

<Tip>
  Para desarrollar y depurar aplicaciones C++ de Linux, use [WSL en Visual Studio 2019](https://learn.microsoft.com/en-us/cpp/linux/).
</Tip>

## Obtención de las credenciales de inicio de sesión del registro de contenedores de PlayFab

La cuenta del registro de contenedores de Azure está asociada a su cuenta de PlayFab. Solo usted tiene acceso a los contenedores cargados allí. Este registro de contenedores de Azure es gratuito.

* En Game Manager, seleccione su título de juego y, después, **Multiplayer** > **Servers**. Seleccione **New build** para abrir la página de creación de compilaciones.
* Seleccione **Linux** como sistema operativo de la máquina virtual.
* Anote las credenciales de inicio de sesión (nombre, contraseña y customer5555555.azurecr.io), ya que esta información se necesitará más adelante

<img src="https://mintcdn.com/microsoft-4404708b/U1LR64ZWxo45eXwl/images/playfab/multiplayer/servers/create-your-first-server/server-new-build-container-linux.PNG?fit=max&auto=format&n=U1LR64ZWxo45eXwl&q=85&s=0e2c264ec94672fe84912799f1acab32" alt="Nueva compilación con la plataforma Linux seleccionada" width="800" height="551" data-path="images/playfab/multiplayer/servers/create-your-first-server/server-new-build-container-linux.PNG" />

Si prefiere usar PowerShell/API, llame a la API [GetContainerRegistryCredentials](https://learn.microsoft.com/en-us/rest/api/playfab/multiplayer/multiplayerserver/getcontainerregistrycredentials) para recuperar la dirección del registro de contenedores, el nombre de usuario y la contraseña.

## Creación e inserción de imágenes de contenedor Linux en Azure Container Registry

Estos pasos le ayudarán a crear e insertar su imagen de contenedor Linux personalizada.

#### Integración de la aplicación de servidor de juegos con el GSDK

Al igual que con los servidores Windows, tiene que integrar el código de su servidor de juegos con el SDK de PlayFab Multiplayer Server (GSDK). La integración del GSDK puede formar parte de su imagen de contenedor.

Para obtener instrucciones, consulte [Creación de una compilación de servidor de juegos](/services/playfab/multiplayer/servers/author-a-game-server-build) e [Integración del título con el SDK de servidor de juegos de PlayFab (GSDK)](/services/playfab/multiplayer/servers/integrating-game-servers-with-gsdk).

#### Creación de un Dockerfile

Un Dockerfile es un archivo de texto sin extensión que contiene todos los comandos necesarios para compilar una imagen de contenedor determinada.

1. Abra el **Bloc de notas** o cualquier editor adecuado
2. Agregue los comandos específicos necesarios para ejecutar y compilar un contenedor. Para ver un ejemplo de este archivo, consulte el [DockerFile](https://github.com/PlayFab/MpsSamples/blob/master/wrappingGsdk/Dockerfile) proporcionado en el [ejemplo Wrapper](/services/playfab/multiplayer/servers/wrapper-sample). Para más información sobre cómo crear este archivo, consulte [Formato de Dockerfile (externo)](https://docs.docker.com/engine/reference/builder/#format) y [Procedimientos recomendados al crear un Dockerfile (externo)](https://docs.docker.com/develop/develop-images/dockerfile_best-practices/)
3. Guarde el archivo como Dockerfile, idealmente en una carpeta o directorio vacío. Debe agregar a esta carpeta los demás archivos que se necesiten para compilar la imagen de contenedor.

Instrucciones para guardar al usar el **Bloc de notas**:

* Seleccione **File** > **Save as...** para abrir las opciones de guardado
* Vaya a la carpeta en la que quiera guardar el archivo
* En **File name:**, use **"Dockerfile"**, incluidas las comillas.
* Para **Save as type:**, seleccione **All Files**
* Seleccione la codificación **UTF-8**
* Seleccione **Save**

#### Compilación y carga de la imagen de contenedor Linux

1. Abra su terminal de Linux con Docker instalado.
2. Ejecute los siguientes comandos de Docker con las credenciales de inicio de sesión obtenidas en el paso anterior. Después, siga las instrucciones en pantalla para introducir su nombre de usuario y contraseña.

```docker theme={null}
docker login customer5555555.azurecr.io
```

[docker sign in](https://docs.docker.com/engine/reference/commandline/login/) le permite iniciar sesión en el registro de contenedores de Azure tal como se muestra en Game Manager.

```docker theme={null}
username: customer5555555
password: HRDFOdIebJkvBAS+usa55555555
```

3. Compile la imagen de contenedor

Ejecute el siguiente comando para compilar la imagen de contenedor usando el Dockerfile de su directorio actual. Hay un "." al final del comando **docker build**.

La marca **-t** especifica la información name:tag de su nueva imagen de contenedor. El nombre y la etiqueta se usan si la compilación se realiza correctamente. Si hay errores de compilación, debe corregirlos antes de pasar al paso siguiente.

En el ejemplo siguiente, el nombre del repositorio es **customer5555555.azurecr.io/pvp\_gameserver** y la etiqueta es **v1**. Para más información, consulte la [referencia del comando docker build (vínculo externo)](https://docs.docker.com/engine/reference/commandline/build/) y [Compilación de un Dockerfile (vínculo externo)](https://docs.docker.com/engine/reference/builder/).

Al usar WSL, la unidad C: de Windows está montada en /mnt/c.

* Después, ejecute **cd /mnt/c/path/to/your/Dockerfile** para cambiar a la ruta donde se encuentra su Dockerfile.
  Para más información, consulte [Acceso a la unidad C](https://learn.microsoft.com/en-us/windows/wsl/faq#how-do-i-access-my-c--drive-).

```docker theme={null}
docker build -t customer5555555.azurecr.io/pvp_gameserver:v1 .
```

<Tip>
  Al usar Linux, ejecute **pwd** para averiguar en qué directorio se encuentra actualmente.
</Tip>

4. Cargue la imagen de contenedor

Ejecute los comandos para insertar la imagen en su registro de contenedores de PlayFab. Seleccione una combinación name:tag significativa y útil para la imagen de contenedor cargada. Para cargar el contenedor en el registro operado por PlayFab, use [docker push](https://docs.docker.com/engine/reference/commandline/push/) u otro cliente de registro de contenedores.

```docker theme={null}
docker tag hello-world customer5555555.azurecr.io/pvp_gameserver:v1
docker push customer5555555.azurecr.io/pvp_gameserver:v1
```

## Comprobación de que el contenedor se ha cargado

Una vez cargado el contenedor, vuelva a la página **New Build** de Game Manager y seleccione **Refresh Images**. Podrá ver la imagen en la lista y seleccionarla. Como alternativa, puede usar la llamada a la API [ListContainerImages](https://learn.microsoft.com/en-us/rest/api/playfab/multiplayer/multiplayerserver/listcontainerimages) para enumerar las imágenes de contenedor cargadas.

Ahora está listo para implementar servidores. Para obtener instrucciones, consulte [Portal de PlayFab: Game Manager](/services/playfab/multiplayer/servers/deploy-using-game-manager) y [Uso de PowerShell/API](/services/playfab/multiplayer/servers/deploy-using-powershell-api).

## Diferencias entre las imágenes de contenedor de Windows y Linux

Para muchos desarrolladores, usar el contenedor administrado de Windows es la opción sencilla y predeterminada preferida. Sin embargo, las imágenes de contenedor Linux implementadas en máquinas virtuales disfrutan de una tarifa por hora más económica.

<Note>
  Puede personalizar completamente sus servidores de juegos tanto si usa imágenes de contenedor de Windows como de Linux. Al usar servidores Windows, se personaliza la imagen de contenedor administrada cargando recursos.
</Note>

La tabla siguiente enumera algunas diferencias al crearlas y usarlas.

| Opciones para el desarrollador                  | Windows                                                                                                                                                          | Linux                                                                                                                                                |
| ----------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
| Sistema operativo del dispositivo de desarrollo | Windows OS                                                                                                                                                       | [Subsistema de Windows para Linux (WSL)](#set-up-your-windows-development-device) o Linux OS (mediante doble sistema operativo o máquinas virtuales) |
| Imagen de contenedor                            | Implementación sencilla usando nuestra imagen de contenedor administrada. Aun así, puede personalizar el contenedor cargando archivos adicionales como recursos. | Se necesita más trabajo porque tiene que crear su propia imagen de contenedor personalizada, lo que le da control total.                             |

## Administración de imágenes de contenedor Linux mediante las API

Puede usar las API para administrar imágenes de contenedor Linux. Para el resto del ciclo de vida de la compilación (ver el uso, actualizar las regiones y las configuraciones de standingBy, eliminación), adminístrelas mediante Game Manager.

* [GetContainerRegistryCredentials](https://learn.microsoft.com/en-us/rest/api/playfab/multiplayer/multiplayer-server/get-container-registry-credentials): recupere la dirección del registro de contenedores, el nombre de usuario y la contraseña
* [ListContainerImages](https://learn.microsoft.com/en-us/rest/api/playfab/multiplayer/multiplayer-server/list-container-images) y [ListContainerImageTags](https://learn.microsoft.com/en-us/rest/api/playfab/multiplayer/multiplayer-server/list-container-image-tags): asegúrese de que su nueva imagen y etiqueta aparecen en la lista (a veces puede tardar un par de minutos en registrarse completamente la imagen en el sistema)
* [CreateBuildWithCustomContainer](https://learn.microsoft.com/en-us/rest/api/playfab/multiplayer/multiplayer-server/create-build-with-custom-container): cree una compilación con un contenedor personalizado. Especifique la imagen etiquetada que cargó anteriormente. Asegúrese de que las siguientes propiedades estén establecidas en la solicitud:
  * **ContainerImageReference**: el nombre de imagen y la etiqueta que se cargaron anteriormente. Estos valores son visibles en ListContainerImages y ListContainerImageTags.
  * **ContainerFlavor**: "CustomLinux"
  * **ContainerRunCommand** (opcional): si su contenedor no tiene un comando predeterminado, use esta propiedad para proporcionar el comando que se va a ejecutar, junto con los argumentos.

## Empaquetado de recursos para servidores Linux basados en procesos

Al usar Linux en **modo de proceso** (en lugar de modo de contenedor), se carga el servidor de juegos como un archivo de recursos en lugar de una imagen de contenedor. Esta sección cubre requisitos importantes de empaquetado.

### Formatos de archivo compatibles

Los recursos deben cargarse como archivos `.tar.gz` o `.tar`, para que los permisos de archivos de Unix (como el bit de ejecución) puedan conservarse durante la extracción.

<Warning>
  **Los archivos `.zip` no conservan los permisos de archivos de Unix en Linux.** Si carga el ejecutable de su servidor de juegos Linux en un archivo `.zip`, pierde su permiso de ejecución y no se inicia, con un error "Permission denied". Para solucionar este problema, use `.tar.gz` en su lugar, o establezca como comando de inicio un script de shell que ejecute `chmod +x` en el ejecutable antes de iniciarlo.
</Warning>

### Requisitos de estructura de archivos tar.gz y tar

Al extraer archivos `.tar` o `.tar.gz`, PlayFab Multiplayer Servers quita el primer nivel de directorio del archivo (equivalente a `tar --strip-components=1`). El archivo **debe** contener un único directorio contenedor de nivel superior con todos los archivos del juego dentro.

**Estructura correcta**: los archivos dentro de un directorio de nivel superior:

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

Cree el archivo con:

```bash theme={null}
tar czf MyGameServer.tar.gz MyGameServer/
```

<Warning>
  Si los archivos están en la raíz del archivo comprimido sin un directorio contenedor, se **omiten silenciosamente** durante la extracción. Su servidor de juegos falla con errores "No such file or directory" porque el ejecutable nunca se escribe en el disco.
</Warning>

### Establecimiento del comando de inicio

Para los servidores basados en procesos, el comando de inicio debe ser **relativo a la carpeta raíz de recursos después de la extracción** (es decir, relativo a donde terminan los archivos después de quitarse el directorio de nivel superior).

Por ejemplo, si el archivo contiene `MyGameServer/MyGame.x86_64`, después de la extracción el archivo está en la raíz de la carpeta de recursos. Establezca el comando de inicio en:

```
MyGame.x86_64
```

Si el ejecutable está dentro de una subcarpeta (por ejemplo, `MyGameServer/bin/MyGame.x86_64`), establezca el comando de inicio en:

```
bin/MyGame.x86_64
```

## Administración de compilaciones Linux basadas en procesos mediante las API

Puede usar las API para administrar compilaciones Linux basadas en procesos. Para el resto del ciclo de vida de la compilación (ver el uso, actualizar las regiones y las configuraciones de standingBy, eliminación), adminístrelas mediante Game Manager.

* [CreateBuildWithProcessBasedServer](https://learn.microsoft.com/en-us/rest/api/playfab/multiplayer/multiplayer-server/create-build-with-process-based-server): cree una compilación con el servidor de juegos ejecutándose como proceso. Asegúrese de que las siguientes propiedades estén establecidas en la solicitud:
  * **OsPlatform**: "Linux"
  * **GameAssetReferences**: la lista de recursos del juego (cargados como archivos `.tar.gz` o `.tar`). Cada recurso requiere un **FileName** que coincida con el nombre del recurso cargado.
  * **StartMultiplayerServerCommand**: el comando que se ejecuta cuando se inicia el servidor de juegos. La ruta debe ser relativa a la carpeta raíz de recursos después de la extracción (por ejemplo, `MyGame.x86_64 -server`).
  * **Ports**: los puertos que se asignarán para la compilación.
  * **MultiplayerServerCountPerVm**: el número de instancias de servidor de juegos que se hospedarán en una única máquina virtual.
  * **RegionConfigurations**: las regiones en las que se va a implementar, con los recuentos de servidores en espera y máximos.

## Consulte también

* [Introducción a los contenedores de Docker](https://learn.microsoft.com/en-us/training/modules/intro-to-docker-containers/)
* [Creación de su primer servidor](/services/playfab/multiplayer/servers/create-your-first-server)
* [Recursos y ejemplos](/services/playfab/multiplayer/servers/server-samples-resources)
* [Kits de desarrollo de software (SDK) de PlayFab Multiplayer Server](/services/playfab/multiplayer/servers/server-sdks/overview)
* [Referencia de API](xref:titleid.playfabapi.com.multiplayer.multiplayerserver)


## Related topics

- [Implementación de compilaciones mediante PowerShell/API](/es/services/playfab/multiplayer/servers/deploy-using-powershell-api.md)
- [Implementación de compilaciones de servidores multijugador de PlayFab](/es/services/playfab/multiplayer/servers/deploying-playfab-multiplayer-server-builds.md)
- [Tutorial: Implementación de compilaciones mediante PowerShell/API](/es/services/playfab/multiplayer/servers/quickstart-for-multiplayer-servers-api-powershell.md)
- [Implementación de un servidor Linux de Unreal en la nube de MPS](/es/services/playfab/multiplayer/servers/server-sdks/unreal-gsdk/setting-up-a-linux-dedicated-server-on-playfab.md)
- [Ejemplo de Wrapper](/es/services/playfab/multiplayer/servers/wrapper-sample.md)
