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: 0 # 可选值(0 或者 1),如果 go 服务是被 nginx 代理,建议该值设置为 1,将 nginx 代理及机器的ip添加到 ProxyServerList 列表 ProxyServerList: - "192.168.10.1" # nginx 代理服务器ip地址 - "192.168.10.2" RSA: KeySize: 2048 Token: JwtTokenSignKey: "goskeleton" #设置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: "127.0.0.1" Port: 6379 Auth: "" MaxIdle: 10 MaxActive: 1000 IdleTimeout: 60 IndexDb: 1 # 注意 redis 默认连接的是 1 号数据库,不是 0号数据库 ConnFailRetryTimes: 3 #从连接池获取连接失败,最大重试次数 ReConnectInterval: 1 # 从连接池获取连接失败,每次重试之间间隔的秒数 Logs: GinLogName: "/storage/logs/gin.log" #设置 gin 框架的接口访问日志 GoSkeletonLogName: "/storage/logs/goskeleton.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上传文件时,表单的键名 UploadFileSavePath: "/storage/app/uploaded/" #上传文件保存在路径, 该路径与 BasePath 进行拼接使用 UploadFileReturnPath: "/public/storage/uploaded/" # 文件上后返回的路径,由于程序会自动创建软连接,自动将资源定位到实际路径,所有资源的访问入口建议都从public开始 AllowMimeType: #允许的文件mime类型列表 - "image/jpeg" #jpg、jpeg图片格式 - "image/png" #png图片格式 - "image/x-icon" #ico图片 - "image/bmp" #bmp图片 - "application/zip" #xlsx、docx、zip - "application/x-gzip" #tar.gz - "text/plain; charset=utf-8" #txt log json等文本文件 - "video/mp4" #视频文件,例如:mp4 - "audio/mpeg" #音频文件,例如: mp3 # 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 # 验证码生成时的长度 BaiduCE: ApiKey: "AR1SUIjaKSsCcDjj11QzHDOc" # 生成鉴权签名时使用的 API_KEY SecretKey: "zvEb5CzpuGCZNdQC1TPmDh3IOWn5aWDT" # 生成鉴权签名时使用的 SECRET_KEY QianFanAccessKey: "ALTAKOxb5YvHncyFr7Qbuv1cK0" # 访问千帆sdk 时用的 AccessKey QianFanSecretKey: "1edf17c358574e75b9913ebff7d95b61" # 访问千帆sdk 时用的 SecretKey StyleGeneratePromptPath: "/storage/app/prompt/style_generate.prompt" # 生成样式的提示词保存路径