-
Notifications
You must be signed in to change notification settings - Fork 0
Setting up a VPS host
For general internet play information, see Internet play.
If port forwarding doesn't work for you, you can create an inexpensive virtual private server (VPS) and run your EmptyEpsilon host on it. The game's low system requirements mean you can run games for less than US$0.01/hour.
You can use several VPS hosts to host an EmptyEpsilon game, such as:
Vultr is a VPS provider that offers servers for as little as $0.007/hour, with hosts located around the world.
After signing up for a Vultr account:
-
Create a new server.
-
Select the "Cloud Compute" (Shared vCPU) server type.
-
Select the "Regular Performance" CPU & Storage Technology option.
-
For best performance, select a server location that's close to you and all of your players.
-
Select a Linux operating system image.
- The easiest option for running the GM interface is "Ubuntu Desktop with XFCE".
- Select the "Marketplace Apps" tab under "Server Image".
- Search for "Ubuntu Desktop".
- Select "Ubuntu Desktop (XFCE)".
- The easiest option for running a headless server is "Ubuntu".
- Select the "Operating System" tab under "Server Image".
- Select "Ubuntu".
- Select the latest LTS version from the dropdown.
- The easiest option for running the GM interface is "Ubuntu Desktop with XFCE".
-
Under Server Size, select the cheapest option, which as of Jan. 2023 is either $2.50/month ("1 vCPU/512 MB Memory") or $5/month ("1 vCPU/1 GB Memory").
If you destroy the server after the end of your game, you won't have to pay for the full month, only the time that the server's running.
-
Disable Auto Backups to save a little money.
-
If you selected the "Ubuntu Desktop (XFCE)" server image, enter a user name that you'll use to log in.
-
Optionally add a SSH public key, if you have one.
The server uses this key instead of a password to authenticate you if you login via secure shell (SSH), which is the only login option for "Ubuntu" without a desktop running a headless server.
-
Select the "Deploy Now" button.
This initializes the server, which can take a few minutes.

