ARK のマルチプレイサーバーを立てる (Docker on CentOS 8 Stream)

ARK: Survival Evolved が無料 "だった" ので入手しました。 マルチプレイのためには自分でサーバーを起動する必要があったので、VPS 上に構築した時の作業手順メモします。

なお、VPS のスペックがショボすぎたために、動作確認まではできず... 手順メモとして残しておきます。

VPS 環境

さくらのVPS 1GBプラン

  • CPU: 仮想2Core
  • メモリ: 1GB
  • SSD: 50GB
  • OS: CentOS Stream 8

swapfile を有効にする

ARK サーバーは 6GB 以上メモリがないと起動失敗するようです (起動時チェックにひっかかる?)。 実際のメモリ消費量はもっと少ないためか (?) swapfile を設定してメモリ容量が十分なように見せかければ動作するらしいです。

$ free -h
              total        used        free      shared  buff/cache   available
Mem:          964Mi       115Mi       321Mi        43Mi       527Mi       663Mi
Swap:         4.0Gi        51Mi       3.9Gi
$ sudo fallocate -l 6GiB /swapfile
$ sudo chmod 600 /swapfile
$ sudo swapon /swapfile
$ free -h
              total        used        free      shared  buff/cache   available
Mem:          964Mi       118Mi       313Mi        43Mi       532Mi       660Mi
Swap:           9Gi        51Mi       9.9Gi

元々4GiBのswapが設定されていましたが、念のための追い swap 6GiB です。

OS 起動時に自動的に swap 領域が設定されるよう、 /etc/fstab に以下を追加します。

/swapfile swap swap defaults 0 0

Docker をインストールする

ARK サーバーを動かすためには公開されている Docker イメージを使うのが簡単です。 まずは Docker をインストールします。

$ sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
$ sudo dnf install docker-ce docker-ce-cli containerd.io docker-compose-plugin
$ sudo usermod -aG docker $(id -un)
$ sudo systemctl enable --now docker.service
$ sudo systemctl enable --now docker.socket

ARK サーバーを構築する

/srv/docker/ark-server に必要なファイル一式を置くこととします。

$ sudo mkdir /srv/docker
$ sudo chown root:docker /srv/docker
$ sudo chmod 774 /srv/docker
$ cd /srv/docker
$ mkdir ark-server
$ cd ark-server

以下内容の /srv/docker/ark-server/docker-compose.yml を作成します。 Dockerイメージ の README 記載の docker-compose.yml とほとんど同じですが、 volume の作成先を ${HOME} ではなくカレントディレクトリにしています。

version: '3'

services:
  server:
    restart: always
    container_name: ark_server
    image: hermsi/ark-server:latest
    volumes:
      - ./ark-server:/app
      - ./ark-server-backups:/home/steam/ARK-Backups
    environment:
      - SESSION_NAME=${SESSION_NAME}
      - SERVER_MAP=${SERVER_MAP}
      - SERVER_PASSWORD=${SERVER_PASSWORD}
      - ADMIN_PASSWORD=${ADMIN_PASSWORD}
      - MAX_PLAYERS=${MAX_PLAYERS}
      - UPDATE_ON_START=${UPDATE_ON_START}
      - BACKUP_ON_STOP=${BACKUP_ON_STOP}
      - PRE_UPDATE_BACKUP=${PRE_UPDATE_BACKUP}
      - WARN_ON_STOP=${WARN_ON_STOP}
    ports:
      # Port for connections from ARK game client
      - "7777:7777/udp"
      # Raw UDP socket port (always Game client port +1)
      - "7778:7778/udp"
      # RCON management port
      - "27020:27020/tcp"
      # Steam's server-list port
      - "27015:27015/udp"
    networks:
      - default

設定値は /srv/docker/ark-server/.env に記載します。

SESSION_NAME=...
SERVER_MAP=TheIsland
SERVER_PASSWORD=...
ADMIN_PASSWORD=...
MAX_PLAYERS=5
UPDATE_ON_START=false
BACKUP_ON_STOP=false
PRE_UPDATE_BACKUP=true
WARN_ON_STOP=true

準備が出来たら起動します。

$ docker compose up -d
$ docker compose logs -f
...

初回起動時は多数のファイルをダウンロードするために時間がかかるため、忍耐強く待ちます。

firewall を設定しポートを公開する

ARK サーバーのポートをインターネットに公開するため、 firewalld を設定します。

まずは、 ARK サーバーをサービスとして定義してやります。

$ sudoedit /etc/firewalld/services/ark-server.xml

内容は以下です。

<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>ARK</short>
  <description>ARK Survival Evolved</description>
  <port protocol="udp" port="27015"/>
  <port protocol="udp" port="7777"/>
  <port protocol="udp" port="7778"/>
</service>

上記で定義したサービスの利用するポートを開放します。

$ sudo firewall-cmd --reload
$ sudo firewall-cmd --permanent --zone=public --add-service=ark-server
$ sudo firewall-cmd --reload

Steam クライアントに登録する

Steam の表示→サーバーで、上記で立ち上げたサーバーのIP (or FQDN) を登録します。 構築がうまくいっていれば、ARKが起動できるはず。

参考サイト