disco - 交互式 Shell Discourse 管理工具,支持 Telegram 通知
| 摘要 | 一个 Discourse 管理的命令行包装器,提供交互式菜单界面,并为维护操作自动发送 Telegram 通知 | |
| 仓库链接 | GitHub - DigneZzZ/discourse-cli: Discourse CLI interface with TG events when rebuild · GitHub | |
| 文档 | 安装指南 · 快速入门 · 示例 |
简介
大家好!
我想分享我在管理社区论坛时创建的一个解决方案。像许多朋友一样,我为社区建立了一个 Telegram 群组,每当我需要更新或重启 Discourse 时,总会不断收到诸如“论坛是不是挂了?”或“维护什么时候结束?”之类的问题。
为了解决这个问题(也让我的生活更轻松),我开发了 disco —— 一个 Discourse 管理的命令行包装器,包含自动 Telegram 通知和交互式菜单界面。
它解决了什么问题
- 不再有“论坛是不是挂了?”的提问 —— 自动向您的 Telegram 群组发送通知
- 简化管理 —— 使用交互式菜单,无需记忆启动器命令
- 安全第一 —— 对危险操作(重建、停止、清理)进行确认
- 更好的可见性 —— 实时状态、日志和资源监控
- 更快的故障排查 —— 所有操作集中在一个地方,输出清晰
功能特性
交互式菜单界面
不带参数运行 disco 即可看到一个漂亮的编号菜单:
╔════════════════════════════════════════════════════════════╗
║ 🚀 Discourse Manager v1.2.0 ║
║ 📦 容器:app | 状态:🟢 运行中 ║
╚════════════════════════════════════════════════════════════╝
1. 📊 显示状态
2. 🔄 重启容器
3. 📝 查看日志(最近 100 行)
4. 📺 实时监控
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
5. 🔧 完整重建(含更新)⚠
6. ⚡ 快速重建
7. 💾 创建备份
8. 🧹 清理 Docker 资源 ⚠
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
9. ▶️ 启动容器
10. ⏸️ 停止容器 ⚠
11. 🐚 进入容器 Shell
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
12. 📥 更新启动器
13. 📱 测试 Telegram 通知
14. ⚙️ 显示配置
15. 🔄 更新 disco
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
0. ❌ 退出
功能特点:
- 只需输入数字(1-15)即可选择操作
- 标题栏实时显示容器状态
- 对关键操作提供视觉警告(
) - 安全确认机制 —— 输入“yes”确认危险操作
- 智能 sudo 检测 —— 当需要 root 权限时发出警告
Telegram 通知
自动通知让您的社区随时了解动态:
重建开始时:
🔧 论坛即将进入维护模式
⏱ 预计时间:约 10 分钟
对于暂时造成的不便,我们深表歉意。
完成后:
✅ 论坛已恢复在线!
⏱ 维护耗时:7 分 57 秒
🔖 版本:3.2.0.beta4
感谢您的耐心等待!🚀
发生错误时:
❌ 论坛更新失败
⏱ 尝试耗时:3 分 12 秒
⚠️ 需要管理员注意!
请检查日志:disco logs
监控与诊断
状态概览:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📊 Discourse 状态
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📦 容器:app
🟢 状态:运行中
⏱ 运行时间:已运行 3 天
🔖 版本:3.2.0.beta4
💻 CPU:2.5%
🧠 内存:1.2GB / 4GB
功能特点:
- 实时 CPU 和内存使用率
- 容器运行时间追踪
- 通过 API 自动检测版本
- 支持 follow 模式的实时日志监控
- 资源监控仪表板
安全功能
- 确认提示 —— 对关键操作(重建、停止、清理)进行确认
- Sudo 检测 —— 当需要权限时发出警告
- 版本显示 —— 随时了解当前运行版本
- 详细警告 —— 明确说明每项关键操作的具体影响
快速操作
所有标准的 Discourse 操作均可用:
- 容器管理 —— 启动、停止、重启、进入 Shell
- 维护操作 —— 重建(完整/快速)、备份、清理
- 监控 —— 状态、日志、实时资源监控
- 更新 —— 一键更新启动器
安装
快速安装
# 下载并安装
curl -o disco https://raw.githubusercontent.com/DigneZzZ/discourse-cli/main/disco
chmod +x disco
sudo mv disco /usr/local/bin/
# 验证安装
disco version
# 启动交互式菜单
disco
配置
基本设置
在以下任一位置创建配置文件:
~/.disco.env(推荐)/etc/disco/.env- 脚本所在目录
# 复制示例配置
curl -o ~/.disco.env https://raw.githubusercontent.com/DigneZzZ/discourse-cli/main/.env.example
# 编辑设置
nano ~/.disco.env
配置示例
# 基本设置
DISCOURSE_PATH=/var/discourse
CONFIG_NAME=app
# Telegram 通知(可选)
TELEGRAM_BOT_TOKEN=1234567890:ABCdefGHIjklMNOpqrsTUVwxyz
TELEGRAM_CHAT_ID=-1001234567890
TELEGRAM_THREAD_ID=1
设置 Telegram 通知
1. 创建机器人:
- 在 Telegram 上联系 @BotFather
- 发送
/newbot命令 - 按照提示操作
- 保存机器人令牌
2. 获取聊天 ID:
- 向您的机器人发送任意消息
- 访问:
https://api.telegram.org/bot<YOUR_TOKEN>/getUpdates - 在响应中找到
"chat":{"id":...}
3. 获取线程 ID(适用于有话题的群组):
- 向群组中的目标话题发送消息
- 在 getUpdates 响应中查找
message_thread_id
4. 测试通知:
disco test-telegram
使用
交互式菜单(推荐)
# 启动交互式菜单
disco
# 使用 sudo 执行管理操作
sudo disco
只需输入您想执行的操作编号即可!
命令行模式
适用于自动化或快速操作:
# 状态与监控
disco status # 显示容器状态
disco logs # 查看最近 100 行
disco logs 500 # 查看最近 500 行
disco monitor # 实时资源监控
# 容器管理
sudo disco start # 启动容器
sudo disco stop # 停止容器
sudo disco restart # 重启容器
disco enter # 进入容器 Shell
# 维护操作
sudo disco rebuild # 完整重建(含更新)
sudo disco fast-rebuild # 快速重建(不更新启动器)
sudo disco backup # 创建备份(自动命名)
sudo disco backup my-name # 创建备份(自定义名称)
sudo disco cleanup # 清理 Docker 资源
# 工具
sudo disco update-launcher # 更新 Discourse 启动器
disco test-telegram # 测试 Telegram 通知
disco show-config # 显示 disco 配置
disco version # 显示版本
disco help # 显示帮助
设置
| 名称 | 描述 | 默认值 | 是否必需 |
|---|---|---|---|
DISCOURSE_PATH |
Discourse 安装目录路径 | /var/discourse |
否 |
CONFIG_NAME |
容器配置名称 | app |
否 |
TELEGRAM_BOT_TOKEN |
来自 @BotFather 的 Telegram 机器人令牌 | - | 否(用于通知) |
TELEGRAM_CHAT_ID |
用于通知的 Telegram 聊天或群组 ID | - | 否(用于通知) |
TELEGRAM_THREAD_ID |
有话题的群组中的线程 ID | - | 否(可选) |
使用场景
社区管理员
- 自动在维护期间通知社区成员
- 不再有“论坛是不是挂了?”的提问
- 专业的维护通知
系统管理员
- 通过交互式菜单执行偶尔的管理任务
- 安全确认机制防止误操作
- 快速访问日志和状态
DevOps 团队
- 提供 CLI 模式用于自动化和脚本
- 团队成员间操作一致
- 易于与监控系统集成
实际影响
自部署此工具以来:
Telegram 群组中零条“论坛是不是挂了?”的提问
维护操作更快 —— 无需在终端和聊天工具之间切换
更新过程中错误更少 —— 安全确认机制生效!
监控更完善 —— 快速访问日志和资源使用情况
文档
我为什么开发这个工具
通过标准启动器管理 Discourse 功能强大,但存在以下问题:
- 命令难以记忆
- 没有内置的社区通知系统
- 关键操作容易出错
- 社区成员总是询问停机情况
disco 为启动器添加了用户友好的界面,并自动让所有人保持信息同步。
贡献
欢迎贡献!如果您有任何想法或建议:
- Fork 仓库
- 创建功能分支
- 进行您的修改
- 提交 Pull Request
或者直接在 GitHub Issues 中提出反馈!
许可证
MIT 许可证 —— 完全免费使用和修改。
GitHub 仓库: GitHub - DigneZzZ/discourse-cli: Discourse CLI interface with TG events when rebuild · GitHub