まず初めに
この記事は、
- minecraft大好き
- 家でサーバーを動かしたくない
- かといって、VPSを月極で借りるのは高い
- そもそも24時間遊んでるわけじゃない
などの理由で、時間借りしたい人におすすめです。
しかし、大半のVPSはインスタンスを削除しなければ課金が止まりません。
これでは、誰も接続していない時間も課金されてもったいないです。
そこで、使ってないときは削除して、遊びたいときに簡単に復旧できるようにしました。
VPSの選定
- AWSはメモリの大きなプランは高い
- GCPはもっと高い
- IDCFは(ry
ので、候補として
- DigitalOcean
- このは
- vultr
が上がり、
- メモリの大きなインスタンスが安い
- 東京リージョンがある
- 無料枠がある
という点から、vultrになりました。
以下の記事を参考にしています。
海外VPSのVULTRでCoreOSを動かしてみた by @ta_kousuke http://qiita.com/koh-taka@github/items/36ffbbfd7d1145a80972
上記の記事に倣って、私もリンク貼っておきます。
http://www.vultr.com/?ref=7109367-3B
20ドルの無料枠がもらえるらしいですよ!
後述の設定だと、一時間0.08ドル~0.23ドルなので割と遊べちゃいます。
前提条件
まず、いくつか必要なものがあります。
- ローカルで動いてるMinecraftサーバー
- SSHでrsyncできるサーバーとその秘密鍵
- httpでzipが配信できる事
まず、ローカルでMinecraftサーバーを起動し、ワールドを生成しておきます。
次に、sshでrsyncできるサーバーを用意し、秘密鍵を登録しておきます。
http://yanor.net/wiki/?UNIX%2Frsync%2Frsync%E5%B0%82%E7%94%A8%E3%81%AE%E7%A7%98%E5%AF%86%E9%8D%B5%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%82%B5%E3%83%BC%E3%83%90%E9%96%93%E3%81%A7rsync%E3%81%99%E3%82%8B
私は、ここを参考にSSHでログインできないようにしました。
また、/home/hoge/save-201702などを作成しておき、その中にサーバーのワールドを突っ込んでおきます。
最後に、ローカルで動いてるサーバーをzipで圧縮します。
この時、ワールドの入っているフォルダ(今回はsaveフォルダ)を含まないようにします。
そしてそのzipをhttpでvultrからアクセスできる範囲に置いておきます。
私は、さくらVPSに置いていますが、vultrの最小構成(月5ドル)に置くのもありかもしれません。
スタートアップスクリプト
vultrでインスタンスを作成する際に指定できる、スタートアップスクリプトを使い、設定から起動までやってしまいます。
Ubuntuの16.10 x64を使うことを前提にしています。
あと、めんどくさいのでrootで動かしてます。適宜変更してください。
毎回消すからいいよね( ^ω^)・・・
手順は
- aptでjdkとunzipを導入
- サーバー本体をwgetして配置
- ramdiskを用意
- rsync用のカギを用意
- rsyncで最新のワールドを取得
- 定期バックアップ設定
- 起動スクリプトの登録
- 起動
となります。
aptでjdkとunzipを導入
apt update
apt install default-jre unzip -y
説明するまでも無いでしょう
サーバー本体をwgetして配置
wget https://hoge.net/minecraft/minecraft.zip -O /root/minecraft.zip
unzip /root/minecraft.zip -d /root
/root/minecraft/minecraft/
とならないよう、注意してください。
ramdiskを用意
mkdir /mnt/ramdisk
chmod 775 /mnt/ramdisk
chown ${USER} /mnt/ramdisk
mount -t tmpfs -o size=1g tmpfs /mnt/ramdisk
ramdiskを1GB用意しています。
足りなければ増やしてください。
rsync用のカギを用意
mkdir -p /root/.ssh
chmod 600 /root/.ssh
#取得用秘密鍵
echo "-----BEGIN RSA PRIVATE KEY-----
hoge
-----END RSA PRIVATE KEY-----" > /root/.ssh/id_rsa_for_restore
#更新用秘密鍵
echo "-----BEGIN RSA PRIVATE KEY-----
fuga
-----END RSA PRIVATE KEY-----" > /root/.ssh/id_rsa_for_backup
chmod 600 /root/.ssh/id*
rsyncしか許可しないsshの都合上、コマンド毎に鍵が必要でした。
rsyncで最新のワールドを取得
rsync -azvv -e 'ssh -i /root/.ssh/id_rsa_for_restore -o "StrictHostKeyChecking no"' minesync@hoge.net:/home/minesync/save-201702 /mnt/ramdisk
ln -s /mnt/ramdisk/save-201702 /root/minecraft/save
今回はワールドを保管するサーバー側のユーザー名をminesyncにしています。
定期バックアップ設定
cat <<EOS > /root/minecraft/save.sh
service minecraft command save-all
sleep 10s
rsync -azvv -e 'ssh -i /root/.ssh/id_rsa_for_backup -o "StrictHostKeyChecking no"' /mnt/ramdisk/save-201702 minesync@hoge.net:/home/minesync
EOS
chmod +x /root/minecraft/save.sh
(crontab -l 2>/dev/null; echo "*/5 * * * * /root/minecraft/save.sh > /dev/null 2>&1") | crontab -
5分ごとに自動セーブし、rsyncで同期してます。
起動スクリプトの登録
cat <<'EOF' > /etc/init.d/minecraft
#!/bin/bash
# /etc/init.d/minecraft
# version 0.4.2 2016-02-09 (YYYY-MM-DD)
#
### BEGIN INIT INFO
# Provides: minecraft
# Required-Start: $local_fs $remote_fs screen-cleanup
# Required-Stop: $local_fs $remote_fs
# Should-Start: $network
# Should-Stop: $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Minecraft server
# Description: Starts the minecraft server
### END INIT INFO
#Settings
SERVICE='forge-1.7.10-10.13.4.1566-1.7.10-universal.jar'
SCREENNAME='minecraft_server'
OPTIONS='nogui'
USERNAME='root'
WORLD='save'
MCPATH='/root/minecraft'
BACKUPPATH='/media/remote.share/minecraft.backup'
MAXHEAP=7
MINHEAP=6
HISTORY=1024
CPU_COUNT=2
(省略)
EOF
chmod a+x /etc/init.d/minecraft
update-rc.d minecraft defaults
http://minecraft.gamepedia.com/Tutorials/Server_startup_script
ここのまんまなので、省略しました。
CPU_COUNTやHEAPはインスタンスによって変えた方がいいかもです。
起動
service minecraft start
まとめたものが、以下になります。
http://pastebin.com/PDhXCv96
スタートアップスクリプトの登録
vultrのコンパネから、Servers>Startup Scriptsと行って作成したスクリプトを登録し名前を付けます。
サーバーの起動
今回のサーバーは、ローカル環境でもRAMDISK上でなければまともに遊べないくらい重い&メモリを6GBくらい消費するので、
150GB SSD プラン 月額80ドル 一時間0.119ドル
のプランを借ります。
サーバーを作成するときに、スタートアップスクリプトを選択して作成すれば、インストール完了時に実行され、minecraftサーバーが立ち上がってくるはずです。
遊び終わったら、5分くらい待ってからインスタンスをdestroyしてください。
止めるだけだと、課金が止まりません。
cronで自動的にサーバーは同期されているはずなので、次回起動時に同じようにスクリプトを指定して起動すれば、つづきからできるはずです。
今後の課題
- 毎回IP変わってマイクラの設定を書き換えるのがめんどくさい
- そもそも、起動がめんどくさいのでAPIを使っていい感じにする