Skip to content

aida0710/dango-hosting

Repository files navigation

Dango Hosting

プレイヤーがゲームサーバを動的に作成・管理できる Minecraft サーバーネットワーク。Velocity プロキシ + Ktor 製 Manager API + Paper サーバ群を docker-compose で統合し、Web ダッシュボードでプレイヤーが自分の統計やサーバを管理できる。

image

主な機能

  • 動的サーバ作成 — プレイヤーが /dango create で自分専用の Minecraft サーバを Docker コンテナとして起動
  • アクセス制御 — PRIVATE / PUBLIC / PASSWORD のアクセスモード、メンバー招待・権限管理
  • 経済システム — 残高・送金・取引履歴、ショップ(チェスト GUI)
  • 統計 + レベル — ブロック採掘/設置・モブ討伐・プレイ時間を計測し、5 種の専門レベルにリアルタイム反映
  • ランクシステム — 5 段階のランクでサーバ作成上限が変動、ランクアップ購入可能
  • Web ダッシュボード — 公開ページ(サーバ一覧、リーダーボード) + 認証付きマイページ
  • AutoStop — 10 分以上アイドルの動的サーバを自動停止

アーキテクチャ概要

Minecraftクライアント
  │
  ▼
Velocity プロキシ (velocity-plugin)  ──HTTP REST──▶  Manager (Ktor API)
  │                                                    │         │
  ├─ lobby(静的サーバー)                              ▼         ▼
  ├─ master(静的サーバー)                         PostgreSQL  Docker デーモン
  └─ mc-xxx(動的サーバー、paper-plugin入り)                      │
       │                                                         ▼
       └──HTTP REST(30秒バッチ)──▶  Manager            動的サーバーコンテナ生成

クイックスタート

前提

  • Docker + Docker Compose v2(Linux / macOS / WSL2)
  • ホストに Java や Gradle は不要(builder コンテナが JAR を自動ビルド)

手順

# 1. リポジトリを取得
git clone https://github.com/aida0710/dango.git
cd dango

# 2. 環境変数を設定
cp .env.sample .env
$EDITOR .env   # change-me を全て書き換える

# 3. lobby ワールドを配置 (下節「lobby ワールドの追加方法」を参照)

# 4. 起動
./setup.sh

任意のプラグインを docker/plugins/ に配置すると動的サーバで利用可能になります(下節「プラグインの追加」を参照)。

起動後:

サービス URL
Minecraft プロキシ localhost:25565
Manager API http://localhost:3015
Web ダッシュボード http://localhost:3016

lobby ワールドの追加方法

world/lobby/ 配下に Minecraft の通常ワールドファイル(level.datregion/playerdata/ 等)を配置します。lobby サービスは起動時にここからワールドをコピーして展開します。

配置例:

world/lobby/
├── level.dat
├── level.dat_old
├── region/
│   ├── r.0.0.mca
│   └── ...
├── data/
└── playerdata/

既存ワールドを使う

シングルプレイで作ったワールドや別サーバから持ってきたワールドをそのまま world/lobby/ にコピー。

新規生成する

vanilla や Paper サーバを単独で起動して lobby 用のワールドを生成 → 生成されたワールドディレクトリ(level.dat を含む)を world/lobby/ にコピー。

NOTE: world/.gitignore で除外されているため、各自のワールドはコミットされません。

プラグインの追加(任意)

docker/plugins/ に JAR を配置すると、動的サーバ起動時に読み込まれます。必須ではありません。

代表例として、docker/plugins/worldedit-bukkit-*.jar を配置すると、クリエイティブモードで作成された動的サーバで WorldEdit が自動的に利用可能になります(WorldEdit は EngineHub のサイトから取得してください)。

モジュール構成

Gradle マルチモジュール。

モジュール 役割
common/ manager / velocity-plugin / paper-plugin で共有する DTO・enum
manager/ ビジネスロジック・Ktor REST API・Docker 制御・PostgreSQL 永続化
velocity-plugin/ Velocity プロキシ用シンクライアント。コマンドを Manager API に委譲
paper-plugin/ 動的サーバ用シンクライアント。プレイイベントを 30 秒バッチで Manager に送信
web/ Web ダッシュボード(React + Vite + shadcn/ui)

コマンド早見表(velocity-plugin)

コマンド エイリアス 説明
/dango <subcmd> サーバ管理(create / join / list / invite / settings / web 等)
/lobby /hub ロビーサーバへ移動
/balance /bal 残高確認
/pay <player> <amount> 送金
/rank / /rankup ランク確認 / ランクアップ購入
/title [<title>|clear] カスタム称号(1000 通貨/変更)

/dango サブコマンド: list, create, join, stop, delete, info, invite, kick, invitations, accept, decline, settings, members, web

Web 認証フロー

ゲーム内 /dango web → 6 桁コード発行 → Web に入力 → JWT 発行(24 時間有効)。

環境変数

.env で定義(.env.sample を参照)。

変数 説明
POSTGRES_USER PostgreSQL ユーザー名
DANGO_POSTGRES_DB データベース名
DANGO_POSTGRES_PASSWORD DB パスワード
DANGO_JWT_SECRET Web 認証 JWT 署名鍵
VELOCITY_SECRET Velocity Modern Forwarding 共有シークレット
INTERNAL_API_KEY plugin → manager 内部 API キー
OPS OP プレイヤー名(カンマ区切り)
WHITELIST ホワイトリスト(カンマ区切り)
ENFORCE_WHITELIST TRUE で whitelist を強制

ランダムシークレット生成例:

openssl rand -base64 48

開発

ローカルビルド(ホストに JDK 21 が必要)

./gradlew build              # 全モジュールビルド + テスト
./gradlew build -x test      # テストなし
./gradlew :manager:test      # 単一モジュールのテスト
./gradlew ktlintCheck        # コードスタイルチェック
./gradlew ktlintFormat       # 自動フォーマット
./gradlew detekt             # 静的解析

Web 開発サーバ

cd web
npm install
npm run dev   # http://localhost:5173 (API は localhost:3015 にプロキシ)

運用更新

ソース更新後の再デプロイ:

git pull
./deploy.sh

deploy.sh の動作:

  1. 動的サーバ(mc-*)を停止
  2. docker compose down
  3. docker compose up -d --build(JAR を再ビルド)

技術スタック

  • 言語: Kotlin 2.3.0 (JVM 21)
  • API: Ktor 3.4.0
  • シリアライズ: kotlinx.serialization
  • DB: Exposed 1.0.0 + PostgreSQL 16 + HikariCP
  • Docker 制御: docker-java 3.7.0
  • Minecraft: Velocity API 3.5.0-SNAPSHOT, Paper API 1.21.4
  • Web: React 19, Vite, TypeScript, shadcn/ui, Tailwind CSS v4, React Router v7, TanStack Query v5
  • テスト: kotlin-test, MockK, H2

ライセンス

MIT License © 2026 aida0710

About

minecraft java版サーバ、minecraftサーバー内でユーザが任意のサーバを作成、公開することができる。

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors