Browse Source

优化部署脚本

main
liwei1dao 4 months ago
parent
commit
1b2f74e0c0
  1. 7
      apps/services/services/timer/main.go
  2. 3
      deploy/.gitignore
  3. 16
      deploy/voitrans/confs/api.yaml.example
  4. 4
      deploy/voitrans/confs/gateway.yaml.example
  5. 206
      deploy/voitrans/confs/home.yaml
  6. 187
      deploy/voitrans/confs/home.yaml.example
  7. 16
      deploy/voitrans/confs/mcp.yaml.example
  8. 2
      deploy/voitrans/confs/timer.yaml.example
  9. 2
      deploy/voitrans/env/dev.env.example
  10. 2
      deploy/voitrans/env/japan.env.example
  11. 2
      deploy/voitrans/env/shanghai.env.example
  12. 2
      deploy/voitrans/env/singapore.env.example

7
apps/services/services/timer/main.go

@ -27,9 +27,10 @@ func main() {
rpcx.SetConfPath(*conf), rpcx.SetConfPath(*conf),
rpcx.SetVersion("1.0.0.0"), rpcx.SetVersion("1.0.0.0"),
) )
s.OnInstallComp( //装备组件 // timer 为定时任务服务,不接收网关 HTTP 路由(模块内无 IUserSession 处理函数),
services.NewHttpRouteComp(), // 因此不装 NewHttpRouteComp —— 否则 SCompHttpRoute.Init 会把本服务强转为 comm.IService
) // 而 *Service 未实现 GetUserSession/PutUserSession,启动即 panic。与 gateway/mcp 一致。
s.OnInstallComp() //装备组件(无)
lego.Run(s, //运行模块 lego.Run(s, //运行模块
timer.NewModule(), timer.NewModule(),
) )

3
deploy/.gitignore

@ -3,6 +3,9 @@
*/.env */.env
*/.env.infra */.env.infra
# 真实服务配置(含密钥 / DSN),勿提交;仓库只保留 confs/*.yaml.example 模板
*/confs/*.yaml
# 运行时日志 # 运行时日志
console/log/ console/log/
voitrans/log/ voitrans/log/

16
deploy/voitrans/confs/api.yaml → deploy/voitrans/confs/api.yaml.example

@ -14,19 +14,19 @@ sys:
MaxAgeTime: 7 MaxAgeTime: 7
IsDebug: ${LOG_DEBUG:-false} IsDebug: ${LOG_DEBUG:-false}
mysql: #业务库 mysql: #业务库
MySQLDsn: ${DB_ADMIN_DSN:-root:li13451234@tcp(mysql:3306)/voitrans?charset=utf8mb4&parseTime=True&loc=Local} MySQLDsn: ${DB_ADMIN_DSN:-}
postgres: #公共库 postgres: #公共库
Dsn: ${DB_DEVICE_DSN:-postgresql://postgres:postgres@127.0.0.1:5432/postgres?sslmode=disable} Dsn: ${DB_DEVICE_DSN:-}
ReadDsn: ${DB_DEVICE_READ_DSN:-} ReadDsn: ${DB_DEVICE_READ_DSN:-}
MaxPoolSize: 5 MaxPoolSize: 5
redis: redis:
Addr: ["${REDIS_ADDR:-redis:6379}"] Addr: ["${REDIS_ADDR:-redis:6379}"]
Password: ${REDIS_PASSWORD:-li13451234} Password: ${REDIS_PASSWORD:-}
DB: ${REDIS_DB:-1} DB: ${REDIS_DB:-1}
KeyPrefix: ${REDIS_KEY_PREFIX:-Voitrans} KeyPrefix: ${REDIS_KEY_PREFIX:-Voitrans}
cos: cos:
SecretID: AKID9F8qNiqlTzIMFwQ9rQxNcgYCdsukNmzA SecretID: ""
SecretKey: OYVGo8HEzWpvpfHgtfHfqpcDbnlY7Tdc SecretKey: ""
AppId: "1253517901" AppId: "1253517901"
Region: ap-guangzhou Region: ap-guangzhou
BucketName: "deepsound-1253517901" BucketName: "deepsound-1253517901"
@ -39,13 +39,13 @@ sys:
EmailType: 1 EmailType: 1
FromEmail: liwei@yunqiinnovation.com FromEmail: liwei@yunqiinnovation.com
FromName: DeepSound FromName: DeepSound
Password: eNdXWrjSQbdYtwbt Password: ""
modules: modules:
api: api:
TokenKey: "${GATEWAY_TOKEN_KEY:-asd123adqeqwe}" TokenKey: "${GATEWAY_TOKEN_KEY:-}"
AdninAccount: ${API_ADMIN_ACCOUNT:-admin} AdninAccount: ${API_ADMIN_ACCOUNT:-admin}
AdninPassword: "${API_ADMIN_PASSWORD:-123}" AdninPassword: "${API_ADMIN_PASSWORD:-}"
ConsolePort: 8080 ConsolePort: 8080
SiteName: "${API_SITE_NAME:-Voitrans}" #后台站点名称(不同环境可区分) SiteName: "${API_SITE_NAME:-Voitrans}" #后台站点名称(不同环境可区分)
CurrencyType: ${API_CURRENCY_TYPE:-0} #0=人民币(元) 1=美元(USD) CurrencyType: ${API_CURRENCY_TYPE:-0} #0=人民币(元) 1=美元(USD)

4
deploy/voitrans/confs/gateway.yaml → deploy/voitrans/confs/gateway.yaml.example

@ -18,11 +18,13 @@ sys:
modules: modules:
gateway: gateway:
ListenPort: 7100 ListenPort: 7100
TokenKey: "${GATEWAY_TOKEN_KEY:-asd123adqeqwe}" TokenKey: "${GATEWAY_TOKEN_KEY:-}"
EncryptKey: "${GATEWAY_ENCRYPT_KEY:-}" #v2 加密接口响应 AES key(16/24/32 字节),须与 Flutter ApiCrypto._key 一致;空=不加密
WhiteList: WhiteList:
- user_sgin - user_sgin
- api_getuser - api_getuser
- user_getappconfig - user_getappconfig
- user_getappconfigv2_v2
- user_getchannelapp - user_getchannelapp
- user_verification - user_verification
- public_info - public_info

206
deploy/voitrans/confs/home.yaml

@ -1,206 +0,0 @@
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 放入 deploy/voitrans/wordfilter/。无需要时整段删除即可。
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:-root:li13451234@tcp(mysql:3306)/voitrans?charset=utf8mb4&parseTime=True&loc=Local}
postgres: #公共库(厂家/产品/设备码/公码等跨 app 共享数据)
Dsn: ${DB_DEVICE_DSN:-postgresql://postgres:postgres@127.0.0.1:5432/postgres?sslmode=disable}
ReadDsn: ${DB_DEVICE_READ_DSN:-} #只读副本,填了就开读写分离;不填=单库
MaxPoolSize: 5
redis:
Addr: ["${REDIS_ADDR:-redis:6379}"]
Password: ${REDIS_PASSWORD:-li13451234}
DB: ${REDIS_DB:-1}
KeyPrefix: ${REDIS_KEY_PREFIX:-Voitrans} #key 应用分组前缀
sms: #短信服务
AppId: "1400971698"
SecretId: "AKIDmiaJsJr6C8sPkt22xgFdswnTyHNG1c3J"
SecretKey: "BByYxDH9oIafXCmALJ5f4GGQWcaMwPta"
SignName: "深圳市创想云启"
Template1: "2397800"
Template2: "2385564"
google: #需放置 ./smart-bluetooth-447104-2b269474bd72.json
JsonPath: ./smart-bluetooth-447104-2b269474bd72.json
deepseek:
Appkey: sk-3adfd188a3134e718bbf704f525aff17
email:
EmailType: 1
FromEmail: liwei@yunqiinnovation.com
FromName: DeepSound
Password: eNdXWrjSQbdYtwbt
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: b7c9b0e5d2eafc9376152a5bc9cccc0a
wechat_auth:
AppID: wx4b5ec8957ad5e425
AppSecret: 9ceb39df312b3ba95a229b2aa0d15496
musicobj:
ApiBaseUrl: https://hw.music.voitrans.net
cos:
SecretID: AKID9F8qNiqlTzIMFwQ9rQxNcgYCdsukNmzA
SecretKey: OYVGo8HEzWpvpfHgtfHfqpcDbnlY7Tdc
AppId: "1253517901"
Region: ap-guangzhou
BucketName: "deepsound-1253517901"
BucketURL: "https://deepsound-1253517901.cos.ap-guangzhou.myqcloud.com"
wechatpay: #微信支付,需放置 ./apiclient_key.pem
AppId: wx4b5ec8957ad5e425
MchId: "1719983673"
ApiV3Key: "rV7cE1xZ9bN3mK5jH8gT0wQ2sF4dG6yU"
PrivateKeyPath: ./apiclient_key.pem
CertSerialNo: "2D27CEB52B98DDEB1CC65E4D96A041E7408F58D0"
alipay: #支付宝支付
AppID: "2021005135671159"
PrivateKey: MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCCNjHeCrB24HHGBoU3Vj/TxTxveW4pU4fktVSd5ZpACsU1vYO9VsBIiIDSOvIOTlsiXTS09940qc/6sgggyPard423Jxb/v+W9D0ZgKa/iMwdTJ2aTks1CCXyanIl3DSkyJrPfFlm2N/ZbPBvgup20QISQtnde1MRtPCMMyodDvvjkVzRYFfitzNS5fM85Ym7uKpfao32tYem0LKnMe8HUwp1AY41pzYDjzvSzWfYzOuLtvO/GnP3m8EAmGeY9WLkCU5BGNS8UJz6WcCZUqgkuAYoYjt0+qcPGIctU0RYs9KVcK1UGJs22GK6oxNHalbT2TluI8exaSDvNObMQmGJtAgMBAAECggEAAxt//SiMJYodrPgi3bs1MryWQKLJOjtAFvks18fO8pBPPIUVS8NyO0jmqh22ARllm2BWDauMpf0XdYgiIYYqPNVRkHliVyAhP23J5CmahO9q0VUzYXozY8wOKTJrJWgu/39k84H5ChwzyOGaWLabZN3VTA7OsnipZ2H0BC4hJEC1R/mJIybul7WveP1RlnYd5L9EwGqj/k0UQKeBfEltH/FBiiWlnukruxW9TjYxkydOsLB7rRYdnBCnVbdy65gi/XX/fIxVmNiHauzfO3yksktdS54VPmQHnrl0Xc38xThbbxGmMxRXuS1bZQwuxkz1iJsh4K0eKvCKFl5EnVWsgQKBgQD9bzuD7Pp1aMXHxS4REYk85TsT0peGbNFfBfKrDb42oirccELiIhKM6TDl7JGHQA3kY+wN4I8VONJFlxfjZ9neXbhZanLqNr3Z8OEjejJ7cN2+WWERIwGboaAEf5qqKFuk+hUKdoXnhFMwTnFJfUQr0EV9+aUHVKEYBK/2IFHCtQKBgQCDh6JhvPAD0b/RlzTJUnRPB2+ZCM0LZQ3VCUYVsdLrOBh+IMrv74oSDgTJYglJaOINmQKVCcVyeLahII6skOcwJrxzVOnbQowNAITWRd0BzNfqB/Sx11s5Xpomi39Uk8yeRHJmmGDudQguvJrtcQEH6QkdGZz2CSNe41LoN0Rb2QKBgFu76YUFQFtDQ2PeIaCYAl8CcnHoZmSH+vk0Q/RakyFfbbhBAlSsFJ7gwYxYJw0XyG+FI6qaP/BkkugRmtn7e0ccEWB8QYA5tFqw8C1RS/iWkA0YeSQk0a4twKggMDGrThDXXMpewHVe1mXD3wnEx+o8BwtkU7HlljIFcFPcuvuJAoGAMKuxB8+9VPx5qZn1O4YaaeALiKp8DXpgavOajo6VyNqiHZIO5khSZCnx1X9EhnicJYH4NaQ+/wPyOJ9ujCa2ldfPpjHGs47lei41+YAyrubZAs3c2y4goJMEIb0+6dIjRnF3j8VVIQgHdhvujGxjgETYTX9b2KM7BnLCDBHfZskCgYEA9Mz4RMZbmyqsZ1gtkioYmyn1MSaaVu/fMJzVwLyHi0TicXpG67kLM7KRBZq5tdySQUhq7ZVkQ+jwHxyuO9iJsKD5ye1KTgyRhh1URMe6/YLRf5170805XIfSFn0jLmQ6rWwaftcWaDp8OjMR/wJDHe6vJcqttle7IuJ6w481AQ8=
PublicKey: "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuLaTAzkBwcfy9Vg6Kj8NSNPQ5IeYyT+UKvOoPYiBw85SU7b8/gc1Lhgvo0DVfhM0MI67qf1GY69l3f6/f8mk6CcnhqC6iY0AcQnXqzQ4RBM/9s8/GCaqOohcv8LvLtbz+RlxIPu4dnTkrgEan7z+XZz7vUgHN7vQOcnPj/stfnxJeOANNLgCOYm/XDJZa8yV7lFux750d5+HE3m1jXXHAPTt0Pp+iHIzUZZkIEPaaz46tvoNi0cUf/+BJyq0DLIeWvTv2HpquVV3ZiiFYyjG3FnxWx+BFz/JCYfnPM31gQBt+EgwO3Oc9Kb5JetWrgmjgeoHwL6JIX3mCapZlJlxlwIDAQAB"
paypal: #沙盒;正式环境换 ClientID/Secret/BaseURL/WebhookID
ClientID: AUjApGHJm31MT101xA6koKAnZBZvo6ZxzRYAyXRXFQjlBYoj2i7Hg33clMIaIqyziFhmY0TX_EN_hgDL
Secret: EKlnsMTODfMFfOsnkfyifDRexw3dPk9Ldzv5b-a3Yu-Gq0cYFF7roQsrSaBv572kW9n_u25lHBDabemq
BaseURL: https://api-m.sandbox.paypal.com
WebhookID: 0PR35225Y36017238
appleiap: #苹果内购
AppStoreIssuerID: 96c4b3eb-5e5c-4719-8b07-db9cc4dc1f89
AppStoreKeyID: VS538D3ZR5
AppStorePrivateKeyPEM: |
-----BEGIN PRIVATE KEY-----
MIGTAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBHkwdwIBAQQgTadGz/swzKnpENyr
7JW6aH32ggaFCRKSakkoVPBc0PWgCgYIKoZIzj0DAQehRANCAASafAEhHQegdDNn
TE8bPW50cqrX+cFACKK5ZHoRbIYdp2BE3Ji8NSK7mE9avnLahGhyIfyTeSc7ZLyY
4WlcCJCm
-----END PRIVATE KEY-----
AppStoreBundleID: com.saitong.voitrans
UseSandbox: true
googleiap:
ServiceAccountJSON: |
{
"type": "service_account",
"project_id": "deepsound-451512",
"private_key_id": "56adf297cf60cfa27cd31c7b35db8678164fd311",
"private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCteoHZrBT5F82D\nbbCzDf7jlrtPLag5hZUiA50Ex4HjSQrRMi1z5a/Px6sP4/wMEj5K+huyvkRv1cGN\nFbSSMBo2HMnoQIVKHy0HTZ3g/oJxlHMeJDLz300pAfTAJx8qvauV5KD/Z0wWqrAE\nrdwiU6VZbFIoIb2XfIuB3U0v8FsaLX0+yUG+kuRWi+kKCOOPUNneS+Ppu6NGR+98\nyA94uVzBXkIdUieSpY4/6WznzeKR55UWcjsZ4EVqiZ1xoP0nduUces4Ph8kQkIEw\nX/albSUeX4yfHdKnEmQ+W1y9TfW5PSBKno452vkiI1ZivK6I2LrvCxINe8saCOko\ng8B5lTqzAgMBAAECgf8Om16Mg7frCIfTpaGtACtZqR6ONtgsOKFydKKLGc+dGsJA\nMGsxj+yTIHW4p+t0pvgmArBSXJaDDQrNSCMInefP+/Hn1U4Ofeba73U/Q70NYXKI\n3kqIdyh52bBQRMIiLIDwyME3atCLidO6H1tNT7245kmS3pnC0kgJUe5KU/KtJQPl\nHhO59v3HyBSNW5fBjj9KAoJlgLK7IAtDynupIkFik4Gt2nqI9F9wbmgwAtQx1HhT\n4mbvDEv+k/GmvZLd60lt/kM625HNnuYKm4NYzdTpk1ryERgvCpAwQj84CvWncqom\nb2RBY7SFbE//Twe8Cr7gIKmTWivyDMdp/JiPeIECgYEA2W/fcxTD143TfxEb5402\ne85XYpB8bWew4R7W888HE0BKQbGYQFi4Z3np5ogw9T3VqYd9ct5AeRq2u6ZM82OJ\n0sHxDybTzTDAPx7/ii6cz43zut2bXoEI2YyfguW+FsnVtH6ZM94DlnaUuvClbpHE\n7yWqdicT73yxQ3+T3HNfTiECgYEAzD7SYv3D4vGvgwon9rJ7+kw+KBHYeloXFu5q\n3Y6TnRLpvgxmNxEm/SYD/bRhWbsXONyPvoQiVl0v/BpKxIf4cS5OD2SikmAxfYDP\nSA7CVkrsmWwAqJiMi+yXAlq3+kmTJAjbSj1zkJjhE9BSTfeKIoo5OyLu0XsKbK+t\nyw1WJlMCgYEA2M9Ye6PE8/aTYSxqKqUAIstJDxsLNvwhvxfFNi7E20lLwd2X9vGA\nTo2d0SUTzDXwCq7zQ8qhdyBP/SSBrl8eWmzQNU99+igWSdpa7Co2ai8dTMMT3VPE\nw0gY9aintoli8isaEEHcSffLreuuyWXIfL2OD2o/0pj/GFLp2POhoIECgYEAy8P1\nE0uG7VgfuQUd37IrnAgKjuFW7qIInRkZRpbiz/c5eSBXraKQGkid/LPD18ien1z0\nj6a1tyHbKJF2fGIGy6vdtt+4jX4ogcRLh+Epovu21k14zrr6pPJRqcil+a8DfBTV\n6lgqflz3WFQieKR4jIMIG+Z7CkTNnqcaJRTWGP8CgYB5HpozVNaJDuokXobxx4dG\nTo2wUvC67EW8TtpI/GD6xS6h5n9ZAXr4e08pSnG5M3784N4mDFy83Z8nEpSPISC7\nCy+QEREzTRx6LBRMe79eqo79Y8CuHaZKnubB8xgc87zWEjufXxfe5gZX8hccTFUv\nhnIdLDXB7hgvboB/GzjJ8Q==\n-----END PRIVATE KEY-----\n",
"client_email": "deeapsound@deepsound-451512.iam.gserviceaccount.com",
"client_id": "104070580817776670469",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://oauth2.googleapis.com/token",
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
"client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/deeapsound%40deepsound-451512.iam.gserviceaccount.com",
"universe_domain": "googleapis.com"
}
doubao: #allhelp 模块 AI 总结用
Apikey: "55242c1c-204e-4e2a-ae75-faa846180682"
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: "sk-4598b2ed68e0484691b90da8c234b0f8"
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:-asd123adqeqwe}"
CBCKey: gDSiGlKJIGuu84ZNe+j4FQ==
allhelp:
max_summary_process: 5
echomeet: #会议记录:四套服务商各自的转写/翻译/总结配置
Debug: ${LOG_DEBUG:-false}
DefaultService: "Auto"
ByteDance:
Callback: ""
Transcribe:
AppID: "8595121680"
Token: "ERAUYbJQBOv6M0ooFnUwo-tTWs08HWZn"
Translate:
AccessKey: "AKLTZjJmODdkODQwN2RjNDcyMWI4NWM2ZWRmNDkxY2RiYzI"
SecretKey: "T0Roa09EZGlNalZpTjJObE5HVmlZMkV3WVRkbVpUTTBORGMzTW1FNFlqYw=="
Region: "cn-beijing"
Summary:
Apikey: "55242c1c-204e-4e2a-ae75-faa846180682"
Model: "doubao-1-5-pro-32k-250115"
Ali:
Callback: ""
Transcribe:
ApiKey: "sk-4598b2ed68e0484691b90da8c234b0f8"
Translate:
AccessKeyId: "LTAI5t9dLKEg8zHLbfZJcJZn"
AccessKeySecret: "8NicfnXpHSeQa6ARvCNzXsNqZe8wr1"
Region: "cn-hangzhou"
Summary:
BaseURL: "https://dashscope.aliyuncs.com/compatible-mode/v1"
Token: "sk-4598b2ed68e0484691b90da8c234b0f8"
Model: "qwen-plus"
Google: #需放置 ./smart-bluetooth-447104-2b269474bd72.json
Transcribe:
JsonPath: ./smart-bluetooth-447104-2b269474bd72.json
Translate:
JsonPath: ./smart-bluetooth-447104-2b269474bd72.json
Summary:
Apikey: "AQ.Ab8RN6Iek4x3Pd5NZcuLrXzrapFor_gAoO9W5H-Fg2p8F2M64g"
Model: "gemini-2.5-flash"
Microsoft: #未配置则该服务商不可用
Transcribe:
Key: ""
Region: "eastasia"
Translate:
Key: ""
Region: "eastasia"
Endpoint: "https://api.cognitive.microsofttranslator.com"
Summary:
BaseURL: ""
Token: ""
Model: ""
pay:
Debug: ${LOG_DEBUG:-false}
WxAppId: "wx5bbb7be9324f3e2d"
WxAppSecret: "4cfde33bc22b6cc6b1f8b225dd97d255"
WxMchId: "1652202222"
WxPayPayKey: "rV7cE1xZ9bN3mK5jH8gT0wQ2sF4dG6yU"

187
deploy/voitrans/confs/home.yaml.example

@ -0,0 +1,187 @@
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 放入 deploy/voitrans/wordfilter/。无需要时整段删除即可。
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: #短信服务
AppId: "1400971698"
SecretId: ""
SecretKey: ""
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
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
echomeet: #会议记录:四套服务商各自的转写/翻译/总结配置
Debug: ${LOG_DEBUG:-false}
DefaultService: "Auto"
ByteDance:
Callback: ""
Transcribe:
AppID: "8595121680"
Token: ""
Translate:
AccessKey: ""
SecretKey: ""
Region: "cn-beijing"
Summary:
Apikey: ""
Model: "doubao-1-5-pro-32k-250115"
Ali:
Callback: ""
Transcribe:
ApiKey: ""
Translate:
AccessKeyId: ""
AccessKeySecret: ""
Region: "cn-hangzhou"
Summary:
BaseURL: "https://dashscope.aliyuncs.com/compatible-mode/v1"
Token: ""
Model: "qwen-plus"
Google: #需放置 ./smart-bluetooth-447104-2b269474bd72.json
Transcribe:
JsonPath: ./smart-bluetooth-447104-2b269474bd72.json
Translate:
JsonPath: ./smart-bluetooth-447104-2b269474bd72.json
Summary:
Apikey: ""
Model: "gemini-2.5-flash"
Microsoft: #未配置则该服务商不可用
Transcribe:
Key: ""
Region: "eastasia"
Translate:
Key: ""
Region: "eastasia"
Endpoint: "https://api.cognitive.microsofttranslator.com"
Summary:
BaseURL: ""
Token: ""
Model: ""
pay:
Debug: ${LOG_DEBUG:-false}
WxAppId: "wx5bbb7be9324f3e2d"
WxAppSecret: ""
WxMchId: "1652202222"
WxPayPayKey: ""

16
deploy/voitrans/confs/mcp.yaml → deploy/voitrans/confs/mcp.yaml.example

@ -14,21 +14,21 @@ sys:
MaxAgeTime: 7 MaxAgeTime: 7
IsDebug: ${LOG_DEBUG:-false} IsDebug: ${LOG_DEBUG:-false}
mysql: #mcp 仅用业务库读写 allhelp_task / user 表 mysql: #mcp 仅用业务库读写 allhelp_task / user 表
MySQLDsn: ${DB_ADMIN_DSN:-root:li13451234@tcp(mysql:3306)/voitrans?charset=utf8mb4&parseTime=True&loc=Local} MySQLDsn: ${DB_ADMIN_DSN:-}
amap: amap:
Appkey: c653e53f94ee88a43cc979a08deae883 Appkey: ""
juhe: juhe:
SimpleWeather_ApiKey: efd8f9f391d73d7337344d26ee93d173 SimpleWeather_ApiKey: ""
Finance_ApiKey: 50a101c9c5ff7c967598cea4bcc8ebbd Finance_ApiKey: ""
Toutiao_ApiKey: 035a1d052001f6f87358a159e7c44575 Toutiao_ApiKey: ""
spotify: spotify:
ClientID: "c111d7aa47ef4fb8a60c705f117200b0" ClientID: ""
ClientSecret: "27d9a850f1fe4d749103eec4d5a2a106" ClientSecret: ""
RedirectURI: "http://localhost:8080/callback" RedirectURI: "http://localhost:8080/callback"
musicobj: musicobj:
ApiBaseUrl: https://hw.music.ideapsound.com ApiBaseUrl: https://hw.music.ideapsound.com
bravesearch: bravesearch:
ApiKey: BSAyKXEKw6ftwPHD5HaTX4Ybr3Bfd6b ApiKey: ""
modules: modules:
mcp: mcp:

2
deploy/voitrans/confs/timer.yaml → deploy/voitrans/confs/timer.yaml.example

@ -16,7 +16,7 @@ sys:
cron: {} #定时驱动(无额外配置项) cron: {} #定时驱动(无额外配置项)
redis: #timer 仅用 Redis redis: #timer 仅用 Redis
Addr: ["${REDIS_ADDR:-redis:6379}"] Addr: ["${REDIS_ADDR:-redis:6379}"]
Password: ${REDIS_PASSWORD:-li13451234} Password: ${REDIS_PASSWORD:-}
DB: ${REDIS_DB:-1} DB: ${REDIS_DB:-1}
KeyPrefix: ${REDIS_KEY_PREFIX:-Voitrans} KeyPrefix: ${REDIS_KEY_PREFIX:-Voitrans}

2
deploy/voitrans/env/dev.env.example

@ -30,6 +30,8 @@ ANALYZE_REGION=1
# ── 业务杂项 ── # ── 业务杂项 ──
LOG_DEBUG=true LOG_DEBUG=true
GATEWAY_TOKEN_KEY=dev-change-me GATEWAY_TOKEN_KEY=dev-change-me
# v2 配置接口响应加密 AES key(16/24/32 字节),须与 Flutter ApiCrypto._key 完全一致;留空=不加密
GATEWAY_ENCRYPT_KEY=
API_ADMIN_ACCOUNT=admin API_ADMIN_ACCOUNT=admin
API_ADMIN_PASSWORD=123 API_ADMIN_PASSWORD=123
API_SITE_NAME=Voitrans(开发) API_SITE_NAME=Voitrans(开发)

2
deploy/voitrans/env/japan.env.example

@ -23,6 +23,8 @@ ANALYZE_REGION=2 # 区域编码见 pb.Region(海外)
LOG_DEBUG=false LOG_DEBUG=false
GATEWAY_TOKEN_KEY=CHANGE_ME GATEWAY_TOKEN_KEY=CHANGE_ME
# v2 配置接口响应加密 AES key(16/24/32 字节),须与 Flutter ApiCrypto._key 完全一致;留空=不加密
GATEWAY_ENCRYPT_KEY=
API_ADMIN_ACCOUNT=admin API_ADMIN_ACCOUNT=admin
API_ADMIN_PASSWORD=CHANGE_ME API_ADMIN_PASSWORD=CHANGE_ME
API_SITE_NAME=Voitrans API_SITE_NAME=Voitrans

2
deploy/voitrans/env/shanghai.env.example

@ -24,6 +24,8 @@ ANALYZE_REGION=1 # 区域编码见 pb.Region(国内)
LOG_DEBUG=false LOG_DEBUG=false
GATEWAY_TOKEN_KEY=CHANGE_ME GATEWAY_TOKEN_KEY=CHANGE_ME
# v2 配置接口响应加密 AES key(16/24/32 字节),须与 Flutter ApiCrypto._key 完全一致;留空=不加密
GATEWAY_ENCRYPT_KEY=
API_ADMIN_ACCOUNT=admin API_ADMIN_ACCOUNT=admin
API_ADMIN_PASSWORD=CHANGE_ME API_ADMIN_PASSWORD=CHANGE_ME
API_SITE_NAME=Voitrans API_SITE_NAME=Voitrans

2
deploy/voitrans/env/singapore.env.example

@ -23,6 +23,8 @@ ANALYZE_REGION=2 # 区域编码见 pb.Region(海外)
LOG_DEBUG=false LOG_DEBUG=false
GATEWAY_TOKEN_KEY=CHANGE_ME GATEWAY_TOKEN_KEY=CHANGE_ME
# v2 配置接口响应加密 AES key(16/24/32 字节),须与 Flutter ApiCrypto._key 完全一致;留空=不加密
GATEWAY_ENCRYPT_KEY=
API_ADMIN_ACCOUNT=admin API_ADMIN_ACCOUNT=admin
API_ADMIN_PASSWORD=CHANGE_ME API_ADMIN_PASSWORD=CHANGE_ME
API_SITE_NAME=Voitrans API_SITE_NAME=Voitrans

Loading…
Cancel
Save