本記事には広告が含まれています
友達数人とマインクラフトの Java 版で遊ぶために、レンタルサーバーを借りて月額を折半していると、毎月「今月分ちょうだい」と切り出す側になるのが地味にしんどくなってきます。
自宅の機械に建ててしまえばその話は消えるのですが、Ubuntu を入れたところで手が止まって、次に何をすればいいのか分からない人が多いはずです。
私は Docker(アプリと、動かすのに必要なもの一式を箱にまとめて動かす仕組み)でマイクラサーバーを建てることにしました。
サーバー本体を自分で組み立てなくて済み、設定がファイル1枚に集まるので、壊しても数分で建て直せるからです。
すでに VPS などのレンタルサーバーを借りて動かしている方には、この記事は向きません。ここで書くのは、家に置いた機械で動かすときの手順です。
この記事では、Ubuntu を入れただけの状態から、友達が接続情報を受け取って入ってこられる状態になるまでを、私がやった順に書きます。
打ったコマンドはそのまま並べているので、上から順にコピーして貼り付けていけば進みます。
レンタルサーバーではなく自宅にマイクラサーバーを建てたい理由
最初に、なぜ借りずに家に建てたのかと、どの機械に建てるかの線引きを決めておきます。
ここで機材を決めておかないと、後半のポート開放(外から自宅の機械に繋げるようにする設定)でやり直しになるので、先に済ませます。
毎月の折半とお金の話がめんどくさい、を初期投資1回で終わらせる
レンタルサーバーは月額で課金されるので、遊ばない月が続いても料金だけは発生し続けます。
4人で1000円を割る計算自体は数分で終わりますが、毎月それを言い出す係になるのが、私にはいちばん面倒でした。
自宅に建てると、かかるのは機材を1回買う分と、動かしているあいだの電気代だけになります。
メンバーが1人抜けても私が払う額は変わらないので、抜けた人に気を使ったり、集金の額を計算し直したりする場面もなくなります。
お金の話を毎月しなくてよくなること自体が、自宅に建てた理由です。

