跳转到内容

Admin 部署与运维

本文档介绍 Admin 服务的部署方式、运维操作和故障排查方法。

使用 docker-compose.yml 中的 admin-server 服务:

admin-server:
build:
context: .
dockerfile: Dockerfile
container_name: rtc-full-admin-server
command: ["./rtc-agent", "admin", "serve"]
env_file:
- .env
environment:
DEBUG__ENABLED: "true"
ports:
- "28081:8081"
volumes:
- ./etc/admin.docker.yaml:/app/etc/admin.yaml:ro
- full-admin-server-keys:/app/etc/keys
depends_on:
migrate:
condition: service_completed_successfully
postgres:
condition: service_healthy
redis:
condition: service_healthy
restart: unless-stopped

关键依赖:

  • migrate:数据库迁移必须在 Admin 启动前完成
  • postgres:共享数据库
  • redis:用于速率限制、登录保护、OTP 存储、策略同步
终端窗口
# 1. 生成 JWT 密钥对
rtc-agent admin keygen
# 2. 创建配置文件
cp etc/admin.example.yaml etc/admin.yaml
# 编辑 etc/admin.yaml 配置数据库、Redis、SMTP 等
# 3. 运行数据库迁移(如果尚未运行)
rtc-agent migrate
# 4. 启动 Admin 服务
rtc-agent admin serve
配置项说明默认值
server.host监听地址0.0.0.0
server.port监听端口8081
server.env运行环境(development/production)development
配置项说明
database.dsnPostgreSQL 连接字符串
配置项说明默认值
redis.addrRedis 地址localhost:6379
redis.passwordRedis 密码空
redis.dbRedis 数据库编号0

注意:Redis 是可选的,但以下功能需要 Redis:

  • JWKS 缓存
  • 分布式速率限制
  • 登录保护
  • OTP 存储
  • 策略同步(多实例部署)
配置项说明默认值
jwt.algorithm签名算法(RS256/ES256/EdDSA)RS256
jwt.issuerToken 签发者http://localhost:8081
jwt.audienceToken 受众(RTC Server 地址)http://localhost:8888
jwt.private_key_path私钥路径etc/keys/admin-private.pem
jwt.public_key_path公钥路径etc/keys/admin-public.pem
jwt.access_token_ttlAccess Token 有效期(秒)3600
jwt.refresh_token_ttlRefresh Token 有效期(秒)604800
配置项说明默认值
security.rate_limit_per_minute每分钟最大请求数100
security.login_max_attempts最大登录失败次数5
security.login_lock_duration账户锁定时长(秒)900
security.cookie_secureCookie Secure 标志(HTTPS 环境启用)true
配置项说明示例
email.smtp_hostSMTP 服务器smtp.qq.com
email.smtp_portSMTP 端口587
email.smtp_userSMTP 用户名通过环境变量 EMAIL__SMTP_USER 设置
email.smtp_passwordSMTP 密码通过环境变量 EMAIL__SMTP_PASSWORD 设置
email.from_address发件人地址admin@example.com
email.from_name发件人名称RTC Agent
配置项说明默认值
otp.ttl验证码有效期(秒)300
otp.length验证码位数6
otp.send_cooldown发送冷却时间(秒)60
otp.max_send_per_ip每 IP 每分钟最大发送次数5
otp.max_verify_attempts最大验证失败次数5
otp.lock_duration锁定时长(秒)900
配置项说明默认值
features.permission_system启用 Casbin RBAC 权限系统true
features.password_enabled启用密码登录(生产环境建议关闭)false
配置项说明
prometheus_urlPrometheus 地址
grafana_urlGrafana 地址
jaeger_urlJaeger 地址
pyroscope_urlPyroscope 地址
终端窗口
# 生成默认 RS256 密钥
rtc-agent admin keygen
# 生成 ES256 密钥
rtc-agent admin keygen --algorithm ES256
# 生成到指定目录
rtc-agent admin keygen --output-dir /app/etc/keys
# 强制覆盖现有密钥
rtc-agent admin keygen --force

密钥文件:

  • admin-private.pem:私钥(必须保密)
  • admin-public.pem:公钥(用于验证 Token)

首次部署后,需要创建管理员账户才能登录 Admin UI。

终端窗口
# 基本用法
rtc-agent admin account create --email admin@example.com --password your-password
# 指定显示名称
rtc-agent admin account create --email admin@example.com --password your-password --name "管理员"
# 创建并绑定角色
rtc-agent admin account create --email admin@example.com --password your-password --name "管理员" --role admin

参数说明:

参数必填说明
--email是管理员邮箱
--password是登录密码
--name否显示名称
--role否绑定的角色名(admin/operator/viewer)

输出示例:

✅ Admin user created successfully!
Email: admin@example.com
Name: 管理员
ID: 550e8400-e29b-41d4-a716-446655440000
Binding role: admin
✅ Role bound successfully: admin
Please restart the server to reload permissions.

注意:绑定角色后需要重启 Admin Server 才能加载新权限。

如果创建账户时未指定角色,或需要后续添加角色:

终端窗口
rtc-agent admin account bind-role --email admin@example.com --role admin

可用角色:

角色权限
admin所有权限(完全控制)
operator运维权限(用户管理、配置修改)
viewer只读权限(查看监控、日志)

输出示例:

✅ Found admin user: admin@example.com (ID: 550e8400-e29b-41d4-a716-446655440000)
✅ Found role: admin (ID: role-uuid)
✅ Created admin_user_role record
✅ Added Casbin grouping policy
Success! Admin user admin@example.com now has role: admin
Please restart the server to reload permissions.
终端窗口
# 进入 admin-server 容器执行
docker compose exec admin-server ./rtc-agent admin account create \
--email admin@example.com \
--password your-password \
--name "管理员" \
--role admin
终端窗口
# 检查服务状态
curl http://localhost:28081/ready
# 正常响应
{"status":"ready"}
# 降级模式
{"status":"degraded","error":"bootstrap failed — default roles may be missing"}
终端窗口
# Docker 环境
docker logs rtc-full-admin-server
# 实时日志
docker logs -f rtc-full-admin-server
终端窗口
# Docker 环境
docker restart rtc-full-admin-server
# 查看状态
docker ps | grep admin-server

Admin 服务支持多实例部署,但需要 Redis 支持:

environment:
INSTANCE_COUNT: "2" # 实例数量

多实例依赖 Redis 的功能:

  • 分布式速率限制
  • 登录保护同步
  • OTP 存储同步
  • Casbin 策略同步

警告:如果多实例部署没有 Redis,这些功能将降级为单实例内存模式,各实例间数据不一致。

问题可能原因解决方案
database connection failed数据库未启动或配置错误检查 database.dsn 配置
redis unreachableRedis 未启动检查 redis.addr 配置,Redis 是可选的
jwt signer init failed密钥文件不存在运行 rtc-agent admin keygen
bootstrap failed数据库迁移未完成先运行 rtc-agent migrate
问题可能原因解决方案
OTP send failedSMTP 配置错误检查 email.* 配置
account locked登录失败次数过多等待锁定期结束(默认 15 分钟)
invalid tokenJWT 密钥不匹配确认 Admin 和 RTC Server 使用正确的密钥
问题可能原因解决方案
permission denied角色未分配或策略缺失检查 Casbin 角色和策略配置
bootstrap degraded默认角色未创建检查启动日志,确认数据库迁移完成