开发者文档
简体中文

服务器运维

管理与设置

管理页面、注册验证码的发送(短信和电子邮件)、服务器设置值、备份与安全——面向运营方的参考。

服务器内置了一个用浏览器打开的管理页面。你可以在这里查看服务器状态,决定如何发送注册和登录验证码,并管理用户和机器人。本文档把管理页面和服务器设置值集中整理在一处,供查阅。如果需要先安装,请参阅服务器安装

打开管理页面

管理页面位于管理 HTTP 端口(运营配置中为 8080)的 /admin/只能在服务器本机(127.0.0.1)上打开。运营方通过 SSH 隧道进入。

# 在自己的电脑上执行(保持运行)
ssh -N -L 8080:127.0.0.1:8080 <用户>@<服务器>
# 浏览器:http://localhost:8080/admin/

# 令牌(在服务器上查看)
sudo cat /srv/pabal/pabal_server/data/admin-token

输入令牌后点打开열기)。浏览器会记住令牌,可以用右上角的清除令牌토큰 지우기)将其清除。如果要自行设定令牌,请设置 TELEGRAM_ADMIN_TOKEN(至少 16 个字符)——这样就不会写入文件。

各标签页显示的内容

标签页内容刷新
仪表盘대시보드当前在线的用户、会话和连接,用户、机器人、群组、消息和照片的数量,运行时间、端口、数据库,JVM,状态检查。测试号码开启时会显示警告横幅5 秒
注册验证码가입 코드等待中的验证码(号码、发送方式、发送状态、验证码、剩余时间、输错次数)和最近记录。可以复制或取消验证码3 秒
用户사용자所有账号——手机号码、登录邮箱(可编辑)、是否在线、登录设备数、消息数。退出所有设备모든 기기 로그아웃)、封禁号码번호 차단10 秒
机器人用 BotFather 创建的机器人——创建者、命令菜单、连接方式(MTProto · HTTP 轮询 · Webhook 地址及失败原因)、等待中的更新数量10 秒
设置설정注册和登录规则、短信、电子邮件(SMTP)、封禁手机号码手动保存
存储저장소数据目录和数据库地址(密码会被隐藏)、照片数量和容量、按类型统计的存储流数量10 秒

危险的操作(退出登录、封禁、取消验证码)需要点击两次才会执行。

注册和登录验证码

用户在应用中输入手机号码后,服务器会生成验证码,并通过在设置(설정)标签页中选定的方式发送出去。

