『PasteSpider』
最新文章
贴代码出品
热门话题
用户问答
lao人言
「搜索」
PasteSpider之appsettings.json的说明
尘埃 2023-06-07 2526 97 0
理解好appsettings.json的各项配置数据,是使用好PasteSpider的重要因素,每一个字段都有他特殊的意义!

   在PasteSpider的文件中,我们可以看到一个appsettings.json文件,这个文件就是PasteSpider系统的配置文件,大致内容如下:

{
  "App": {
    "CorsOrigins": "http://localhost:5000"
  },
  "ConnectionStrings": {
    "MainConnectionString": "User id=postgres;Password=123456;Host=192.168.1.168;Port=8765;Database=spiderdb;Pooling=true;MaxPoolSize=10;MinPoolSize=0;Connection Lifetime=0;",
    "SqliteConnectionString": "Data Source=data/spider.db" //sqlite的链接字符串,注意使用-v进行映射,否则下次更新后数据就丢失了 容器内文件夹为/app/data/spider.db 示例 -v /spider/sqlite/:/app/data/ 记得宿主要先创建文件夹/spider/sqlite
  },
  "KeeperConfig": {
    "GroupName": "default", //集群模式中的群组划分 同一个群组名称的服务器会划分给同名的spider管理
    "UseRedis": true, //是否采用redis缓存机制,还是使用内存缓存机制,集群部署模式必须使用redis作为缓存
    "SqlDataType": "pgsql", //sqlite pgsql(推荐) 我们将在后续版本中支持mysql(mariadb)/mssql等
    "RecoveryHour": 3, //每日凌晨几点进行资源回收
    "RecoveryDay": 90, //资源回收跨度(天)
    "SingleModel": true, //是否是单例模式(单个PasteSpider,也是可以连接多台服务器的),否则为集群模式(多个PasteSpider组合)
    "SlaveToken": "123qwe456asd789cvb", //集群密钥,防止spider接入到其他的集群中
    "WorkDir": "/spider/", //绑定的执行目录,如果不需要构建可以不需要设定在docker/podman run 中使用 -v /xxx/:/spider/指定,映射到宿主服务器上 请保持两边一致,否则在直连的时候会有问题
    "WaitNginxLoadTime": 10, //等待nginx生效时间
    "WaitRunTime": 20, //等待启动最大时间,超过这个时间则判定启动失败!
    "LoginAccount": "admin@spider.com", //默认的账号
    "LoginPassWord": "123456",//如果不为123456则可以使用这个登陆 默认账号的密码
    "Version": "template-version", //系统版本号line_version
    "TestImage": "pastetestimage", //创建仓库的时候创建的测试镜像的镜像名称
    "UserToken": "1qazxsw23edcvfr4", //token的加密字符串,建议必须更改!!!
    "SyncSoftToken": "time_token" //CS客户端文件同步软件使用密钥time_temptoken
  },
  "RedisConfig": {
    "MainConnection": "192.168.1.168:8379,password=123456", //redis连接字符串
    "Prefix": "spider:", //redis的key的前缀,防止和其他项目撞库
    "ClientName": "spider" //redis连接名称,在redis客户端后台可以查看
  },
  "IpRateLimiting": {
    //false,则全局将应用限制,并且仅应用具有作为端点的规则*。例如,如果您设置每秒5次调用的限制,则对任何端点的任何HTTP调用都将计入该限制
    //true, 则限制将应用于每个端点,如{HTTP_Verb}{PATH}。例如,如果您为*:/api/values客户端设置每秒5个呼叫的限制,
    "EnableEndpointRateLimiting": false,
    //false,拒绝的API调用不会添加到调用次数计数器上;如 客户端每秒发出3个请求并且您设置了每秒一个调用的限制,则每分钟或每天计数器等其他限制将仅记录第一个调用,即成功的API调用。如果您希望被拒绝的API调用计入其他时间的显示(分钟,小时等)  //,则必须设置StackBlockedRequests为true。
    "StackBlockedRequests": false,
    //Kestrel 服务器背后是一个反向代理,如果你的代理服务器使用不同的页眉然后提取客户端IP X-Real-IP使用此选项来设置
    "RealIpHeader": "X-Real-IP",
    //取白名单的客户端ID。如果此标头中存在客户端ID并且与ClientWhitelist中指定的值匹配,则不应用速率限制。
    "ClientIdHeader": "X-ClientId",
    //限制状态码
    "HttpStatusCode": 429,
    "QuotaExceededResponse": {
      "Content": "{{ \"message\": \"Too many requests,Please try again in {2} second(s).\", \"code\": 429,\"data \":\"\"}}",
      "ContentType": "application/json"
    },
    ////IP白名单:支持Ip v4和v6 
    //"IpWhitelist": [ "127.0.0.1", "::1/10", "192.168.0.0/24" ],
    ////端点白名单
    "EndpointWhitelist": [ "post:/api/spider/upload/drop","post:/api/spider/upload/delete"],
    ////客户端白名单
    //"ClientWhitelist": [ "dev-id-1", "dev-id-2" ],
    //通用规则
    "GeneralRules": [
      {
        //端点路径
        "Endpoint": "*",
        //时间段,格式:{数字}{单位};可使用单位:s, m, h, d
        "Period": "5s",
        //限制
        "Limit": 30
      }
    ]
  },
  "Serilog": {
    "LevelSwitches": {
      "$errorSwitch": "Error",
      "$infoSwitch": "Information",
      "$warnSwitch": "Warning"
    },
    "MinimumLevel": {
      "Default": "Information",
      "Override": {
        "Microsoft": "Information",
        "System": "Information"
      }
    },
    "WriteTo": [
      {
        "Name": "Console",
        "Args": {
          "restrictedToMinimumLevel": "Warning"
        }
      },
      {
        "Name": "File",
        "Args": {
          "path": "logs/log.txt",
          "levelSwitch": "$infoSwitch", //也可以使用 restrictedToMinimumLevel:Information
          "rollingInterval": "Day", // "创建文件的类别,可以是分钟,小时,天,月,年": null, 
          "retainedFileCountLimit": 60, // "--设置日志文件个数最大值,默认31,意思就是只保留最近的31个日志文件", "等于null时永远保留文件": null,
          "fileSizeLimitBytes": 3145728, //设置单个文件大小为3M 默认1G
          "rollOnFileSizeLimit": true //超过文件大小后创建新的
        }
      },
      {
        "Name": "File",
        "Args": {
          "path": "logs/warning.txt",
          "levelSwitch": "$warnSwitch",
          "rollingInterval": "Day", // "创建文件的类别,可以是分钟,小时,天,月,年": null,
          "retainedFileCountLimit": 60, // "--设置日志文件个数最大值,默认31,意思就是只保留最近的31个日志文件", "等于null时永远保留文件": null,
          "fileSizeLimitBytes": 3145728, //设置单个文件大小为3M 默认1G
          "rollOnFileSizeLimit": true //超过文件大小后创建新的
        }
      },
      {
        "Name": "File",
        "Args": {
          "path": "logs/error.txt",
          "levelSwitch": "$errorSwitch",
          "rollingInterval": "Day", // "创建文件的类别,可以是分钟,小时,天,月,年": null,
          "retainedFileCountLimit": 60, // "--设置日志文件个数最大值,默认31,意思就是只保留最近的31个日志文件", "等于null时永远保留文件": null,
          "fileSizeLimitBytes": 3145728, //设置单个文件大小为3M 默认1G
          "rollOnFileSizeLimit": true //超过文件大小后创建新的
        }
      }
    ],
    "Enrich": [ "FromLogContext", "WithMachineName", "WithThreadId" ]
  }
}

   如上图所示,如果你拆开下载获得的PasteSpider镜像包,在/app/文件夹下可以找到大概如上的内容,我们可以不修改他,在使用podman或者docker启动的时候去修改他,比如我们要修改redis的连接字符串,则:

