Johnny-Knighten / ark-sa-server

Docker Linux container image for running an ARK Survival Ascended dedicated server.
MIT License
4 stars 0 forks source link
ark ark-survival-ascended containers docker game-server linux-containers

ARK Survival Ascended Server - Docker Containers

GitHub (Pre-)Release Date GitHub Workflow Status (with event) GitHub Workflow Status (with event) GitHub Repo stars GitHub

Docker Image Version (latest semver) Docker Stars Docker Pulls

Docker Linux container image for running an ARK Survival Ascended dedicated server.

Note - This container has not been tested with the Epic Game Store version of the game only the Steam version. If there are any problem please open an issue.

See the wiki for more detailed documentation.

Table of Contents

Features

Quick Start

It is assumed you already have Docker installed on your host machine. See here for instructions on how to install Docker.

The commands below will run the latest version of the ARK SA Server in a Linux container using wine. It will expose the default ports needed for the game server and RCON. It will also set the server name and admin password.

Note - Using docker run by itself isn't recommended to host a server in the long term. See the Deployment Examples section of the wiki for more deployment options.

Linux Host

The ark server data in this example will be stored in your home directory (/home/USERNAME/ark-data).

# written for bash, but should work in other shells
# may require Sudo depending on your docker setup
$ docker run -d \
  --name ark-sa-server \
  -p 7777:7777/udp \
  -p 7778:7778/udp \
  -p 27015:27015/udp \
  -p 27020:27020/tcp \
  -e SERVER_NAME="\"Simple ARK SA Server\"" \
  -e ADMIN_PASSWORD=secretpassword \
  -v $HOME/ark-data/server:/ark-server/server \
  -v $HOME/ark-data/logs:/ark-server/logs \
  -v $HOME/ark-data/backups:/ark-server/backups \
  johnnyknighten/ark-sa-server:latest

To view the container logs:

$ docker logs ark-sa-server -f

Press CTRL+C to exit the logs output.

To stop the container:

$ docker stop ark-sa-server

Windows Host

See the Windows Host section in the Quick Starts page of the wiki for details.

System Requirements

You should consider running this on another device besides your gaming PC, unless you have RAM to spare.

General Minimum Spec Recommendation (For Server Only):

Note - Treat these as suggestions rather than hard rules. These recommendations are based on informal performance testing with some metrics collected over time. See the Performance Testing section in the wiki for more details.

Server/Game Configs

Environment Variables

Environment variables are the primary way to configure the server itself. For game configurations such as XP/Gathering/Taming rates and player stats, you will need to use config files. See the Config Files section in the wiki for more details.

The table below shows all the available environment variables and their default values.

Variable Description Default
SKIP_FILE_VALIDATION Skips SteamCMD validation of the server files. Can speed up server start time, but could risk not detecting corrupted files. False
TZ Sets the timezone of the container. See the table here and look in the TZ identifier column. Highly recommend to set this if you will be using any of the CRON variables. America/New_York
MANUAL_CONFIG If set to True then the container will not generate any config files. This is useful if you want to manage the config files yourself. False
SCHEDULED_RESTART Enable scheduled restarts of the server. False
BACKUP_ON_SCHEDULED_RESTART Determines if the server should backup itself before restarting. False
RESTART_CRON Cron expression for scheduled restarts. Default is everyday at 4am. 0 4 * * *
SCHEDULED_UPDATE Enable scheduled updates of the server. False
UPDATE_CRON Cron expression for scheduled updates. Default is every Sunday at 5am. 0 5 * * 0
BACKUP_BEFORE_UPDATE Determines if the server should backup itself before updating. False
UPDATE_ON_BOOT Determines if the server should update itself when it starts. If this is set to False then the server will only update if SCHEDULED_UPDATE=True, then it will update on the schedule specified by UPDATE_CRON. True
SCHEDULED_BACKUP Enable scheduled backups of the server. False
BACKUP_CRON Cron expression for scheduled backups. Default is every day at 6am. 0 6 * * *
BACKUP_ON_STOP Determines if the server should backup itself when the container stops. True
ZIP_BACKUPS If this is set to True then it will zip your backups instead of the default tar and gzip. False
RETAIN_BACKUPS Number of backups to keep. If not set, then an unlimited number of backs will be kept. EMPTY
SERVER_NAME Name of the server that appears in the server list. If the name contains a space wrap the name in quotes, depending on your system you may need to add escaped quotes \". "ARK SA Server"
SERVER_PASSWORD Password to login to the server. Defaults to no password aka a public server. Do not put spaces in your password. EMPTY
ADMIN_PASSWORD Password for the server admin. Also used for RCON access. Do not put spaces in your password. adminpassword
GAME_PORT Primary game port. This port +1 will also be used. 7777
QUERY_PORT Steam query port. 27015
ENABLE_RCON Enable RCON on the server. True
RCON_PORT RCON port for the server. 27020
MAP Map launched on the server. TheIsland_WP
MAX_PLAYERS Maximum number of players allowed on the server. 70
ENABLE_PVE Enable PvE mode, otherwise it is a PvPvE. False
NO_BATTLEYE Disables BattlEye on the server. True
EXTRA_LAUNCH_OPTIONS Extra launch options for the server. Allows additional flags that do not have an environment variable provided yet. EMPTY
MOD_LIST Comma separated list of mod ids to install. Needs to be wrapped in quotes and whitespace can appear before or after commas. EMPTY
EPIC_PUBLIC_IP Public IP address of the server, used by Epic game clients. EMPTY
MULTI_HOME_SERVER Provide your public IP address when hosting multiple servers on the same machine. EMPTY

