『贴代码』
我的博文
个人作品
优选问答
「搜索」
PasteSpider之appsettings.json的说明
尘埃 2023-06-07 3101 146 0 编辑
理解好appsettings.json的各项配置数据,是使用好PasteSpider的重要因素,每一个字段都有他特殊的意义!

更多PasteSpider的操作介绍,请前往 PasteSpider操作文档


;

文件结构

如果使用docker的方式拉取镜像的,可能对文件目录不会有过多的了解,如果是使用windows的安装或者Linux的systemd的方式安装,则下载解压后有以下几个文件比较特殊

wwwroot:管理端文件夹,如果你需要前后端分离的,可以使用nginx把这个分离出去

appsettings.json:配置文件

logs:日志文件存放在此

data:数据库文件,比如操作日志,比如sqlite类型的数据文件

config:一些用到的配置信息

template:一些配置用到的模板文件,所以你可以自定义nginx的模板了,就是改这里!

backup:系统内置的默认信息,比如菜单,比如动态表单(IIS的编辑表单字段信息就是这个)


配置部分   

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

{
  "App": {
    "CorsOrigins": "http://localhost:51695"
  },
  "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;",
    "AbpAuditLogging": "Data Source=data/auditlogging.db", //审计日志,目前只能是Sqlite
    "SqliteConnectionString": "Data Source=data/spider.db" //sqlite的链接字符串,注意使用-v进行映射,否则下次更新后数据就丢失了 容器内文件夹为/app/data/spider.db 示例 -v /spider/sqlite/:/app/data/ 记得宿主要先创建文件夹/spider/sqlite
  },
  "KeeperConfig": {
    "GroupName": "default", //集群模式中的群组划分 同一个群组名称的服务器会划分给同名的spider管理 最大字符8位数,对应服务器的组别名称!
    "UseRedis": false, //是否采用redis缓存机制,还是使用内存缓存机制,集群部署模式必须使用redis作为缓存
    "SqlDataType": "sqlite", //sqlite pgsql(推荐) 我们将在后续版本中支持mysql(mariadb)/mssql等
    "LogSqlDataType": "sqlite", //审计日志的数据库类型 和上的AbpAuditLogging对应 目前仅支持sqlite
    "RecoveryDay": 90, //资源回收跨度(天)
    "SingleModel": true, //是否是单例模式(单个PasteSpider,也是可以连接多台服务器的),否则为集群模式(多个PasteSpider组合)
    "WorkDir": "/spider/", //绑定的执行目录,如果不需要构建可以不需要设定在docker/podman run 中使用 -v /xxx/:/spider/指定,映射到宿主服务器上 请保持两边一致,否则在直连的时候会有问题
    "WaitNginxLoadTime": 10, //等待nginx生效时间多少秒
    "WebHost": "", //用于多服务器之间文件同步 示例 http://10.1.4.5:8012 注意是非/结尾
    "WaitRunTime": 20, //等待启动最大时间,超过这个时间则判定启动失败!
    "RunCollectTask": true, //是否收集容器服务器的信息,记录运行状态
    "CollectTaskSecond": 300, //多少秒执行一次统计,统计运行状态等
    "LoginAccount": "admin@spider.com", //默认的账号
    "LoginPassWord": "123456", //如果不为123456则可以使用这个登陆 默认账号的密码
    "Sversion": "25.03.16.01", //24.x.x.x以后版本PasteSpiderWeb和PasteSpiderFile也需要24.x.x.x以上版本
    "TestImage": "pastetestimage", //创建仓库的时候创建的测试镜像的镜像名称
    "UserToken": "111222333444555666", //token的加密字符串,建议必须更改!!! 也作为集群部署的密钥使用
    "CurrentHost": ""//当前节点的访问地址,示例http://172.23.2.1:1290 集群模式必填
  },
  "RedisConfig": {
    "MainConnection": "192.168.1.168:8379,password=123456", //redis连接字符串
    "Prefix": "spider:", //redis的key的前缀,防止和其他项目撞库
    "ClientName": "spider" //redis连接名称,在redis客户端后台可以查看
  },
  "certificates": {
    "Stores": [
      {
        "Name": "My",
        "Path": "",
        "Claims": [ "Read" ]
      }
    ]
  },
  "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", "get:/api/spider/open/download" ],
    ////客户端白名单
    //"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


服务方式

   服务方式,就是把安装包下载后,解压然后执行运行,比如Linux中以systemd的方式运行,而Windows中以Windows.Service的方式运行,这个时候对于上面的-e传递参数环境变量就不合适了,我们可以使用另外一个方式!

    1.复制根目录的appsettings.json文件,命名为appsettings.Production.json,然后你需要修改的地方都在这个appsettings.Production.json上操作,为什么不在appsettings.json上直接操作呢?因为PasteSpider下次升级,可能会新增配置,还容易把你的配置给覆盖了,升级的时候是绝对不会出现有appsettings.Production.json文件的,出现了就表示我这打包有问题了!这样就保证了每次升级你们都可以直接覆盖,不需要对比配置啥的!

本章问题:

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

    答:可以使用PasteSpider的启动参数,启动参数配置动态的key-value模式,比如你可以配置键:"Serilog:WriteTo:1:Args:path"对应的值为"logs/log{{App.Id}}.txt",这样每个容器生成的日志文件名就不一样了!注意要把环境变量打勾!

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

    答:在项目信息中有一个通知地址,这个的意思是每次服务升级等会把最新的NginxRoute信息推送到这个地址,这样服务可以基于收到的信息做适当的动作!

评论列表
尘埃
146 3101 0
快捷注册
热门推荐更多
PasteBuilder
;
最新动态
  • 129.****.60 正在查看 Redis的安装 !
  • 156.****.218 正在查看 在Centos7中安装Nginx !
  • 156.****.218 正在查看 在Centos7中安装Nginx !
  • 227.****.84 正在查看 开发者专用Linux容器部署工具PasteSpider(K8S,Jenkins,CICD)介绍 !
  • 227.****.84 正在查看 开发者专用Linux容器部署工具PasteSpider(K8S,Jenkins,CICD)介绍 !
  • 168.****.118 正在查看 PasteSpider之私有仓库的创建和使用 !
  • 168.****.118 正在查看 PasteSpider之私有仓库的创建和使用 !
  • 11.****.31 正在查看 在Linux上以Systemd的方式运行PasteSpider !
  • 11.****.31 正在查看 在Linux上以Systemd的方式运行PasteSpider !
  • 220.****.165 正在查看 PasteForm字段的属性一览(持续升级) !
  • 220.****.165 正在查看 PasteForm字段的属性一览(持续升级) !
欢迎加入QQ讨论群 296245685 [PasteSpider]介绍 [PasteForm]介绍 @2022-2023 PasteCode.cn 版权所有 ICP证 闽ICP备2021013869号-2