application-prod.yml 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. # ========================================
  2. # 生产环境配置
  3. # 启动方式:-Dspring.profiles.active=prod
  4. # 敏感配置优先通过环境变量覆盖,未设置时使用与测试环境一致的默认值
  5. # ========================================
  6. spring:
  7. datasource:
  8. driver-class-name: com.mysql.cj.jdbc.Driver
  9. url: jdbc:mysql://${DB_HOST:localhost}:${DB_PORT:3306}/${DB_NAME:zhijiayun_pharmacy}?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
  10. username: ${DB_USERNAME:user}
  11. password: ${DB_PASSWORD:qPa5*gt8o.}
  12. hikari:
  13. minimum-idle: 10
  14. maximum-pool-size: 50
  15. idle-timeout: 600000
  16. max-lifetime: 1800000
  17. connection-timeout: 30000
  18. pool-name: ZhijiayunHikariPool-Prod
  19. data:
  20. redis:
  21. host: ${REDIS_HOST:localhost}
  22. port: ${REDIS_PORT:6379}
  23. password: ${REDIS_PASSWORD:123456}
  24. database: ${REDIS_DATABASE:0}
  25. timeout: 5000ms
  26. lettuce:
  27. pool:
  28. max-active: 32
  29. max-idle: 16
  30. min-idle: 4
  31. max-wait: 3000ms
  32. # 生产环境禁止自动执行 schema(由 DBA 手动维护)
  33. sql:
  34. init:
  35. mode: never
  36. # JWT 密钥:生产部署时通过环境变量覆盖
  37. jwt:
  38. secret: ${JWT_SECRET:YourSuperSecretKeyForJWTTokenGenerationMustBeAtLeast256BitsLong!!}
  39. user-expiration: 3600000 # 1小时(毫秒)
  40. admin-expiration: 43200000 # 12小时(毫秒)
  41. miniapp-expiration: 2592000000 # 小程序 30天(毫秒)
  42. expiration: 300000
  43. refresh-expiration: 604800000
  44. # 微信配置:生产部署时通过环境变量覆盖
  45. wechat:
  46. # 微信开放平台(网站扫码登录)
  47. open:
  48. app-id: ${WECHAT_APP_ID:wxd5f6a9d072f9a9f0}
  49. app-secret: ${WECHAT_APP_SECRET:67d696a9f0a9d072f9a9f0d5f6a9d072}
  50. qr-connect:
  51. redirect-uri: ${WECHAT_REDIRECT_URI:https://priceapi.kailin.com.cn/api/auth/wechat/callback}
  52. scope: snsapi_login
  53. # 阿里云短信:生产部署时通过环境变量覆盖
  54. sms:
  55. test-mode: true
  56. test-code: "123456"
  57. access-key-id: ${ALIBABA_CLOUD_ACCESS_KEY_ID:LTAI5tDwjfteBvivYN41r8sJ}
  58. access-key-secret: ${ALIBABA_CLOUD_ACCESS_KEY_SECRET:yowuOGi2nYYnrqGpO3qcz94C4brcPp}
  59. sign-name: ${SMS_SIGN_NAME:开邻}
  60. template-code: ${SMS_TEMPLATE_CODE:SMS_483305249}
  61. code-length: 6
  62. expire-minutes: 5
  63. endpoint: dysmsapi.aliyuncs.com
  64. # 阿里云OSS配置(生产环境)
  65. oss:
  66. endpoint: ${OSS_ENDPOINT:oss-cn-shenzhen.aliyuncs.com}
  67. access-key-id: ${ALIBABA_CLOUD_ACCESS_KEY_ID:LTAI5tDwjfteBvivYN41r8sJ}
  68. access-key-secret: ${ALIBABA_CLOUD_ACCESS_KEY_SECRET:yowuOGi2nYYnrqGpO3qcz94C4brcPp}
  69. bucket-name: ${OSS_BUCKET_NAME:kailin-saas}
  70. base-path: ${OSS_BASE_PATH:uploads/}
  71. url-prefix: ${OSS_URL_PREFIX:}
  72. # 生产环境日志:只记录 warn 及以上,减少性能开销
  73. logging:
  74. level:
  75. com.xuekairui: info
  76. com.xuekairui.user.mapper: info # 关闭 MyBatis SQL 调试日志(避免敏感参数泄露及性能损耗)
  77. org.springframework.security: warn
  78. com.zaxxer.hikari: warn
  79. file:
  80. name: /var/log/zhijiayun-pharmacy/zhijiayun-pharmacy.log
  81. # 生产网关:更严格的限流
  82. gateway:
  83. logging:
  84. enabled: true
  85. slow-threshold: 500
  86. exclude-paths:
  87. - /actuator/health
  88. - /favicon.ico
  89. rate-limit:
  90. enabled: true
  91. default-limit: 120
  92. default-window: 60
  93. rules:
  94. - path-prefixes:
  95. - /api/auth/sms
  96. limit: 10
  97. - path-prefixes:
  98. - /api/auth/login
  99. limit: 30
  100. # 邀请码配置
  101. invite:
  102. base-url: ${INVITE_BASE_URL:https://priceapi.kailin.com.cn}
  103. # 补填邀请码有效窗口(天),注册后30天内可补填
  104. bind-window-days: ${INVITE_BIND_WINDOW_DAYS:30}
  105. # 客户端安装包本地存储目录(流式下载)
  106. download-base-path: ${INVITE_DOWNLOAD_BASE_PATH:/desktop-updates}
  107. windows-filename: ${INVITE_WINDOWS_FILENAME:智价云-x64.exe}
  108. mac-filename: ${INVITE_MAC_FILENAME:智价云-arm64.dmg}
  109. # 支付模块(生产环境必须设为 false)
  110. payment:
  111. mock: false
  112. order-expire-minutes: 15
  113. # 支付宝(生产环境):将生产证书文件复制到 certs/prod/alipay/ 或通过环境变量覆盖
  114. # 支付宝(开发/测试环境):将沙箱证书文件复制到 certs/dev/alipay/ 目录下
  115. alipay:
  116. app-id: ${ALIPAY_APP_ID:2021005187690877}
  117. notify-url: ${ALIPAY_NOTIFY_URL:https://priceapi.kailin.com.cn/api/payment/callback/alipay}
  118. return-url: ${ALIPAY_RETURN_URL:http:https://priceapi.kailin.com.cn/payment/success}
  119. server-url: ${ALIPAY_SERVER_URL:https://openapi.alipay.com/gateway.do}
  120. # 公钥模式(优先):配置了 alipay-public-key 即走公钥模式
  121. app-private-key: ${ALIPAY_APP_PRIVATE_KEY:}
  122. alipay-public-key: ${ALIPAY_PUBLIC_KEY:}
  123. # 证书模式(备选):未配置 alipay-public-key 时回退到证书模式,从 certs/prod/alipay/ 读取
  124. app-private-key-path: ${ALIPAY_APP_PRIVATE_KEY_PATH:certs/prod/alipay/appPrivateKey.txt}
  125. app-cert-path: ${ALIPAY_APP_CERT_PATH:certs/prod/alipay/appCertPublicKey_2021005187690877.crt}
  126. alipay-cert-path: ${ALIPAY_CERT_PATH:certs/prod/alipay/alipayCertPublicKey_RSA2.crt}
  127. alipay-root-cert-path: ${ALIPAY_ROOT_CERT_PATH:certs/prod/alipay/alipayRootCert.crt}
  128. # 安心付(周期卡-小程序会员卡管理):独立小程序应用,与网页应用的 alipay 配置完全独立
  129. anxin-alipay:
  130. enabled: false
  131. app-id: ${ALIPAY_ANXIN_APP_ID:}
  132. app-private-key: ${ALIPAY_ANXIN_APP_PRIVATE_KEY:}
  133. alipay-public-key: ${ALIPAY_ANXIN_PUBLIC_KEY:}
  134. notify-url: ${ALIPAY_ANXIN_NOTIFY_URL:https://priceapi.kailin.com.cn/api/payment/anxin/notify/deduct}
  135. card-notify-url: ${ALIPAY_ANXIN_CARD_NOTIFY_URL:https://priceapi.kailin.com.cn/api/payment/anxin/notify/card-change}
  136. server-url: https://openapi.alipay.com/gateway.do
  137. format: json
  138. charset: UTF-8
  139. sign-type: RSA2
  140. # 微信支付(生产环境):将生产证书文件复制到 certs/prod/wechat/ 目录下
  141. wechat:
  142. app-id: ${WECHAT_PAY_APP_ID:wx24a9669e84ba1f0b}
  143. mch-id: ${WECHAT_PAY_MCH_ID:1612111355}
  144. api-v3-key: ${WECHAT_PAY_API_V3_KEY:iD1xB1mH6zO7pP2wD1rU4aD2nH7oL2lN}
  145. # 三份证书文件(从微信支付商户平台下载,放入 certs/prod/wechat/):
  146. private-key-path: ${WECHAT_PAY_PRIVATE_KEY_PATH:certs/prod/wechat/apiclient_key.pem} # 证书密钥pem(商户私钥)
  147. private-cert-path: ${WECHAT_PAY_PRIVATE_CERT_PATH:certs/prod/wechat/apiclient_cert.pem} # 证书pem格式(商户证书)
  148. key-path: ${WECHAT_PAY_KEY_PATH:certs/prod/wechat/apiclient_cert.p12} # 证书pkcs12格式(密码默认为商户号)
  149. serial-no: ${WECHAT_PAY_SERIAL_NO:68E43B250D73977F1DC0E0D0827AF25A8BFB1777}
  150. # 微信支付公钥(新商户必须配置,从商户平台 → 账户中心 → API安全 → 申请微信支付公钥)
  151. public-key-path: ${WECHAT_PAY_PUBLIC_KEY_PATH:certs/prod/wechat/pub_key.pem} # 微信支付公钥文件
  152. public-key-id: ${WECHAT_PAY_PUBLIC_KEY_ID:} # 微信支付公钥ID
  153. notify-url: ${WECHAT_PAY_NOTIFY_URL:https://priceapi.kailin.com.cn/api/payment/callback/wechat}
  154. # 微信小程序支付(JSAPI 调起支付签名 appId)
  155. # 小程序 JSAPI 下单签名的 appId 必须为小程序自身的 appId,与 Native 扫码的 appId 区分
  156. # 不配置时自动回退到 payment.wechat.app-id(当两者相同时可省略)
  157. miniapp:
  158. app-id: ${WECHAT_PAY_MINIAPP_APP_ID:wx246605ec671bf08d}
  159. app-secret: ${WECHAT_PAY_MINIAPP_APP_SECRET:5dfa6b60f10347ffa7b959658b3f2496}