8589654ba4a0eb89b8ff441614384bb96c1db833
Nukumizu Backend
Remote server monitoring and command execution subsystem for Komari.
Overview
Nukumizu connects to a Komari Dashboard instance to:
- Monitor server status in real-time via WebSocket
- Execute commands on remote servers via the Komari task API
- Provide Bot interfaces on QQ (via NapCat) and Telegram for interactive server control
- Send one-way status notifications via Email, Ntfy, and Webhook
Project Structure
nukumizu-backend/
├── main.go # Entry point, startup sequence, graceful shutdown
├── router.go # HTTP route registration
├── config/
│ └── config.go # Configuration loading, defaults
├── handler/
│ ├── user.go # User login/register handlers
│ ├── server.go # Server list/status/exec handlers
│ └── health.go # Health check endpoint
├── database/
│ └── user.go # SQLite user database
├── utils/
│ ├── auth.go # Token management, authentication
│ └── middleware.go # Rate limit, CORS, XSS protection
├── postLog/ # Logging subsystem
├── internal/
│ ├── komari/
│ │ ├── client.go # Komari HTTP API client
│ │ └── ws.go # Komari WebSocket client
│ ├── qq/
│ │ ├── qq.go # QQ (Napcat) Bot controller
│ │ └── napcat.go # NapCat HTTP API + WebSocket client
│ ├── node/
│ │ └── tracker.go # Thread-safe node state tracking
│ ├── controller/
│ │ ├── controller.go # Controller interface & manager
│ │ └── pipes/
│ │ ├── telegram.go # Telegram Bot controller
│ │ ├── email.go # Email notification controller
│ │ ├── ntfy.go # Ntfy notification controller
│ │ └── webhook.go # Webhook notification controller
│ └── template/
│ └── template.go # Message template engine
Configuration
Copy and modify config.json at the project root:
{
"system": {
"debugMode": true,
"listenAddr": "0.0.0.0",
"listenPort": "8080"
},
"debug": {
"showNapcatMsg": false,
"showTelegramMsg": false
},
"komari": {
"dashboardURL": "http://127.0.0.1:25774",
"account": {
"username": "admin",
"password": "admin"
}
},
"controllerMethod": {
"qq(napcat)": {
"enabled": false,
"napcatAddr": "127.0.0.1",
"napcatPort": "3000",
"napcatToken": "",
"botQQID": 0,
"listenMethod": "global",
"admins": [],
"trustedGroups": []
},
"telegram": {
"enabled": false,
"botToken": "",
"listenMethod": "global",
"admins": [],
"trustedGroups": []
},
"email": {
"enabled": false,
"smtpHost": "",
"smtpPort": 587,
"username": "",
"password": "",
"from": "",
"to": [],
"useTLS": true
},
"ntfy": {
"enabled": false,
"server": "https://ntfy.sh",
"topic": "",
"token": "",
"priority": "default"
},
"webhook": {
"enabled": false,
"url": "",
"method": "POST",
"headers": {},
"template": ""
}
},
"controllerMessage": {
"SERVER_STATUS_CHANGED": "Server Status Changed Alert\n{{ serverName }} - {{ upStatus }}\nEvent: {{ event }}\nServer Name: {{ serverName }}\nMessage: {{ message }}\nTime: {{ time }}",
"SERVER_LIST": "All server list:\nOnline:\n{{ list.onlineServers }}\nOffline:\n{{ list.offlineServers }}",
"SERVER_EXECUTE_RESULT": "Command execute result:\nServer Name: {{ serverName }}\nCommand: {{ command }}\n***Result***\n\n{{ result }}\n\n************\nTime: {{ time }}"
}
}
API Endpoints
All API responses follow the format: {"success": bool, "message": "..."}
Authentication is via X-Token and X-Timestamp HTTP headers.
| Endpoint | Method | Auth | Description |
|---|---|---|---|
/api/user/login |
POST | None | User login |
/api/user/register |
POST | None | First-time registration |
/api/server/list |
GET | bot/admin | List all servers |
/api/server/getStatus |
GET | bot/admin | Get server recent status |
/api/server/exec |
POST | bot/admin | Execute command on server(s) |
/health |
GET | None | Health check |
/api/system/getLogs |
WS | None | Real-time log streaming |
Bot Commands
| Command | Permission | Description |
|---|---|---|
/list |
None | List all server status |
/shutdown <uuid> |
Admin | Shutdown specific server |
/reboot <uuid> |
Admin | Reboot specific server |
/status <uuid> |
None | Get server detailed status |
/run <uuid|all> <command> |
Admin | Run command on server(s) |
Building
go build -o nukumizu-backend .
Running
./nukumizu-backend -config config.json
License
See LICENSE.
Languages
Go
69.1%
Vue
21.3%
CSS
4.9%
JavaScript
2.9%
Batchfile
1%
Other
0.8%