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

# Overview

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

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

参考: [ARK_Survival_Evolved Wiki](https://wikiwiki.jp/arkse/%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC/%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%81%AE%E7%AB%8B%E3%81%A6%E6%96%B9)

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



![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/250257/d49f99b8-89dc-1c1e-0a78-7e344d35613d.png)
参考: [DigitalOcean](https://try.digitalocean.com/vps-hosting)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/250257/94b468da-9b26-e535-61f1-ed5a37ccd14d.png)
参考: [さくらのVPS](https://vps.sakura.ad.jp/specification/)

...なるほど

# 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 スワップファイル設定](https://blog.masato.xyz/ubuntu-server-1804-lts-swapfile-setup)

## Docker

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

### docker-compose.yml
```.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
```sh
$ 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あり](https://qiita.com/sumeshi/items/a40c162e4c53623ecc48)

## nginx-proxy/docker-compose.yml
```.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
```.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:
```