跳到主要内容

环境变量

环境变量​

变量名默认值描述
PORT11000网关服务端口号
SECRETtailchat加密秘钥, 用于JWT. 生产环境必须设置为足够长的随机字符串, 默认值是公开的, 不修改的话任何人都可以伪造用户Token
STATIC_HOST"{BACKEND}"对外可访问的静态服务主机,用于文件服务访问, 默认为动态根据前端请求推断出的服务端地址,如果期望存储在第三方OSS中需要进行修改
STATIC_URL"{BACKEND}/static/"对外可访问的静态服务完整地址前缀,用于文件服务访问, 默认为动态根据前端请求推断出的服务端地址,如果期望存储在第三方OSS中需要进行修改, 如果设置了本变量则上面的 STATIC_HOST 值无效
API_URLhttp://127.0.0.1:11000对外可访问的url地址,用于开放平台的issuer签发或者作为文件服务的fallback
MONGO_URL-数据库服务地址
REDIS_URL-Redis服务地址
REGISTER_IP_LIMIT_PER_HOUR3同一 IP 每滚动小时的注册尝试上限,必须为正整数
REGISTER_IP_LIMIT_PER_DAY10同一 IP 每滚动 24 小时的注册尝试上限,必须为正整数
MINIO_URL-文件服务地址(minio)
MINIO_USER-文件服务用户名
MINIO_PASS-文件服务密码
MINIO_BUCKET_NAMEtailchat文件服务存储桶名
MINIO_PATH_STYLE"Path"是否使用路径形式的s3通信格式, Path 为 Path Style, VirtualHosted 为 Virtual hosted style
MINIO_SSLfalse是否使用加密连接文件存储服务, 如果为 "1" 或者 "true" 则使用SSL协议
SMTP_SENDER-邮件服务发件人(示例: "Tailchat" example@163.com)
SMTP_URI-邮件服务连接地址(示例: smtp://username:password@smtp.example.com/?pool=true)
FILE_LIMIT1048576文件/图片上传的大小限制,默认为1m,请输入数字,(单位: 字节)
EMAIL_VERIFY-是否开启邮箱校验, 如果为 "1" 或者 "true" 则在注册时增加邮箱校验控制
REQUEST_TIMEOUT10000请求超时毫秒数,请求超过该时间没有完成会抛出 RequestTimeout 错误。 如果需要禁用请求超时限制传:0
TIANJI_SCRIPT_URL-Tianji 脚本 URL,如需监控 Tailchat 用户使用情况,可在天际网站代码模式中获取 (例如:https://tianji.example.com/tracker.js)
TIANJI_WEBSITE_ID-Tianji 网站 id
DISABLE_MESSAGEPACK-是否禁用 openapi 的 sockio 使用 messagepack 作为 解析器, 如果为 "1" 或者 "true" 则禁用该功能
DISABLE_LOGGER-是否禁用日志输出, 如果为 "1" 或者 "true" 则在运行中关闭日志
DISABLE_TRACING-是否禁用Tracing功能(开启可以节约大量日志), 如果为 "1" 或者 "true" 则在运行中关闭日志
DISABLE_USER_REGISTER-是否关闭用户注册功能, 如果为 "1" 或者 "true" 则关闭该功能
DISABLE_GUEST_LOGIN-是否关闭用户游客登录功能, 如果为 "1" 或者 "true" 则关闭该功能
DISABLE_CREATE_GROUP-是否关闭用户创建群组功能, 如果为 "1" 或者 "true" 则关闭该功能
DISABLE_PLUGIN_STORE-是否隐藏用户插件中心功能, 如果为 "1" 或者 "true" 则关闭该功能
DISABLE_ADD_FRIEND-是否隐藏用户添加好友功能, 如果为 "1" 或者 "true" 则关闭该功能
DISABLE_TELEMETRY-是否关闭遥测报告功能, 遥测是完全匿名的,如果为 "1" 或者 "true" 则关闭该功能

部分环境变量示例可见: https://github.com/msgbyte/tailchat/blob/master/server/.env.example

注册 IP 限制与反向代理​

普通注册和游客注册共用 Redis 配额,默认每个 IP 每滚动小时最多尝试 3 次、每滚动 24 小时最多尝试 10 次。IPv4 映射形式的 IPv6 地址与对应 IPv4 共用配额,同一 /64 内的 IPv6 地址共用配额。同一 NAT 出口的用户也会共用配额,请根据部署场景调整。无效的限制数值会阻止服务启动。

服务在密码哈希计算和数据库写入前依次检查小时、每日配额。通过某个窗口检查后,即使后续检查或注册失败,也不会退还该窗口配额。删除账号同样不会恢复配额。超限返回 HTTP 429(REGISTER_IP_LIMITED),包含 retryAfterMs 和 windowSeconds;缺少 IP 元数据或 Redis 不可用时返回 503 并暂停注册。内部调用 user.register 或 user.createTemporaryUser 也必须提供有效的 meta.ip;内置 CLI 使用回环地址。

注册限流与最后登录 IP 记录使用相同的 IP 来源:优先取 X-Forwarded-For 的第一个地址,其次取 X-Real-IP,最后取连接对端 IP。Socket.IO 使用同样的规则。反向代理必须清理客户端提供的转发头,且后端仅允许通过该代理访问,避免客户端自行选择用于配额计数的 IP。

所有副本必须共用 Redis,并配置相同的限制值、API_URL、broker namespace 和缓存前缀。配额按缓存前缀、namespace 和 API_URL 隔离;共用 Redis 的不同部署必须使用不同值,或使用独立 Redis 数据库。计时与单次配额占用均由 Redis 原子完成。修改配置后重启所有副本;修改限制值会为对应窗口启用新配额,旧键在最后使用后最多 24 小时过期。Redis 数据丢失或清空缓存会重置配额,因此重启部署时应保留 Redis 数据。

使用文件进行配置环境变量​

  • 如果是本地方式启动,请复制 .env.example 到 .env 然后进行编辑

    mv .env.example .env
    vi .env
  • 如果是 docker-compose 启动,可以直接编辑 docker-compose.env, 改动后直接使用 docker compose up -d 即可生效

关于带空格的环境变量的使用​

如果你的环境变量值包含空格,为了让系统能够识别这是一个完整的字符串而不是把空格视为分隔符。你需要在外部包一层双引号。

如下:

SMTP_SENDER="\"Tailchat\" example@163.com" # 如果有重复的双引号需要使用转义符对其进行转义

警告

部分环境变量修改可能需要清理缓存后才能生效

如何清理缓存​

一些环境变量的改动可能涉及到缓存的更新,如 FILE_LIMIT, 因为配置信息是需要发送到客户端的。

因此可能会出现修改环境变量后在客户端上的表现还是和以前一样的情况。这时候你需要清空旧的缓存来让更新生效。

以下有几种方案可以清理缓存:

  • docker compose down 后执行 docker compose up -d. 这是因为 redis 服务的数据并没有被持久化,把服务关了再重启相当于一个全新的环境
  • 手动进入 redis 服务清理名称包含 config.client 的缓存项,这里面包含了返回给客户端的配置项
  • 进入 admin 管理后台的缓存管理页面。点击清理配置缓存按钮