HSNPhira v1 バックエンド
HSNPhira v1 バックエンドは Python Flask フレームワークを採用し、複数の独立したマイクロサービスで構成され、ユーザー管理、ルーム監視、コマンド実行、ファイルサービスなどの機能を提供します。
サービスアーキテクチャ概要
| サービス | ポート | 技術スタック | 説明 |
|---|---|---|---|
| user_manager | 2345 | Flask + SQLite | ユーザー登録/ログイン/情報管理、Phira データ同期 |
| room | 5000 | Flask + ログ解析 | リアルタイムルーム状態監視(ログ駆動) |
| api | 5001 | Flask + SQLite | ルームデータ収集と統計分析(API 駆動) |
| command | 7878 | Flask | 安全なコマンド実行(ホワイトリスト + パスワード認証) |
| file | 7880 | Flask | ファイルコンテンツサービス |
1. user_manager (ポート 2345)
ユーザーアカウント管理のコアサービス。
機能
- ユーザー登録 (
POST /register) — Phira アカウントと連携して登録、パスワードはソルト付きハッシュで保存 - ユーザーログイン (
POST /login) — パスワード認証、ユーザー情報を返却 - ユーザー情報照会 (
POST /info) — 管理者/スーパー管理者権限で照会可能 - ユーザー情報変更 (
POST /info_changer) — ユーザー名、パスワード、Phira ID、権限などを変更 - 管理者インターフェース — ユーザー一覧照会、単一ユーザー更新、一括更新
- Phira データ同期 — バックグラウンドスレッドが定期的に
phira.5wyxi.comAPI からユーザーアバターと RKS を更新
データベース
- ファイル:
phira_users.db(SQLite) - テーブル
users: id, name, phira_id, phira_name, phira_rks, image_url, password(ハッシュ), admin, dev, created_at
認証
| ロール | 資格情報 | 権限 |
|---|---|---|
| スーパー管理者 | 固定パスワード(コード内で設定) | 完全制御、パスワード/権限フィールドの変更可能 |
| 一般管理者 | 固定パスワード(コード内で設定) | ユーザー情報照会、権限以外のフィールド変更 |
2. room (ポート 5000)
ログ駆動型のリアルタイムルーム状態監視サービス。phira-mp/server.log をリアルタイムで読み取り、ルームイベントを追跡します。
機能
- ログ監視 — ログファイルをリアルタイム追跡、ルーム作成/参加/退出/解散イベントを解析
- ルーム状態追跡 — ルーム状態(譜面選択中/プレイ中)、ループのオン/オフ、譜面選択を記録
- ユーザーマッピング — user_id → username と user_id → room_name のマッピングを維持
- 永続化 — ユーザーマッピング関係を
user_info.jsonに書き込み
API
| エンドポイント | 説明 |
|---|---|
GET /rooms | 全ルームの詳細情報を取得 |
GET /status | システム状態(ルーム数、ユーザー数) |
GET /health | ヘルスチェック |
GET /users/total | 登録ユーザー総数の統計 |
バックグラウンドスレッド
- ログ追跡 (tail_log) — ログファイルの変更をリアルタイムで読み取り
- ルームクリーンアップ (room_cleanup_task) — 60秒ごとに1時間以上アクティブでないルームを削除
3. api (ポート 5001)
API 駆動型のルームデータ収集と統計サービス。phira.htadiy.cc/api/rooms/info をポーリングしてデータを取得します。
機能
- ルーム監視 — 毎秒 Phira API からルーム一覧を取得しデータベースに保存
- ユーザー入退室追跡 — ユーザーのルーム入退室時刻と滞在時間を記録
- ゲームラウンド追跡 — ゲームの開始/終了時間、ユーザーのプレイ時間を記録
- オンライン人数統計
データベース
- ファイル:
phira_stats.db(SQLite) - テーブル: rooms, user_room_activity, user_room_duration, game_rounds, user_playtime
| エンドポイント | 説明 |
|---|---|
GET /users | 現在のオンライン総人数 |
バックグラウンドスレッド
- ルーム監視 (room_monitor_service) — 毎秒 API をポーリングし、データベースを更新
4. command (ポート 7878)
安全なリモートコマンド実行サービス。
機能
- ホワイトリストコマンド — 事前定義された制御コマンド(start/restart/stop/serverinfo)
- カスタムコマンド — 任意のコマンド実行を許可(設定でオン/オフ可能)
- 3段階パスワード認証 — 3つのパスワード断片を同時に提示して認証
- 危険コマンドブラックリスト — rm -rf /、mkfs、shutdown などの危険操作を阻止
API
| エンドポイント | 説明 |
|---|---|
POST /execute | コマンドを実行(ホワイトリストまたはカスタム) |
セキュリティ機構
- 全てのコマンドは
shlex.splitで安全に解析 - 危険コマンドブラックリストによる阻止
- パスワードは
werkzeug.security.check_password_hashで検証
5. file (ポート 7880)
シンプルなファイルコンテンツサービス。
機能
- 指定されたパスのファイル内容を読み取り返却(デフォルトは
/root/user_info.json) - 環境変数
FILE_PATHで対象ファイルを設定可能
API
| エンドポイント | 説明 |
|---|---|
GET /api | ファイル内容を返却 |
起動方法
bash
# ユーザー管理サービス
python user_manager.py # → :2345
# ルーム監視サービス(ログ駆動)
python room.py # → :5000
# ルーム監視サービス(API 駆動)
python api.py # → :5001
# コマンド実行サービス
python command.py # → :7878
# ファイルサービス
python file.py # → :7880依存関係
flask— Web フレームワークwerkzeug.security— パスワードハッシュsqlite3— データベース(Python 標準搭載)requests— HTTP リクエスト(ルーム API 収集)threading— バックグラウンドスレッド(Python 標準搭載)