189 lines
6.3 KiB
Markdown
189 lines
6.3 KiB
Markdown
# 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: <redacted>
|
|
ADMIN_PASSWORD: <redacted>
|
|
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 <SteamID> — 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 <cmd>` 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
|