├── .env.example ├── .gitignore ├── Dockerfile ├── README.md ├── ark-server.sh └── docker-compose.yml /.env.example: -------------------------------------------------------------------------------- 1 | SESSION_NAME= 2 | ADMIN_PASSWORD= 3 | MAX_PLAYERS=20 4 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .env 2 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM steamcmd/steamcmd:latest 2 | 3 | RUN apt-get update && apt-get install -y wget python3 libfreetype6 4 | 5 | ENV STEAM_PATH=$HOME/.steam/steam 6 | RUN mkdir -p $STEAM_PATH 7 | WORKDIR $STEAM_PATH 8 | 9 | # Install Proton build from Glorious Eggroll 10 | ENV PROTON_VERSION=GE-Proton8-26 11 | RUN mkdir -p compatibilitytools.d/ 12 | RUN wget -O - \ 13 | https://github.com/GloriousEggroll/proton-ge-custom/releases/download/${PROTON_VERSION}/${PROTON_VERSION}.tar.gz \ 14 | | tar -xz -C compatibilitytools.d/ 15 | RUN mkdir -p steamapps/compatdata/2430930 16 | RUN cp -r compatibilitytools.d/${PROTON_VERSION}/files/share/default_pfx steamapps/compatdata/2430930 17 | 18 | # Export Proton paths 19 | ENV STEAM_COMPAT_CLIENT_INSTALL_PATH=$STEAM_PATH 20 | ENV STEAM_COMPAT_DATA_PATH=${STEAM_PATH}/steamapps/compatdata/2430930 21 | ENV PROTON=${STEAM_PATH}/compatibilitytools.d/${PROTON_VERSION}/proton 22 | 23 | # Server Ark start script 24 | ENV ARK_PATH="${STEAM_PATH}/steamapps/common/ARK Survival Ascended Dedicated Server/ShooterGame" 25 | COPY ark-server.sh /usr/local/bin/ark-server 26 | RUN chmod +x /usr/local/bin/ark-server 27 | 28 | WORKDIR $HOME 29 | ENTRYPOINT ["ark-server"] 30 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # ARK: Survival Ascended Docker Server 2 | 3 | Ark server in a docker container using GloriousEggroll's custom [proton build](https://github.com/GloriousEggroll/proton-ge-custom) 4 | 5 | 1) Install [docker](https://docs.docker.com/engine/install/) 6 | 2) Copy `.env.example` to `.env` and [configure](#environment-variables) 7 | 3) Run `docker compose up --build` 8 | 9 | Server files are mounted in the `ark-data` docker volume `/var/lib/docker/volumes/ark-data/_data/ShooterGame/` 10 | 11 | ## Configuration 12 | 13 | Custom [server settings](https://ark.fandom.com/wiki/Server_configuration#GameUserSettings.ini) `/ShooterGame/Saved/Config/WindowsServer/GameUserSettings.ini` 14 | 15 | ### Environment Variables 16 | 17 | Settings in `.env` 18 | 19 | | Variable | Default | Description 20 | | --- | --- | --- 21 | | `SESSION_NAME` | | Name of the server 22 | | `ADMIN_PASSWORD` | | Server [administrator](https://ark.fandom.com/wiki/Console_commands#EnableCheats) password 23 | | `MAX_PLAYERS` | `20` | Player slots (Max `70`) 24 | | `QUERY_PORT` | `27015` | UDP port 25 | | `GAME_PORT` | `7777` | UDP port 26 | | `MODS` | | Comma-separated list of [CurseForge](https://www.curseforge.com/ark-survival-ascended) mod IDs to install (e.g. `928501,928728`) 27 | | `CMD_ARGS` | | Additional [command line arguments](https://ark.fandom.com/wiki/Server_configuration#Command_line_arguments) (e.g. `"-ForceAllowCaveFlyers -NotifyAdminCommandsInChat"`) 28 | 29 | ## Docker 30 | 31 | The docker image builds off the offical `steamcmd/steamcmd:latest` base image 32 | 33 | Running `docker compose build` builds the image locally and tags it as `ark-server` 34 | 35 | Alternatively you can use a [pre-built image](https://hub.docker.com/r/chandywerks/ark-server) on docker hub `chandywerks/ark-server:latest` 36 | 37 | ```yml 38 | version: '3' 39 | services: 40 | ark-server: 41 | restart: unless-stopped 42 | image: chandywerks/ark-server:latest 43 | container_name: ark-server 44 | environment: 45 | ... 46 | ``` 47 | -------------------------------------------------------------------------------- /ark-server.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # Install server / check for updates 4 | steamcmd +login anonymous +app_update 2430930 validate +quit 5 | 6 | # Start server with proton 7 | SERVER_CMD="$PROTON run \"${ARK_PATH}/Binaries/Win64/ArkAscendedServer.exe\" \ 8 | \"TheIsland_WP?listen?SessionName=${SESSION_NAME}?ServerAdminPassword=${ADMIN_PASSWORD}?Port=${GAME_PORT}?QueryPort=${QUERY_PORT}?MaxPlayers=${MAX_PLAYERS}?\"" 9 | 10 | # Install mods 11 | if [ -n "$MODS" ]; then 12 | SERVER_CMD="$SERVER_CMD -automanagedmods -mods=$MODS" 13 | fi 14 | 15 | # Additional command line arguments 16 | if [ -n "$CMD_ARGS" ]; then 17 | SERVER_CMD="$SERVER_CMD $CMD_ARGS" 18 | fi 19 | 20 | # Start the server 21 | eval $SERVER_CMD > /dev/null 2>&1 & 22 | SERVER_PID=$! 23 | 24 | # Capture logs 25 | tail -f --retry "${ARK_PATH}/Saved/Logs/ShooterGame.log" & 26 | 27 | # Monitor server process 28 | wait $SERVER_PID 29 | exit $? 30 | -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | services: 3 | ark-server: 4 | restart: unless-stopped 5 | build: 6 | context: . 7 | image: ark-server 8 | container_name: ark-server 9 | environment: 10 | - SESSION_NAME 11 | - ADMIN_PASSWORD 12 | - MAX_PLAYERS=20 13 | - QUERY_PORT=${QUERY_PORT:-27015} 14 | - GAME_PORT=${GAME_PORT:-7777} 15 | - MODS 16 | - CMD_ARGS 17 | ports: 18 | - "${QUERY_PORT:-27015}:${QUERY_PORT:-27015}/udp" 19 | - "${GAME_PORT:-7777}:${GAME_PORT:-7777}/udp" 20 | volumes: 21 | - "ark-data:/root/.steam/steam/steamapps/common/ARK Survival Ascended Dedicated Server" 22 | 23 | volumes: 24 | ark-data: 25 | driver: local 26 | name: ark-data 27 | --------------------------------------------------------------------------------