ショボいVPSでARK: Survival Evolvedのサーバを動かす


Overview

ARK: Survival Evolvedのサーバに最低限必要なスペックは次のとおりです.

CPU RAM SSD Network
Core i5 2.5GHz 8GB 100GB 100Mbps

参考: ARK_Survival_Evolved Wiki

転送量で課金されるのはたまらないのでVPSで相場を確認しましょう.


参考: DigitalOcean


参考: さくらのVPS

...なるほど

Description

ARK本体がセールで1000円で買えるのにサーバに毎月何千円も出してられないので, マイクラのサーバ用に今契約してるショボいVPSで起動してみます.

CPU RAM HDD Network
2Core 2GB 200GB 100Mbps

スペックはこんな感じです, OSはUbuntu18.04で
料金は月1500円弱だったと思います.

Settings

とはいえ, 上のスペックで到底ARKサーバが動くわけがありません(最低6GBメモリがないと起動すらしませんでした).
なので, swapfileを作ってスワップ領域を割り当て, 足りない物理メモリをブーストしてあげようと言う魂胆です.

swapfile

$ sudo dd if=/dev/zero of=/var/swapfile bs=1M count=6144
$ sudo chmod 600 /var/swapfile
$ sudo mkswap /var/swapfile
$ sudo swapon /var/swapfile

こんな感じでスワップファイルを作ってあげるといいです.
VPSを再起動するたびにswap領域のマウントが外れてしまうので, 起動時にマウントしてくれるような設定を書いておきましょう(OSによって違うのでここには書いていません)

次の記事が参考になります.
Ubuntu Server 18.04 LTS スワップファイル設定

Docker

ゲームのサーバなんかインストールして環境を汚したくないので, Dockerでやります.
ありがたいことに凄い人がdockerイメージを作ってくれているので, こちらをありがたく使わせていただきます.
https://github.com/TuRz4m/Ark-docker

docker-compose.yml

version: '3.7'
services:
  ark:
    image: turzam/ark
    container_name: ark_server
    ports:
      - "7778:7778"
      - "7778:7778/udp"
      - "27015:27015"
      - "27015:27015/udp"
    restart: always
    volumes:
      - ark:/ark
    environment:
      SESSIONNAME: ark_docker
      ADMINPASSWORD: {バレにくくてカッチョいいパスワード}
      SERVERPASSWORD: {サーバに入る人が使うダサいパスワード}
      TZ: Asia/Tokyo

volumes:
  ark:

run

$ docker-compose up

あとは通常通り起動してあげればOKです.
起動に10分くらいかかるので気長に待ちましょう.

HDDなのでどうかな〜と思っていましたが5人でプレイした感じほとんどラグも起こらずに, ストレスなく遊べました.

それでは, よいARKライフを!

Edit Configfiles

上の例では, arkというvolumeを作成してその上にデータがマウントされています.
そのため, コンフィグファイルをいじりたい場合には起動中のコンテナに接続してファイルを編集します.

$ docker exec -it ark_server /bin/bash

などで接続して, Game.iniやGameUserSettings.iniを編集しましょう.

Using Custom Domains

おまけ

独自ドメインを持っていて, サブドメイン運用したい場合はこんな感じにするといいです.

前に書いた次の記事が参考になると思います.
Docker サーバ管理 なるべく楽に サブドメインありhttpsあり

nginx-proxy/docker-compose.yml

version: "2"
services:
  nginx-proxy:
    image: jwilder/nginx-proxy
    container_name: nginx-proxy
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - /var/run/docker.sock:/tmp/docker.sock:ro
      - ./certs:/etc/nginx/certs:ro
      - /etc/nginx/vhost.d
      - /usr/share/nginx/html
    restart: always
    networks:
      - shared

  letsencrypt:
    image: jrcs/letsencrypt-nginx-proxy-companion
    container_name: letsencrypt
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - ./certs:/etc/nginx/certs:rw
    volumes_from:
      - nginx-proxy
    restart: always
    networks:
      - shared

networks:
  shared:
    external: true

ark/docker-compose.yml

version: '3.7'
services:
  ark:
    image: turzam/ark
    container_name: ark_server
    ports:
      - "7778:7778"
      - "7778:7778/udp"
      - "27015:27015"
      - "27015:27015/udp"
    restart: always
    volumes:
      - ark:/ark
    environment:
      VIRTUAL_PORT: 27015
      VIRTUAL_HOST: {自分のサブドメイン 例: ark.example.com}
      LETSENCRYPT_HOST: {自分のサブドメイン 例: ark.example.com}
      LETSENCRYPT_EMAIL: {自分のメアド 例: info@example.com}
      SESSIONNAME: ark_server
      ADMINPASSWORD: {バレにくくてカッチョいいパスワード}
      SERVERPASSWORD: {サーバに入る人が使うダサいパスワード}
      TZ: Asia/Tokyo

networks:
  default:
    external:
      name: shared

volumes:
  ark: