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:-}" 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: ""