You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

173 lines
7.4 KiB

tag: "${CLUSTER_TAG:-voitrans-a11}" #服务集群标签,按 .env 的 CLUSTER_TAG 隔离不同部署
type: "home"
version: 1.0
exte: #RPCX 相关配置
Port: 7002
Addr: 127.0.0.1:7002
ETCDServers: ["${ETCD_SERVERS:-etcd:2379}"]
UpdateInterval: 5
sys:
log:
FileName: "./log/home.log"
Loglevel: 5
MaxAgeTime: 7
IsDebug: ${LOG_DEBUG:-false}
nats: #统计快照管道(推送到 console 统计消费端);连不上不阻断业务
URL: "${NATS_URL:-nats://nats:4222}"
Name: "home"
MaxReconnects: -1
ReconnectWait: 2
# 敏感词过滤:默认【全部注释掉 = 不加载任何词库】。
# ⚠️ 这些 txt 不在 git 里,要用就得自己放到部署目录的 wordfilter/ 下(会随工作目录挂进容器 /app)。
# 列表里只要有一个文件在服务器上不存在,home 就会 `panic: init sys.wordfilter err: no found file:...`
# → entrypoint 杀掉整个容器 → 无限重启;而表象常常是 api 报「Table 'xxx.userdevice' doesn't exist」
# (建表由 home 里的 user 模块负责,home 起不来自然没表)。2026-08-18 部署 ym 时踩过这个坑。
wordfilter:
WorldFile:
# - ./wordfilter/暴恐词库.txt
# - ./wordfilter/补充词库.txt
# - ./wordfilter/反动词库.txt
# - ./wordfilter/非法网址.txt
# - ./wordfilter/广告类型.txt
# - ./wordfilter/老版本词库.txt
# - ./wordfilter/零时-Tencent.txt
# - ./wordfilter/民生词库.txt
# - ./wordfilter/色情词库.txt
# - ./wordfilter/色情类型.txt
# - ./wordfilter/涉枪涉爆.txt
# - ./wordfilter/贪腐词库.txt
# - ./wordfilter/网易前端过滤敏感词库.txt
# - ./wordfilter/新思想启蒙.txt
# - ./wordfilter/政治类型.txt
# - ./wordfilter/COVID-19词库.txt
# - ./wordfilter/GFW补充词库.txt
mysql: #业务库(用户/设备/统计/任务等 per-app 业务数据)
MySQLDsn: ${DB_ADMIN_DSN:-}
postgres: #公共库(厂家/产品/设备码/公码等跨 app 共享数据)
Dsn: ${DB_DEVICE_DSN:-}
ReadDsn: ${DB_DEVICE_READ_DSN:-} #只读副本,填了就开读写分离;不填=单库
MaxPoolSize: 5
redis:
Addr: ["${REDIS_ADDR:-redis:6379}"]
Password: ${REDIS_PASSWORD:-}
DB: ${REDIS_DB:-1}
KeyPrefix: ${REDIS_KEY_PREFIX:-Voitrans} #key 应用分组前缀
sms: #短信服务(服务商 tencent | aliyun,留空按 tencent;也可在 console 后台「业务功能配置」里改,改完热生效)
Provider: "tencent"
#腾讯云
AppId: "1400971698"
SecretId: ""
SecretKey: ""
#阿里云(Provider=aliyun 时用;RegionId 留空默认 cn-hangzhou,TemplateParamName 留空默认 code)
AccessKeyId: ""
AccessKeySecret: ""
RegionId: ""
TemplateParamName: ""
#两家共用:签名与模板须按所选服务商填(腾讯 TemplateId / 阿里 TemplateCode)
SignName: "深圳市创想云启"
Template1: "2397800"
Template2: "2385564"
google: #需放置 ./smart-bluetooth-447104-2b269474bd72.json
JsonPath: ./smart-bluetooth-447104-2b269474bd72.json
deepseek:
Appkey: ""
email:
EmailType: 1
FromEmail: liwei@yunqiinnovation.com
FromName: DeepSound
Password: ""
firebase_auth: #需放置对应 json
ApiKeyFile: ./deepsound-e0e3d-firebase-adminsdk-fbsvc-269043a0f8.json
google_auth: #需放置对应 json
ApiKeyFile: ./deepsound-e0e3d-firebase-adminsdk-fbsvc-269043a0f8.json
facebook_auth:
AppID: "3829022037361855"
AppSecret: ""
wechat_auth:
AppID: wx4b5ec8957ad5e425
AppSecret: ""
musicobj:
ApiBaseUrl: https://hw.music.voitrans.net
cos:
SecretID: ""
SecretKey: ""
AppId: "1253517901"
Region: ap-guangzhou
BucketName: "deepsound-1253517901"
BucketURL: "https://deepsound-1253517901.cos.ap-guangzhou.myqcloud.com"
wechatpay: #微信支付,需放置 ./apiclient_key.pem
# 键名必须与 comm.ModuleCatalog 里 wechatpay 的 Key 逐字符一致(AppID/MchID,结尾大写 ID),
# 否则 seedModuleRows 的 sec[f.Key] 查不到,这两个字段永远不入库、后台显示为空。
AppID: wx4b5ec8957ad5e425
MchID: "1719983673"
ApiV3Key: ""
PrivateKeyPath: ./apiclient_key.pem
CertSerialNo: "2D27CEB52B98DDEB1CC65E4D96A041E7408F58D0"
alipay: #支付宝支付
AppID: "2021005135671159"
PrivateKey: ""
PublicKey: ""
paypal: #沙盒;正式环境换 ClientID/Secret/BaseURL/WebhookID
ClientID: ""
Secret: ""
BaseURL: https://api-m.sandbox.paypal.com
WebhookID: ""
appleiap: #苹果内购
AppStoreIssuerID: ""
AppStoreKeyID: ""
AppStorePrivateKeyPEM: ""
AppStoreBundleID: com.saitong.voitrans
UseSandbox: true
googleiap:
ServiceAccountJSON: ""
doubao: #allhelp 模块 AI 总结用
Apikey: ""
Model: "doubao-1-5-pro-32k-250115"
ipinfo: #需放置 confs/ip2region_v4.xdb 与 v6.xdb
V4XdbPath: "./confs/ip2region_v4.xdb"
V6XdbPath: "./confs/ip2region_v6.xdb"
CachePolicy: "vindex"
Searchers: 10
ali_filetrans:
ApiKey: ""
modules:
analyze: #平台统计模块(推送快照到 console)
AppName: "${ANALYZE_APP_NAME:-voitrans-a11}" #须与 console 注册表中的应用名完全一致,否则不落库
Region: ${ANALYZE_REGION:-1} #本部署所属区域,取值见 pb.Region
SyncInterval: 600
Subject: "stats.event" #须与 console 端 Stat.Subject 一致
Timezone: "Asia/Shanghai"
user:
Debug: ${LOG_DEBUG:-false}
AvatarUrl: "https://api.ideapsound.com/avatar/"
TokenKey: "${GATEWAY_TOKEN_KEY:-}"
# ⚠️ 签发 MCP 会话令牌用,必须与 mcp.yaml 的 McpTokenKey 同值
# (两边都读 .env 的 MCP_TOKEN_KEY)。留空则 user_getmcptoken 直接报错,
# EMAI 那边查会议纪要/待办的 MCP 工具会全部返回「身份校验失败」。
# 刻意不复用 TokenKey:这个令牌要经过百炼(第三方)之手。
McpTokenKey: "${MCP_TOKEN_KEY:-}"
CBCKey: ""
allhelp:
max_summary_process: 5
memory: #记忆中心(拾忆):闹钟/待办/灵感/花销统一存储 + 周报月报
Debug: ${LOG_DEBUG:-false}
max_report_process: 3 #报告生成 worker 数
report_min_items: 3 #上周期至少这么多条记录才生成报告(当前唯一的成本闸门)
# ⚠️ cron 走的是容器时区,恒为 Asia/Shanghai(Dockerfile 与本 compose 都设了 TZ),
# 对所有区域所有用户都是北京时间。海外用户的「上周」边界会偏,详见记忆中心设计文档 §5.3。
report_cron_week: "0 30 0 ? * MON" #每周一 00:30 生成上周报告
report_cron_month: "0 30 0 1 * ?" #每月 1 号 00:30 生成上月报告
report_stale_sec: 900 #报告卡在待生成/生成中超过这么久,由 memory_getreport 补偿重新入队
meeting_extract: true #会议纪要生成后自动抽取待办(失败只记日志,不影响纪要)
echomeet: #会议记录:识别/翻译/总结服务不再走 yaml——全部由后台「会议记录服务」编排
# (console 共享库 echomeet_orch + 服务池 svc_config)配置,运行时直读 + NATS 热重载。
# 部署身份与解密密钥由 .env 注入:ANALYZE_APP_NAME / ANALYZE_REGION / FIELD_ENCRYPT_KEY。
Debug: ${LOG_DEBUG:-false}
pay:
Debug: ${LOG_DEBUG:-false}
WxAppId: "wx5bbb7be9324f3e2d"
WxAppSecret: ""
WxMchId: "1652202222"
WxPayPayKey: ""