[無料]GCPでマイクラmodサーバーを構築する


マイクラでmodありのマルチプレイをしたいけど自分のpcをサーバー代わりにできない...
サーバーレンタルするのもお金がかかるからいやだ...
そういった方にお勧めの記事になっています。
なるべく分かりやすいようにまとめました。

この記事ではGCPサーバーを使用し、マイクラのmodサーバーを立てる手順について解説しています。
マイクラバージョンは1.12.2としていますが、お使いになられるバージョンに合わせて作成してください。
※GCPインスタンスは無料プランの無料クレジット分で作成しています

## GCPでインスタンスを作成する
変更する部分のみを書いています　書いていないところはデフォルト設定のままでOKです
GCPの基本的な部分については解説していないのでわからない部分があったら別のサイトで調べてみてください


| 項目       　　　　| 内容　　　　　　     | 備考　　　　　　     |
|:-----------------|:------------------|:------------------
| 名前       | mineserver-1.12.2        |好きな名前で
| リージョン           | asia-northeast2         |大阪でやってますがもちろんどこでもどうぞ
| ゾーン             | asia-northeast2-a       |
| マシンタイプ         | n1-standard-2（2 vCPU、7.5GBメモリ)|   
| ブートディスク        | CentOS 7          |
| ブートディスクの種類       | SSD　永続ディスク          |
| サイズ（GB） |50 |
| プリエンプティブ      | オン          |管理、セキュリティ、ディスク、ネットワーク、単一テナンシーってとこにあります|

