0.目的
友人から自前でサーバーを構築する方法を教えてほしいと言われたので,記事として残しておこうという目的で書きます。そこまで難しいことはやらないです。端的に言えばマイクラサーバーの構築は必要なソフトウェアを入れて,オプションを付けてコンソール上で実行するだけです。
//
や#
はコメントアウトや補足をしたい時に使ってます。
1.必要なもの
<その1>
当たり前ですがPCがなきゃお話になりませんね。サーバー建てるPCなんてテキトーなもので良いんです。古い5,6年前のノートPC使ってもいいし,サーバー用のPCを新たに用意してもいいし,メインPCを使うでもなんでも良いんです。
<その2>
次に絶対必要なソフトウェアですが,JAVA
ですね。マインクラフトというゲームはJava Virtual Machine
を使って実行しているゲームなので,そのサーバーを建てるのにもJAVA
は必要になります。
本格的に構築するならOS(Operating System)はLinuxの方が良い。
<補足>
WindowsってServer版以外のHome,Pro,Pro for Workstations,Education,Business,Enterprise版のライセンスの制約で20台までのデバイスの接続しか認められていないので,そのような制限が存在しないLinux,macOSなどを使う方が良いでしょう。(Server版を買ってもいいけど最低55万円とかした気がする。)
Javaをインストールするといっても JRE(Java Runtime Environment) と JDK(Java Development Kit) の2つがあってどっちをインストールすりゃいいんやってなる人がいると思います。サーバーを建てる場合は必ずJDKの方が必要になります。(古いバージョンの場合はJava8で動いているのでJava8ベースのJREでも動くことがあるみたいですが。 ver1.12.2まではJava8,1.13からは知らん。)
それではJDKのインストールをしていきましょう。まずはLinuxからです。(コマンド叩いて実行して終わりだから)
[手順] JDKのインストール
LinuxにJDKをインストールする場合
①ターミナルを開いて次のコマンドでインストールを行う。
user@localhost: ~$ sudo apt-get install openjdk-*-jdk openjdk-*-jre
user@localhost: ~$ sudo yum install java-*-openjdk
user@localhost: ~$ sudo dnf install java-*-openjdk
*(アスタリスク)
を使ってワイルドガードで公式リポジトリに存在する全てのバージョンのJDKをインストールしておくと楽です。sudo update-alternatives --config java
と実行すれば変更ができるのでインストールできるだけしておくと良いでしょう。
インストールが完了したらjava
コマンドが実行できるか確認をしましょう。コンソールにjava
と入力して実行するだけでもいいですし,java --version
と入力し実行してバージョンの確認を行っても良いでしょう。
user@localhost: ~$ java --version
WindowsにJDKをインストールする場合
①Oracleの公式サイトからJDKインストーラーを取得する。
この記事を書いてる時点での最新のJDKはJDK23です。好きなJDKのバージョンを選びます。
Windowsのセクションからx64 MSI Installerまたはx64 Installerのどちらかを選びダウンロードして実行しインストールをします。
②インストールができたら,コマンドプロンプトかPowershellを開きます。管理者権限は不要
コンソール画面が出たらjava
と入力して実行するかjava --version
と入力して実行してJDKのバージョンを確認しても良いでしょう。
C:\Users\$USER> java --version
コマンドを実行したら
「'java' は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません。」と表示された場合はパスの設定を行います。システムの詳細設定を開くと,右下の方に「環境変数」と書かれた項目があるのでそれをクリックします。システム環境変数の方の項目にある「Path」を選択し編集します。
右側にある新規というボタンを押した後参照を押してJavaのバイナリーフォルダーを指定します。せんたくできたらOKを押してパスを追加します。OKを押せるだけ押して設定完了しました。パスの設定が出来たらまた②の最初の手順でjava
コマンドを実行できるか試してください。パスの設定をしても実行できなかったら一度Windowsを再起動してみてください。
2.マインクラフトサーバーを選ぶ
マインクラフトって結構色んな遊び方できますよね。例えば,modを入れたりバニラのままで遊んだりと。そのような感じでマインクラフトサーバーを建てるためのツールもたくさんあります。バニラ環境のみで遊びたい場合はMinecraft公式サイトやMinecraft Launcherから,バニラ環境にプラグインを入れたい場合はSpigotやBukkitなどがあります。他にもmodを入れたいならFablicやForge,プラグインとforge modを同時に入れたいのであればMohist MCやSpongeなどがあります。とりあえず色々あります。一番簡単なのはForgeとバニラですね。その次にSpigot/Bukkitになります。Mohist MCやSpongeは結構ややこしくて面倒です。
まずは簡単なバニラとForgeを紹介したいと思います。(正直Forgeバニラと変わらん。てかForgeの方でバニラ環境作れるからForgeだけでいい説)
バニラ/Forgeサーバー
面倒なのでForgeで全て済ませます。Minecraft Forgeをダウンロードします。
https://files.minecraftforge.net/
自分の遊びたいバージョンを選んでダウンロードすればいいです。安定版の方が良いと言う人いますが正直Forgeの場合はBeta版じゃなければ最新版の方が良いと思います。ダウンロードできたら実行します。すると,選択肢がいくつか出てくると思いますが今回はクライアント側ではなくサーバー側の話なので Install Serverを選択します。ただ,このままOKを押すとマインクラフトのクライアント側のフォルダ内がめちゃくちゃになるので,サーバー用のフォルダを用意して右下の「・・・」のボタンから用意したフォルダを選択してサーバーのインストールをしてください。
Windowsの場合
[手順1]サーバーを起動する サーバーのインストールができたらコマンドプロンプトを開いてください。 コマンドプロンプトを使ってサーバーを起動していきます。その前にちょっとしたコマンドの軽い解説をしていきます。詳しい事を知りたい場合は調べてみてください。cd
:change directoryのこと。コンソール内で作業するフォルダーを変更するコマンドになります。例えばC:\Users\shumaikun0716というユーザーフォルダ内に新しく作ったforgeという名前のフォルダがあるとします。そのフォルダに移動するときはcd forge
と実行すると移動できます。(このコマンドを実行するときの作業フォルダがC:\Users\shumaikun0716だった場合)
dir
:フォルダ内に存在するファイルとフォルダの名前の一覧を出力するコマンドです。
では作業を始めていきます。cd
コマンドでforgeフォルダに移動します。その次にdir
コマンドで必要なファイルがあるか確かめます。(バージョンが古い場合のみ。多分1.12.2まで?)
<バージョンが古い場合>
java
コマンドでサーバーを一度起動します。eula.txtが生成されその中身がデフォルトではfalseになっているのでサーバーの起動が失敗します。メモ帳などでeula.txtを編集してfalseをtrueに書き換えて上書き保存し再度サーバーを起動します。
C:\Users\$USER> cd forge
C:\Users\$USER\forge> dir
2024/12/06 18:27 <DIR> .
2024/12/06 18:26 <DIR> ..
2024/12/06 18:27 4,466,148 forge-1.12.2-14.23.5.2860.jar
2024/12/06 18:27 <DIR> libraries
2024/12/06 18:27 30,222,121 minecraft_server.1.12.2.jar
//このように表示されればOK
C:\Users\$USER\forge> java -jar -Xms2G -Xmx2G minecraft_server.1.12.2.jar nogui
//-jarでjarファイルの指定,-Xmx2Gで最大2GBまでのメモリーを割り当て,
-Xms2Gで最低2GB以上のメモリーを割り当て,
noguiでコンソールと別でウィンドウが起動しないようにする
2Gで2GBなので1536Mにすると1536MBが割り当てられるようになる。
// eula.txtが生成されるのでそれを編集したら再度サーバーを起動する
C:\Users\$USER\forge> java -jar -Xms2G -Xmx2G minecraft_server.1.12.2.jar nogui
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[サーバーコンソール]
> stop //stopコマンドでサーバーの停止が可能。opコマンドでOP権限の付与ができる。
server closed.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
minecraft_server.1.12.2.jarはバニラ環境であるのでforgeで遊びたければ再度起動し直す必要がある。再度起動するときに指定するjarファイルをforge-1.12.2-14.23.5.2860.jarに変えるだけでforgeで遊べるようになる。modはmodsフォルダ内に遊びたいmodファイルをぶち込んで起動すればmod入りで遊べる。
※追記
forge-*.jarの方はJava8じゃないと起動できないみたいです。Oracleのアカウントを作ってJDK8をダウンロードして使うかJREの方を使うかすれば起動できます。
これでサーバーの構築自体は完了です。サーバーPCのIPアドレスを入力すればサーバーに接続できます...と言いたいところですがポート開放されていないと接続できないです。(サーバーPCとクライアントPCが違う場合)
サーバーPCとクライアントPCが一緒であればMinecraftを起動してlocalhostをipアドレスとして打ち込めば接続できます。
Windowsのポート開放だるいんだよなぁ。Linuxだったらfirewalldとかufwでコマンド打ち込んで開放できるし。でも面倒なのはGUIアプリケーションにおける話だ。コマンド上でも制御できる。
[手順2]ポート開放
管理者権限で起動したPowershellを用意しましょう。
New-NetFirewallRule
コマンドを用いて新しいルールを作り通信できるようにします。
C:\Windows\System32> New-NetFIrewallRule -DisplayName {英数字のみで好きなルール名を付ける}`
-Protocol TCP -LocalPort 25565 -RemotePort 25565 -Action Allow `
-Profile Any -Enabled True -LocalAddress Any -RemoteAddress Any
これでルール名が{好きなルール名}・プロトコルがTCP・ローカルポートが25565・リモートポートが25565・通信を許可・どのファイアウォールプロファイルでも適用する・ルールを作成後有効にする・どのローカルアドレスからも通信可・すべてのグローバルアドレスから通信可 という状態でポート開放が行われます。
<バージョンが新しい場合>
java
コマンドでサーバーを一度起動します。eula.txtが生成されその中身がデフォルトではfalseになっているのでサーバーの起動が失敗します。メモ帳などでeula.txtを編集してfalseをtrueに書き換えて上書き保存し再度サーバーを起動します。
C:\Users\$USER> cd forge
C:\Users\$USER\forge> dir
2024/12/06 23:57 <DIR> .
2024/12/06 18:26 <DIR> ..
2024/12/06 18:15 <DIR> libraries
2024/12/06 18:15 374 run.bat
2024/12/06 18:15 366 run.sh
2024/12/06 18:49 346 user_jvm_args.txt
//このように表示されればOK
C:\Users\$USER\forge> run.bat
//バッチファイルを実行するとeula.txtが作られる。
// eula.txtが生成されるのでそれを編集したら再度サーバーを起動する
C:\Users\$USER\forge> run.bat
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[サーバーコンソール]
> stop //stopコマンドでサーバーの停止が可能。opコマンドでOP権限の付与ができる。
server closed.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
これでサーバーの構築は完了です。あとは生成されたmodsフォルダー内に自分の遊びたいmodを実行するための.jar
ファイルをぶち込んでサーバーを起動すればmod入りのサーバーで遊べます。
user_jvm_args.txtというファイルがあるのでそのファイルを編集するとサーバー起動時に割り当てるメモリーの量を変更できる。
# Xmx and Xms set the maximum and minimum RAM usage, respectively.
# They can take any number, followed by an M or a G.
# M means Megabyte, G means Gigabyte.
# For example, to set the maximum to 3GB: -Xmx3G
# To set the minimum to 2.5GB: -Xms2500M
# A good default for a modded server is 4GB.
# Uncomment the next line to set it.
# -Xmx4G (デフォルトでは先頭に#タグが付いているので#を消してコメントを解除するか
# 新たにオプションを書くかのどちらかをすればよい。)
#That is an example
-Xms4G -Xmx4G
// -Xms2Gで最低2GB以上のメモリーを割り当てる。
// -Xmx2Gで最大2GBまでのメモリーを利用可能にする。
// 2Gで2GBなので1536Mにすると1536MBが割り当てられるようになる。
サーバーPCのIPアドレスを入力すればサーバーに接続できます...と言いたいところですがポート開放されていないと接続できないです。(サーバーPCとクライアントPCが違う場合)
サーバーPCとクライアントPCが一緒であればMinecraftを起動してlocalhostをipアドレスとして打ち込めば接続できます。
Windowsのポート開放だるいんだよなぁ。Linuxだったらfirewalldとかufwでコマンド打ち込んで開放できるし。でも面倒なのはGUIアプリケーションにおける話だ。コマンド上でも制御できる。
[手順2]ポート開放
管理者権限で起動したPowershellを用意しましょう。
New-NetFirewallRule
コマンドを用いて新しいルールを作り通信できるようにします。
C:\Windows\System32> New-NetFIrewallRule -DisplayName {英数字のみで好きなルール名を付ける}`
-Protocol TCP -LocalPort 25565 -RemotePort 25565 -Action Allow `
-Profile Any -Enabled True -LocalAddress Any -RemoteAddress Any
これでルール名が{好きなルール名}・プロトコルがTCP・ローカルポートが25565・リモートポートが25565・通信を許可・どのファイアウォールプロファイルでも適用する・ルールを作成後有効にする・どのローカルアドレスからも通信可・すべてのグローバルアドレスから通信可 という状態でポート開放が行われます。