How do I deploy a standalone Linux dedicated server binary to a remote machine?

I think I’m doing a whole bunch of things wrong here because I don’t understand the relationship between a built executable and the surrounding project directory.

Setup
PC / source build at SHA 69b5693 (~ 4.4.0)

Steps

  1. Build a development server dedicated server executable for Win64 (specific steps: piinecone — Building a dedicated server in Unreal Engine 4)
  2. Test
  3. Build a development server dedicated server executable for Linux
  4. (using git bash on windows) scp [MyGame]Server [my remote machine] (a Google Cloud Debian VM, in this case)
  5. On the remote machine: chmod +x [MyGame]Server
    ./[MyGame]Server

I’ve also tried building a shipping server instead of a development server. The output is different but the result is essentially the same.

Result
With the development server build:

user@server:~/dir$ ./[MyGame]Server
Using binned.
Increasing per-process limit of core file size to infinity.
C:\Users\me\code\UnrealEngine\Engine\Source\Runtime\Core\Private\Misc\OutputDevice.cpp(203): Fatal error:
Assertion failed: HasFoundDataDirectory [File:C:\Users\me\code\UnrealEngine\Engine\Source\Runtime\Core\Private\Internationalization\Internationalization.cpp] [Line: 298]
ICU data directory was not discovered:
../../../home/Content/Localization/ICU
../../../Engine/Content/Localization/ICU
Stack:
[Callstack]  02  0x00000000013cd1cc
[Callstack]  03  0x00000000012f09f9
[Callstack]  04  0x00000000012edbab
[Callstack]  05  0x00000000012ef163
[Callstack]  06  0x000000000133b0ab
[Callstack]  07  0x00000000014c2127
[Callstack]  08  0x00000000014c36f5
[Callstack]  09  0x00000000012b77f8
[Callstack]  10  0x00000000012ba5f9
[Callstack]  11  0x00000000012bea07
[Callstack]  12  0x00007f8f1275aeed
[Callstack]  13  0x00000000012b5f8c

Signal 11 caught.
EngineCrashHandler: Signal=11
Starting ../../../Engine/Binaries/Linux/CrashReportClient
Aborted (core dumped)

With the shipping server build:

Using binned.
4.4.0-0+UE4 7038 3077 385 0
Exiting abnormally (error code: 1)

The number of early failures makes me think that I’m just missing a bunch of stuff and need to SCP more than just the executable itself, it’s just not clear to me yet what that stuff is, exactly. For example, the first few missing paths appear to exist only in the Engine, not in the project source, so it seems like the build didn’t include everything that it needs to stand alone.

Thanks to Osman for pointing out the fix to me!

As is apparent from the crash logs, the binary is looking for some local files. You have to deploy the entire packaged directory, not just the executable binary.

  1. Open the editor and package the game to a destination outside of your project’s directory (so its contents are only what is needed by the executable).
  2. Open Visual Studio and build a Linux server.
  3. Copy the Linux server binary from the default path (in the project directory) into the packaged directory created in Step 1
  4. Remove the client binary from the packaged directory (you won’t need it on the server)
  5. Create a gzipped tarball of the entire packaged directory and SCP it to your server
  6. On the server, unpack, make the binary executable, and run with ./MyGameServer -log

I wrote a little guide here: piinecone — Building and deploying a UE4 dedicated server for...