Disco - 交互式 Shell 讨论管理工具,带 Telegram 通知

disco - 交互式 Shell Discourse 管理工具,支持 Telegram 通知

:information_source: 摘要 一个 Discourse 管理的命令行包装器,提供交互式菜单界面,并为维护操作自动发送 Telegram 通知
:hammer_and_wrench: 仓库链接 GitHub - DigneZzZ/discourse-cli: Discourse CLI interface with TG events when rebuild · GitHub
:open_book: 文档 安装指南 · 快速入门 · 示例

:wave: 简介

大家好!

我想分享我在管理社区论坛时创建的一个解决方案。像许多朋友一样,我为社区建立了一个 Telegram 群组,每当我需要更新或重启 Discourse 时,总会不断收到诸如“论坛是不是挂了?”或“维护什么时候结束?”之类的问题。

为了解决这个问题(也让我的生活更轻松),我开发了 disco —— 一个 Discourse 管理的命令行包装器,包含自动 Telegram 通知交互式菜单界面


:dart: 它解决了什么问题

  • 不再有“论坛是不是挂了?”的提问 —— 自动向您的 Telegram 群组发送通知
  • 简化管理 —— 使用交互式菜单,无需记忆启动器命令
  • 安全第一 —— 对危险操作(重建、停止、清理)进行确认
  • 更好的可见性 —— 实时状态、日志和资源监控
  • 更快的故障排查 —— 所有操作集中在一个地方,输出清晰

:sparkles: 功能特性

:video_game: 交互式菜单界面

不带参数运行 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)即可选择操作
  • 标题栏实时显示容器状态
  • 对关键操作提供视觉警告(:warning:
  • 安全确认机制 —— 输入“yes”确认危险操作
  • 智能 sudo 检测 —— 当需要 root 权限时发出警告

:iphone: Telegram 通知

自动通知让您的社区随时了解动态:

重建开始时:

🔧 论坛即将进入维护模式

⏱ 预计时间:约 10 分钟

对于暂时造成的不便,我们深表歉意。

完成后:

✅ 论坛已恢复在线!

⏱ 维护耗时:7 分 57 秒
🔖 版本:3.2.0.beta4

感谢您的耐心等待!🚀

发生错误时:

❌ 论坛更新失败

⏱ 尝试耗时:3 分 12 秒

⚠️ 需要管理员注意!
请检查日志:disco logs

:bar_chart: 监控与诊断

状态概览:

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📊 Discourse 状态
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

📦 容器:app
🟢 状态:运行中
⏱  运行时间:已运行 3 天
🔖 版本:3.2.0.beta4
💻 CPU:2.5%
🧠 内存:1.2GB / 4GB

功能特点:

  • 实时 CPU 和内存使用率
  • 容器运行时间追踪
  • 通过 API 自动检测版本
  • 支持 follow 模式的实时日志监控
  • 资源监控仪表板

:shield: 安全功能

  • 确认提示 —— 对关键操作(重建、停止、清理)进行确认
  • Sudo 检测 —— 当需要权限时发出警告
  • 版本显示 —— 随时了解当前运行版本
  • 详细警告 —— 明确说明每项关键操作的具体影响

:zap: 快速操作

所有标准的 Discourse 操作均可用:

  • 容器管理 —— 启动、停止、重启、进入 Shell
  • 维护操作 —— 重建(完整/快速)、备份、清理
  • 监控 —— 状态、日志、实时资源监控
  • 更新 —— 一键更新启动器

:inbox_tray: 安装

快速安装

# 下载并安装
curl -o disco https://raw.githubusercontent.com/DigneZzZ/discourse-cli/main/disco
chmod +x disco
sudo mv disco /usr/local/bin/

# 验证安装
disco version

# 启动交互式菜单
disco

:gear: 配置

基本设置

在以下任一位置创建配置文件:

  • ~/.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

:rocket: 使用

交互式菜单(推荐)

# 启动交互式菜单
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                      # 显示帮助

:page_facing_up: 设置

名称 描述 默认值 是否必需
DISCOURSE_PATH Discourse 安装目录路径 /var/discourse
CONFIG_NAME 容器配置名称 app
TELEGRAM_BOT_TOKEN 来自 @BotFather 的 Telegram 机器人令牌 - 否(用于通知)
TELEGRAM_CHAT_ID 用于通知的 Telegram 聊天或群组 ID - 否(用于通知)
TELEGRAM_THREAD_ID 有话题的群组中的线程 ID - 否(可选)

:bulb: 使用场景

社区管理员

  • 自动在维护期间通知社区成员
  • 不再有“论坛是不是挂了?”的提问
  • 专业的维护通知

系统管理员

  • 通过交互式菜单执行偶尔的管理任务
  • 安全确认机制防止误操作
  • 快速访问日志和状态

DevOps 团队

  • 提供 CLI 模式用于自动化和脚本
  • 团队成员间操作一致
  • 易于与监控系统集成

:chart_with_upwards_trend: 实际影响

自部署此工具以来:

  • :white_check_mark: Telegram 群组中零条“论坛是不是挂了?”的提问
  • :white_check_mark: 维护操作更快 —— 无需在终端和聊天工具之间切换
  • :white_check_mark: 更新过程中错误更少 —— 安全确认机制生效!
  • :white_check_mark: 监控更完善 —— 快速访问日志和资源使用情况

:books: 文档


:heart: 我为什么开发这个工具

通过标准启动器管理 Discourse 功能强大,但存在以下问题:

  • 命令难以记忆
  • 没有内置的社区通知系统
  • 关键操作容易出错
  • 社区成员总是询问停机情况

disco 为启动器添加了用户友好的界面,并自动让所有人保持信息同步。


:handshake: 贡献

欢迎贡献!如果您有任何想法或建议:

  1. Fork 仓库
  2. 创建功能分支
  3. 进行您的修改
  4. 提交 Pull Request

或者直接在 GitHub Issues 中提出反馈!


:page_with_curl: 许可证

MIT 许可证 —— 完全免费使用和修改。



GitHub 仓库: GitHub - DigneZzZ/discourse-cli: Discourse CLI interface with TG events when rebuild · GitHub

2 个赞