カテゴリー: マイクラ

  • 【完全保存版】Python×Ubuntuでマイクラサーバーを自動運用!バックアップ・再起動・復元をまるごと自動化

    【完全保存版】Python×Ubuntuでマイクラサーバーを自動運用!バックアップ・再起動・復元をまるごと自動化

    「マイクラサーバーを立てたけど、メンテナンスが面倒…」「ワールドが壊れたらどうしよう…」と不安になっていませんか? 今回は、初心者でも迷わないように、Pythonを使ってサーバーの「バックアップ」「復元」「自動再起動」をすべて自動化する方法を、ステップバイステップで解説します!


    1. なぜ「Python」で管理するのか?

    プログラミング言語はたくさんありますが、サーバー管理にはPythonが最適です。

    • 直感的で読みやすい: 初心者でも「何をしているコードか」が理解しやすい。
    • 自動化の道具が豊富: ファイルの圧縮や日付の取得など、便利な機能が標準で揃っています。
    • Ubuntuと相性抜群: Ubuntuには最初からPythonが入っているため、すぐに始められます。

    2. 実装:自動バックアップ&再起動スクリプト

    まずは、サーバーを安全に停止させ、データを保存してからPCをリフレッシュするスクリプトを作成します。

    準備:Pythonスクリプトの作成

    Ubuntuのターミナルで、新しいPythonファイルを作成しましょう。

    nano mc_maintenance.py

    スクリプトの中身

    以下のコードをコピーして貼り付けてください(パスは自分の環境に合わせて書き換えてくださいね)。

    Python

    import shutil
    import datetime
    import os
    import subprocess
    import time
    
    # --- 設定エリア ---
    SERVER_DIR = "/home/user/minecraft_server"  # マイクラのフォルダ
    BACKUP_DIR = "/home/user/backups"           # 保存先フォルダ
    SCREEN_NAME = "mc_server"                   # サーバーを動かしているscreen名
    
    def run_command(command):
        """マイクラのコンソールにコマンドを送る関数"""
        subprocess.run(['screen', '-S', SCREEN_NAME, '-X', 'stuff', f'{command}\n'])
    
    # 1. サーバー内に再起動の通知を出す
    run_command("say 10秒後にメンテナンスのため再起動します!")
    time.sleep(10)
    
    # 2. 安全に停止させる(重要!)
    run_command("stop")
    print("サーバー停止中...")
    time.sleep(30) # 完全に止まるまで待機
    
    # 3. バックアップ実行(zip圧縮)
    today = datetime.datetime.now().strftime('%Y%m%d_%H%M')
    backup_path = os.path.join(BACKUP_DIR, f"world_backup_{today}")
    shutil.make_archive(backup_path, 'zip', os.path.join(SERVER_DIR, 'world'))
    print(f"バックアップ完了: {backup_path}.zip")
    
    # 4. OSごと再起動してメモリをリフレッシュ!
    print("Ubuntuを再起動します。")
    subprocess.run(['sudo', 'reboot'])

    3. Ubuntuの「起動時」にマイクラを自動起動させる

    PCを再起動させても、マイクラが止まったままでは意味がありません。Ubuntuの systemd という機能を使って、「電源が入ったら自動でマイクラを立ち上げる」設定をします。

    設定手順

    1. 設定ファイルを作成:sudo nano /etc/systemd/system/minecraft.service
    2. 「起動時にこのコマンドを打ってね」という指示書を書く。
    3. 登録完了!これで、たとえ停電で落ちても、電気が復旧すれば勝手にサーバーが復活します。

    4. 「cron」でスケジュールを組む

    最後に、このPythonスクリプトを「毎日決まった時間」に動かします。

    crontab -e

    一番下に以下を追記します。

    # 毎日午前4時にメンテナンス実行
    00 04 * * * /usr/bin/python3 /home/user/scripts/mc_maintenance.py

    5. 万が一の「復元(リストア)」方法

    データが壊れた時は、バックアップフォルダにある最新のzipファイルを展開して、元の world フォルダと入れ替えるだけです。これもPythonで「どの日付に戻す?」と聞いてくれるツールを作っておくと、パニックにならずに済みます。

    万が一の時も安心!自動復元(リストア)スクリプト

    バックアップがあるだけでは不十分です。大切なのは、「いつでも、誰でも、正確に」元の状態に戻せることです。

    復元スクリプトの仕組み

    復元を行う際は、以下の手順を正確に守る必要があります。

    1. 現在動いているサーバーを止める(データ競合を防ぐため)
    2. 今の壊れた(または戻したい)ワールドを念のため別名で退避させる
    3. バックアップファイルを解凍して配置する
    4. サーバーを再起動する

    これを手動でやるとフォルダ名を間違えたりしがちですが、Pythonなら一瞬です。

    2. 復元スクリプトのコード例

    新しいファイル mc_restore.py を作成して、以下の内容を記述します。

    Python

    import shutil
    import os
    import zipfile
    
    # --- 設定エリア ---
    SERVER_DIR = "/home/user/minecraft_server"
    BACKUP_DIR = "/home/user/backups"
    WORLD_NAME = "world" # 復元したいフォルダ名
    
    def restore_backup():
        # 1. バックアップ一覧を表示
        backups = [f for f in os.listdir(BACKUP_DIR) if f.endswith('.zip')]
        if not backups:
            print("バックアップが見つかりません。")
            return
    
        print("--- 復元可能なバックアップ一覧 ---")
        for i, file in enumerate(backups):
            print(f"[{i}] {file}")
    
        # 2. ユーザーに番号を選ばせる
        choice = int(input("復元したい番号を入力してください: "))
        target_zip = os.path.join(BACKUP_DIR, backups[choice])
    
        # 3. 現在のワールドを退避(安全のため削除せずリネーム)
        current_world = os.path.join(SERVER_DIR, WORLD_NAME)
        if os.path.exists(current_world):
            old_world = current_world + "_old"
            if os.path.exists(old_world):
                shutil.rmtree(old_world)
            os.rename(current_world, old_world)
            print(f"現在のワールドを {WORLD_NAME}_old に退避しました。")
    
        # 4. ZIPを展開して復元
        with zipfile.ZipFile(target_zip, 'r') as zip_ref:
            zip_ref.extractall(SERVER_DIR)
        
        print(f"【成功】{backups[choice]} から復元が完了しました。")
        print("サーバーを起動して確認してください!")
    
    if __name__ == "__main__":
        restore_backup()
    #実行コマンド
    python3 mc_restore.py

    コマンドを実行すると復元するファイルを選択して復元が始まります。


    まとめ:自作サーバーの醍醐味は「自由」にある

    自作サーバーなら、こうしたカスタマイズは自由自在です。

    最初は「黒い画面(ターミナル)」が怖く感じるかもしれませんが、一つずつ設定をクリアしていく過程は、まるでマイクラで大きな回路を作るような楽しさがあります。 自分だけの「最強のメンテナンスフリーサーバー」を目指して、ぜひ挑戦してみてください!

  • 【初心者向け】UbuntuでマイクラJava版サーバーを24時間フル稼働させる完全ガイド

    【初心者向け】UbuntuでマイクラJava版サーバーを24時間フル稼働させる完全ガイド

    こんにちは、ginnamです。 今回は、Ubuntu環境を使って自分専用のマインクラフト(Java版)サーバーを構築する方法をまとめます。初心者がつまずきやすいポイントを丁寧に解説していきます!


    1. 運用に必要な推奨スペック

    マイクラサーバーは、同時に遊ぶ人数やModによって必要なスペックが変わります。

    • CPU: 2コア以上(シングルスレッド性能が重要です)
    • メモリ:
      • 2〜4人でバニラ: 4GB
      • 10人以上、またはMod導入: 8GB〜16GB以上
      • 私の環境: 24GB(これだけあればModを盛り込んでも余裕です!)
    • ネットワーク: 安定した有線接続

    2. Javaのインストール

    まずはマイクラを動かすための「Java」をインストールします。最新版(1.20.6以降など)を動かすならJava 21が推奨です。

    # パッケージリストを最新にする
    sudo apt update
    
    # Java 21をインストール
    sudo apt install -y openjdk-21-jre-headless
    
    # インストール確認
    java -version

    3. サーバーファイルの取得(wgetの使い方)

    次に、サーバー用のフォルダを作り、公式からプログラム(server.jar)をダウンロードします。ここで使うのが wget というダウンロード用コマンドです。

    # サーバー用フォルダを作成して移動
    mkdir ~/mc_server
    cd ~/mc_server
    
    # サーバー本体をダウンロード(URLは公式サイトの最新版に読み替えてください)
    wget https://piston-data.mojang.com/v1/objects/xxxxxxxx/server.jar

    wget のURLはバージョンごとに変わるので、公式サイトから最新のリンクをコピーしてください。

    4. 初回起動とEULAへの同意

    ダウンロードしただけでは動きません。一度起動を試みると「規約(EULA)に同意してね」とエラーが出て止まります。

    # 初回起動(一度失敗します)
    java -Xmx2G -Xms2G -jar server.jar nogui

    すると、フォルダ内に eula.txt というファイルが生成されます。これを編集して同意しましょう。

    # nanoエディタでファイルを開く
    nano eula.txt

    中身の eula=falseeula=true に書き換えて、Ctrl + OEnter(保存)、Ctrl + X(終了)で閉じます。これで準備完了です!

    これで再度起動コマンドjava -Xmx2G -Xms2G -jar server.jar noguiを打つと何やら文字がたくさん出てきたのちにサーバーが起動します。

    サーバーが起動できたか確認するために実際にゲームで接続してみましょう。

    サーバー追加からの

    こちらにサーバーが起動しているPCのアドレスを入力します。

    例として家庭内(同じネットワーク内)でしたらローカルIPを入力します(192.168.x.x等)

    別の離れた環境にサーバーを構築した場合はグローバルネットワークアドレスを入力します。

    これでゲームに接続できればサーバー構築が成功です!

    もし接続できない場合はポート開放ができていない可能性があります

    sudo ufw status

    これでマイクラのデフォルトのポート番号であるTCP 25565があるか確認します。

    もしないようでしたら

    sudo ufw allow 25565/tcp

    ファイアウォールを再読み込みします

    sudo ufw reload

    もしポート開放が原因の場合はこれで接続できるようになるはずです。

    5. systemdによる「自動起動」の設定

    サーバーを24時間運用するなら、PC再起動時に勝手に立ち上がる「自動起動設定」が必須です。

    /etc/systemd/system/minecraft.service という設定ファイルを作成します。

    [Unit]
    Description=Minecraft Server
    After=network.target
    
    [Service]
    WorkingDirectory=/home/ユーザー名/mc_server
    User=ユーザー名
    # メモリ割り当ては環境に合わせて調整(例:8GB)
    ExecStart=/usr/bin/java -Xmx8G -Xms8G -jar server.jar nogui
    Restart=always
    
    [Install]
    WantedBy=multi-user.target

    設定ファイルのパス等はご自身の環境にあわせて変更してください。

    自動起動のメリット:

    • 24時間放置OK: 停電などでサーバーが落ちても、復旧後に勝手に起動します。
    • 定刻再起動: メモリリーク対策として、毎日決まった時間に再起動させる設定も組めます。

    6. RCONの活用と定期再起動

    メモリを使い切ってしまう「メモリリーク」対策として、夜中に自動で再起動させるのがオススメです。RCON(リモートコントロール)を設定しておけば、安全に「セーブして終了」という命令を外部から送れるようになります。


    まとめ

    1. wgetで最新のserver.jarを取得!
    2. eula.txtをtrueに書き換えるのを忘れずに!
    3. systemd設定で24時間安定稼働!

    自動バックアップやさらに便利なスクリプトについては、また別記事で詳しく解説します。