Note - If you are new to CRON, check here to get help understanding the syntax: crontab guru.

Exposed Ports

The table below shows the default ports that are exposed by the container. These can be changed by setting the environment variables GAME_PORT, QUERY_PORT, and RCON_PORT.

Port Protocol Description
7777 UDP Main game port
7778 UDP Additional game port that is always one port above the main game port
27015 UDP Steam query port
27020 TCP RCON Port

Make sure you have Port Forwarding configured otherwise the server will not be accessible from the internet. See the Port Forwarding section int he wiki for more details.

Note - Always ensure that your -p port mappings if using docker run and the ports section of your docker compose match up to the ports specified via the environment variables. If they do not match up, the server will not be accessible.

Volumes

There are thee volumes used by the container

Volume Description
/ark-server/server Contains server and mods files
/ark-server/logs Contains all log files generated by the container
/ark-server/backups Contains all automated backups

Backups

Backups can be performed automatically if configured. Backups are performed by making a copy the /ark-server/server/ShooterGame/Saved directory to the /ark-server/backups volume. The backups are named using the following format: server-backup-{datetime}. They are compressed as tar.gz files by default(can be set to zip via ZIP_BACKUPS=True) and are stored in the /ark-server/backups volume. You can configure the number of backups to keep using RETAIN_BACKUPS, otherwise you will need to manually delete old backups.

Backup Automation Options

If you are using BACKUP_ON_STOP=True, it is highly recommended you adjust the timeout settings of your docker run/stop/compose command to allow the backup process enough time to complete its backup. Without doing this, it is likely your backup will be unfinished and corrupt. See the Backup On Container Stop - Docker Timeout Considerations section of the wiki for more details.

If desired, you can also manually trigger a backup. See the Manual Backup section of the wiki.

Restoring Backups

See the Restoring Backups section of the wiki for details.

Tip For Using BACKUP_ON_STOP=True

If you are planning on using BACKUP_ON_STOP=True, it is highly recommended you adjust the timeout settings of your docker stop/compose down command to allow the backup process enough time to complete its backup. Without doing this, it is likely your backup will be unfinished and corrupt. The longer your server has been running the bigger your backup will become which increases the time needed to backup the server. See the Backup On Container Stop - Docker Timeout Considerations section of the wiki for more details.

Config Files

Configuration files are primarily used to adjust settings such as such as XP/Gathering/Taming rates and player stats. The config files are located in the /ark-server/server/ShooterGame/Saved/Config/WindowsServer directory inside the container and the primary file you will modify is GameUserSettings.ini.

This container has two primary ways to manage config files.

You should not mix and match these methods (it is possible but you need to understand how both are handled inside the container). If you wish to manage the config files manually, you must set MANUAL_CONFIG=True to prevent the container from generating/overwriting any config files.

Despite setting MANUAL_CONFIG=True, if the GameUserSettings.ini file is missing a minimal config will be generated using the following variables:

For more info see the Config Files wiki page.

Mods

Mods are handled via the MOD_LIST environment variable. The variable is a comma separated list of mod ids to install. The mod ids list need to be wrapped in quotes, and white space is allowed before/after commas since all whitespace in the quotes will be removed. Right now, if you are lucky, the mod author will put the id in there mod description. An alternative way to get mod ids is by installing them on your local machine then going to PATH_TO_STEAM\Steam\steamapps\common\ARK Survival Ascended\ShooterGame\Binaries\Win64\ShooterGame\Mods\RANDOM# and look at the subdirectories' name. The first number before the _ in the subdirectories name is the mod id.

Deployment

See the Deployment Examples section of the wiki for more deployment option examples.

Tags

Tags used in this project are focused on the version of the GitHub release and the execution environment it uses. It is not based on the game/server version or mod versions.

Container Tags

Currently the only execution environment is wine, which runs the Windows version of the game server in a Linux container via the wine compatibility layer. More specifically it uses GloriousEggroll's build of wine that's based on Valves's Proton experimental wine repo. In the future depending on the direction of this project and the release of the Linux version of the game server, there may be a linux and windows execution environment.

Tag Description Examples
latest latest build from main branch, defaults to the wine execution environment latest
latest-{execution environment} latest build from main branch for a specific execution environment latest-wine
major.minor.fix semantic versioned releases, defaults to the wine execution environment 1.0.0
major.minor.fix-{execution environment} semantic versioned releases for a specific execution environment 1.0.0-wine

There are also pre-release tags that are built from the next branch. These are used for testing and are not recommended for production use.

Shout Outs

Contributing

See CONTRIBUTING.md for details on how to contribute to this project.