月額を割り勘し続けるより、機材を1回買って自宅に置くほうが精神的に楽だと判断しました。ゲームサーバーのように「遊ぶ人が固定で、途中で抜ける」用途は、自宅サーバーのほうが向いています。
遊ぶときだけならメインPC、常時動かすならミニPCを買う
自分が遊んでいる時間だけサーバーが立っていればいい人は、いま使っているメインPCにそのまま建てて構いません。
その代わりメインPCの電源を切るとサーバーも止まるので、自分がいない時間に友達だけで入ることはできません。
友達がいつ入っても遊べる状態にしたい方は、つけっぱなしにできる機械を1台だけ用意することになります。
私はミニPC(手のひらサイズの小型デスクトップ)を1台足す形にしました、常時動かす前提だと消費電力と置き場所が効いてくるので。
選ぶときに見たのは、メモリが16GB以上あることと、保存先が NVMe(基板に直接差す高速なSSD)かどうかの2点です。
- CPU
- AMD Ryzen 7 7730U
- メモリ
- 16GB(DDR4-3200、SO-DIMM×2)
- SSD
- 512GB(M.2 PCIe 4.0)
- 有線LAN
- RJ45×2(2.5Gbps)
- OS
- Windows 11 Pro
店舗の商品説明から拾った標準構成です。構成は変わることがあるので、購入前に販売ページで確かめてください。
- CPU
- AMD Ryzen 7 PRO 6850U(8コア16スレッド、最大4.7GHz)
- メモリ
- 32GB(DDR5-4800、SO-DIMM×2、最大64GB)
- SSD
- 1TB(PCIe 3.0 M.2 2280、M.2×2で最大16TB)
- 有線LAN
- 2.5G LAN×2
店舗の商品説明から拾った標準構成です。構成は変わることがあるので、購入前に販売ページで確かめてください。
ミニPCはメモリの上限が機種ごとに決まっているので、参加人数が10人を超える見込みがある方は、最初から32GBの構成を選ばないと後で足りなくなります。
Ubuntu がまだ入っていない機材から始める人へ
この記事は Ubuntu(無料で使える Linux の OS の1つ)が入っている前提で進みます。
まだ入れていない方は、Ubuntu のダウンロード から ISO(OSの中身がまるごと入った1個のファイル)をダウンロードするところからになります。
手元に Windows しかない場合は Rufus でその ISO を USBメモリに書き込むと、そのUSBから起動してインストールできます。
デスクトップ版とサーバー版がありますが、画面が出たほうが迷いにくいので、デスクトップ版で問題ありません。
Ubuntu をインストールすると、その機械に入っていたデータは基本的に消えます。今使っているPCに入れる場合は、消えて困るファイルを先に別の場所へ移してください。
空きPCにUbuntuを入れる|USB作成から初回ログインまで
Docker(アプリを箱ごと動かす仕組み)と Docker Compose を Ubuntu に入れる
ここから先はターミナル(文字でコマンドを打ってPCを操作する画面)で作業します。
Ubuntu のデスクトップ版なら、キーボードの Ctrl と Alt と T を同時に押すと開きます。
コマンドは1行ずつ貼り付けて Enter を押すと、その行が1つ実行されます。
入れるものは2つで、Docker 本体と、Docker Compose(設定ファイル1枚を読ませて箱を起動する道具)です。
Docker で起動した箱1つ分を、コンテナと呼びます。
公式リポジトリから入れて sudo なしで docker を叩けるようにする
Ubuntu には最初からパッケージ(インストールできるソフトの1個分の単位)の配布元が登録されていますが、そこに入っている Docker は古く、Compose が別扱いになります。
なので Docker 公式のリポジトリ(ソフトの配布元の置き場所)を自分で追加します。
まず、配布元が本物かを確かめるための鍵を置きます。
sudo apt-get update
sudo apt-get install -y ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
行頭の sudo は「管理者の権限で実行する」という意味で、初回はログイン時のパスワードを聞かれます。
次に、配布元そのものを登録します。
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
上の echo から始まる行は途中で改行せず、1行まるごとコピーして貼り付けます。
登録できたら、本体一式を入れます。
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
このままだと docker を打つたびに sudo が要るので、自分のユーザーを docker のグループに入れます。
sudo usermod -aG docker $USER
この行を打った後は、一度ログアウトして入り直すか再起動しないと、権限の変更が反映されません。
入り直したら、次を打って番号が返ってくるか確かめます。
docker compose version
公式の手順は更新されることがあるので、途中でエラーが出て進めなくなった方は Docker の公式インストール手順(Ubuntu) の「Install using the apt repository」の項を見ると、同じ内容の最新版が確認できます。
compose.yml(サーバーの設定をファイル1枚に書いたもの)でバニラサーバーを起動する
サーバーのバージョン・メモリ・難易度といった設定は、すべて compose.yml という1枚のファイルに書きます。
このファイルさえ残しておけば、機械を替えても同じサーバーをそのまま建て直せます。
バニラ(Mod を入れていない素の状態)で建てる compose.yml を置く
まずサーバー用のフォルダを1つ作ります、ディレクトリ(Windows でいうフォルダのこと)を決めておくと設定もワールドもそこにまとまるので。
mkdir -p ~/mc
cd ~/mc
nano compose.yml
nano はターミナルの中で動く簡単なテキストエディタで、開いた画面に次を貼り付けます。
services:
mc:
image: itzg/minecraft-server
container_name: mc
ports:
- "25565:25565"
environment:
EULA: "TRUE"
TYPE: "VANILLA"
VERSION: "1.21.1"
MEMORY: "4G"
DIFFICULTY: "normal"
volumes:
- ./data:/data
restart: unless-stopped
tty: true
stdin_open: true
貼り付けたら Ctrl と O を押して Enter で保存し、Ctrl と X で閉じます。
image の行は、itzg/minecraft-server というイメージ(サーバーの中身が組み立て済みで配られているひな形)を使う指定で、書ける設定項目の一覧は itzg/minecraft-server(Docker イメージ) にあります。
この形式のファイルは行頭の空白の数で意味が決まるので、貼り付けたときにインデント(行頭の字下げ)が崩れると起動しません。ずれた場合は半角スペースで入れ直してください。
docker compose up -d を叩いてサーバーが立ち上がるまで
compose.yml を置いたフォルダにいる状態で、次を打ちます。
docker compose up -d
末尾の -d は「画面を占有せず裏で動かす」という意味で、これを付けるとターミナルを閉じてもサーバーは動き続けます。
初回はイメージのダウンロードとワールドの生成が走るので、数分かかります。
立ち上がったかどうかは、サーバーが出しているログ(動作の記録)を見て判断します。
docker compose logs -f
流れてくる文字の中に Done と For help, type "help" を含む行が出れば、起動は完了しています。
ログの表示は Ctrl と C で抜けられますが、抜けてもサーバーは止まりません。止まるのは表示だけです。
compose.yml で決める設定(バージョン・メモリ・EULA・難易度)
ここからは、さっき貼り付けた environment(環境変数、サーバーに渡す設定値のこと)の中身を1つずつ決めていきます。
書き換えたときは、保存してから docker compose up -d をもう一度打つと、新しい設定で作り直されます。
EULA(マイクラの利用規約)に同意しないとサーバーは落ちる
マイクラのサーバーは、利用規約に同意していないと起動した直後に自分で停止します。
その同意を表しているのが EULA: "TRUE" の行で、ここが無いか FALSE だとログに「You need to agree to the EULA」と出て終わります。
規約の中身は Minecraft エンドユーザー使用許諾契約(EULA) で読めるので、何に同意しているのか確認しておくと安心です。
TRUE は必ず大文字で、前後をダブルクォートで囲んだ "TRUE" の形にします。ここが true や TURE だと、起動したように見えて数秒で落ちます。
メモリは人数と Mod の有無で決める
MEMORY: "4G" の行が、サーバーに使わせるメモリの量です。
Ubuntu 本体と Docker が常に数GBを使っているので、機械に載っている量を全部書くと動作が不安定になります。
バニラで10人以下なら 4G、Mod(追加要素を入れる改造データ)を入れて遊ぶなら 6G から 8G が目安になります。
Mod を入れて遊びたい方は Modrinth で配布されているものを見ると、サーバー側に必要な容量の見当が付きます。
タワー型のデスクトップに建てていて、載っているメモリが8GBしかない方は、割り当てを削るより物理的に足すほうが早く済みます。
- メモリ規格
- DDR4 SDRAM(Unbuffered / Non-ECC)
- 容量
- 32GB(16GB×2枚)
- 動作周波数
- DDR4-2666(PC4-21300)
- ピン数・モジュール形状
- 288pin DIMM(デスクトップ用)
- 動作電圧・CL
- 1.2V / CL19
店舗の商品説明から拾った標準構成です。構成は変わることがあるので、購入前に販売ページで確かめてください。
ただしデスクトップ用のこの規格は、ミニPCの多くが使う SO-DIMM(ノートPC用の短いメモリ)とは形が違って差さらないので、ミニPCを買った方の増設には使えません。
割り当てるメモリは、機械に載っている量の半分程度までに抑えます。16GB の機械なら 4G から 8G の範囲です。
マイクラのバージョンと難易度を指定する
VERSION: "1.21.1" の部分は、友達が遊ぶマイクラ本体のバージョンと数字を揃えます。
ここを LATEST にすると新しい版が出たときに勝手に上がるので、友達側が更新するまで入れなくなります。
DIFFICULTY は次の4つのどれかを書きます。
| DIFFICULTY の値 | ゲーム内の難易度 | 挙動 |
|---|---|---|
| peaceful | ピースフル | 敵が湧かず、空腹でも体力が減らない |
| easy | イージー | 敵は湧くが、受けるダメージが小さい |
| normal | ノーマル | 標準の設定 |
| hard | ハード | 受けるダメージが大きく、空腹で体力が0近くまで減る |
建築中心で遊びたい方は peaceful、サバイバルで遊ぶなら normal から始めると、後から変えても違和感が少ないです。
サーバーの起動・停止とワールドデータの置き場所
一度建ててしまえば、あとは止める・動かす・中身をコピーするの3つで運用できます。
この章のコマンドは、すべて compose.yml を置いたフォルダ(cd ~/mc で移動した先)で打ちます。
停止・再起動と、電源が落ちても勝手に立ち上がる設定
止めるとき、動かすとき、入れ直すときは次の3つです。
docker compose stop
docker compose start
docker compose restart
コンテナごと消したいときは docker compose down を打ちますが、ワールドは後述のフォルダに残るので消えません。
compose.yml に書いた restart: unless-stopped は、機械が停電などで落ちて起動し直したときに、サーバーも自動で立ち上がる指定です。
自分で stop したときだけは自動で立ち上がらないので、意図して止めた状態は保たれます。
つけっぱなしのミニPCに建てた方は、この行があると停電のたびに手で起動し直さずに済みます。
ワールドがホスト側のどこに残るか(バックアップと建て直しの前提)
compose.yml の ./data:/data は、ホスト(Ubuntu を入れた機械そのもの)側の ~/mc/data と、コンテナの中の /data を繋いでいる行です。
この行があるおかげで、コンテナを消しても中身はホスト側に残ります。
ワールドの実体は ~/mc/data/world にあり、設定ファイルの server.properties も同じ ~/mc/data の中に置かれます。
バックアップを取るときは、サーバーを止めてからフォルダごとコピーします。
docker compose stop
cp -r ~/mc/data ~/mc-data-backup
docker compose start
data フォルダさえ残っていれば、compose.yml を書き換えてサーバーを作り直しても、同じワールドの続きから遊べます。
OP(/gamemode などの管理コマンドを使える管理者権限)を自分に付ける
建てただけの状態では、自分もただの参加者なので、ゲーム内でクリエイティブに変えたり時間を昼にしたりできません。
それができるようになる権限が OP で、サーバー側から自分のアカウントに付けます。
コンテナ(サーバーが動いている箱)のコンソールに入って OP を付ける
サーバーへ命令を送るには、動いているコンテナの中の rcon-cli(サーバーにコマンドを送るための道具)を呼びます。
docker compose exec mc rcon-cli
打つと入力待ちの状態になるので、そこに次を打ち込みます。
op あなたのマイクラのID
Made あなたのID a server operator と返れば付いています。
抜けるときは exit と打つか、Ctrl と D を押します。
1行で済ませたい場合は、次のように続けて書いても同じ結果になります。
docker compose exec mc rcon-cli op あなたのマイクラのID
OP が付くと、ゲーム内のチャット欄から /gamemode creative や /time set day が通るようになります。
外したくなったときは、同じ要領で deop あなたのID を送ります。
IDは大文字と小文字が区別されるうえ、実在する別のアカウント名を打つとその人に権限が付きます。返ってきたメッセージの名前が自分のものか、必ず確かめてください。
友達に接続情報を伝えて参加してもらう
友達に送るのは、IPアドレス(ネットワーク上でどの機械かを指す番号)と、ポート番号(1台の機械の中で、どのソフト宛の通信かを分ける番号)の2つです。
マイクラの Java 版は 25565 番のポートを使うので、compose.yml の "25565:25565" はその番号を外に出す指定になっています。
順番としては、家の中から繋がることを先に確かめてから、外向きの設定に進みます。
まず同じ家の Wi-Fi(同一 LAN)内で接続を確かめる
LAN は、同じルーターに繋がった家の中だけのネットワークのことです。
メインPCに建てた方は、そのPCでマイクラを起動し、マルチプレイの「サーバーを追加」からアドレス欄に localhost:25565 と入れると、自分自身のサーバーに繋がります。
ミニPCなど別の機械に建てた方は、その機械のターミナルで次を打ちます。
hostname -I
192.168. で始まる番号が出るので、それを同じ Wi-Fi に繋がった別の機械のアドレス欄に 192.168.1.23:25565 の形で入れます。
ここで入れれば、サーバーそのものは正しく動いています。
192.168 で始まる番号は家の中でしか通じない番号なので、これを外にいる友達に送っても繋がりません。外の人に送る番号は次の節で調べます。
外から繋いでもらうために友達へ伝えるもの
外の友達が使う番号は、自宅の回線に付いている外向きのIPアドレスで、確認くん を開くと表示されます。
ただし番号を伝えるだけでは繋がらず、ルーターに「外から25565番に来た通信を、サーバー機に渡す」という設定が要ります。
これがポート開放(ポートフォワーディング)で、ルーターの設定画面に入って、外側のポートに 25565、内側の宛先にサーバー機の 192.168. の番号と 25565 を入れます。
プロトコルの選択欄では TCP(Java 版のマイクラが使う通信の種類)を選びます、UDP しか選ばれていないと繋がりません。
その前に、サーバー機の家の中のIPを固定しておきます、DHCP(ルーターが機械へIPを自動で配る仕組み)のままだと再起動で番号が変わることがあるので。
先に固定しないと、機械の再起動で番号が変わって、ポート開放の設定が別の機器を指したまま無効になります。
友達に送るのは、外向きIPと25565を繋げた 123.45.67.89:25565 の形と、compose.yml に書いたバージョンの数字の2つです。
マンションの共用回線やモバイル回線でポート開放の項目が見つからない方は、Tailscale を使うとルーターを触らずに同じことができます。
外向きIPは回線によっては変わるので、変わったら伝え直す前提で運用しています。
compose.yml を書き換えれば、いつでも建て直せる
ここまでで、月額の折半をやめて、家の機械1台で友達と遊べる状態になりました。
バージョンを上げたくなったら compose.yml の VERSION を書き換えて docker compose up -d を打つだけですし、機械を買い替えても data フォルダと compose.yml を持っていけば同じワールドが復活します。
この記事で決めたことは、次のとおりです。
- 毎月の集金とお金の話をなくすために、月額を借りるのではなく機材を1回買って自宅に建てた
- 遊ぶ時間だけでいいならメインPC、友達がいつでも入れるようにするなら常時つけっぱなしにできる機械を1台用意する
- 常時動かす機械は、メモリ16GB以上と NVMe かどうかの2点で選び、人数が増える見込みがあるなら最初から32GBにする
- Docker は Ubuntu 標準のものではなく公式リポジトリを登録して入れ、
usermod -aG docker $USERの後に入り直して sudo なしで使えるようにする - サーバーの設定は compose.yml の1枚にまとめ、
~/mcに置いてdocker compose up -dで起動する EULA: "TRUE"が無いと起動直後に落ちるので、大文字でダブルクォート付きで書く- MEMORY はバニラ10人以下で 4G、Mod を入れるなら 6G から 8G、機械に載っている量の半分までに抑える
- VERSION は LATEST にせず数字で固定し、友達のマイクラ本体と揃える
restart: unless-stoppedを入れて、停電などで機械が落ちても自動で立ち上がるようにする- ワールドは
~/mc/data/worldに残るので、止めてから data フォルダを丸ごとコピーすればバックアップになる - OP は
docker compose exec mc rcon-cli op 自分のIDで付け、返ってきた名前が自分か確認する - 先に
localhost:25565かhostname -Iの番号で家の中から繋がることを確かめ、その後にIPを固定してから 25565 番の TCP をポート開放し、友達には外向きIPと25565、そしてバージョンを伝える
