- Frontend/Backend: Next.js 15 (App Router)
- Language: TypeScript
- Styling: Tailwind CSS
- Authentication: NextAuth.js (Credentials Provider / Password)
- Container Orchestration: Dockerode (Docker API wrapper)
- Cluster Control: docker CLI / docker compose(コンテナ内から実行)
- Persistence:
- 表示名メタ情報: JSON (
/cluster/players.json) - サーバー側リスト: テキスト(ホワイトリスト/バイパスリスト)
- cluster 設定:
.cluster(上書き)、default.cluster(ベース)、ALL_MODSによる高度なMOD管理
- 表示名メタ情報: JSON (
- Icons: Lucide React
- Forms/Validation: サーバー側での厳格な環境変数バリデーション(.env 破壊防止)
- asaui:
- ユーザーインターフェースおよび管理APIを提供。
/var/run/docker.sockをマウントし、他コンテナを制御。/clusterをマウントし、メタ情報の保持、cluster 設定(.cluster)の編集、およびdocker compose up/downを実行。/cluster/serverが各コンテナにマウントされるため、セーブデータ解析とサーバー側リストの直接更新を行う。
ARK の既存設定を asaui で扱う際、以下の拡張・制約を設ける。
ASAUI_PASSWORD=your_secure_password
ASAUI_SIMPLE_PASSWORD=your_simple_password
NEXT_PUBLIC_BASE_PATH=/asaui
NEXTAUTH_SECRET=YourOriginalPrivateSecretSign
# https://docs.curseforge.com/rest-api/#authentication
CURSEFORGE_API_KEY=/cluster/players.json に EOS ID → 表示名のマップを保存する。
{
"00023e876b964cd3b6f01a9d7040d038": {
"displayName": "PlayerName"
}
}ARK: Ascended のサーバー側リストファイルを直接編集する。
- ホワイトリスト:
ShooterGame/Binaries/Win64/PlayersExclusiveJoinList.txt - バイパスリスト:
ShooterGame/Binaries/Win64/PlayersJoinNoCheckList.txt
いずれも「1行=1つのEOS ID」のテキスト。ホワイトリストはサーバー再起動が必要。
asaui は複数の設定ファイルをマージして最終的な .env(環境変数ファイル)を生成・提供する。
- クラスター設定(共通):
default.cluster: ベース設定(読み取り専用推奨)。.cluster: UI からの上書き設定(MAX_PLAYERS,MODS,ALL_MODS等)。
- インスタンス設定(個別):
default.main,default.sub1: 個別設定(マップ名等)のベース。.main,.sub1: インスタンスごとの上書き設定。
※ docker-compose がこれらを直接 env_file として複数読み込み、後の記述で上書きします。
- スキャンパス:
${ARK_SAVE_BASE_DIR}/${MAP_NAME}/ - 対象ファイル:
${EOS_ID}.arkprofile - 解析プロセス:
ARK_SERVERSで定義された各 ID に対して、対応するSRV_${ID}_MAPを取得。- マップフォルダ内の
.arkprofileファイルを全走査。 - ファイル名から EOS ID を、最終更新日時(mtime)から最終ログインを特定。
- 複数マップに同一 ID が存在する場合、mtime が最新のものを採用。
- コンテナ操作:
dockerodeを使用したstart/stop/restart。 - クラスター一括制御:
ASAUI_CLUSTER_DIRでdocker compose up -d/downを実行。 - 設定反映:
.cluster保存後、コンテナ再起動で適用(compose.ymlが直接参照)。
- データ分離:
ALL_MODSに全 ID を、MODSに有効な ID のみを保持。 - UI 操作: 並び替え(読み込み順)と有効/無効のトグル切り替え。
- 外部連携:
CURSEFORGE_API_KEYが設定されている場合、CurseForge API から MOD の名称と URL を自動取得。
.cluster ファイルの構文を破壊しないよう、設定保存時に以下のバリデーションを実行する。
- 禁止文字:
#,',", 改行, 空白(パスワードやMOD IDなどのフィールド)。 - 型チェック:
MAX_PLAYERSの数値範囲(1〜100)や、MOD ID の数字形式チェック。
- プロトコル: Server-Sent Events (SSE) を使用。
- バックエンド実装:
dockerodeから取得したログストリームを SSE のdata:形式でクライアントへ転送。
- フロントエンド実装:
ansi-to-htmlを使用して、ANSI カラー情報を HTML 要素に変換。- 最大保持行数(1000行)を制御しパフォーマンスを維持。
- ダッシュボード (
/): サーバー状況の一覧、一括操作、操作履歴ログ。 - プレイヤー管理 (
/players): プレイヤー一覧、ホワイトリスト/バイパスリスト管理(セーブスキャン機能)。 - RCON コンソール (
/rcon): 指定したサーバーへの RCON コマンド送信。(古い情報です。要訂正。) - 設定 (
/cluster): クラスタ全体の環境変数編集。
ユーザーの利用頻度と不注意による事故防止を考慮し、以下の方針でコンポーネントを配置する。
- プライマリーアクション: 「ログ表示」ボタン。最も大きく、アクセスしやすい位置に配置。
- セカンダリーアクション: 「起動・停止・再起動」ボタン。アイコンのみのコンパクトな配置とし、ステータス確認を優先。
- ステータス表示: 状態 (RUNNING/STOPPED/PAUSING/PAUSED など) を色付きバッジで強調。PAUSING は遷移中、PAUSED は休眠状態として扱う。
ASAUI_PASSWORDは NextAuth の Credentials 認証で検証(現状は平文比較)。- ホワイトリスト API は認証済みセッションが必須。
- Docker ソケットの露出を最小限にするため、asaui コンテナ自体への外部露出はリバースプロキシ(Basic認証等)を併用することを推奨(要求仕様通り)。