Skip to main content

Creating a Dockerfile for your server

Hathora Cloud utilizes Docker, which is a technology that allows you to package your server project in a portable way so that it can be run in any Linux environment.

In order to deploy on Hathora Cloud, you will need to provide a Dockerfile in the root of your tar file:

tar.gz file
├── Dockerfile
└── <...your server build/project files>
note

You will not need to have Docker installed on your machine, the Docker build happens on Hathora build servers.

The core structure of a Dockerfile contains:

  1. Base OS and packages (FROM)
  2. Copy project files into container (COPY)
  3. Configure build steps (RUN) - can skip if you've already copied a Linux executable in step 2
  4. Start command (CMD)
FROM ubuntu:22.04

# Add these dependencies to enable your server to make outbound TLS requests
RUN apt-get update && \
apt-get install -y ca-certificates && \
update-ca-certificates

# Copy the server build files into the container, if Dockerfile is @ parent
COPY ./Server-Build-Dir .

RUN chmod +x ./your_unity_server.x86_64


# Run the Linux server in headless mode as a dedicated server
CMD ./your_unity_server.x86_64 -mode server -batchmode -nographics

Check out our detailed onboarding guide for Unity.

Join our developer community!

Optional init.sh script

You can optionally use an init.sh script in a Dockerfile to handle tasks that need to occur before launching the game server. For example, parsing environment variables, passing Hathora metadata as command line args, or any other initialization logic that must be completed before the container starts.

#!/usr/bin/env bash

echo "Beginning init.sh script..."

# Hathora default environment variables (these are added by Hathora automatically)
echo "HATHORA_INITIAL_ROOM_CONFIG : $HATHORA_INITIAL_ROOM_CONFIG"
echo "HATHORA_PROCESS_ID : $HATHORA_PROCESS_ID"
echo "HATHORA_APP_ID : $HATHORA_APP_ID"
echo "HATHORA_DEPLOYMENT_ID : $HATHORA_DEPLOYMENT_ID"
echo "HATHORA_BUILD_TAG : $HATHORA_BUILD_TAG"

# These need to be add manually as environment variables (via application's deployment config)
echo "HATHORA_API_TOKEN : $HATHORA_API_TOKEN"

host=$HATHORA_HOSTNAME
port=$HATHORA_DEFAULT_PORT
echo "Connection info: $host:$port"

# Parse custom EnvVariable "COMMAND_LINE_ARGS"
# Add this as an environment variable when your create your deployment - either in Console UI or via CI integration
# Example value for $COMMAND_LINE_ARGS: "-batchmode -nographics -mode server"
echo "COMMAND_LINE_ARGS : $COMMAND_LINE_ARGS"

# Parse room config
# TODO: replace 'example_room_config' with $HATHORA_INITIAL_ROOM_CONFIG
example_room_config='{"property1":"sample-data-123","property2":[1,2,3],"property3":{"value":"test"},"property4":false}'
# Extract specific JSON properties using jq
gameInstanceId=$(echo "$example_room_config" | jq '.gameInstanceId')
gameSessionQueueName=$(echo "$example_room_config" | jq '.gameSessionQueueName')
maximumPlayerSessionCount=$(echo "$example_room_config" | jq '.maximumPlayerSessionCount')
property4=$(echo "$example_room_config" | jq '.property4')
echo "gameInstanceId: $gameInstanceId"
echo "gameSessionQueueName: $gameSessionQueueName"
echo "property3: $property3"
echo "property4: $property4"

echo "Starting game server..."

# TODO: replace with your own game server start command
./Hathora-Unity_LinuxServer.x86_64 $COMMAND_LINE_ARGS