# ARK: Survival Evolved Server Self-hosted ARK: Survival Evolved dedicated server. Map: **TheIsland**. ## Access - **Game:** `192.168.2.114:7777` (LAN / Tailscale) - **Steam Query:** `192.168.2.114:27015` - **RCON:** `192.168.2.114:27020` (TCP) No Tailscale sidecar — ports exposed directly on the host (same pattern as Minecraft). ## Containers | Container | Image | Role | |---|---|---| | `ark_server` | `hermsi/ark-server:latest` | Game server | ## Compose File **Path:** `/ARK_Server/docker-compose.yaml` ```yaml services: ark: image: hermsi/ark-server:latest container_name: ark_server mem_limit: 10g ports: - "7777:7777/udp" - "7778:7778/udp" # Must be game port +1 - "27015:27015/udp" # Steam query / server browser - "27020:27020/tcp" # RCON volumes: - /ARK_Server/data:/app - /ARK_Server/backups:/home/steam/ARK-Backups environment: SESSION_NAME: "Inanis ARK" SERVER_MAP: TheIsland SERVER_PASSWORD: ADMIN_PASSWORD: MAX_PLAYERS: 20 UPDATE_ON_START: "true" BACKUP_ON_STOP: "true" PRE_UPDATE_BACKUP: "true" WARN_ON_STOP: "true" ENABLE_CROSSPLAY: "false" DISABLE_BATTLEYE: "false" GAME_MOD_IDS: "1999447172,1609138312,751991809,1404697612,479929837,1984936918,936959483,1967741708,821530042,924933745,771785590,502202937" restart: unless-stopped ``` ## Host Directory Setup Run these once before first boot: ```bash sudo mkdir -p /ARK_Server/data /ARK_Server/backups sudo chown -R 1000:1000 /ARK_Server ``` The container runs as the `steam` user (UID 1000). The chown ensures it can write to the bind-mount volumes. ## Data Layout | Path | Contents | |---|---| | `/ARK_Server/data` | Server binaries, world saves, config files | | `/ARK_Server/backups` | Automatic backups (triggered by `BACKUP_ON_STOP`) | > **First boot warning:** The server downloads ~30 GB of files from Steam on first startup. This takes a long time. Do not restart the container — just wait. ## Server Configuration (Multipliers) After first boot, edit these two config files directly on the host. They are created by the server on first run. ### `GameUserSettings.ini` **Path:** `/ARK_Server/data/server/ShooterGame/Saved/Config/LinuxServer/GameUserSettings.ini` Add/update these values under the `[ServerSettings]` section: ```ini [ServerSettings] ; Rates — faster and more forgiving, but not trivial TamingSpeedMultiplier=5.0 HarvestAmountMultiplier=3.0 XPMultiplier=3.0 ResourcesRespawnPeriodMultiplier=0.5 ; Survival annoyances — reduced PlayerCharacterFoodDrainMultiplier=0.5 PlayerCharacterWaterDrainMultiplier=0.5 DinoCharacterFoodDrainMultiplier=0.5 ; Inventory QoL ItemStackSizeMultiplier=2.0 ; Loot SupplyCrateLootQualityMultiplier=1.5 ``` **Rationale:** - **5x taming** — vanilla taming is hours-long; 5x is still meaningful but won't eat a whole session - **3x harvest/XP** — fast enough to feel rewarding, slow enough to preserve the grind loop - **0.5x food/water drain** — cuts survival micromanagement in half without eliminating it - **0.5x resource respawn** — resources come back faster so you're not farming across the whole map ### `Game.ini` **Path:** `/ARK_Server/data/server/ShooterGame/Saved/Config/LinuxServer/Game.ini` Add these values under the `[/script/shootergame.shootergamemode]` section: ```ini [/script/shootergame.shootergamemode] ; Breeding — fast enough to do in a session MatingIntervalMultiplier=0.1 EggHatchSpeedMultiplier=10.0 BabyMatureSpeedMultiplier=20.0 ; Imprinting — scaled proportionally to maturation speed ; Rule: BabyCuddleIntervalMultiplier ≈ 1 / BabyMatureSpeedMultiplier ; At 20x mature speed, cuddles happen ~every 24 minutes instead of 8 hours BabyCuddleIntervalMultiplier=0.05 BabyImprintAmountMultiplier=2.0 ``` **Rationale:** - **20x maturation** — a large dino that normally takes 5 real-world days now takes ~6 hours - **0.05x cuddle interval** — keeps the number of cuddles per maturation roughly constant, so full imprinting is still achievable - **2x imprint amount** — each cuddle gives double imprint credit, reducing the number of cuddles needed for 100% - **0.1x mating interval** — vanilla mating cooldown is 18 hours; this reduces it to ~2 hours > Restart the server after editing INI files. ## RCON Usage Connect with any RCON client (e.g. RCON Console, mcrcon) to `192.168.2.114:27020` using the admin password. Useful commands: ``` SaveWorld — Force save DoExit — Clean shutdown admincheat AllowPlayerToJoinNoCheck — Whitelist a player listplayers — Show connected players ``` Manual save before stopping the container: ```bash docker exec ark_server arkmanager rconcmd "SaveWorld" ``` ## Mods See [[mods.md]] for the full mod reference and recommended load order. To enable mods, set `GAME_MOD_IDS` in the compose file: ```yaml GAME_MOD_IDS: "839162288,1999447172,1609138312,..." ``` Mods are downloaded automatically on container start. ## Future Ideas ### Event Webhooks (Discord / n8n) ARK logs all server events to `ShooterGame.log`. A lightweight log-watcher sidecar container can tail this file and fire webhooks on pattern matches — routing through n8n or directly to Discord. Detectable events and their log patterns: | Event | Log pattern | |---|---| | Server ready | `Full Startup` | | Player join | `joined this ARK` | | Player leave | `left this ARK` | | World save | `World Saved` | | Shutdown | `DoExit` | The sidecar would mount `/ARK_Server/data/server/ShooterGame/Saved/Logs` read-only and POST to an n8n webhook. arkmanager has a native `discordWebhookURL` config option but it only covers update warnings — the log-watcher approach covers everything. --- ## Notes - Uses `hermsi/ark-server` which wraps `arkmanager` internally — use `docker exec ark_server arkmanager ` for manual operations - `UPDATE_ON_START: true` — pulls the latest server patch on every container start - `BACKUP_ON_STOP: true` + `PRE_UPDATE_BACKUP: true` — automatic backup before updates and on shutdown - Port `7778` is always game port + 1; if you change `7777`, update both - RAM: 10 GB hard limit. ARK base footprint is ~6-8 GB; mods and a populated server will push toward the cap - Storage: allocate 50+ GB for `/ARK_Server/data` — binaries alone are ~30 GB, save data grows over time