发送方式验证码的去向应用界面
管理页面(관리 화면注册验证码(가입 코드)标签页。由运营方复制后直接告知用户号码 → “验证码已发送” → 验证码(新号码还要输入名字)
SMS通过 Twilio · Solapi · Webhook 之一发送短信与管理页面方式相同
电子邮件(이메일通过 SMTP 发送邮件号码 → 输入电子邮件 → “验证码已发送到电子邮件” → 验证码
  • 电子邮件方式下,新注册可以使用任意地址,该地址会成为账号的登录邮箱로그인 이메일)。已有账号只能通过已登记的登录邮箱接收——这是为了防止有人在别人的号码上填入自己的地址来登录。没有登录邮箱的已有账号,会改用短信(如已设置)或管理页面发送。可以在用户标签页中为其填入登录邮箱。
  • 发送在后台进行,应用会直接进入输入验证码的界面。发送结果(成功或失败及原因)会显示在注册验证码标签页中。
  • 注册(输入名字)只有在验证码输入正确之后才能进行。错误的验证码只接受允许的次数,超过之后,即使输入正确的验证码也会被拒绝。

设置——注册和登录

项目含义默认值
允许新注册(새 가입 허용关闭后只有已有账号可以登录。新号码会以“号码无效”被拒绝开启
验证码发送方式(코드 전달 방식管理页面 / 短信 / 电子邮件管理页面
在管理页面显示验证码(관리 화면에 코드 표시在短信和电子邮件方式下,也在注册验证码标签页中显示验证码(以防发送失败)开启
测试号码 +99966…(테스트 번호按服务器设置 / 开启 / 关闭。正式运营时请关闭按服务器设置
验证码位数 · 有效时间(코드 자릿수 · 코드 유효 시간5~6 位 · 1~60 分钟5 位 · 5 分钟
重新请求间隔 · 每日上限(재요청 간격 · 번호당 하루 최대 요청同一号码再次获取验证码前需等待的秒数(0~3600)· 24 小时内的最多次数(1~1000)60 秒 · 10 次
允许输错次数(틀린 입력 허용 횟수超过后该验证码会被锁定(1~20)5 次

设置——SMS

服务商要填写的值备注
Webhook웹훅接收地址(웹훅 주소,https://…)、Authorization 请求头(可选)服务器会发送 POST {"phone":"+8210…","code":"12345","text":"…"}。返回 2xx 即视为成功。适用于连接自建的短信服务器或其他服务
TwilioAccount SID、Auth Token、发送号码(발신 번호)或 Messaging Service SID包括海外号码在内,覆盖全球
Solapi(原 CoolSMS)API Key、API Secret、发送号码韩国国内短信。发送号码必须是在 Solapi 预先登记的号码。+82 号码会以 010… 的格式发送

文本(문구)中可以使用 {code}(验证码)和 {minutes}(有效时间)。默认值:[파발] 인증 코드: {code}(意为“[Pabal] 验证码:{code}”)。保存后,请用测试发送테스트 발송)进行确认。

设置——电子邮件(SMTP)

服务服务器 · 端口 · 安全(SMTP 서버 · 포트 · 보안用户名 · 密码(사용자명 · 비밀번호
Gmailsmtp.gmail.com · 587 · STARTTLSGmail 地址 · 应用专用密码(Google 账号 → 安全性 → 两步验证 → 应用专用密码)
Naversmtp.naver.com · 587 · STARTTLS账号 ID · 密码(在邮件设置中开启 POP3/SMTP)
公司内部邮件中继中继地址 · 25 · 无(없음留空

发件地址(보내는 주소)必须是该 SMTP 账号有权发送的地址。主题(제목)和正文(본문)中也可以使用 {code}{minutes}

用户管理

  • 退出所有设备모든 기기 로그아웃):断开该账号的所有登录(授权密钥)。用于丢失了设备的用户。
  • 封禁号码번호 차단):该号码将无法接收验证码,该号码的账号会立即在所有设备上退出登录。与设置标签页中的封禁手机号码(전화번호 차단)列表相同。
  • 登录邮箱로그인 이메일):在电子邮件方式下,已有账号要通过电子邮件登录时需要它。
  • @BotFather 是服务器内置的机器人,不能对它执行退出登录。

机器人管理

在机器人()标签页中可以查看每个机器人的连接方式——是否通过 MTProto 连接,最近 1 分钟内是否通过 HTTP 调用过 getUpdates,Webhook 地址是什么以及当前是否正在失败(包括原因)。如果等待中的更新数持续增加,说明机器人程序已经停止,或者 Webhook 正在失败。删除机器人和重新签发令牌,由创建该机器人的人在 @BotFather 中操作。

环境变量

服务器先读取配置文件(server-config.json),然后用环境变量覆盖。运营用的 Compose 文件会设定下列值,因此通常只需修改 .env

变量含义运营 Compose 中的值
TELEGRAM_PORTMTProto 端口MTPROTO_PORT(8443)
TELEGRAM_HOSTMTProto 监听的地址0.0.0.0
TELEGRAM_PUBLIC_HOST告知应用的服务器地址(help.getConfigPUBLIC_IP
TELEGRAM_WEB_PORT网站、文档、Bot API、管理页面的端口8080
TELEGRAM_WEB_HOST该端口监听的地址。默认为 127.0.0.10.0.0.0(容器内。在主机上只以 127.0.0.1 公开)
TELEGRAM_PUBLIC_URL网站地址。用于链接(me_url_prefix)、邀请链接、文档示例、预览图片https://DOMAIN/
TELEGRAM_DATA_DIR照片、admin-token、operations.json 的位置/app/data
TELEGRAM_RSA_KEY服务器 RSA 私钥的路径(不存在时首次启动会生成,公钥为 .pub/app/keys/private.pem
TELEGRAM_DC_ID这台服务器的 DC 编号(镜像默认值 1)
TELEGRAM_DB_TYPEmemory · h2 · postgresqlpostgresql
TELEGRAM_DB_URL, TELEGRAM_DB_USERNAME, TELEGRAM_DB_PASSWORDJDBC 连接jdbc:postgresql://pabal-postgres:5432/pabal, pabal, POSTGRES_PASSWORD
TELEGRAM_DB_MAX_POOL_SIZE数据库连接数20
TELEGRAM_ADMIN_TOKEN管理页面令牌(留空时在 data/admin-token 中生成)ADMIN_TOKEN
TELEGRAM_TEST_NUMBERS+99966… 测试号码。仅限开发false
TELEGRAM_WEBHOOK_ALLOW_LOCAL允许机器人 Webhook 使用 http:// 和内部地址。仅限开发(未设置 = false)
JAVA_OPTSJVM 选项(内存).env 中的值

数据文件

文件内容权限
keys/private.pem服务器 RSA 私钥。绝不外传600
keys/private.pem.pub公钥。用于构建应用和 /docs/server-key.pem
data/admin-token管理页面令牌600
data/operations.json设置标签页中的值——注册规则、短信和 SMTP 的机密值、封禁的号码600
data/media/照片原图
PostgreSQL events账号、对话、消息、登录、机器人、Webhook 设置——所有变更的记录

安全备忘

  • 不要把管理端口直接开放到互联网上。运营配置中的 Caddy 会以 404 拦截 /admin/health/metrics 等管理路径。
  • 所有管理数据请求都需要 Authorization: Bearer <令牌>,其他网站的页面无法读取这些数据。
  • 短信和 SMTP 的机密值只保存在 operations.json 中,界面和 API 只会告知“已保存”。机密值输入框留空保存时,会保留原来的值。
  • 令牌和机密值不会写入日志,日志中的手机号码会做遮盖处理。Bot API 地址(包含令牌)也不会写入日志。
  • 授权密钥保存在数据库中,因此能够访问数据库的人就能解密用户流量。请像保护 RSA 密钥一样保护数据库和备份。

限制

  • 等待中的验证码和最近记录保存在内存中,服务器重启后会丢失(在应用中重新请求即可)。
  • 短信服务商的实际发送效果,需要用各服务商的账号来确认。服务器按照各服务商的文档来构造请求。
  • 尚未提供的功能:删除账号、强制删除机器人、查看消息、查看日志、图表。