podman run -it -e RedisConfig:Mainconnection="192.168.0.139:6379,password=111111,defaultdatabase=9" --name myspider -d localhost/imgspider:1059

   同理你也可以动态的修改数据库的连接字符串等!

   在使用PasteSpider部署你的项目的时候,可以动态的设置这些配置,使用PasteSpider里面的key-val配置,设定为环境变量,结合PasteSpider占位符可以实现很多有意义的需求!


以下是一个使用单例模式,Sqlite数据库,内存缓存的配置启动参考:

docker run -it -v "/spider/:/spider/" -v /spider/data/:/app/data/ -p 8012:80 -e KeeperConfig:SqlDataType="sqlite" -e KeeperConfig:UseRedis=false --name myspider -d imgspider:2000

   本章问题:

   1.如果在一个宿主机上部署3个订单服务,由于路径映射都是一样的,比如/shop/log/:/app/logs/,按照上面的appsettings.json可以知道他们将公用一个log.txt文件,或者logyyyyMMdd.txt文件,这样应该是有IO问题的,如何解决?

   2.如果有一个服务,比如Nodejs,部署了3个nodejs容器,另外一个服务比如main,需要给他们发送信息,也就是需要轮询,如何让nodejs每次部署,都能很好的告知main,使得main能够快速的,正确的给所有Nodejs发送消息?

评论列表
尘埃
97 2526 0
快捷注册
热门推荐更多
PasteTemplate案例项目
贴代码框架的项目案例,里面有PasteForm的案例代码等;
最新动态
  • 215.****.124 正在查看 PasteSpider之appsettings.json的说明 !
  • 61.****.12 正在查看 PasteSpider之--路由列表-私有仓库-环境配置-的介绍 !
  • 46.****.41 正在查看 PasteSpider升级服务器上的一个服务或集群服务 !
  • 19.****.24 正在查看 Serilog在appsettings.json中的配置 !
  • 204.****.193 正在查看 开发者专用Linux容器部署工具PasteSpider(K8S,Jenkins,CICD)介绍 !
  • 116.****.190 正在查看 Redis的安装 !
  • 47.****.127 正在查看 PasteTimer软件介绍 !
  • 133.****.23 正在查看 Serilog在appsettings.json中的配置 !
  • 216.****.30 正在查看 贴代码框架PasteForm之VS2022右键代码生成器插件介绍 !
  • 117.****.55 正在查看 【PasteForm】最佳CRUD的实现案例项目PasteTemplate解析,包含源码(一) !
  • 116.****.60 正在查看 贴代码框架PasteForm特性介绍之markdown和richtext !
欢迎加入QQ讨论群 296245685 更新记录 [PasteSpider]介绍 @2022-2023 PasteCode.cn 版权所有 ICP证 闽ICP备2021013869号-2