If you selected the "Ubuntu Desktop (XFCE)" server image, you can connect to the running server using a VNC client and control its desktop. This is ideal for running the Game Master screen directly on the server.
-
When the server is finished installing, click the name of the server from the list of running servers.
If you closed the tab or navigated away from that list, you can return to it by selecting the "Products" tab in the left sidebar of the vultr interface.
-
Read the contents of the "App Instructions" section, which contains your desktop username and password, and a VNC address and password.
-
Install a VNC client.
- If you use Windows, download and install TightVNC.
- If you use macOS, open Safari and enter
vnc://<VNC ADDRESS>:5900in the address bar, replacing<VNC ADDRESS>with the listed VNC address. If prompted, allow Safari to open "Screen Sharing".
-
Connect to your server at the VNC address from the server's "App Instructions".
If your VNC client takes the address and port separately, remove
:5900from the end of the address and enter5900as the port. -
Enter the VNC password from the server's "App Instructions" when prompted.
Upon connection, you should see a login screen with a password prompt.
-
Enter the Desktop password from the server's "App Instructions" to login.
Wait a moment while the desktop loads.
-
Open a web browser by clicking the globe icon in the bottom application dock.
Wait a moment while the browser loads. If you click multiple times while waiting, multiple browser windows will open.
-
In the browser's address bar, go to the EmptyEpsilon website at https://daid.github.io/EmptyEpsilon.
-
Select the "Download" tab from the EmptyEpsilon website.
-
Select the "Linux"
.debfile for the EmptyEpsilon version you want to host.This downloads the file to the server's Downloads directory.
-
Open a terminal window by clicking the black square with a
$_symbol in the bottom applications dock. -
Open EmptyEpsilon's port 35666 in the server's firewall. Enter:
sudo ufw allow 35666If prompted, enter the Desktop password from the server's "App Instructions".
-
Install EmptyEpsilon and its dependencies. In the terminal, enter:
cd ~/Downloads sudo dpkg -i Linux_EmptyEpsilon_EE-2022.10.28.deb sudo apt -f installreplacing the
.debfile above with the EE version you downloaded. If prompted, enter the Desktop password from the server's "App Instructions". -
Run EmptyEpsilon. In the terminal, enter:
EmptyEpsilonThe command is case-sensitive.
The EmptyEpsilon interface should appear. You can start a server, select a scenario, and enter the GM screen. Players can connect by using the server's IP address, which is listed in the server's "Overview" tab on Vultr or in the server creation screen in the server's EmptyEpsilon instance.
If you selected "Ubuntu" under "Server Image" while creating the server, Vultr installs Ubuntu without a desktop environment and provides only secure shell (SSH) command-line access to the server. You can use this to run EmptyEpsilon in Headless server mode.
If you provided an SSH public key during server creation, you can login from any system with the corresponding private key without needing the root password.
-
Find the server's IP address and root password.
- The IP address is listed next to the server name in the "Products" tab of Vultr's interface, or next to "IP Address" in the "Overview" tab of the server details in Vultr.
- The root password is listed as "Password", under "IP Address", in the "Overview" tab of the server details in Vultr. It's obscured by default, but you can view it by clicking the eye icon next to the obscured password, or copy it to your clipboard by clicking the copy icon.
-
SSH to the server.
- On macOS, an SSH client is built in.
- Open the Terminal app (Applications > Utilities > Terminal).
- In Terminal, run
ssh root@<IP ADDRESS>, replacing<IP ADDRESS>with the server address. - Enter the root password if prompted.
- On recent versions of Windows 11,
sshis built in.- Open the PowerShell app.
- In PowerShell, run
ssh root@<IP ADDRESS>, replacing<IP ADDRESS>with the server address. - Enter the root password if prompted.
- On older versions of Windows, download and install PuTTY, an SSH client.
- Open the PuTTY app.
- In the "Host Name" box, enter the server's IP address.
- Select the SSH connection type.
- Click "Open" to connect.
- If prompted, click "Accept" to trust the server's host key.
- If prompted to
login as:, enterroot. - If prompted for a password, enter the root password from the server's "Overview" tab.
- Enter the root password if prompted.
After connecting, the server will output a welcome message and end with a prompt that looks like:
root@EmptyEpsilon:~#replacing
EmptyEpsilonwith whatever name you gave the server during creation, or a random hostname. - On macOS, an SSH client is built in.
-
Download the EmptyEpsilon installation package. TODO: Update for fork
-
Install EmptyEpsilon and its dependencies. Run:
dpkg -i Linux_EmptyEpsilon_EE-2024.12.04.deb apt -f install
replacing the
.debfile above with the EE version you downloaded. If prompted, enter the Desktop password from the server's "App Instructions". -
Open EmptyEpsilon's port 35666 in the server's firewall. Run:
ufw allow 35666
-
Run EmptyEpsilon:
EmptyEpsilon headless=scenario_10_empty.lua
replacing
scenario_10_empty.luawith the name of the scenario script you want to run. The command is case-sensitive. For more headless options, see Headless server.For a list of all available scenario scripts, run:
ls /usr/local/share/emptyepsilon/scripts/scenario_*
At this point the EmptyEpsilon server is running the selected scenario. Players can connect by using the server's IP address.
To make future setup easier, you can optionally take a snapshot of the server after installation. You should take a snapshot only when EmptyEpsilon isn't actively running on your server. As of Jan. 2023, Vultr snapshot storage costs US$0.05 per GB per month.
-
On the server, exit EmptyEpsilon and any other running apps.
-
Select the "Products" tab in the left sidebar of the Vultr interface.
-
Click the name of the server you created that's running the EmptyEpsilon server.
This opens the server overview page and adds new tabs above it.
-
Select the "Snapshots" tab.
-
Enter a label to help you identify the snapshot later.
-
Select "Take Snapshot".
When the snapshot is complete, you can destroy the running server, which stops billing.
To run the server again, follow the instructions to create a new server until you reach the step to select a server image. Then:
- Select the "Snapshot" tab under "Server Image".
- Select the snapshot you created.
- Select "Deploy Now".
When the server deploys the snapshot, it'll contain everything you had previously installed at the time of the snapshot, with the same user accounts and passwords to log in, same SSH keys (if added), and same stored settings and files, just how you left it.
This section last updated 13 Feburary 2026.
Hetzner is a VPS provider based in Germany, with servers available in several parts of the world.
-
Create a Hetzner account.
-
In the Hetzner Console, create a new project if none exists, or use the Default project.
-
Click the
+^button at bottom right, then click Servers to create a new server. -
For Type, select either Cost-Optimized (cheaper) or Regular Performance. If your players aren't based in Europe, select Regular Performance, which is available in more regions.
-
For Cost-Optimized Architecture, select x86.
-
Select a server with 1-2 VCPU, at least 1-2GB of RAM, and at least 10GB of storage. Every Hetzner Cloud server, regardless of performance or region selection, should meet these requirements. For example, a €2.99/mo CX23 server (2 VCPU, 4GB RAM) is sufficient even for large player counts or multiple player ships.
-
For Location, select the region closest to most of your players. If no cost-optimized server is available in that region, return to step 4 and select a shared regular performance server.
-
For Image, select Debian 13. (If a newer version is available, select that and consider updating this wiki page.)
-
For Networking, optionally select Public IPv4 for easy addressing. You can save a small amount of money by selecting only Public IPv6, but the address will be more complex and difficult to enter.
-
For SSH Keys, optionally Add SSH key or select an SSH key you previously added to avoid being emailed the server's root account credentials.
If you don't have an SSH key, see Generating a new SSH key. If you're on Windows and don't have an SSH client installed, install one, such as PuTTY.
-
Ignore the Volumes and Firewalls sections.
-
Do not enable Backups, which will add to the cost but not provide any benefits.
-
Ignore the Placement Groups and Labels sections.
-
For Cloud Config, change the following cloud-init configuration to use your
name,ssh_authorized_keys, andAllowUsersvalues, then paste it into the text field: TODO: Update for forkusers: - name: <YOUR USERNAME> groups: users, admin sudo: ALL=(ALL) NOPASSWD:ALL shell: /bin/bash ssh_authorized_keys: - <YOUR SSH PUBLIC KEY> packages: - fail2ban - ufw - wget package_update: true package_upgrade: true write_files: - path: /etc/ssh/sshd_config.d/ssh-hardening.conf content: | PermitRootLogin no PasswordAuthentication no Port 2222 KbdInteractiveAuthentication no ChallengeResponseAuthentication no MaxAuthTries 2 AllowTcpForwarding no X11Forwarding no AllowAgentForwarding no AuthorizedKeysFile .ssh/authorized_keys AllowUsers <YOUR USERNAME> runcmd: - printf "[sshd]\nenabled = true\nport = ssh, 2222\nbanaction = iptables-multiport" > /etc/fail2ban/jail.local - systemctl enable fail2ban - ufw allow 2222 - ufw allow 35666 - ufw enable - wget https://github.com/daid/EmptyEpsilon/releases/download/EE-2024.12.08/Linux_EmptyEpsilon_EE-2024.12.08.deb - apt -y install ./Linux_EmptyEpsilon_EE-2024.12.08.deb - reboot
This downloads and installs the 2024.12.08 Debian installation package from EmptyEpsilon's releases, implements some security measures for remote access, and opens ports for remote access (2222) and EmptyEpsilon (35666) in the server's firewall.
To download and install a different version, change the values in the
wgetandapt -y installlines near the end of the cloud-init configuration. -
In the Name section, optionally set a descriptive server name.
-
Click Create & Buy now.
-
Wait several minutes for the server to be provisioned and set up.
-
From the Hetzner Console's Dashboard, click Servers.
-
Click the server you created.
-
Click the IP address at top left to copy it.
-
Use your SSH client to connect to the server at that IP address, with the username and port (2222 in this example) you provided in the server's cloud-init.
For example, from macOS or Linux, run:
ssh -p 2222 my_username@40.50.60.70
where
2222is the SSH port,my_usernameis the username, and40.50.60.70is the server's IP address.
You should be connected to the server via the command line.
-
Change the cloud-init configuration in the previous section to use your
name,ssh_authorized_keys, andAllowUsersvalues, then save it to a file. For this example, the file is~/ee-cloud-init.yaml. -
Run:
hcloud server create \ --image debian-13 \ --name <YOUR SERVER NAME> \ --type cx23 \ --ssh-key <YOUR SSH PUBLIC KEY> \ --user-data-from-file ~/ee-cloud-init.yamlReplace:
-
<YOUR SERVER NAME>is a descriptive server name -
<YOUR SSH PUBLIC KEY>with your public key
-
-
Note the IP address reported by hcloud. This is your server's IP address.
-
Wait several minutes for the server to be provisioned and set up.
-
Use your SSH client to connect to the server at that IP address, with the username and port (2222 in this example) you provided in the server's cloud-init.
For example, from macOS or Linux, run:
ssh -p 2222 my_username@40.50.60.70
where
2222is the SSH port,my_usernameis the username, and40.50.60.70is the server's IP address.
You should be connected to the server via the command line.
After connecting to the Hetzner server with your SSH client, run:
EmptyEpsilon headless=scenario_00_basic.luawhere scenario_00_basic.lua is one of the scenario scripts in EmptyEpsilon's scripts directory. This launches EmptyEpsilon directly into the scenario as a Headless server.
Players can connect to the Hetzner server's IP address to play, and you don't need to forward ports on your network.
When using a reverse proxy, players can connect to the Hetzner server's IP address to play, and you don't need to forward ports on your network. You can also control the scenario via the GM screen on your local system.
-
On the Hetzner server, launch EmptyEpsilon as a reverse proxy server:
EmptyEpsilon proxy=listen
-
On your local computer, run the same version of EmptyEpsilon that you installed on the server with the
serverproxyPreferences file setting set to the server's IP address.For example, using our example server IP from before, either add or set
serverproxy=40.50.60.70in your EmptyEpsilonoptions.inifile or run:EmptyEpsilon serverproxy=40.50.60.70
If your local EmptyEpsilon is installed on Linux via flatpak, launch it with that option from the command line:
flatpak run --branch=stable --arch=x86_64 --command=EmptyEpsilon-wrapper io.github.daid.EmptyEpsilon serverproxy=40.50.60.70
-
Click Start server.
-
Confirm that the reverse proxy is set in the Server was configured to connect to reverse proxy panel under the Server info section.
-
Click Start server to connect your server to the remote proxy.
-
Select and configure your scenario.
- Home
- Building and installing the game
- Configuring the game
- Playing the game
- Officer roles and screens
- Captain
- Main screen
- Ship window
- Crews of 5-6 players
- Crews of 3-4 players
- Single-player crew
- Game Master (GM) screens
- Extra screens
- Minigames
- Weapon types
- Officer roles and screens
- Extending the game
- Troubleshooting
- Fork content