OCI Always Free の ARM インスタンス上に、PaperMC + GeyserMC/Floodgate のクロスプレイ対応 Minecraft サーバーを構築するスクリプト一式と、その上に乗せる軽量 Web ダッシュボードです。
サーバー本体は systemd + tmux で常駐運用(クラッシュ自動再起動・コンソール操作可)。
Web ダッシュボード(dashboard/)は、その制御プレーン(systemctl/tmux/mc-*)を叩くだけの
Go 単一バイナリで、公開は Cloudflare Tunnel + Access(管理ポートは晒さない)。
設計の経緯はローカルの
docs/plans/web-dashboard.mdに記録しています(リポジトリには含めません)。 一度試した Crafty Controller 移行はcrafty-attempt/に保全しています(セットアップが煩雑だったため取りやめ)。
- Java 自動選択 — MC バージョンが要求する Eclipse Temurin を自動導入。
- PaperMC — バージョン固定・ビルドは API で自動解決。
- クロスプレイ — GeyserMC + Floodgate を導入し
auth-type: floodgateまで自動設定。 - 常駐運用 — systemd + tmux(クラッシュ時自動再起動、
mc-consoleでコンソール操作)。 - Web ダッシュボード — 起動/停止・ライブコンソール・設定編集・whitelist・バックアップをブラウザから。
- ゼロ開放ポートで公開 —
cloudflaredでlocalhostをトンネルし、Cloudflare Access で認証。
- OCI Always Free の ARM64 (aarch64) / Ubuntu 22.04・24.04 LTS / root (sudo) 実行。
# 1) サーバー構築(対話 or 環境変数)
sudo apt-get update && sudo apt-get install -y git \
&& git clone https://github.com/NadjaSenpai/minecraft-oci.git \
&& cd minecraft-oci && sudo ./setup.sh
# 2) Web ダッシュボード導入(任意)
# 推奨: 手元で linux/arm64 にクロスコンパイルして単一バイナリを scp(箱に Go 不要)
# (cd dashboard && GOOS=linux GOARCH=arm64 go build -o minecraft-dashboard .)
# scp dashboard/minecraft-dashboard <oci>:~/minecraft-oci/dashboard/
sudo ./dashboard/install.shsetup.sh の環境変数(抜粋): MC_VERSION(既定 26.1.2)/ ADMIN_PLAYER / BEDROCK_PLAYER /
MEMORY / JAVA_PORT(25565)/ BEDROCK_PORT(19132)。ゲームプレイ設定(MOTD/DIFFICULTY 等)も
初回構築時に対話 or 環境変数で投入でき、後から mc-config で変更します。
sudo systemctl {status,restart,stop} minecraft # サービス操作
sudo mc-console # tmux コンソールにアタッチ (デタッチ: Ctrl-b → d)
sudo mc-config # ゲームプレイ設定8項目を一覧/編集
sudo mc-whitelist <Java名> # whitelist 追加(Bedrock は -b <ゲーマータグ>)
sudo mc-backup # world を整合スナップショットで tar.gz(世代保持)
sudo ./update.sh # Paper / プラグイン / Java を最新化mc-config の対象8項目: motd / difficulty / gamemode / max-players / pvp /
view-distance / simulation-distance / hardcore。difficulty/gamemode/pvp(1.21.9+/26.x の
ゲームルール)は稼働中なら即反映、その他は再起動で反映(--restart で即時)。
minecraft ユーザーで動く Go 単一バイナリ。127.0.0.1 のみ bind し、systemctl 操作だけ narrow
sudoers(/etc/sudoers.d/minecraft-dashboard)で許可、それ以外は所有者として直接行います。
| 機能 | 仕組み |
|---|---|
| 起動/停止/再起動 | sudo systemctl {start,stop,restart} minecraft(許可された3コマンドのみ) |
| ライブコンソール | 出力=latest.log を SSE で tail / 入力=tmux send-keys |
| 設定編集(8項目) | server.properties を直接編集(+稼働中はコンソールへ即反映)。online-mode/white-list/auth-type は保護のため対象外 |
| whitelist | Java=Mojang UUID / Bedrock=XUID→Floodgate UUID を解決して追記 + whitelist reload |
| バックアップ | mc-backup(world のみ・save-off/save-all flush で整合・世代保持)、一覧/DL |
UI ポートは開けません。cloudflared で localhost:8765(既定)をトンネルします。
- Zero Trust でトンネル作成 →
cloudflared service install <TOKEN> - Public Hostname:
<dash>.nadja.jp→ Service HTTP /localhost:8765 - Access: Self-hosted app に
<dash>.nadja.jp+ ポリシー(Allow / Include / Emails)
ビルドには Go 1.22 以上が必要(
net/httpの method+path ルーティングとembedを使用)。 依存は標準ライブラリのみ。
VM 内 iptables とは別に、OCI の VCN セキュリティリスト(または NSG)で以下の Ingress を許可:
- TCP
25565— Java 版 - UDP
19132— Bedrock 版 / Geyser
(ダッシュボードの UI ポートは開けないこと。Cloudflare Tunnel 経由のみ。)
| パス | 役割 |
|---|---|
setup.sh |
サーバー構築(systemd + tmux + Geyser/Floodgate) |
update.sh |
Paper / プラグイン / Java の最新化 |
mc-console |
tmux コンソールにアタッチ |
mc-config |
ゲームプレイ設定8項目の編集 |
mc-whitelist |
Java/Bedrock の whitelist 追加 + reload |
mc-backup |
world の整合バックアップ + 世代保持 |
dashboard/ |
Web ダッシュボード(Go daemon・埋め込み UI・systemd unit・sudoers・install.sh) |
docs/plans/ |
設計プラン(web-dashboard.md 等)。ローカル専用・gitignore でリポジトリ外 |
crafty-attempt/ |
取りやめた Crafty 移行一式の保全 |