# =============================== #=bytedesk # =============================== bytedesk.debug=true bytedesk.version=0.9.8 # 申请实际的license # https://www.weiyuai.cn/docs/zh-CN/docs/faq#%E9%97%AE%E9%A2%9813%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%E8%AF%95%E7%94%A8%E7%89%88license bytedesk.licenseKey= # enable custom config: name, logo, description bytedesk.custom.enabled=false # default null use default name bytedesk.custom.name= # default null use default logo bytedesk.custom.logo= # default null use: Chat As A Service bytedesk.custom.description= # show right corner chat bytedesk.custom.show-right-corner-chat=false # show demo bytedesk.custom.show-demo=false # privacy policy url bytedesk.custom.privacy-policy-url=https://www.weiyuai.cn/privacy.html # terms of service url bytedesk.custom.terms-of-service-url=https://www.weiyuai.cn/terms.html # enable login username bytedesk.custom.login-username-enable=true # 密码错误最大重试次数, 默认3次, 0表示不限制。 bytedesk.custom.login-max-retry-count=3 # 超过次数默认锁定10分钟, 0表示不锁定 bytedesk.custom.login-max-retry-lock-time=10 # enable login mobile bytedesk.custom.login-mobile-enable=true # enable login email # bytedesk.custom.login-email-enable=false # enable login scan bytedesk.custom.login-scan-enable=true # enable wechat login bytedesk.custom.login-wechat-enable=false # enable github login bytedesk.custom.login-github-enable=false # enable facebook login bytedesk.custom.login-facebook-enable=false # enable google login bytedesk.custom.login-google-enable=false # enable dingtalk login bytedesk.custom.login-dingtalk-enable=false # enable douyin login bytedesk.custom.login-douyin-enable=false # enable feishu login bytedesk.custom.login-feishu-enable=false # enable ldap login bytedesk.custom.login-ldap-enable=false # enable cas login bytedesk.custom.login-cas-enable=false # enable oidc login bytedesk.custom.login-oidc-enable=false # enable openid login bytedesk.custom.login-openid-enable=false # show doc url bytedesk.custom.doc-url-show=true # doc url bytedesk.custom.doc-url=https://www.weiyuai.cn/docs/zh-CN/ # lang: zh-CN/en-US/zh-TW bytedesk.custom.lang=zh-CN # allow register bytedesk.custom.allow-register=false # force validate mobile bytedesk.custom.force-validate-mobile=true # force validate email bytedesk.custom.force-validate-email=true # force visitor auth bytedesk.custom.force-visitor-auth=false # =============================== # Admin config # =============================== # admin email bytedesk.admin.email=admin@email.com # admin password bytedesk.admin.password=admin # admin nickname bytedesk.admin.nickname=SuperAdmin # admin mobile bytedesk.admin.mobile=13345678000 # white list mobile bytedesk.admin.mobile-whitelist=18888888000,18888888001,18888888002,18888888003,18888888004,18888888005 # white list email bytedesk.admin.email-whitelist=100@email.com,101@email.com,102@email.com,103@email.com,104@email.com,105@email.com # validate code for white list mobile and email, otherwise random 6 digits bytedesk.admin.validate-code=123456 # =============================== #= Member config # =============================== # create/import member default password bytedesk.member.password=123456 # =============================== #= Performance Testing config # =============================== bytedesk.testing.enabled=false # bytedesk.testing.account-count=300 # bytedesk.testing.account-username=test # bytedesk.testing.account-password=password bytedesk.testing.disable-captcha=true bytedesk.testing.disable-ip-filter=true # whitelist ip for performance testing bytedesk.testing.ip-whitelist=127.0.0.1,127.0.0.2 # =============================== # Organization config # =============================== # organization name bytedesk.organization.name=MyCompany # organization code bytedesk.organization.code=bytedesk # =============================== # Features config # =============================== # enable java ai bytedesk.features.java-ai=true # send email by javamail, valid value: javamail/aliyun bytedesk.features.email-type=javamail # 头像的访问地址,请修改为服务器实际的地址 bytedesk.features.avatar-base-url=http://127.0.0.1:9003 # =============================== # CORS config # =============================== bytedesk.cors.allowed-origins=* # =============================== # JWT config # =============================== bytedesk.jwt.secret-key=1dfaf8d004207b628a9a6b859c429f49a9a7ead9fd8161c1e60847aeef06dbd2 # 30 days, milliseconds bytedesk.jwt.expiration=2592000000 # 60 days, milliseconds bytedesk.jwt.refresh-token-expiration=5184000000 # =============================== # Cache config # =============================== # 0: no cache, 1: caffeine cache, 2: caffeine + redis cache bytedesk.cache.level=0 # cache prefix bytedesk.cache.prefix=bytedeskim # redis stream key bytedesk.cache.redis-stream-key=bytedeskim:stream # bytedesk.redis-pubsub-channel=bytedeskim:pubsub # =============================== # redis pool config # =============================== bytedesk.redis.pool-config.maxIdle=64 bytedesk.redis.pool-config.maxTotal=64 bytedesk.redis.pool-config.minIdle=8 # =============================== #=spring-boot-starter-cache # https://docs.spring.io/spring-boot/docs/current/reference/html/application-properties.html#appendix.application-properties.cache # =============================== # disable caching: none, https://docs.spring.io/spring-boot/docs/3.2.0/reference/htmlsingle/#io.caching.provider.none # https://docs.spring.io/spring-boot/reference/io/caching.html # https://docs.spring.io/spring-framework/reference/integration/cache/annotations.html#cache-spel-context spring.cache.type=none # spring.cache.type=redis # spring.cache.type=caffeine # spring.cache.caffeine.spec=maximumSize=100,expireAfterAccess=5m # spring.cache.redis.cache-null-values=false spring.cache.redis.use-key-prefix=true spring.cache.redis.key-prefix=bytedeskim: # # =============================== #=spring-boot-starter-data-redis # https://docs.spring.io/spring-boot/docs/current/reference/html/application-properties.html#appendix.application-properties.data # REDIS_URL="redis://:qfRxz3tVT8Nh@127.0.0.1:6379/0" # =============================== spring.data.redis.database=0 spring.data.redis.host=127.0.0.1 # 默认6379端口,为防止与本地冲突,docker中为16379 spring.data.redis.port=16379 spring.data.redis.password=qfRxz3tVT8Nh spring.data.redis.timeout=10000 # disable redis repository spring.data.redis.repositories.enabled=false # =============================== # Upload config # =============================== # Upload config, no '/' bytedesk.upload.type=local # upload dir bytedesk.upload.dir=uploads # 上传文件的访问地址,请修改为服务器实际的地址 bytedesk.upload.url=http://127.0.0.1:9003 # =============================== # = MinIO 对象存储配置 # =============================== # 是否启用 MinIO 存储 bytedesk.minio.enabled=false # MinIO 服务地址 bytedesk.minio.endpoint=http://127.0.0.1:19000 # MinIO 访问密钥 bytedesk.minio.access-key=minioadmin # MinIO 密钥 bytedesk.minio.secret-key=minioadmin123 # MinIO 存储桶名称 bytedesk.minio.bucket-name=bytedesk # MinIO 区域 bytedesk.minio.region=us-east-1 # 是否使用 HTTPS bytedesk.minio.secure=false # =============================== # Knowledge base config # =============================== # theme: default/eduport/social/kbdoc bytedesk.kbase.theme=default # html path bytedesk.kbase.html-path=helpcenter # bytedesk.kbase.template-path=classpath:/templates/ftl/kbase # 知识库的访问地址,请修改为服务器实际的地址 bytedesk.kbase.api-url=http://127.0.0.1:9003 # =============================== #=com.bytedesk.socket module # =============================== # enable socket bytedesk.socket.enabled=true # socket host bytedesk.socket.host=0.0.0.0 # socket port # bytedesk.socket.port=9883 # websocket port bytedesk.socket.websocket-port=9885 # leak detector level bytedesk.socket.leak-detector-level=SIMPLE # parent event loop group thread count bytedesk.socket.parent-event-loop-group-thread-count=1 # child event loop group thread count bytedesk.socket.child-event-loop-group-thread-count=8 # max payload size bytedesk.socket.max-payload-size=10240 # =============================== #= Call FreeSwitch config # =============================== # enable call freeswitch bytedesk.call.freeswitch.enabled=false # freeswitch server ip bytedesk.call.freeswitch.server=127.0.0.1 # esl port bytedesk.call.freeswitch.esl-port=8021 # esl password bytedesk.call.freeswitch.esl-password=password # sip port - 根据服务器实际端口修改 bytedesk.call.freeswitch.sip-port=5060 # webrtc port - 根据服务器实际端口修改 bytedesk.call.freeswitch.webrtc-port=7443 # websocket signal port - 根据服务器实际端口修改 bytedesk.call.freeswitch.ws-port=5066 # call timeout seconds - 增加超时时间 bytedesk.call.freeswitch.call-timeout=120 # rtp port range - 扩大端口范围 # bytedesk.call.freeswitch.rtp-port-start=16000 # bytedesk.call.freeswitch.rtp-port-end=16999 # 新增配置 # bytedesk.call.freeswitch.max-sessions=1000 # bytedesk.call.freeswitch.sessions-per-second=30 # bytedesk.call.freeswitch.log-level=WARNING # =============================== #= etcd 分布式键值存储配置 # =============================== # 是否启用 etcd bytedesk.etcd.enabled=false # etcd 服务器端点列表(支持多个,逗号分隔) bytedesk.etcd.endpoints=http://localhost:12379 # 连接超时时间(毫秒) bytedesk.etcd.connect-timeout=5000 # 请求超时时间(毫秒) bytedesk.etcd.request-timeout=3000 # 命名空间/前缀(用于隔离不同应用的数据) bytedesk.etcd.namespace=/bytedesk # 用户名(如果需要认证) # bytedesk.etcd.username= # 密码(如果需要认证) # bytedesk.etcd.password= # 租约 TTL(秒)- 用于服务注册等场景 bytedesk.etcd.lease-ttl=30 # 租约续期间隔(秒) bytedesk.etcd.lease-keep-alive-interval=10 # =============================== #=com.bytedesk.cluster module # =============================== # enable cluster bytedesk.cluster.enabled=false # cluster nodes bytedesk.cluster.nodes=127.0.0.1,127.0.0.2 # bytedesk.cluster.host=230.0.0.0 # bytedesk.cluster.port=6781 # bytedesk.cluster.client-port=6771 # =============================== #= push # =============================== # apns bundle id bytedesk.push.apns.bundle-id=com.kefux.im # apns p12 url bytedesk.push.apns.p12-url=123.p12 # apns p12 password bytedesk.push.apns.p12-password=123456 # =============================== #= Watermark config # =============================== # 是否启用水印功能 bytedesk.watermark.enabled=true # 水印文字 bytedesk.watermark.text=bytedesk.com # 水印位置: TOP_LEFT, TOP_RIGHT, BOTTOM_LEFT, BOTTOM_RIGHT, CENTER bytedesk.watermark.position=BOTTOM_RIGHT # 字体大小 bytedesk.watermark.fontSize=24 # 字体名称 bytedesk.watermark.fontName=Arial # 水印颜色 (RGBA格式: R,G,B,A) bytedesk.watermark.color=255,255,255,128 # 透明度 (0.0-1.0) bytedesk.watermark.opacity=0.5 # 边距 bytedesk.watermark.margin=20 # 是否只对图片文件添加水印 bytedesk.watermark.imageOnly=true # 最小图片尺寸(像素),小于此尺寸的图片不添加水印 bytedesk.watermark.minImageSize=100 # 最大图片尺寸(像素),大于此尺寸的图片不添加水印 bytedesk.watermark.maxImageSize=5000 # =============================== # = oauth # github:https://github.com/settings/applications/new # =============================== bytedesk.oauth.github.enabled=true bytedesk.oauth.github.client-id=clientid bytedesk.oauth.github.client-secret=clientid # GitHub 完成授权后跳转到前端回调页的地址 bytedesk.oauth.github.redirect-uri= # Google OAuth 配置 bytedesk.oauth.google.enabled=true bytedesk.oauth.google.client-id= bytedesk.oauth.google.client-secret= bytedesk.oauth.google.redirect-uri= # WeChat OAuth 配置(开放平台/公众号网页授权) bytedesk.oauth.wechat.enabled=true bytedesk.oauth.wechat.app-id= bytedesk.oauth.wechat.app-secret= bytedesk.oauth.wechat.redirect-uri= # Facebook OAuth 配置 bytedesk.oauth.facebook.enabled=true bytedesk.oauth.facebook.client-id= bytedesk.oauth.facebook.client-secret= bytedesk.oauth.facebook.redirect-uri= # DingTalk OAuth 配置 bytedesk.oauth.dingtalk.enabled=true bytedesk.oauth.dingtalk.app-id= bytedesk.oauth.dingtalk.app-secret= bytedesk.oauth.dingtalk.redirect-uri= # DouYin OAuth 配置 bytedesk.oauth.douyin.enabled=true bytedesk.oauth.douyin.client-key= bytedesk.oauth.douyin.client-secret= bytedesk.oauth.douyin.redirect-uri= # Feishu OAuth 配置 bytedesk.oauth.feishu.enabled=true bytedesk.oauth.feishu.app-id= bytedesk.oauth.feishu.app-secret= bytedesk.oauth.feishu.redirect-uri= # LDAP 登录配置(Bytedesk 自有 LDAP 登录,与 Spring LDAP 基础配置配合使用) bytedesk.oauth.ldap.enabled=false # 登录时若无邮箱可按此域名拼接(例如: username@yourdomain.com) bytedesk.oauth.ldap.default-email-domain= # CAS 单点登录配置 bytedesk.oauth.cas.enabled=false # CAS 服务器地址,例如:https://cas.example.com bytedesk.oauth.cas.server-url= # 登录路径,默认 /login bytedesk.oauth.cas.login-path=/login # 校验路径,建议使用 p3 接口,默认 /p3/serviceValidate bytedesk.oauth.cas.validate-path=/p3/serviceValidate # 当前系统在 CAS 注册的回调地址(service),用于校验 ticket bytedesk.oauth.cas.service-redirect-uri= # 默认邮箱域(当 CAS 返回无邮箱时用于拼接) bytedesk.oauth.cas.default-email-domain= # OIDC 标准登录配置(基于发现文档) bytedesk.oauth.oidc.enabled=false # Issuer 地址,例如:https://login.microsoftonline.com/{tenant}/v2.0 bytedesk.oauth.oidc.issuer= bytedesk.oauth.oidc.client-id= bytedesk.oauth.oidc.client-secret= bytedesk.oauth.oidc.redirect-uri= # OpenID(通用 OAuth/OpenID 风格,自配置端点) bytedesk.oauth.openid.enabled=false bytedesk.oauth.openid.authorization-endpoint= bytedesk.oauth.openid.token-endpoint= bytedesk.oauth.openid.user-info-endpoint= bytedesk.oauth.openid.client-id= bytedesk.oauth.openid.client-secret= bytedesk.oauth.openid.redirect-uri= # 用户名字段,默认 email,可配置为 sub/username 等 bytedesk.oauth.openid.username-field=email # =============================== # LDAP Configuration # =============================== # # 是否启用LDAP # spring.ldap.enabled=false # # LDAP 服务器地址 # spring.ldap.urls=ldap://127.0.0.1:389 # # LDAP 基础目录 # spring.ldap.base=dc=example,dc=com # # LDAP 管理员用户名(完整DN) # spring.ldap.username=cn=admin,dc=example,dc=com # # LDAP 管理员密码 # spring.ldap.password=admin # # LDAP 是否只读 # spring.ldap.anonymous-read-only=false # # LDAP 是否启用匿名访问 # spring.ldap.anonymous-enabled=false # =============================== # SSO Configuration # =============================== # 是否启用SSO # spring.security.oauth2.client.enabled=false # =============================== #=logging # https://docs.spring.io/spring-boot/docs/current/reference/html/application-properties.html#appendix.application-properties.core # 五种level:TRACE、DEBUG、INFO、WARN和ERROR # =============================== # 会打印sqlLog # debug=true # trace=true # 隐藏其他常见的DEBUG日志 # logging.level.org.springframework=INFO # logging.level.org.hibernate=INFO # logging.level.org.apache=INFO # 设置自定义包的日志级别 # logging.level.com.bytedesk=INFO logging.level.web=DEBUG logging.level.org.springframework.security.web.FilterChainProxy=WARN logging.level.org.springframework.web.socket=INFO # 设置 FreeMarker 的日志级别为 INFO logging.level.org.springframework.web.servlet.view.freemarker=WARN logging.level.org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport=WARN # logging.level.org.hibernate.orm.connections.pooling=WARN # 关闭StringDecoder相关的日志 logging.level.org.springframework.core.codec.StringDecoder=WARN # 关闭reactor-http相关日志 logging.level.reactor.netty.http=WARN logging.level.org.springframework.web.client.DefaultRestClient=WARN # 抑制Spring Security AuthenticationProvider/UserDetailsService配置警告 logging.level.org.springframework.security.config.annotation.authentication.configuration.InitializeUserDetailsBeanManagerConfigurer=ERROR # 完全禁用某些包的日志 # logging.level.org.springframework.web.servlet.view.freemarker=OFF # logging.level.org.springframework.messaging=WARN # logging.level.org.springframework.web=INFO # logging.level.org.springframework.security=INFO # logging.level.root=DEBUG logging.level.com.bytedesk.ai=DEBUG logging.level.com.bytedesk.core=DEBUG logging.level.com.bytedesk.kbase=DEBUG logging.level.com.bytedesk.service=DEBUG logging.level.com.bytedesk.social=DEBUG logging.level.com.bytedesk.wechat=DEBUG logging.level.com.bytedesk.shop=DEBUG logging.level.com.bytedesk.team=DEBUG logging.level.com.bytedesk.ticket=DEBUG logging.level.com.bytedesk.starter=DEBUG # logging.level.org.springframework.web.client.DefaultRestClient=WARN logging.file.name=logs/bytedeskim.log logging.file.max-size=10MB logging.file.max-history=5 # 2024-09-19T13:07:39.031+08:00 INFO 4043 --- [bytedesk] [ main] liquibase.util : UPDATE SUMMARY # logging.pattern.console=[TRACEID:%X{traceId}] %clr(%5p) %d{HH:mm:ss.SSS} %class{-1}: %msg%xEx%n logging.pattern.console=[TRACEID:%X{traceId}] %clr(%d{${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr(${LOG_LEVEL_PATTERN:%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx} logging.pattern.file=[TRACEID:%X{traceId}]-%clr(%d{${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint}-%clr(${LOG_LEVEL_PATTERN:%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx} # =============================== #= alibaba druid # http://127.0.0.1:9003/druid # https://github.com/alibaba/druid/wiki/DruidDataSource%E9%85%8D%E7%BD%AE%E5%B1%9E%E6%80%A7%E5%88%97%E8%A1%A8 # =============================== spring.datasource.type=com.alibaba.druid.pool.DruidDataSource # druid properties spring.datasource.druid.initial-size=10 spring.datasource.druid.min-idle=10 spring.datasource.druid.max-active=100 spring.datasource.druid.max-wait=60000 spring.datasource.druid.time-between-eviction-runs-millis=60000 spring.datasource.druid.min-evictable-idle-time-millis=300000 spring.datasource.druid.validation-query=SELECT 'x' spring.datasource.druid.test-while-idle=true spring.datasource.druid.test-on-borrow=false spring.datasource.druid.test-on-return=false spring.datasource.druid.stat-view-servlet.enabled=true spring.datasource.druid.stat-view-servlet.url-pattern=/druid/* spring.datasource.druid.stat-view-servlet.login-username=admin@email.com spring.datasource.druid.stat-view-servlet.login-password=admin # spring.datasource.druid.stat-view-servlet.reset-enable=false # spring.datasource.druid.stat-view-servlet.allow=127.0.0.1 # spring.datasource.druid.stat-view-servlet.deny= spring.datasource.druid.filters=config,stat spring.datasource.druid.filter.stat.log-slow-sql=true spring.datasource.druid.filter.stat.slow-sql-millis=1 # spring.datasource.druid.web-stat-filter.enabled=true # spring.datasource.druid.web-stat-filter.url-pattern=/* # spring.datasource.druid.web-stat-filter.exclusions=*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/* # =============================== #= h2 # https://docs.spring.io/spring-boot/docs/current/reference/html/application-properties.html#appendix.application-properties.data # =============================== # http://127.0.0.1:9003/h2-console # spring.h2.console.enabled=true # spring.h2.console.path=/h2-console # spring.h2.console.settings.trace=false # spring.h2.console.settings.web-allow-others=false # # # # spring.datasource.url=jdbc:h2:mem:testdb # spring.datasource.url=jdbc:h2:file:./h2db/weiyuim # spring.datasource.driverClassName=org.h2.Driver # spring.datasource.username=sa # spring.datasource.password=sa # spring.jpa.database-platform=org.hibernate.dialect.H2Dialect # spring.jpa.defer-datasource-initialization=true # =============================== #= mysql # https://docs.spring.io/spring-boot/docs/current/reference/html/application-properties.html#appendix.application-properties.data # =============================== # 默认使用:3306端口,为防止本地冲突,docker中为:13306 spring.datasource.url=jdbc:mysql://127.0.0.1:13306/bytedesk?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true # spring.datasource.url=jdbc:mysql://127.0.0.1:3306/bytedesk?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true spring.datasource.username=root spring.datasource.password=r8FqfdbWUaN3 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.jpa.database=mysql # spring.jpa.database-platform=org.hibernate.dialect.MySQLDialect # Hibernate会自动检测方言,无需显式设置 spring.quartz.properties.org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.StdJDBCDelegate # =============================== #= postgresql # https://docs.spring.io/spring-boot/docs/current/reference/html/application-properties.html#appendix.application-properties.data # 因本地占用,将5432改为5433 # DATABASE_URL="postgresql://postgres:r8FqfdbWUaN3@localhost:5433/bytedesk" # =============================== # spring.datasource.url=jdbc:postgresql://127.0.0.1:5433/bytedesk # spring.datasource.username=postgres # spring.datasource.password=r8FqfdbWUaN3 # spring.datasource.driver-class-name=org.postgresql.Driver # spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect # spring.quartz.properties.org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.PostgreSQLDelegate # =============================== #=spring-boot-starter-data-jpa # https://docs.spring.io/spring-boot/docs/current/reference/html/application-properties.html#appendix.application-properties.data # =============================== # 生产环境关闭update模式,使用validate # update/none/validate/create/create-drop spring.jpa.hibernate.ddl-auto=update spring.jpa.show-sql=false spring.jpa.properties.hibernate.format_sql=false spring.jpa.properties.hibernate.enable_lazy_load_no_trans=true spring.jpa.open-in-view=false # 设置 Hibernate 时区为 Asia/Shanghai spring.jpa.properties.hibernate.jdbc.time_zone=Asia/Shanghai # https://www.cnblogs.com/suizhikuo/p/16997225.html # spring.jackson.date-format=yyyy-MM-dd HH:mm:ss spring.jackson.date-format=yyyy-MM-dd'T'HH:mm:ss.SSSX spring.jackson.time-zone=GMT+8 # =============================== #=spring-boot-starter-data-rest # http://127.0.0.1:9003/rest/api/profile # https://docs.spring.io/spring-data/rest/reference/index.html # https://docs.spring.io/spring-boot/docs/current/reference/html/application-properties.html#application-properties.data.spring.data.rest.base-path # =============================== spring.data.rest.base-path=/api # spring.data.rest.default-page-size=20 # spring.data.rest.max-page-size= # spring.data.rest.page-param-name=page # spring.data.rest.limit-param-name=size # spring.data.rest.sort-param-name=sort spring.data.rest.return-body-on-create=true spring.data.rest.return-body-on-update=true # spring.data.rest.sort-param-name= # =============================== #=spring-boot-starter-actuator # https://docs.spring.io/spring-boot/docs/current/reference/html/application-properties.html#appendix.application-properties.actuator # https://docs.spring.io/spring-boot/docs/current/actuator-api/htmlsingle/#prometheus # https://docs.micrometer.io/micrometer/reference/implementations/prometheus.html # http://127.0.0.1:9003/actuator # 健康检查:http://127.0.0.1:9003/actuator/health # 所有指标:http://127.0.0.1:9003/actuator/metrics # 特定指标:http://127.0.0.1:9003/actuator/metrics/{metric.name} # Prometheus 格式:http://127.0.0.1:9003/actuator/prometheus # http://127.0.0.1:9003/actuator/prometheus # Prometheus 指标接口 # Prometheus UI # http://127.0.0.1:19090 # Prometheus 管理界面 # Grafana # http://127.0.0.1:13000 # Grafana 管理界面 # - 用户名:admin # - 密码:admin # =============================== # 关闭所有actuator端点 management.endpoints.enabled-by-default=false management.endpoints.web.base-path=/actuator management.endpoints.web.exposure.include=health,metrics,prometheus management.endpoint.health.show-details=always management.endpoint.metrics.enabled=true management.endpoint.prometheus.enabled=true # Metrics configuration management.metrics.tags.application=bytedesk management.metrics.distribution.percentiles-histogram.http.server.requests=true management.metrics.distribution.sla.http.server.requests=100ms,400ms,500ms # Prometheus configuration management.prometheus.metrics.export.enabled=true # =============================== # = Zipkin Tracing Configuration # =============================== # 关闭 Zipkin 追踪 management.tracing.enabled=false management.zipkin.tracing.enabled=false # management.zipkin.tracing.endpoint=http://127.0.0.1:9411/api/v2/spans # 或者设置采样概率为0来禁用追踪 management.tracing.sampling.probability=0.0 # Prometheus Admin Credentials # spring.docker.compose.service.bytedesk-prometheus.environment.PROMETHEUS_ADMIN_USER=admin # spring.docker.compose.service.bytedesk-prometheus.environment.PROMETHEUS_ADMIN_PASSWORD=admin # Grafana Admin Credentials # spring.docker.compose.service.bytedesk-grafana.environment.GF_SECURITY_ADMIN_USER=admin # spring.docker.compose.service.bytedesk-grafana.environment.GF_SECURITY_ADMIN_PASSWORD=admin # spring.docker.compose.service.bytedesk-grafana.environment.GF_AUTH_ANONYMOUS_ENABLED=false # # =============================== #=spring-boot-starter-admin-client # https://github.com/codecentric/spring-boot-admin?tab=readme-ov-file # https://docs.spring-boot-admin.com/current/getting-started.html # =============================== spring.boot.admin.client.url=http://127.0.0.1:9003 # spring.boot.admin.ui.public-url=http://127.0.0.1:9003/actuator/admin # =============================== #=springdoc # https://springdoc.org/#properties # http://127.0.0.1:9003/swagger-ui/index.html # http://127.0.0.1:9003/v3/api-docs # =============================== springdoc.show-actuator=false # swagger-ui # http://127.0.0.1:9003/swagger-ui/index.html springdoc.swagger-ui.enabled=true springdoc.swagger-ui.path=/index.html # api-docs springdoc.api-docs.enabled=true springdoc.api-docs.path=/v3/api-docs # knife4j # http://127.0.0.1:9003/doc.html knife4j.enabled=true knife4j.setting.language=zh_cn # =============================== #=spring-boot-devtools # https://docs.spring.io/spring-boot/docs/current/reference/html/application-properties.html#appendix.application-properties.devtools # =============================== spring.devtools.restart.poll-interval=2s spring.devtools.restart.quiet-period=1s # # =============================== # = Apache ActiveMQ Artemis logger levels # =============================== # https://activemq.apache.org/components/artemis/documentation/latest/logging.html # https://codeaches.com/spring-boot/embedded-activemq-artemis-jms-broker logging.level.org.apache.activemq.artemis.core.server=WARN logging.level.org.apache.activemq.artemis.utils=WARN logging.level.org.apache.activemq.artemis.jms=WARN logging.level.org.apache.activemq.audit.base=WARN logging.level.org.apache.activemq.audit.message=WARN # =============================== # = spring-boot-starter-artemis # = jms artemis # https://spring.io/guides/gs/messaging-jms # https://docs.spring.io/spring-boot/reference/messaging/jms.html # https://activemq.apache.org/components/artemis/documentation/latest/index.html # spring.jms.pub-sub-domain=true # =============================== spring.artemis.mode=embedded # spring.artemis.mode=native # spring.artemis.broker-url=tcp://127.0.0.1:61617 # spring.artemis.user=admin # spring.artemis.password=admin # =============================== # spring.artemis.broker-url=tcp://154.89.155.120:61617 # spring.artemis.user=admin # spring.artemis.password=admin # =============================== # = LDAP 健康检查配置 # =============================== # 禁用LDAP健康检查,避免在没有LDAP服务时导致整体健康状态为DOWN management.health.ldap.enabled=false # =============================== # = spring mail # https://springdoc.cn/spring-boot/application-properties.html#appendix.application-properties.mail # =============================== spring.mail.host=smtp.qq.com spring.mail.port=465 # spring.mail.username= # spring.mail.password= spring.mail.data-encoding=UTF-8 spring.mail.protocol=smtps spring.mail.properties.mail.smtp.connectiontimeout=5000 spring.mail.properties.mail.smtp.timeout=3000 spring.mail.properties.mail.smtp.auth=true spring.mail.properties.mail.smtp.starttls.enable=true spring.mail.properties.mail.smtp.starttls.required=true # # =============================== # = Quartz # https://github.com/quartz-scheduler/quartz # https://docs.spring.io/spring-boot/reference/io/quartz.html # https://medium.com/@ChamithKodikara/spring-boot-2-quartz-2-scheduler-integration-a8eaaf850805 # SpringBoot官方说明:https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-quartz.html # Quartz官方文档:https://www.quartz-scheduler.org/documentation/2.3.1-SNAPSHOT/tutorials/index.html # =============================== spring.quartz.job-store-type=jdbc # # 3种模式: ALWAYS、EMBEDDED、NEVER # 首次启动时创建表,但每次都会清空数据,初始化之后,需要修改为never spring.quartz.jdbc.initialize-schema=always # spring.quartz.jdbc.initialize-schema=never spring.quartz.wait-for-jobs-to-complete-on-shutdown=true # spring.quartz.properties.org.quartz.scheduler.instanceName=BytedeskScheduler spring.quartz.properties.org.quartz.scheduler.instanceId=AUTO #spring.quartz.properties.org.quartz.scheduler.instanceIdGenerator.class=io.xiaper.schedule.util.CustomQuartzInstanceIdGenerator # spring.quartz.properties.org.quartz.jobStore.isClustered=true spring.quartz.properties.org.quartz.jobStore.tablePrefix=QRTZ_ # spring.quartz.properties.org.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreTX spring.quartz.properties.org.quartz.jobStore.class=org.springframework.scheduling.quartz.LocalDataSourceJobStore spring.quartz.properties.org.quartz.jobStore.clusterCheckinInterval=10000 spring.quartz.properties.org.quartz.jobStore.useProperties=false # spring.quartz.properties.org.quartz.threadPool.class=org.quartz.simpl.SimpleThreadPool spring.quartz.properties.org.quartz.threadPool.threadCount=5 spring.quartz.properties.org.quartz.threadPool.threadPriority=5 spring.quartz.properties.org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread=true # # =============================== # = multipart file uploads # =============================== spring.servlet.multipart.enabled=true # Write files to disk if the file size is more than 2KB. spring.servlet.multipart.file-size-threshold=2KB # The intermediate disk location where the uploaded files are written # jetty里面开启这个配置会报错 # spring.servlet.multipart.location=/tmp # Maximum file size that can be uploaded spring.servlet.multipart.max-file-size=100MB # Maximum allowed multipart request size spring.servlet.multipart.max-request-size=100MB # =============================== # = spring-session-data-redis # https://docs.spring.io/spring-session/reference/guides/boot-redis.html # =============================== # server.servlet.session.cookie.name=MY_SESSION_COOKIE # server.servlet.session.cookie.max-age=3600 # server.servlet.session.cookie.domain # server.servlet.session.cookie.path # not working? # spring.session.redis.namespace=bytedeskim # # =============================== # = ai # =============================== # spring.mvc.async.request-timeout=10000 logging.level.org.springframework.ai.chat.client.advisor=DEBUG # 启用Spring AI的观察功能 spring.ai.observation.enabled=true spring.ai.retry.observation.enabled=true # 文本对话配置 # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_text # spring.ai.model.chat=none # spring.ai.model.chat=ollama spring.ai.model.chat=zhipuai # spring.ai.model.chat=dashscope # 向量模型 # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_embedding # spring.ai.model.embedding=none # spring.ai.model.embedding=ollama spring.ai.model.embedding=zhipuai # spring.ai.model.embedding=dashscope # 视觉模型 # https://www.weiyuai.cn/docs/zh-CN/docs/provider/model_vision # spring.ai.model.vision=none # spring.ai.model.vision=ollama spring.ai.model.vision=zhipuai # spring.ai.model.vision=dashscope # spring.ai.model.image=none spring.ai.model.moderation=none # 语音模型 # spring.ai.model.audio=none # spring.ai.model.audio=ollama spring.ai.model.audio=zhipuai # spring.ai.model.audio=dashscope # spring.ai.model.audio.speech=none spring.ai.model.audio.transcription=none # 重排序模型 # spring.ai.model.rerank=none # spring.ai.model.rerank=ollama spring.ai.model.rerank=zhipuai # spring.ai.model.rerank=dashscope # 多模态模型 # spring.ai.model.multimodal=none # spring.ai.model.multimodal=ollama spring.ai.model.multimodal=zhipuai # spring.ai.model.multimodal=dashscope # ollama: # https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html # spring.ai.ollama.init.pull-model-strategy=always # 默认:11434,为防止本地冲突,如果是docker,需要修改为21434 # spring.ai.ollama.base-url=http://127.0.0.1:11434 spring.ai.ollama.base-url=http://127.0.0.1:21434 spring.ai.ollama.chat.enabled=true # spring.ai.ollama.chat.options.model=deepseek-r1:latest spring.ai.ollama.chat.options.model=qwen3:0.6b spring.ai.ollama.chat.options.temperature=0.7 # spring.ai.ollama.chat.options.numa=false # https://docs.spring.io/spring-ai/reference/api/embeddings/ollama-embeddings.html spring.ai.ollama.embedding.enabled=true # https://github.com/ollama/ollama?tab=readme-ov-file#model-library spring.ai.ollama.embedding.options.model=bge-m3:latest # spring.ai.ollama.embedding.options.numa=false # spring.ai.ollama.init.timeout=60s # spring.ai.ollama.init.max-retries=2 # https://huggingface.co/BAAI/bge-reranker-v2-m3 spring.ai.ollama.embedding.options.model.rerank=linux6200/bge-reranker-v2-m3:latest # zhipuai # https://open.bigmodel.cn/overview # https://docs.spring.io/spring-ai/reference/api/embeddings/zhipuai-embeddings.html # https://docs.spring.io/spring-ai/reference/api/chat/zhipuai-chat.html # spring.ai.zhipuai.base-url=https://open.bigmodel.cn/api/paas # 申请智谱AI API Key:https://www.bigmodel.cn/usercenter/proj-mgmt/apikeys # spring.ai.zhipuai.chat.base-url=URL_ADDRESS spring.ai.zhipuai.api-key='sk-xxx' spring.ai.zhipuai.chat.enabled=true # 免费模型:https://open.bigmodel.cn/dev/api#glm-4 spring.ai.zhipuai.chat.options.model=glm-4.5-flash spring.ai.zhipuai.chat.options.temperature=0.7 # https://docs.spring.io/spring-ai/reference/api/embeddings/zhipuai-embeddings.html spring.ai.zhipuai.embedding.enabled=true # spring.ai.zhipuai.embedding.base-url=https://api.bigmodel.cn # spring.ai.zhipuai.embedding.api-key=sk-xxx # 1024维度的模型 spring.ai.zhipuai.embedding.options.model=embedding-2 # 2048维度的模型 # spring.ai.zhipuai.embedding.options.model=embedding-3 # # spring ai alibaba # https://java2ai.com/docs/dev/get-started/ # 阿里云百炼大模型获取api key: # https://bailian.console.aliyun.com/?apiKey=1#/api-key # 阿里云百炼大模型模型列表: # https://bailian.console.aliyun.com/?spm=a2c4g.11186623.0.0.11c67980m5X2VR#/model-market spring.ai.dashscope.enabled=false # spring.ai.dashscope.base-url=https://dashscope.aliyuncs.com # spring.ai.dashscope.api-key=sk-xxx # spring.ai.dashscope.chat.enabled=false # spring.ai.dashscope.chat.options.model=qwen-max # spring.ai.dashscope.chat.options.temperature=0.7 # spring.ai.dashscope.chat.options.topP=3 # spring.ai.dashscope.audio.transcription.enabled=false # spring.ai.dashscope.image.enabled=false # spring.ai.dashscope.embedding.enabled=false # spring.ai.dashscope.audio.synthesis.enabled=false # spring.ai.nacos.prompt.template.enabled=false # =============================== # = 向量数据库 # =============================== # https://github.com/spring-projects/spring-ai/blob/main/spring-ai-vector-store/src/main/java/org/springframework/ai/vectorstore/SpringAIVectorStoreTypes.java # spring.ai.vectorstore.type=none # spring.ai.vectorstore.type=redis # spring.ai.vectorstore.type=chroma spring.ai.vectorstore.type=elasticsearch # spring.ai.vectorstore.type=weaviate # spring.ai.vectorstore.type=milvus # spring.ai.vectorstore.type=pgvector # elasticsearch # 浏览器可视化插件管理 es-client: https://gitee.com/q2316367743/es-client # 配置参数 https://docs.spring.io/spring-ai/reference/api/vectordbs/elasticsearch.html#elasticsearchvector-properties spring.elasticsearch.uris=http://127.0.0.1:19200 spring.elasticsearch.username=elastic spring.elasticsearch.password=bytedesk123 # spring.ai.vectorstore.elasticsearch.enabled=true spring.ai.vectorstore.elasticsearch.initialize-schema=true spring.ai.vectorstore.elasticsearch.index-name=bytedesk_vs_index spring.ai.vectorstore.elasticsearch.dimensions=1024 # cosine/l2_norm/dot_product spring.ai.vectorstore.elasticsearch.similarity=cosine # chroma # spring.ai.vectorstore.chroma.enabled=false # spring.ai.vectorstore.chroma.uri=http://127.0.0.1:18000 # spring.ai.vectorstore.chroma.collection-name=bytedesk_vs_collection # spring.ai.vectorstore.chroma.distance-function=COSINE # spring.ai.vectorstore.chroma.embedding-dimension=1024 # weaviate # spring.ai.vectorstore.weaviate.enabled=false # spring.ai.vectorstore.weaviate.host=127.0.0.1 # spring.ai.vectorstore.weaviate.port=18080 # spring.ai.vectorstore.weaviate.scheme=http # spring.ai.vectorstore.weaviate.index-name=BytedeskVectors # spring.ai.vectorstore.weaviate.text-field-name=content # milvus # spring.ai.vectorstore.milvus.enabled=false # spring.ai.vectorstore.milvus.host=127.0.0.1 # spring.ai.vectorstore.milvus.port=19530 # spring.ai.vectorstore.milvus.collection-name=bytedesk_vectors # spring.ai.vectorstore.milvus.vector-field=embedding # spring.ai.vectorstore.milvus.text-field=content # spring.ai.vectorstore.milvus.dimensions=1024 # =============================== # = spring ai mcp # https://contribute.liquibase.com/extensions-channels/directory/integration-docs/springboot/configuration/ # =============================== # https://docs.spring.io/spring-ai/reference/api/mcp/mcp-client-boot-starter-docs.html spring.ai.mcp.client.enabled=false # logging.level.org.springframework.ai.mcp=WARN # logging.level.org.springframework.ai.mcp.client.transport.StdioClientTransport=WARN # logging.level.org.springframework.ai.mcp.samples.brave=INFO # logging.level.io.modelcontextprotocol.client=WARN # logging.level.io.modelcontextprotocol.spec=WARN # mcp servers # https://github.com/modelcontextprotocol/servers # https://docs.spring.io/spring-ai/reference/api/mcp/mcp-server-boot-starter-docs.html # https://github.com/spring-projects/spring-ai/blob/b29076f/auto-configurations/spring-ai-mcp-server/src/main/java/org/springframework/ai/autoconfigure/mcp/server/McpServerProperties.java spring.ai.mcp.server.enable=false # spring.ai.mcp.server.name=bytedesk-starter # spring.ai.mcp.server.version=0.0.1 # SYNC or ASYNC spring.ai.mcp.server.type=SYNC # Transport configuration spring.ai.mcp.server.stdio=false # spring.ai.mcp.server.sse-message-endpoint=/mcp/message # spring.ai.mcp.server.resource-change-notification=true # spring.ai.mcp.server.tool-change-notification=true # spring.ai.mcp.server.prompt-change-notification=true # =============================== # = Spring Batch Configuration # =============================== # 禁止启动时自动执行作业 spring.batch.job.enabled=false # 始终初始化批处理表,生产环境建议设置为never spring.batch.jdbc.initialize-schema=never # 表前缀,默认是BATCH_ # spring.batch.jdbc.schema=classpath:org/springframework/batch/core/schema-mysql.sql # spring.batch.jdbc.table-prefix=BD_BATCH_ # # =============================== # = liquibase # https://contribute.liquibase.com/extensions-channels/directory/integration-docs/springboot/configuration/ # =============================== spring.liquibase.enabled=true spring.liquibase.change-log=classpath:db/changelog/master.xml # =============================== # = flowable # https://www.flowable.com/open-source/docs/bpmn/ch05a-Spring-Boot # =============================== # 禁止自动部署流程文件 # flowable.check-process-definitions=false # flowable.deployment-enabled=false # 禁止CMMN自动部署 # flowable.cmmn.enabled=false # flowable.cmmn.deployment-enabled=false # 禁止DMN自动部署 # flowable.dmn.enabled=false # flowable.dmn.deployment-enabled=false # 禁止Form自动部署 # flowable.form.enabled=false # flowable.form.deployment-enabled=false # 禁止Content自动部署 # flowable.content.enabled=false # flowable.content.deployment-enabled=false # 禁止Event Registry自动部署 # flowable.eventregistry.enabled=false # flowable.eventregistry.deployment-enabled=false # =============================== # = Flowable 日志配置 # =============================== logging.level.org.flowable=WARN logging.level.org.flowable.app=WARN logging.level.org.flowable.engine=WARN logging.level.org.flowable.cmmn=WARN logging.level.org.flowable.dmn=WARN logging.level.org.flowable.idm=WARN logging.level.org.flowable.eventregistry=WARN logging.level.org.flowable.common=WARN # =============================== # = 百度翻译 # https://fanyi-api.baidu.com/doc/21 # =============================== bytedesk.translate.baidu.appid=placeholder bytedesk.translate.baidu.key=placeholder # 抖音开放平台 # https://developer.open-douyin.com/webapp/aw74cmav4symty7z/setting/app-info # douyin.client.key=placeholder # douyin.client.secret=placeholder # # =============================== # = 阿里云OSS访问密钥 + 短信服务 # =============================== aliyun.region.id=cn-hangzhou # 获取阿里云密钥 https://ram.console.aliyun.com/profile/access-keys aliyun.access.key.id=placeholder aliyun.access.key.secret=placeholder # 阿里云OSS服务相关配置 # OSS的endpoint,这里是华南地区(也就是深圳) aliyun.oss.endpoint=https://oss-cn-shenzhen.aliyuncs.com aliyun.oss.base.url=https://bytedesk.oss-cn-shenzhen.aliyuncs.com # 这是创建的bucket aliyun.oss.bucket.name=placeholder # 这里已经把自己的域名映射到bucket地址了。需要设置域名绑定,设置域名CNAME(暂不使用) aliyun.oss.img.domain=placeholder # 阿里云短信服务 # 短信签名 https://dysms.console.aliyun.com/domestic/text/sign aliyun.sms.signname=微语 # 短信模板管理 https://dysms.console.aliyun.com/domestic/text/template aliyun.sms.templatecode=SMS_xxxxxxxxx # # =============================== # = 腾讯云COS对象存储访问密钥 # =============================== # 创建bucket并需要在此bucket下创建文件夹:apns/development(二级文件夹), apns/production(二级文件夹), avatars, images, voices, files # 储桶所属地域 tencent.bucket.location=ap-shanghai # 存储桶名称 tencent.bucket.name= # 访问域名 tencent.bucket.domain= #API密钥管理获取 tencent.appid= tencent.secretid= tencent.secretkey= # =============================== # = 微信支付 # =============================== bytedesk.wechat.pay.enabled=false bytedesk.wechat.pay.certpath='' bytedesk.wechat.pay.appid= bytedesk.wechat.pay.mch_id= bytedesk.wechat.pay.key= bytedesk.wechat.pay.notify_url= # =============================== # = docker compose # 可以 cd 到 starter/src/main/resources 目录下,事先启动容器,然后启动项目,或者直接启动项目,项目会自动启动容器(但会等待容器启动完成) # 启动容器中依赖:docker compose -p bytedesk -f compose.yaml up -d # 停止容器中依赖:docker compose -p bytedesk -f compose.yaml down #= 跟模块 spring-boot-docker-compose 配合使用 # https://spring.io/guides/topicals/spring-boot-docker # https://spring.io/blog/2023/06/21/docker-compose-support-in-spring-boot-3-1 # https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-docker-compose # https://hub.docker.com/r/jackning/bytedesk # https://springdoc.cn/docker-compose-support-spring-boot/ # https://docs.spring.io/spring-boot/docs/3.2.0/reference/htmlsingle/#features.docker-compose # =============================== # true 表示启用 docker compose # false 表示禁用 docker compose spring.docker.compose.enabled=false # 指定 docker compose 文件路径,路径:starter/src/main/resources spring.docker.compose.file=classpath:compose.yaml # 设置Docker Compose项目名称,相当于命令行中的 -p 参数 spring.docker.compose.project-name=bytedesk