4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

海外VPSのVULTRでMinecraftを動かしてみた

Last updated at Posted at 2017-02-16

まず初めに

この記事は、

  • 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で動かしてます。適宜変更してください。
毎回消すからいいよね( ^ω^)・・・
手順は

  1. aptでjdkとunzipを導入
  2. サーバー本体をwgetして配置
  3. ramdiskを用意
  4. rsync用のカギを用意
  5. rsyncで最新のワールドを取得
  6. 定期バックアップ設定
  7. 起動スクリプトの登録
  8. 起動

となります。

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を使っていい感じにする
4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?