毎月数円から運用できる破格のMinecraftサーバーを構築する

VPS等で身内やお友達などと一緒に遊ぶためのMinecraftサーバーを建てようとすると最低でも4Core/2GBくらいのスペックが必要が必要で、どうしても2,000/月 程度の維持費がかかってしまいます。Mod等をしっかり動かそうとするともっとかかりますよね。

最近、[しゃふDiscordサーバー](https://portal.shahu.ski/discord)でマイクラをプレイしているのですが、誰も参加していない時間帯でも24時間課金され続けているのはもったいないですよね

[docker-asagao-for-minecraft](https://github.com/chan-mai/docker-asagao-for-minecraft)を使うと、遊んでいる時間だけ課金するので格安でサーバーを維持できます。

# docker-asagao-for-minecraftとは
[docker-asagao-for-minecraft](https://github.com/chan-mai/docker-asagao-for-minecraft)は、[asagao-for-minecraft](https://github.com/yosipy/asagao-for-minecraft)をフォークし、Dockerへの移植と機能不具合の改善を行ったものです。

あらかじめ設定しておいたチャンネルでコマンドを実行すると、サーバーを作成・起動したり停止・削除することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3283241/79c3c853-1678-ed83-5591-5bf9afb3ea23.png)

起動している時間だけ課金されるので、毎月数円からの運用ができ、「Minecraftのサーバーを立てたい！！でもお金はあんま払いたくない！！」そんなあなたに最適です。

# 使い方
ざっくりとした使い方を説明します。

## 起動する
遊びたいときに`/open`を実行します。
保存されたイメージからVMを生成し、起動後に参加IPが出力されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3283241/e0d1c664-9720-ec7e-00a7-ade4b9f5fa18.png)

## 終了する
この状態ではVPSの利用料金が発生しているため、遊び終わったらサーバーを閉じます。
`/close`を実行すると、VMが停止しイメージが生成された後、VMリソースが削除されます。

ConoHaにおいてはイメージに対する課金はないので、起動していない間は料金が発生しません。

## その他
他のコマンドや詳細については`/help`で確認できます。
[](https://discord.com/developers/applications)

# ざっくり構築方法
詳しい構築方法については、[README.md](https://github.com/chan-mai/docker-asagao-for-minecraft/blob/master/README.md)に書いておいたので、ここではざっくりとした構築方法だけを紹介します。

# VMの作成
利用中のバージョンがver2.0であることを確認して、サーバーの追加の作成を行います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3283241/f42dd958-4994-ac0e-95d6-9eb621165b77.png)

利用中のバージョンがver3.0の場合はサイドメニュー下部のバージョン切替から切り替えを行えます。

作成する際に必ず設定を行う必要があるのは以下の2項目です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3283241/c695b6b3-f81c-ef28-8463-f654a0ce1538.png)

ネームタグは、必ず`asagao-for-minecraft`または`asagao-for-minecraft-任意名称`の形式を取ってください。
任意名称を利用する場合は、後述のbot構築の段階で`.env`に`VM_AND_IMAGE_NAME`として任意名称を定義してください。

サーバー作成時、スタートアップスクリプトを利用してMinecraftサーバーを構築するのもいいですが、

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3283241/eb65dd63-ea80-106f-b069-e5b0a57fd233.png)

以下のようなcomposeを書くことでコンテナとしてMinecraftサーバーを利用できます。
```yaml
services:
    minecraft-server:
        container_name: mc-mod-server
        image: itzg/minecraft-server
        ports:
            - "25565:25565"
        tty: true
        stdin_open: true
        restart: always
        volumes:
            - ./data:/data/
        environment:
            EULA: "TRUE"
            VERSION: "1.20.1"
            TYPE: "FORGE"
            FORGEVERSION: "47.3.0"
            INIT_MEMORY: 4G
            MAX_MEMORY: 8G
            MOTD: "A Minecraft Server"
            SPAWN_PROTECTION: 0
            ALLOW_FLIGHT: "TRUE"
            ENFORCE_SECURE_PROFILE: "FALSE"
```

私はDockerが管理し易いため、Dockerを利用しますが、どの方法をとっても構いません。

# botのデプロイ
コマンドを利用するためにbotを稼働させる必要があるのですが、botのデプロイ先で料金が発生しては本末転倒なので、GCPのAlways Free枠やOCI, Heroku, 自宅サーバー等の料金が発生しないところにデプロイしましょう。

今回、私はGCPのe2-microインスタンスにデプロイしました。

bot本体はDocker環境で動くので、
```bash
curl https://get.docker.com | sudo sh
```
でDockerをインストールして、
```bash
git clone https://github.com/chan-mai/docker-asagao-for-minecraft
```
でbotの構成ファイルを持ってきて、
```bash
cp .env.sample .env
vim .env
```
で環境変数を設定し、
```bash
sudo docker compose up -d
```
することで起動します。

詳しい構築方法は、[README.md](https://github.com/chan-mai/docker-asagao-for-minecraft/blob/master/README.md)に書いてあります。


# おわりに
[docker-asagao-for-minecraft](https://github.com/chan-mai/docker-asagao-for-minecraft)を用いることで、安価にMinecraftサーバーを運用することができます。
公開サーバーではなく、身内での利用なら無駄を省いて、遊ぶときだけ起動する形での運用もありではないでしょうか。

6Core/8GBのプランでも14.6円/時間なので、毎月20時間遊んでも300円以下で運用できます。

この記事が誰かのお役に立てれば幸いです。