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

# Implementación de un servidor Linux de Unreal en la nube de MPS

> Compile e implemente un servidor dedicado Linux de Unreal Engine 5 en PlayFab Multiplayer Servers (MPS), con notas sobre la compilación cruzada desde Windows y UE 4.26 o 4.27.

# Configuración de un servidor dedicado Linux en PlayFab

El propósito de esta guía es describir todos los pasos necesarios para compilar y verificar un servidor dedicado Linux. Los pasos siguientes son específicos de Unreal Engine 5 (tanto el acceso anticipado como la versión oficial). El mismo conjunto de pasos se ha probado y también se aplica a UE 4.26 y UE 4.27, con algunas diferencias menores relacionadas con la ubicación de la opción de empaquetado en la interfaz de usuario de Unreal Engine, que es diferente en UE 4.27 y en el acceso anticipado de UE5.

Puede encontrar más información sobre la implementación en Linux [aquí](https://github.com/PlayFab/MpsAgent/blob/main/LocalMultiplayerAgent/MultiplayerSettingsLinuxContainersOnWindowsSample.json)

## Requisitos

* Instale los [requisitos previos de Unreal para Linux](https://docs.unrealengine.com/SharingAndReleasing/Linux/GettingStarted/)
* Instale [Docker para Windows](https://docs.docker.com/desktop/windows/install/)

## Instrucciones

* Desde **Requisitos previos de Unreal para Linux**, descargue la cadena de herramientas para su Unreal Engine instalado y ejecute el archivo ejecutable. Tenga en cuenta que, como muchas partes de estas guías, estos pasos solo funcionarán si su Unreal Engine se compiló a partir del código fuente.
  * Una vez completada la instalación, examine las variables de entorno de Windows y confirme que existe la siguiente variable del sistema: **LINUX\_MULTIARCH\_ROOT**.
* En el directorio del código fuente de Unreal Engine:
  * Vuelva a ejecutar: `Setup.bat`
  * Vuelva a ejecutar: `GenerateProjectFiles.bat`
* Vuelva a su propio proyecto:
  * Haga clic con el botón derecho en su archivo `{ProjectName}.uproject` y seleccione **Generate Visual Studio project files**
  * Abra el archivo \{ProjectName}.sln en Visual Studio
  * Establezca la configuración en **Development Editor**
  * Compile y ejecute el editor de Unreal
* En este punto, debería poder empaquetar su proyecto para servidor Linux en un directorio de su elección.
  * Para Unreal Engine 5, en el editor, seleccione el empaquetado en la parte superior derecha de la pantalla y la opción Linux ya debería estar disponible para su selección. Para UE 4.26 y UE 4.27, la opción de empaquetado se encuentra en la pestaña de archivo.
  * Confirme sus configuraciones para Server y Shipping, seleccione **Linux** para compilar y, a continuación, seleccione el directorio de salida.

## Creación de la imagen de Docker del servidor Linux

En esta sección, configuraremos una imagen de Docker que contiene su servidor Linux

* Ahora que ha creado un servidor Linux, vaya a ese directorio (Explorador de Windows o el terminal de su elección)
* Cree un nuevo archivo llamado: `Dockerfile`
* Edite el archivo con el editor de su elección (notepad, vim, emacs, etc.)
* Copie y pegue el contenido que se muestra a continuación. Asegúrese de reemplazar \[YourProjectNameServer].sh por el nombre de su propio ejecutable de servidor Linux (en el mismo directorio)

```Docker theme={null}
FROM ubuntu:18.04

# Unreal refuses to run as root user, so we must create a user to run as
# Docker uses root by default
RUN useradd --system ue
USER ue

EXPOSE 7777/udp

WORKDIR /server

COPY --chown=ue:ue . /server
USER root
CMD chown -R ue.ue $PF_SERVER_LOG_DIRECTORY && su ue -c ./YourGameNameServer.sh
```

NOTA: El comando **chown** corrige \$PF\_SERVER\_LOG\_DIRECTORY para que su proceso de servidor pueda acceder a él y, a continuación, && encadena el comando para ejecutar su servidor

* Con un terminal de su elección, vaya al directorio del servidor Linux
  * Los usuarios de Windows suelen usar cmd o powershell, aunque bash mediante herramientas de terceros o WSL también están disponibles
  * Los usuarios de Mac y Linux suelen usar bash
* Ejecute: `docker build -t "[imageName]:[tag]" .`, donde imageName y tag son opciones de su elección.
  * Recuerde estos nombres, ya que los volverá a usar
  * Algunos ejemplos podrían ser: **YourProjectNameServer** y **01** respectivamente
  * El elemento **tag** se usa normalmente para versionar su instancia de servidor
  * Estas etiquetas se usarán en un paso posterior
  * Puede escribir **docker images** en el terminal para recuperar imageName y tag si los olvida
* Escriba **docker images** en el terminal para inspeccionar la creación correcta de la imagen de Docker.
* Mantenga esta ventana de terminal abierta y déjela a un lado, ya que tendremos más comandos para ella más adelante
  * (Denominada \[Docker terminal] en pasos posteriores)

## Carga de la imagen de contenedor en el registro de Azure de PlayFab

En este punto, está listo para insertar su imagen de Docker en el registro de contenedor de Azure de PlayFab para que pueda usarse para iniciar su compilación en PlayFab.

* Vaya al [portal para desarrolladores de PlayFab](https://developer.playfab.com/)
* Seleccione su título
* Seleccione la pestaña **Multiplayer** a la izquierda
* Seleccione **New Build** a la derecha de la pantalla.
* Elija un nombre
* Seleccione un tipo de VM; para los proyectos ThirdPersonMP, **Dasv4 (2 cores)** será suficiente
* En Server Details, establezca Server Type en **Container** y Operating System en **Linux**.
* Seleccione **Upload to container registry**.
* En la ventana que aparece:
  * Recuerde su \[AzureUsername] de esta ventana, que se usa varias veces en los pasos siguientes
  * Seleccione **Copy Docker Login Command**
* Vuelva a la ventana \{Docker terminal}
  * Pegue el comando de inicio de sesión de Docker en \[Docker terminal]. Este comando iniciará sesión en el registro de Azure usado por PlayFab.
  * Escriba: `docker tag [imageName]:[tag] [AzureUsername].azurecr.io/[imageName]:[tag]`
  * Escriba: `docker push [AzureUsername].azurecr.io/[imageName]:[tag]`
  * Recuerde que AzureUsername se mostraba en el portal para desarrolladores de PlayFab, y que imageName y tag los eligió usted anteriormente.
* De nuevo en el sitio web de PlayFab, en Server Details de la página New Build, seleccione Refresh junto a Container image.
* Haga clic en el botón de flecha y debería poder ver y seleccionar la imagen de Docker que cargó y la etiqueta correspondiente.
* En el bloque Regions, seleccione una región cercana a usted y establezca tanto Standby como Max en 1 (solo para pruebas)
* En el bloque Network, establezca el campo Port Name en `gameport`
  * Es obligatorio definir el puerto que se usará para conectarse a su servidor de juego
  * El GSDK de Unreal contiene código para leer este puerto automáticamente e invalidar internamente el puerto de host del servidor de Unreal según este valor
  * El nombre de este puerto debe ser obligatoriamente `gameport`
* Seleccione **Add Build** y espere a que el estado de su compilación pase a ser **Deployed**

## Pasos siguientes

Muchos usuarios querrán probar su servidor [conectando un cliente de juego](/services/playfab/multiplayer/servers/server-sdks/unreal-gsdk/connect-to-mps-hosted-build).

De lo contrario, puede volver a la guía principal del [complemento GSDK de Unreal](/services/playfab/multiplayer/servers/server-sdks/unreal-gsdk).


## Related topics

- [Implementación en la nube del proyecto con GSDK](/es/services/playfab/multiplayer/servers/server-sdks/unreal-gsdk/third-person-mp-example-project-cloud-deployment.md)
- [Conexión a un servidor de Unreal hospedado en la nube](/es/services/playfab/multiplayer/servers/server-sdks/unreal-gsdk/connect-to-mps-hosted-build.md)
- [Ejemplo de Wrapper](/es/services/playfab/multiplayer/servers/wrapper-sample.md)
- [Información general del complemento GSDK de Unreal de PlayFab](/es/services/playfab/multiplayer/servers/server-sdks/unreal-gsdk/index.md)
- [Creación e implementación de compilaciones de Linux](/es/services/playfab/multiplayer/servers/deploying-linux-based-builds.md)
