-
Notifications
You must be signed in to change notification settings - Fork 0
Deployment
本文从零开始部署 InboxBridge。默认推荐 polling 模式,因为它不需要公网 HTTPS 地址,适合 Serv00、VPS、本地小主机和开发环境。
- 在 Telegram 打开
@BotFather。 - 使用
/newbot创建 bot。 - 保存 BotFather 给出的 token,后续填入 Web 控制台的
TELEGRAM_BOT_TOKEN。 - 如果管理群里需要接收普通消息,建议在 BotFather 中确认 bot 的隐私设置符合预期。InboxBridge 的核心处理依赖 bot 能收到管理群 Topic 内消息。
管理群必须满足:
- 类型是
supergroup。 - 已启用 Forum Topics。
- bot 已加入群。
- bot 有发送消息和管理 topics 的权限。
推荐做法:
- 创建一个私密 Telegram 群。
- 在群设置中开启 Topics。
- 把 bot 拉入群。
- 将 bot 提升为管理员。
- 至少授予管理 topics 和发送消息权限。
TELEGRAM_MANAGEMENT_CHAT_ID 通常是 -100 开头的数字。可用下面任一方式获取:
- 把 bot 加入群后运行项目内检查脚本,根据输出确认 chat id。
- 临时向 bot 或诊断脚本发送测试消息后查看 Telegram API 返回。
- 使用可信的 Telegram ID 获取工具,但不要把 bot token 发给不可信服务。
填入 .env 时必须保留负号,例如:
TELEGRAM_MANAGEMENT_CHAT_ID=-1001234567890TELEGRAM_ADMIN_USER_IDS 只接受 Telegram 数字 user_id,不是用户名。
获取方式:
- 先填一个已知 ID 后启动,在管理 Topic 内使用
/whoami查看。 - 使用 Telegram 官方 API 或可信 ID 查询 bot 获取。
- 如果暂时没有 ID,可先用自己的账号私聊一些 ID 查询 bot,再填入
.env。
多个管理员用英文逗号分隔:
TELEGRAM_ADMIN_USER_IDS=123456789,987654321项目要求 Node.js 24 或更高版本。
npm ci如果部署平台对 npm 可执行权限有限,请优先参考 Serv00 部署指南。
常规部署无需预先填写 Telegram 变量。先准备数据库并启动服务:
npm run migrate
npm run dev日志会输出 setupToken,打开 http://localhost:3000 后使用该 token 设置控制台密码。进入控制台后填写最小配置:
TELEGRAM_BOT_TOKENTELEGRAM_MANAGEMENT_CHAT_IDTELEGRAM_UPDATE_MODE=pollingTELEGRAM_ADMIN_USER_IDS
Web 控制台保存后会自动尝试启动或重启 bot。
高级部署可以使用 .env 覆盖控制台配置:
复制示例文件:
cp .env.example .env
nano .env最小可运行配置:
TELEGRAM_BOT_TOKEN=你的_bot_token
TELEGRAM_MANAGEMENT_CHAT_ID=-1001234567890
TELEGRAM_UPDATE_MODE=polling
TELEGRAM_ADMIN_USER_IDS=123456789
DATABASE_URL=file:./data/inboxbridge.sqlite
AI_DRAFTS_ENABLED=false启用 AI 草稿时再填写:
OPENAI_COMPATIBLE_BASE_URL=https://你的服务地址/v1
OPENAI_COMPATIBLE_API_KEY=你的_api_key
OPENAI_COMPATIBLE_MODEL=你的模型名
AI_DRAFTS_ENABLED=trueAI 草稿只会发送到管理 Topic,不会自动回复外部用户。
先检查 token、群、Forum 和 bot 权限:
npm run telegram:check进一步测试发送权限:
TELEGRAM_CHECK_SEND_TEST=true npm run telegram:check进一步测试创建和删除 Topic 权限:
TELEGRAM_CHECK_TOPIC_TEST=true npm run telegram:checkTopic 测试会临时创建测试 Topic、发送测试消息,然后尝试删除。
npm run migrate迁移脚本是幂等的,重复执行不会重复建表。数据库默认位于:
data/inboxbridge.sqlite
请不要把 data/ 或 .env 提交到 Git。
开发或前台验证:
npm run dev生产运行建议先构建,再启动编译产物:
npm run build
node dist/src/runtime/main.js如果使用 webhook,需要额外配置公网 HTTPS:
TELEGRAM_UPDATE_MODE=webhook
TELEGRAM_WEBHOOK_URL=https://example.com/telegram/webhook
TELEGRAM_WEBHOOK_PORT=3000第一版更推荐 polling,部署更简单,也更适合 Serv00。
按下面顺序测试:
- 用外部测试账号私聊 bot,发送
/start或普通文本。 - 管理群中自动出现该用户的 Topic。
- Topic 内能看到用户消息。
- 白名单管理员在 Topic 内发送普通消息。
- 外部用户收到 bot 代发的回复。
- Topic 内执行
/whoami、/info、/note 测试备注、/search 测试。 - 执行
/expire 7、/expires、/audit,确认会话销毁策略和审计记录可用。 - 打开
/operations,确认会话、投递、审计和搜索页面可访问。 - 执行
npm run verify,确认构建、测试和审计通过。
Workers 部署使用 Fetch、D1、Telegram webhook 和 Cron Trigger。部署前先创建 D1 数据库,并把 wrangler.toml 中的占位 database_id 替换为真实 D1 ID。
需要通过 Wrangler secrets 写入敏感配置。命令会交互式读取值,文档和日志中不要记录真实值:
wrangler secret put TELEGRAM_BOT_TOKEN
wrangler secret put TELEGRAM_WEBHOOK_SECRET
wrangler secret put WEB_CONSOLE_PASSWORD
wrangler secret put WEB_CONSOLE_SESSION_SECRETWEB_CONSOLE_SESSION_SECRET 用于签名 Workers Web 控制台 cookie。建议使用足够长的随机字符串,并与控制台密码分开管理。
Workers smoke test:
-
GET /healthz返回 JSON,并执行 D1SELECT 1。 -
GET /login渲染 Web 控制台登录页。 - 登录成功后返回 HttpOnly session cookie。
-
GET /operations在认证后渲染运维页面。 -
/telegram/webhook对有效 secret header 返回已处理响应。 - Cron Trigger 能运行维护任务且不抛出异常。
PM2 示例:
npm run build
pm2 start dist/src/runtime/main.js --name inboxbridge
pm2 save
pm2 logs inboxbridge没有 PM2 时,也可以使用系统提供的进程管理器。关键点是最终运行:
node dist/src/runtime/main.js推荐升级顺序:
git pull
npm ci
npm run migrate
npm run verify
npm run build然后重启常驻进程。
需要备份:
.env
data/inboxbridge.sqlite
恢复后执行:
npm run migrate
npm run telegram:check确认无误后再启动服务。