428 lines
10 KiB
Markdown
428 lines
10 KiB
Markdown
|
|
# GUKO
|
|||
|
|
|
|||
|
|
[](https://github.com/shuijiao1/GUKO/pkgs/container/guko)
|
|||
|
|
[](LICENSE)
|
|||
|
|
|
|||
|
|
**中文** | [English](README.en.md)
|
|||
|
|
|
|||
|
|
**轻量 VPS / 服务器管理 Telegram Bot:服务器状态面板、SSH 登录管理、常用测试脚本入口**
|
|||
|
|
|
|||
|
|
> 私聊打开 Bot 就能查看服务器列表、状态详情、流量与资源占用;支持在 Telegram 内添加服务器、测试 SSH、运行 IP 质量 / NodeQuality / 流媒体 / NextTrace / GB5 等常用检测。
|
|||
|
|
> 默认白名单模式,适合自托管。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🎯 核心特性
|
|||
|
|
|
|||
|
|
- **服务器状态面板**:展示在线数量、CPU / 内存 / 硬盘、流量、实时网速、系统信息等。
|
|||
|
|
- **Telegram 内添加服务器**:支持单台添加、批量导入、编辑、删除和 SSH 连通性测试。
|
|||
|
|
- **灵活 SSH 鉴权**:支持默认密钥继承、每台独立密钥、已有密钥路径、上传 / 粘贴私钥、密码登录。
|
|||
|
|
- **常用测试与协议入口**:支持 IP 质量、NodeQuality、流媒体解锁、NextTrace、GB5、SS-Rust、AnyTLS、VLESS、Snell 等任务。
|
|||
|
|
- **IP / 域名工具**:支持 IPPure 官方图片与 bgp.tools BGP 路由图。
|
|||
|
|
- **适合 Docker 部署**:提供 Docker Compose、Makefile 和初始化脚本。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🚀 快速开始
|
|||
|
|
|
|||
|
|
先准备:
|
|||
|
|
|
|||
|
|
1. 到 [@BotFather](https://t.me/BotFather) 创建 Bot,拿到 `BOT_TOKEN`。
|
|||
|
|
2. 用 [@userinfobot](https://t.me/userinfobot) 或 [@RawDataBot](https://t.me/RawDataBot) 获取你的 Telegram 数字用户 ID。
|
|||
|
|
|
|||
|
|
提供 2 种部署方式,**推荐 Docker Compose**。
|
|||
|
|
|
|||
|
|
### 方式一:Docker Compose(推荐,无需 git clone)
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
mkdir -p guko/keys guko/media guko/results guko/tmp
|
|||
|
|
cd guko
|
|||
|
|
|
|||
|
|
curl -Lo docker-compose.yml https://github.com/shuijiao1/GUKO/releases/latest/download/docker-compose.example.yml
|
|||
|
|
|
|||
|
|
cat > .env <<'EOF'
|
|||
|
|
BOT_TOKEN=replace-me
|
|||
|
|
ALLOWED_USERS=123456789
|
|||
|
|
ADMIN_USERS=123456789
|
|||
|
|
DATA_DIR=/data
|
|||
|
|
GUKO_INV=/data/servers.json
|
|||
|
|
MEDIA_DIR=/data/media
|
|||
|
|
TMP_DIR=/data/tmp
|
|||
|
|
KEYS_DIR=/data/keys
|
|||
|
|
GUKO_DEFAULT_USER=root
|
|||
|
|
GUKO_DEFAULT_PORT=22
|
|||
|
|
GUKO_DEFAULT_KEY=/data/keys/id_ed25519
|
|||
|
|
# 可选:对接 Kulin/Komari 后,地区识别优先使用面板 GeoIP 结果
|
|||
|
|
KULIN_BASE_URL=
|
|||
|
|
KULIN_USERNAME=
|
|||
|
|
KULIN_PASSWORD=
|
|||
|
|
KULIN_API_CACHE_TTL=300
|
|||
|
|
ENABLE_BGP=true
|
|||
|
|
ENABLE_IPPURE=true
|
|||
|
|
ENABLE_IPQ=true
|
|||
|
|
ENABLE_NQ=true
|
|||
|
|
ENABLE_GB5=true
|
|||
|
|
ENABLE_STREAM=true
|
|||
|
|
ENABLE_NEXTTRACE=true
|
|||
|
|
ALLOW_INSECURE_STARTUP=false
|
|||
|
|
EOF
|
|||
|
|
|
|||
|
|
cat > servers.json <<'EOF'
|
|||
|
|
{
|
|||
|
|
"defaults": {
|
|||
|
|
"ssh": {
|
|||
|
|
"user": "root",
|
|||
|
|
"port": 22,
|
|||
|
|
"key": "/data/keys/id_ed25519"
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
"servers": []
|
|||
|
|
}
|
|||
|
|
EOF
|
|||
|
|
|
|||
|
|
nano .env
|
|||
|
|
docker compose pull
|
|||
|
|
docker compose up -d
|
|||
|
|
docker compose logs -f
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
`docker-compose.yml` 已显式设置 `name: guko`,因此在 Docker / DockUP 等管理面板里会显示为 `guko`,不会因为部署目录不同变成随机目录名。
|
|||
|
|
|
|||
|
|
最小配置里只需要先改:
|
|||
|
|
|
|||
|
|
```env
|
|||
|
|
BOT_TOKEN=replace-me
|
|||
|
|
ALLOWED_USERS=123456789
|
|||
|
|
ADMIN_USERS=123456789
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
启动后在 Bot 里发送 `/addserver` 添加第一台服务器。
|
|||
|
|
|
|||
|
|
|
|||
|
|
### 方式二:源码构建(开发用)
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
git clone https://github.com/shuijiao1/GUKO.git
|
|||
|
|
cd GUKO
|
|||
|
|
cp .env.example .env
|
|||
|
|
cp servers.example.json servers.json
|
|||
|
|
mkdir -p keys media tmp
|
|||
|
|
nano .env
|
|||
|
|
docker build -f telegram-bot/Dockerfile -t guko:local .
|
|||
|
|
docker run -d --name guko-bot --restart unless-stopped \
|
|||
|
|
--env-file .env \
|
|||
|
|
-v ./servers.json:/data/servers.json \
|
|||
|
|
-v ./keys:/data/keys \
|
|||
|
|
-v ./media:/data/media \
|
|||
|
|
-v ./tmp:/data/tmp \
|
|||
|
|
guko:local
|
|||
|
|
docker logs -f guko-bot
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 💬 使用方式
|
|||
|
|
|
|||
|
|
### 打开面板
|
|||
|
|
|
|||
|
|
私聊 Bot 发送:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
/start
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Bot 会显示 GUKO 总览面板,可以点服务器查看详情。
|
|||
|
|
|
|||
|
|
### 添加服务器
|
|||
|
|
|
|||
|
|
点击 **➕ 添加服务器**,或者发送:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
/addserver
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 单台添加
|
|||
|
|
|
|||
|
|
选择 **添加单台**,按提示发送:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
名称 IP [端口] [用户]
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
示例:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
hk-01 203.0.113.10 22 root
|
|||
|
|
jp-01 203.0.113.20:2222 debian
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
然后 Bot 会询问登录方式,支持密钥路径、上传 / 粘贴私钥、密码或先保存后测试。
|
|||
|
|
|
|||
|
|
添加后可用按钮或命令测试:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
/testssh hk-01
|
|||
|
|
/testall
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
服务器详情页也支持 **编辑** 和 **删除**;删除需要二次确认,只会删除本地配置,不会操作远端机器。
|
|||
|
|
|
|||
|
|
#### 批量导入
|
|||
|
|
|
|||
|
|
选择 **批量导入** 后,Bot 会先问:
|
|||
|
|
|
|||
|
|
1. 是否全部使用同一个 SSH 端口,还是每台自己写端口。
|
|||
|
|
2. 是否全部使用同一把密钥、同一个密码、每台自己写认证,还是先只导入不测试。
|
|||
|
|
|
|||
|
|
常用批量格式:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
hk-01 203.0.113.10 root
|
|||
|
|
jp-01 203.0.113.20 debian
|
|||
|
|
sg-01 203.0.113.30 root
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
如果选择“每台自己写端口”:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
hk-01 203.0.113.10 22 root
|
|||
|
|
jp-01 203.0.113.20 2222 debian
|
|||
|
|
sg-01 203.0.113.30:53580 root
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
如果选择“每台自己写认证”:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
hk-01 203.0.113.10 22 root key:/data/keys/hk_ed25519
|
|||
|
|
jp-01 203.0.113.20 2222 debian password:your-password
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
> Telegram 里发送密码 / 私钥会经过 Telegram 云端。建议使用私有 Bot,并限制 `ALLOWED_USERS`。
|
|||
|
|
|
|||
|
|
### 命令
|
|||
|
|
|
|||
|
|
- `/start` — 打开 GUKO 面板
|
|||
|
|
- `/list` — 查看服务器列表
|
|||
|
|
- `/status` — 查看总览状态
|
|||
|
|
- `/addserver` — 添加 / 批量导入服务器
|
|||
|
|
- `/testssh <名字/IP/ID/别名>` — 测试单台服务器 SSH
|
|||
|
|
- `/testall` — 批量测试 SSH
|
|||
|
|
- `/exportconfig` — 导出脱敏配置
|
|||
|
|
- `/info <名字/IP/ID/别名>` — 查看单台详情
|
|||
|
|
- `/health` — 只读巡检
|
|||
|
|
- `/jobs` — 查看后台任务
|
|||
|
|
- `/ip <IPv4 或域名>` — IPPure / BGP 工具
|
|||
|
|
- `/nexttrace <服务器> <目标>` — 路由追踪
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## ⚙️ 配置说明
|
|||
|
|
|
|||
|
|
`.env` 示例:
|
|||
|
|
|
|||
|
|
```env
|
|||
|
|
BOT_TOKEN=replace-me
|
|||
|
|
ALLOWED_USERS=123456789
|
|||
|
|
ADMIN_USERS=123456789
|
|||
|
|
DATA_DIR=/data
|
|||
|
|
GUKO_INV=/data/servers.json
|
|||
|
|
MEDIA_DIR=/data/media
|
|||
|
|
TMP_DIR=/data/tmp
|
|||
|
|
KEYS_DIR=/data/keys
|
|||
|
|
GUKO_DEFAULT_USER=root
|
|||
|
|
GUKO_DEFAULT_PORT=22
|
|||
|
|
GUKO_DEFAULT_KEY=/data/keys/id_ed25519
|
|||
|
|
ENABLE_BGP=true
|
|||
|
|
ENABLE_IPPURE=true
|
|||
|
|
ENABLE_IPQ=true
|
|||
|
|
ENABLE_NQ=true
|
|||
|
|
ENABLE_GB5=true
|
|||
|
|
ENABLE_STREAM=true
|
|||
|
|
ENABLE_NEXTTRACE=true
|
|||
|
|
ALLOW_INSECURE_STARTUP=false
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
| 变量 | 是否必填 | 默认值 | 说明 |
|
|||
|
|
|---|---:|---|---|
|
|||
|
|
| `BOT_TOKEN` | 是 | - | Telegram Bot Token |
|
|||
|
|
| `ALLOWED_USERS` | 是 | - | 允许使用 Bot 的 Telegram 数字 ID,多个用英文逗号分隔 |
|
|||
|
|
| `ADMIN_USERS` | 否 | `ALLOWED_USERS` | 管理员 ID,能添加 / 删除服务器、执行高危功能 |
|
|||
|
|
| `DATA_DIR` | 否 | `/data` | 容器内数据目录 |
|
|||
|
|
| `GUKO_INV` | 否 | `/data/servers.json` | 服务器清单路径 |
|
|||
|
|
| `MEDIA_DIR` | 否 | `/data/media` | 图片和报告输出目录 |
|
|||
|
|
| `TMP_DIR` | 否 | `/data/tmp` | 临时文件目录 |
|
|||
|
|
| `KEYS_DIR` | 否 | `/data/keys` | SSH 私钥保存目录 |
|
|||
|
|
| `GUKO_DEFAULT_USER` | 否 | `root` | 默认 SSH 用户 |
|
|||
|
|
| `GUKO_DEFAULT_PORT` | 否 | `22` | 默认 SSH 端口 |
|
|||
|
|
| `GUKO_DEFAULT_KEY` | 否 | `/data/keys/id_ed25519` | 默认 SSH 私钥路径 |
|
|||
|
|
| `ENABLE_BGP` | 否 | `true` | 是否启用 BGP 图功能 |
|
|||
|
|
| `ENABLE_IPPURE` | 否 | `true` | 是否启用 IPPure 图功能 |
|
|||
|
|
| `ENABLE_IPQ` | 否 | `true` | 是否启用 IP 质量功能 |
|
|||
|
|
| `ENABLE_NQ` | 否 | `true` | 是否启用 NodeQuality 功能 |
|
|||
|
|
| `ENABLE_GB5` | 否 | `true` | 是否启用 GB5 功能 |
|
|||
|
|
| `ENABLE_SS` | 否 | `true` | 是否启用 SS-Rust 管理入口 |
|
|||
|
|
| `ENABLE_ANYTLS` | 否 | `true` | 是否启用 AnyTLS 管理入口 |
|
|||
|
|
| `ENABLE_VLESS` | 否 | `true` | 是否启用 VLESS 管理入口 |
|
|||
|
|
| `ENABLE_SNELL` | 否 | `true` | 是否启用 Snell 管理入口 |
|
|||
|
|
| `ENABLE_STREAM` | 否 | `true` | 是否启用流媒体检测 |
|
|||
|
|
| `ENABLE_NEXTTRACE` | 否 | `true` | 是否启用 NextTrace |
|
|||
|
|
| `BGP_FETCH` | 否 | `/data/tools/bgp_fetch.py` | BGP 图片工具脚本路径 |
|
|||
|
|
| `IPPURE_DOWNLOAD` | 否 | `/data/tools/download_ippure.js` | IPPure 下载脚本路径 |
|
|||
|
|
| `ALLOW_INSECURE_STARTUP` | 否 | `false` | 开发 / 迁移时跳过安全启动检查 |
|
|||
|
|
|
|||
|
|
> `BOT_TOKEN` 和 `ALLOWED_USERS` 必须填写;不要把真实 `.env` 提交到仓库。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🛠 运维
|
|||
|
|
|
|||
|
|
所有持久化数据在安装目录下:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
GUKO/
|
|||
|
|
├── docker-compose.example.yml
|
|||
|
|
├── .env
|
|||
|
|
├── servers.json # 私有服务器清单
|
|||
|
|
├── keys/ # SSH 私钥
|
|||
|
|
├── media/ # 报告图片 / 输出文件
|
|||
|
|
└── tmp/ # 临时文件
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
常用命令:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
cd <安装目录>
|
|||
|
|
docker compose ps
|
|||
|
|
docker compose logs -f
|
|||
|
|
docker compose restart
|
|||
|
|
docker compose down
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
升级:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
cd <安装目录>
|
|||
|
|
git pull
|
|||
|
|
docker compose pull
|
|||
|
|
docker compose up -d
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
也可以使用 Makefile:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
make up
|
|||
|
|
make logs
|
|||
|
|
make restart
|
|||
|
|
make down
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🧾 直接写配置文件批量添加
|
|||
|
|
|
|||
|
|
推荐在 `defaults.ssh` 里写公共默认值,每台服务器只覆盖不同的部分:
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"defaults": {
|
|||
|
|
"ssh": {
|
|||
|
|
"user": "root",
|
|||
|
|
"port": 22,
|
|||
|
|
"key": "~/.ssh/id_ed25519"
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
"servers": [
|
|||
|
|
{
|
|||
|
|
"name": "hk-01",
|
|||
|
|
"host": "203.0.113.10"
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"name": "jp-01",
|
|||
|
|
"host": "203.0.113.20",
|
|||
|
|
"ssh": {
|
|||
|
|
"user": "debian",
|
|||
|
|
"port": 2222,
|
|||
|
|
"key": "~/.ssh/jp_ed25519"
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"name": "sg-password",
|
|||
|
|
"host": "203.0.113.30",
|
|||
|
|
"ssh": {
|
|||
|
|
"auth": "password",
|
|||
|
|
"password": "change-me"
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
]
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
兼容旧格式,下面这种仍然可用:
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"name": "legacy",
|
|||
|
|
"host": "203.0.113.40",
|
|||
|
|
"user": "root",
|
|||
|
|
"port": 53580,
|
|||
|
|
"key": "/data/keys/server_key"
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
批量添加后可以测试:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
./guko.py list
|
|||
|
|
./guko.py run hk-01 'hostname'
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Bot 内还可以导出脱敏配置:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
/exportconfig
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🧩 可选工具
|
|||
|
|
|
|||
|
|
GUKO 支持按需启用 IP 质量、NodeQuality、流媒体、NextTrace、GB5、BGP 图、IPPure 图、SS-Rust、AnyTLS、VLESS、Snell 等功能。相关按钮可以通过环境变量关闭。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🧩 源码运行(开发用)
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
git clone https://github.com/shuijiao1/GUKO.git
|
|||
|
|
cd GUKO
|
|||
|
|
python3 -m venv .venv
|
|||
|
|
. .venv/bin/activate
|
|||
|
|
pip install -r telegram-bot/requirements.txt
|
|||
|
|
cp .env.example .env
|
|||
|
|
cp servers.example.json servers.json
|
|||
|
|
nano .env
|
|||
|
|
python3 telegram-bot/bot.py
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
语法检查:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
make check
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🔐 隐私说明
|
|||
|
|
|
|||
|
|
- 仓库不包含任何 Bot Token、真实用户 ID、服务器密码或私钥。
|
|||
|
|
- `.env`、`servers.json`、`keys/`、`media/`、`tmp/` 已加入 `.gitignore`,不要提交真实配置。
|
|||
|
|
- 默认白名单模式,未配置允许用户时会拒绝启动。
|
|||
|
|
- 使用 IPPure、bgp.tools、NodeQuality、流媒体检测等功能时,会访问对应第三方服务。
|
|||
|
|
- 删除服务器只会删除 Bot 本地配置,不会删除或重装远端机器。
|
|||
|
|
|
|||
|
|
## License
|
|||
|
|
|
|||
|
|
MIT
|