## forge-serverをダウンロード
好きな場所にサーバーファイルを作成する(名前はmineserverなどわかりやすい名前にすることを推奨します)
[https://files.minecraftforge.net/](https://files.minecraftforge.net/)から使用したいバージョンのforgeをダウンロード(今回は1.12.2.)
![2020-05-02_13h24_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/289356/74576680-03a5-37ea-080d-1dc15b81f7f8.png)
LatestのInstallerをダウンロードする(modによってRecommended以上のバージョンが要求されることがあるのでRecommended以上のバージョン推奨)
ダウンロードが終了したらインストーラーを起動して、server-installを選択して、インストールする場所を先ほど作成したサーバーファイルにする 終了したらOKをクリック
![2020-05-02_13h26_36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/289356/37dc49d1-f407-1520-59fc-2ece1baa8451.png)![2020-05-02_13h35_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/289356/027003b7-053f-980c-8ba0-bce2f18d12be.png)

１．サーバーファイルの下から二番目のjarファイルの名前(この写真ではforge-1.12.2-14.23.5.2854.jar)を「minecraftforge.jar」に変更
![2020-05-02_13h44_04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/289356/1fa87851-d946-d563-1a49-f21db1999399.png)
２．新しくテキストファイルを作成し、名前を「Server-Start.bat」にする(拡張子を.batに変更)
３．Server-Start.batファイルを右クリック→編集で下の文章をコピペして保存

```Server-Start.bat
@echo off
java -Xmx1024M -Xms1024M -jar minecraftforge.jar nogui
pause
```
４．Server-Start.batファイルを実行
５．そうするといくつかファイルが作成されているのでその中にある「eula.txt」を右クリして編集→eula=falseをeula=trueに変更して上書き保存
６．もう一度Server-Start.batを実行
![2020-05-02_13h48_26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/289356/eec68c58-741a-69f5-f953-786bea7f78ed.png)
このように表示されたらOK　適当なキーを押したらウィンドウが閉じる
※ここでウィンドウが表示されなかったらServer-Start.batファイルのnoguiを消して上書き保存して再実行してみてください 
 そのあとにまたnoguiと付け加えてください




![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/289356/36038e9d-7e9e-9046-d057-9a3fc2b2a727.png)
こんな感じになればOK!




## インスタンスにサーバーファイルをアップロード
サーバーファイルをzipファイルに圧縮してGCPのインスタンスの「SSH」の部分をクリック
![2022-10-06_22h44_24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/289356/58998d3e-e253-b068-1c1d-69828663db07.png)
右上の歯車マークをクリックしてファイルをアップロード→サーバーファイルのzipファイルをアップロードする

インスタンス　([Y/N]みたいな感じで聞かれたらyと入力してEnter)

```
// 既存パッケージの最新版へアップデート
sudo yum update

// openJDKをダウンロード
sudo yum install java-1.8.0-openjdk
yum search java-1.8.0-openjdk

//unzipをダウンロード
sudo yum install unzip

//screenをダウンロード
sudo yum install screen

//mineserver.zipを解凍
unzip mineserver.zip

//シェルスクリプトの作成(ファイル名は何でもいいです)
vi ./start.sh
```
vim操作はiキーを押して左下に--INSERT--と表示されたら文字入力ができるようになり、ESCを押したら文字入力を終了します
:wqとすると保存して終了となります(文字入力を終了した後に入力してください)

※二行目の-Xmx6144M -Xms4096Mの部分はサーバー側は使用するメモリの量を指定していますXmxが最大、Xmsが最低でどのくらいメモリを使うかという設定です(この場合は最大6GB,最低4GB)

```start.sh
#!/bin/bash
java -server -Xmx6144M -Xms4096M -jar "mineserver/minecraftforge.jar" nogui
read -p "Hit enter: "
```
start.shを実行するために権限を設定します

```
sudo chmod 777 start.sh
```

start.shを実行します

```
./start.sh
```
このように出たらOK
![2020-05-02_15h01_31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/289356/58ff8507-6ab8-006a-d621-a7304c10f948.png)
ここでもう一度./start.shを実行してFailed to load eula.txtが表示されないようにしてください(もしかしたらしなくてもいいかも)

## スタートアップの作成
ここではサーバーが起動したら自動でforgeserverを立ち上げるための設定をしていきます

```
sudo vi /etc/systemd/system/server_start.service
```
WorkingDirectoryに関してはminecraftforge.jarファイルが入ってる階層を書いてください

``` server_start.service
[Unit]
Description=Minecraft Server
After=network-online.target

[Service]
Type=forking
ExecStart=/usr/bin/screen -d -m -S mcs java -Xms4G -Xmx6G -d64 -jar minecraftforge.jar nogui
WorkingDirectory=/home/ユーザー名/mineserver
Restart=always
User=ユーザー名(ls -lなどで確認可能)
Group=上と同じ

[Install]
WantedBy=multi-user.target
```
ここではサーバーが意図せず終了してしまった際に、オートセーブするための設定をしていきます

```
sudo vi /etc/systemd/system/server_stop.service
```

```server_stop.service
[Unit]
Description=a

[Service]
Type=oneshot
RemainAfterExit=true
ExecStop=/usr/bin/sudo /usr/bin/screen -r mcs -X stuff '/stop\n'

[Install]
WantedBy=multi-user.target
```
```
sudo systemctl enable server_start
sudo systemctl enable server_stop
// インスタンスの再起動
sudo reboot
```
screen -lsと入力して下のように表示されたら成功
![2022-10-06_22h47_11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/289356/451c9445-71fb-edad-20a9-ce8319b57df1.png)

No Sockets found in ......って表示されたらどこか間違えてるので頑張って修正して再起動して...を繰り返してください
次にscreen -rと入力
これである程度完成しました

## Modを導入
入れたいmodをダウンロードしてきて、modsファイルというフォルダーを作成してそのなかにmodをぶち込んでzipにしてアップロード
unzipコマンドで解凍して、解凍したmodsファイルをmineserverフォルダーのなかに入れてください
そのあとにサーバーをリブートしてscreen -rと入力してください。
ここでNo Sockets found in...と表示されてしまったらmodが競合、バージョンが古いor新しすぎるなどの問題が発生してしまっているのでDoneと表示されるまで頑張ってください...(optifineなどのクライアント側で動かすmodはサーバ側のmodsフォルダーには入れる必要はありません)

※なおたくさんのmodを導入しようとしている人はすぐに原因が特定できない場合もあるかと思いますが、そういった際には自分のpc内にあるmineserverフォルダのmodsファイルにmodをいれてServer-Start.batファイルを実行しても確認することができます(いちいちGCPインスタンスにファイルアップロードして...みたいなのがなくなって効率が良くなります

※Doneとでるのは一番下の行ではなく下の行から5行目くらい上のほうに出てるので気を付けてください


## ポート開放
ポート25565番を開放していきます

```
sudo firewall-cmd --permanent --add-port=25565/tcp
sudo firewall-cmd --reload
sudo firewall-cmd --list-all
```
![2022-10-06_22h51_17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/289356/7cf0a9a4-61a3-1721-7050-7cf9abdcc1d0.png)

このように出ればOKです

###アカウント+パスワード設定(省略可)
これはしなくてもしてもどっちでもいいです
パスワード設定をしておくことで、何かしらの理由でSSHを起動できないさいにシリアルコンソールという場所から簡易的にアクセスできます

```
sudo passwd ユーザー名
```
これでパスワード(8文字以下)を設定できます

## ファイアウォール作成
インスタンスにファイアウォール設定をしていきます
VPCネットワーク　ファイアウォール　ルールに行き、ファイアウォールルールを作成します

- 名前　:  ssh-25565
- IP範囲 : 0.0.0.0/0
- プロトコルとポート : tcp:25565

これで一通りの作業が終了しました！

## マイクラを起動
ここで念のためインスタンスを再起動しておきましょう
マイクラを起動して、マルチプレイ→サーバー追加→サーバーアドレスの欄にインスタンスの外部IPをコピペしてください
終了です！

分からないこと等がありましたらコメントでお願いします
この方法では自分でしかインスタンスを起動できないため、参加者が自由にインスタンスを起動、停止できるように僕はDiscordのbotを作成して、だれでもサーバーで遊びたいときにインスタンスが起動できるようにしました
良ければ下の記事もご覧ください。

https://qiita.com/kkst/items/c1ba1c476adb1c50ae2d