Skip to content

配置项 ​

GOSpeak 全部靠环境变量配置,没有独立的配置文件。改完重启进程生效。

只有一份配置文件:deploy/.env(由 deploy/.env.example 复制或 deploy/init.sh 生成)。

场景怎么读到
Docker Composecompose 变量替换 + 应用容器 env_file 注入
本地开发 pnpm dev:server启动时自动向上查找仓库根的 deploy/.env
直接跑二进制 server -e prod同上;也可用 GOSPEAK_ENV_FILE=/path/to/env 显式指定

不需要再维护 app/server/.env、.env.dev、.env.prod——这些已废弃。

必填项 ​

这些不填就跑不起来,或者跑起来但功能残废:

变量说明
JWT_KEY签发登录令牌的密钥。生产必须换成随机值:openssl rand -hex 32
LIVEKIT_HOST后端访问 LiveKit 的地址(admin API)。容器部署 ws://livekit:7880,云服务 wss://xxx.livekit.cloud
LIVEKIT_PUBLIC_URL下发给浏览器的连接地址,必须浏览器可达(如 wss://lk.example.com)。留空回退到 LIVEKIT_HOST
LIVEKIT_KEYLiveKit 的 API Key
LIVEKIT_SECRETLiveKit 的 API Secret,必须和 LiveKit 那边一致
STORAGE_ENCRYPT_KEY生产环境必填,64 位十六进制。用来加密存储配置里的敏感字段

数据库 ​

变量默认说明
DB_TYPESQLiteSQLite / PostgreSQL / MySQL
DB_PATHdb/app.dbSQLite 文件位置,其他类型忽略
DB_WALfalseSQLite 开 WAL 模式,并发读更好,建议开
DB_HOST—非 SQLite 必填
DB_PORT—PostgreSQL 填 5432,MySQL 填 3306
DB_USER—数据库用户
DB_PASSWORD—数据库密码
DB_DSN—想自己写完整连接串就用这个,会覆盖上面几项

表结构由 GORM 自动迁移,启动时自动建表、加字段,不用手动跑 SQL。

语音 ​

变量默认说明
SFU_PROVIDERlivekit目前只支持这个值
LIVEKIT_HOST—见上
LIVEKIT_PUBLIC_URL—见上
LIVEKIT_KEY—见上
LIVEKIT_SECRET—见上

也可以在管理后台的「SFU 管理」里改,改完存数据库,会覆盖环境变量。适合不想重启的场景。

存储 ​

上传的头像、附件、表情图存哪儿。

变量默认说明
STORAGE_TYPElocallocal 存本机磁盘,s3 存对象存储
STORAGE_LOCAL_DIRuploadslocal 模式的落盘目录
STORAGE_ENDPOINT—S3 端点,如 RustFS、R2、MinIO
STORAGE_BUCKET—桶名
STORAGE_REGION—区域,部分服务商需要
STORAGE_ACCESS_KEY—Access Key
STORAGE_SECRET_KEY—Secret Key,会加密存储
STORAGE_PATH_PREFIXuploads/对象键前缀
STORAGE_PUBLIC_BASE_URL—走 CDN 时填 CDN 地址
STORAGE_ENCRYPT_KEY—加密上面那些密钥用,生产必填

邮件 ​

用于注册验证码、找回密码。不开也能用,只是这些功能不可用。

变量默认说明
EMAIL_ENABLEDfalse总开关
SMTP_HOST—SMTP 服务器
SMTP_PORT587端口
SMTP_USERNAME—账号
SMTP_PASSWORD—密码
SMTP_FROM—发件地址
SMTP_FROM_NAMEGoSpeak发件人显示名
EMAIL_CODE_TTL10m验证码有效期
EMAIL_SEND_COOLDOWN60s同一邮箱两次发送的间隔
EMAIL_CODE_SECRET—验证码签名密钥

服务 ​

变量默认说明
SERVER_PORT8998后端监听端口
APP_ENV—dev / prod,影响日志与安全默认值
CORS_ORIGIN*允许的跨域来源,生产建议填前端域名
STATIC_DIR—用外部目录的前端文件覆盖二进制内嵌的那份

日志 ​

变量默认说明
LOG_LEVEL—debug / info / warn / error
LOG_FORMAT—json 便于日志系统采集,text 便于人看
LOG_OUTPUTstdoutstdout 或 file
LOG_FILElogs/app.logLOG_OUTPUT=file 时的路径
LOG_CALLERfalse日志里带文件名和行号

事件总线 ​

内部事件、JWT 黑名单、密钥轮换、异步任务都跑在进程内的 NATS 上。不需要也不能配外部 NATS。

变量默认说明
NATS_SUBJECT_PREFIXgospeak主题与 KV 桶的前缀,多实例共用一个 NATS 时才需要区分
NATS_CONNECT_TIMEOUT2s连接超时

令牌 ​

变量默认说明
JWT_KEY_TTL24h签名密钥轮换周期

常见配置组合 ​

本地开发,用本机 LiveKit ​

ini
APP_ENV="dev"
DB_TYPE="SQLite"
DB_WAL="true"
JWT_KEY="dev-secret"
SFU_PROVIDER="livekit"
LIVEKIT_HOST="ws://localhost:7880"
LIVEKIT_KEY="devkey"
LIVEKIT_SECRET="devsecret"
STORAGE_TYPE="local"

小团队自建,单机 ​

ini
APP_ENV="prod"
DB_TYPE="SQLite"
DB_WAL="true"
JWT_KEY="<openssl rand -hex 32>"
SFU_PROVIDER="livekit"
LIVEKIT_HOST="ws://livekit:7880"          # 后端访问,走容器内网
LIVEKIT_PUBLIC_URL="wss://lk.example.com"  # 下发给浏览器,必须公网可达
LIVEKIT_KEY="<随机>"
LIVEKIT_SECRET="<随机>"
STORAGE_TYPE="local"
STORAGE_ENCRYPT_KEY="<64 位 hex>"
CORS_ORIGIN="https://voice.example.com"

用 LiveKit 云服务 ​

ini
SFU_PROVIDER="livekit"
# 云服务场景下后端与浏览器访问同一地址,PUBLIC_URL 留空即回退
LIVEKIT_HOST="wss://your-project.livekit.cloud"
LIVEKIT_KEY="APIxxxxxxxx"
LIVEKIT_SECRET="xxxxxxxx"

本地不用跑 Docker,只起应用就行。

改完不生效? ​

  • Docker 部署:docker compose up -d 会重建容器读新环境变量,只 restart 不行
  • 直接跑二进制:必须重启进程
  • 管理后台改的 SFU / 存储配置存在数据库里,优先级高于环境变量,想恢复环境变量配置得去后台清掉

下一步 ​

基于 Apache 2.0 许可开源