185 lines
13 KiB
YAML
185 lines
13 KiB
YAML
AppDebug: true # 设置程序所处的模式,debug=true 调试模式,日志优先显示在控制台, debug=false 非调试模式,将写入日志文件
|
||
|
||
HttpServer:
|
||
Api:
|
||
Port: ":20191" #门户网站类端口,注意前面有冒号
|
||
Web:
|
||
Port: ":20201" #后端应用类端口,注意前面有冒号
|
||
AllowCrossDomain: true #是否允许跨域,默认 允许,更多关于跨域的介绍从参考:https://www.yuque.com/xiaofensinixidaouxiang/bkfhct/kxddzd
|
||
TrustProxies: #设置gin可以信任的代理服务器(例如 nginx 前置代理服务器),详情参见文档:https://www.yuque.com/xiaofensinixidaouxiang/bkfhct/vmobe7
|
||
IsOpen: 1 # 可选值(0 或者 1),如果 go 服务是被 nginx 代理,建议该值设置为 1,将 nginx 代理及机器的ip添加到 ProxyServerList 列表
|
||
ProxyServerList:
|
||
- "113.44.68.213" # nginx 代理服务器ip地址
|
||
# - "192.168.10.2"
|
||
|
||
Token:
|
||
JwtTokenSignKey: "Havoc'sCats" #设置token生成时加密的签名
|
||
JwtTokenOnlineUsers: 10 #一个账号密码允许最大获取几个有效的token,当超过这个值,第一次获取的token的账号、密码就会失效
|
||
JwtTokenCreatedExpireAt: 28800 #创建时token默认有效秒数(token生成时间加上该时间秒数,算做有效期),3600*8=28800 等于8小时
|
||
JwtTokenRefreshAllowSec: 86400 #对于过期的token,允许在多少小时之内刷新,超过此时间则不允许刷新换取新token,86400=3600*24,即token过期24小时之内允许换新token
|
||
JwtTokenRefreshExpireAt: 36000 #对于过期的token,支持从相关接口刷新获取新的token,它有效期为10个小时,3600*10=36000 等于10小时
|
||
BindContextKeyName: "userToken" #用户在 header 头部提交的token绑定到上下文时的键名,方便直接从上下文(gin.context)直接获取每个用户的id等信息
|
||
IsCacheToRedis: 0 #用户token是否缓存到redis, 如果已经正确配置了redis,建议设置为1, 开启redis缓存token,(1=用户token缓存到redis; 0=token只存在于mysql)
|
||
|
||
Redis:
|
||
# Host: "113.44.68.213" # 服务器本地调用。 开发时也在本地启动一个。
|
||
Host: "127.0.0.1"
|
||
Port: 6379
|
||
Auth: ""
|
||
MaxIdle: 10
|
||
MaxActive: 1000
|
||
IdleTimeout: 60
|
||
IndexDb: 1 # 注意 redis 默认连接的是 1 号数据库,不是 0号数据库
|
||
ConnFailRetryTimes: 3 #从连接池获取连接失败,最大重试次数
|
||
ReConnectInterval: 1 # 从连接池获取连接失败,每次重试之间间隔的秒数
|
||
|
||
Logs:
|
||
GinLogName: "/store/logs/gin.log" #设置 gin 框架的接口访问日志
|
||
GoSkeletonLogName: "/store/logs/skeleton.log" #设置GoSkeleton项目骨架运行时日志文件名,注意该名称不要与上一条重复 ,避免和 gin 框架的日志掺杂一起,造成混乱。
|
||
TextFormat: "json" #记录日志的格式,参数选项:console、json , console 表示一般的文本格式
|
||
TimePrecision: "millisecond" #记录日志时,相关的时间精度,该参数选项:second 、 millisecond , 分别表示 秒 和 毫秒 ,默认为毫秒级别
|
||
MaxSize: 10 #每个日志的最大尺寸(以MB为单位), 超过该值,系统将会自动进行切割
|
||
MaxBackups: 7 #保留旧日志最大个数
|
||
MaxAge: 15 #保留旧日志最大天数
|
||
Compress: false #日志备份时,是否进行压缩
|
||
|
||
Websocket: #该服务与Http具有相同的ip、端口,因此不需要额外设置端口
|
||
Start: 0 # 默认不启动该服务(1=启动;0=不启动)
|
||
WriteReadBufferSize: 20480 # 读写缓冲区分配字节,大概能存储 6800 多一点的文字
|
||
MaxMessageSize: 65535 # 从消息管道读取消息的最大字节
|
||
PingPeriod: 20 #心跳包频率,单位:秒
|
||
HeartbeatFailMaxTimes: 4 # 允许心跳失败的最大次数(默认设置为PingPeriod=30秒检测一次,连续4次没有心跳就会清除后端在线信息)
|
||
ReadDeadline: 100 # 客户端在线情况下,正常的业务消息间隔秒数必须小于该值,否则服务器将会主动断开,该值不能小于心跳频率*允许失败次数,单位:秒。 0 表示不设限制,即服务器不主动断开不发送任何消息的在线客户端,但会消耗服务器资源
|
||
WriteDeadline: 35 # 消息单次写入超时时间,单位:秒
|
||
|
||
SnowFlake:
|
||
SnowFlakeMachineId: 2 #如果本项目同时部署在多台机器,并且需要同时使用该算法,请为每一台机器设置不同的ID,区间范围: [0,1023]
|
||
|
||
FileUploadSetting:
|
||
Size: 32 # 设置上传文件的最大值,单位:M,注意: 如果go前置nginx服务器,nginx 默认限制文件上传大小为 50 M ,用户上传文件限制还需要继续修改 nginx 配置
|
||
UploadFileField: "file" # post上传文件时,表单的键名
|
||
# TODO 为了方便后续兼容服务器上的 Nginx,直接采取绝对路径,
|
||
UploadFileSavePath: "D:/.File Data/GoProject/catface_back/public/nginx" # 上传文件保存在路径, 该路径与 BasePath 进行拼接使用
|
||
UploadFileReturnPath: "" # 文件上后返回的路径,由于程序会自动创建软连接,自动将资源定位到实际路径,所有资源的访问入口建议都从public开始
|
||
AllowMimeType: #允许的文件mime类型列表
|
||
# TAG 图像 / 视频
|
||
- "image/jpeg" #jpg、jpeg图片格式
|
||
- "image/png" #png图片格式
|
||
# - "image/x-icon" #ico图片
|
||
- "image/bmp" #bmp图片
|
||
# - "application/x-gzip" #tar.gz
|
||
- "text/plain; charset=utf-8" #txt log json等文本文件
|
||
# - "video/mp4" #视频文件,例如:mp4
|
||
# - "audio/mpeg" #音频文件,例如: mp3
|
||
# TAG 文档
|
||
- "application/zip" #xlsx、docx、zip
|
||
- "application/vnd.openxmlformats-officedocument.wordprocessingml.document" # .docx
|
||
- "application/pdf" # .pdf
|
||
- "application/octet-stream" # 适配 APIfox 的调用
|
||
|
||
AvatarWidth: 200
|
||
DocsRootPath: "docs" # TODO 或许 upload 模块可以写一下自动区分大致的文件类型所在的位置。
|
||
|
||
# casbin 权限控制api接口
|
||
Casbin:
|
||
# Casbin打开以后注意事项:Mysql/MariDb 低版本数据库如果数据库表的引擎默认是 Myisam,
|
||
# 程序会报错:Specified key was too long; max key length is 1000 bytes
|
||
# 请手动复制 database/db_demo_mysql.sql 中创建 tb_auth_casbin_rule 的代码自行创建InnoDb引擎的表,重新启动本项目即可
|
||
IsInit: 0 # 是否随项目启动同步初始化:1=是;0=否, 开启 Casbin 前请确保数据库连接配置正确
|
||
AutoLoadPolicySeconds: 5 # 扫描数据库策略的频率(单位:秒)
|
||
TablePrefix: "tb" # mysql、sqlserver 前缀为 tb ;postgres 数据库前缀请设置为 web.tb,其中 web 是本项目创建的的模式
|
||
TableName: "auth_casbin_rule" # 程序最终创建的表为: tb_auth_casbin_rule (即在前缀和名称之间自动添加了下划线 _ )
|
||
ModelConfig: | # 竖线 | 表示以下整段文本保持换行格式
|
||
[request_definition]
|
||
r = sub, obj, act
|
||
[policy_definition]
|
||
p = sub, obj, act
|
||
[role_definition]
|
||
g = _ , _
|
||
[policy_effect]
|
||
e = some(where (p.eft == allow))
|
||
[matchers]
|
||
m = (g(r.sub, p.sub) || p.sub == "*" ) && keyMatch(r.obj , p.obj) && (r.act == p.act || p.act == "*")
|
||
|
||
RabbitMq:
|
||
HelloWorld:
|
||
#消息服务器地址、账号、密码, / (斜杠)表示默认的虚拟主机,如果是开发者自己创建的,直接追加在 / (斜杠)后面即可,例如:amqp://账号:密码@ip地址:5672/ginskeleton
|
||
Addr: "amqp://账号:密码@ip地址:5672/"
|
||
QueueName: "helloword_queue"
|
||
Durable: false #消息是否持久化
|
||
ConsumerChanNumber: 2 #消费者通道数量(允许一个消费者使用几个连接通道消费、处理消息)
|
||
OffLineReconnectIntervalSec: 5 #消费者掉线后,重连间隔的秒数
|
||
RetryCount: 5 #消费者掉线后,尝试重连最大次数
|
||
WorkQueue:
|
||
Addr: "amqp://账号:密码@ip地址:5672/" #参照前文地址说明
|
||
QueueName: "work_queue"
|
||
Durable: false #消息是否持久化
|
||
ConsumerChanNumber: 2 #消费者通道数量(允许一个消费者使用几个连接通道消费、处理消息)
|
||
OffLineReconnectIntervalSec: 5 #消费者掉线后,重连间隔的秒数
|
||
RetryCount: 5 #消费者掉线后,尝试重连最大次数
|
||
PublishSubscribe:
|
||
Addr: "amqp://账号:密码@ip地址:5672/" #消息服务器地址、账号、密码
|
||
ExchangeType: "fanout"
|
||
ExchangeName: "fanout_exchange" #即时消息队列名称,
|
||
DelayedExchangeName: "delayed_fanout_exchange" #延迟消息队列名称,必须事先在rabbitmq 服务器管理端手动创建
|
||
Durable: false #消息是否持久化,如果初始化的是延迟消息队列,那么该参数会被程序强制设置为 true
|
||
QueueName: "" #队列名称,为空 表示所有订阅的消费者(consumer)都可以接受到同样的消息,如果设置名称,会导致只有最后一个启动的消费者能接受到消息。
|
||
ConsumerChanNumber: 1 #消费者通道数量(发布、订阅模式消费者使用一个通道,避免多个通道重复收到数据)
|
||
OffLineReconnectIntervalSec: 10 #消费者掉线后,重连间隔的秒数
|
||
RetryCount: 5 #消费者掉线后,尝试重连最大次数
|
||
Routing:
|
||
Addr: "amqp://账号:密码@ip地址:5672/" #参照前文地址说明
|
||
ExchangeType: "direct"
|
||
ExchangeName: "direct_exchange"
|
||
DelayedExchangeName: "delayed_direct_exchange" #延迟消息队列名称,必须事先在rabbitmq 服务器管理端手动创建
|
||
Durable: false #消息是否持久化,如果初始化的是延迟消息队列,那么该参数会被程序强制设置为 true
|
||
QueueName: ""
|
||
OffLineReconnectIntervalSec: 10 #消费者掉线后,重连间隔的秒数
|
||
RetryCount: 5 #消费者掉线后,尝试重连最大次数
|
||
Topics:
|
||
Addr: "amqp://账号:密码@ip地址:5672/" #参照前文地址说明
|
||
ExchangeType: "topic"
|
||
ExchangeName: "topic_exchange"
|
||
DelayedExchangeName: "delayed_topic_exchange" #延迟消息队列名称,必须事先在rabbitmq 服务器管理端手动创建
|
||
Durable: false #消息是否持久化,如果初始化的是延迟消息队列,那么该参数会被程序强制设置为 true
|
||
QueueName: ""
|
||
OffLineReconnectIntervalSec: 10 #消费者掉线后,重连间隔的秒数
|
||
RetryCount: 5 #消费者掉线后,尝试重连最大次数
|
||
|
||
#验证码(包括中间件)配置信息
|
||
Captcha:
|
||
captchaId: "captcha_id" # 验证码id提交时的键名
|
||
captchaValue: "captcha_value" #验证码值提交时的键名
|
||
length: 4 # 验证码生成时的长度
|
||
|
||
Weixin:
|
||
AppId: "wxe1ff76a57cc6eed3"
|
||
AppSecret: "46a3557653462da34c6e69f17a472c7c"
|
||
|
||
Code2Session:
|
||
GrantType: "authorization_code" # 主要就是想避免硬编码。
|
||
|
||
Glm:
|
||
ApiKey: "0cf510ebc01599dba2a593069c1bdfbc.nQBQ4skP8xBh7ijU"
|
||
DefaultModelName: "glm-4-flash"
|
||
MaxIdle: 100 # INFO 最大空闲数,毕竟 messages 缓存在内存里,需要根据服务器性能调整。
|
||
MaxActive: 50 # 最大活跃数,考虑 WebSocket 通信的资源消耗。
|
||
MaxActiceOneUser: 1 # TODO 不过从功能设计来说很没有必要,单例就很足够;毕竟又不是专门来提供 GPT 服务的。
|
||
LifeTime: 1800 # Client 有效生存周期:1800 = 0.5h
|
||
|
||
# qiNiu 云存储配置
|
||
QiNiu:
|
||
AccessKey: "bI1MpHUBA9OCg4uSJkuJRmScuCJfOlbePe8fCENo"
|
||
SecretKey: "UP5-GmSmAYNbMlSb6LYLuKZ-fT35nlEzGvOKKm9S"
|
||
|
||
ElasticSearch:
|
||
Addr: "http://localhost:9200"
|
||
UserName: "elastic"
|
||
Password: ""
|
||
|
||
PythonService:
|
||
Host: "localhost"
|
||
Port: 8000
|
||
TopUrl: "api"
|
||
# HttpOkCode: 200 # 这个就还是直接硬编码了...
|