PasteSpider的安装,你可以使用linux自己部署,不过这里建议采用容器部署,支持podman/docker
上面是V2版本的内容,新版本V5已经发布
V5版本支持把你得服务发布到podman/docker/linux.systemd/windows.iis/windows.service,所以叫V5版本!
目前大多数Linux都支持!你可以加入我们的讨论群(QQ群296245685 ),在安装遇到问题的时候可以找到解答!
PasteSpider目前的版本只支持postgresql数据库和sqlite数据库,所以先要安装postgresql数据库,如何安装可以参照文章
?我想简单测测,可以不安装这个数据库么???可以的!
本文下方会提供一个sqlite和程序内存的启动方法,就是不需要安装postgersql和redis就能跑pastespider!
docker run -it --name postgres --restart always -e POSTGRES_PASSWORD=12345678 -e KeepConfig:SqlDataType="pgsql" -e ALLOW_IP_RANGE=0.0.0.0/0 -v /outdata/postgres/data:/var/lib/postgresql/data -p 8765:5432 -d postgres
如果安装后,一直链接不上postgres,提示密码错误,如果从日志上看可以看到如下提示
2023-11-11 02:53:56.414 UTC [31] FATAL: password authentication failed for user "postgres"
2023-11-11 02:53:56.414 UTC [31] DETAIL: Connection matched file "/var/lib/postgresql/data/pg_hba.conf" line 129: "host all all all scram-sha-256"
这个是因为postgres改版了,意思是要你把密码加密后在填入,你如果还要用明文的话,按照提示打开这个文件/var/lib/postgresql/data/pg_hba.conf,看到提示把这一整行改成host all all all trust 即可,然后重启Postgresql这一整个容器。
配置文件中默认是使用Postgresql数据库的,你也可以切换到Sqlite数据库(只能单例部署的时候,如果是集群部署必须要使用远端数据库),注意如果切换到Sqlite数据库,必须要把数据库的目录(/app/data/默认在容器中是这个路径,这个路径不能随意更改,因为内部要创建这个文件夹)映射出去。
docker run启动命令的时候,注意修改配置项目中的 -e KeeperConfig:SqlDataType="sqlite",同理缓存也可以更改为程序内存缓存而不使用redis作为缓存!
如果你要使用redis作为缓存,可以使用命令(记得把yourpassword换成你自己的密码,记住好了!)
docker run -it --name redis -p 8004:6379 -d --restart always redis --requirepass yourpassword
!!!---一键拉取PasteSpider的最新版本镜像---!!!
PasteSpider的镜像后续都将使用阿里云的方式,版本号是基于上传的日期而定的,采用yyMMdd的模式
docker pull registry.cn-heyuan.aliyuncs.com/apeart/pastespider:latest
如果你是使用podman的,则为
podman pull registry.cn-heyuan.aliyuncs.com/apeart/pastespider:latest
关于版本,会在同专题下的更新纪要说明!
注意之前的镜像获取方式全部取消,那个太复杂了!
拉取镜像后,可以使用tag修改下镜像名称
docker tag registry.cn-heyuan.aliyuncs.com/apeart/pastespider:[镜像版本号] pastespider:[镜像版本号]
PasteSpider的启动依赖于他里面的appsettings.json配置文件,里面记录了数据库链接等,注意启动命令中的镜像名称要和你实际的相符,有些电脑的镜像会添加localhost/的前缀,有些不会,然后是后面的TAG(我比较习惯这里用版本号标识)
你也可以直接解药这个images包,特别查看appsettings.json这个文件,这个文件是配置信息。大致信息如下:
{
"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" ]
}
}
如果你要修改数据库的链接字符串,可以在docker run的后面加入如下配置 -e ConnectionStrings:MainConnectionString="PostgresqlConnectionString"
如果你要修改日志文件的文件夹路径,则是这样的 -e "Serilog:WriteTo:1:Args:path=/logs/abc.txt"
这里面 -e 后面的双引号放哪里,主要要看你的值里面有没有=,有的话你就把他弄值后面,如果没有,则可以全部包裹。
先要在docker中安装postgresql数据库,如果你没有这个数据库的话,安装好了后测试下链接字符串有没有问题,然后启动的时候配置如链接串,建议采用局域网的IP,如果允许的话。
参考启动命令
docker run -d --name myspider -v "/spider/:/spider/" -e ConnectionStrings:MainConnectionString="你的数据库连接字符串" -e RedisConfig:MainConnection="你的redis数据量连接字符串" -e KeeperConfig:UserToken="随机码请修改" - p 12345:80 imgspider:1097
上方要注意的是 -v /spider/:/spider/是把当前服务器的/spider/文件夹映射给这个容器内的/spider/,这样PasteSpider好使用文件更新,打包等功能!
启动后,使用docker ps查看下运行情况,看看mypastespider是否在运行。注意KeeperConfig:UserToken的作用是这个字符串作为加密的密文,所以请自己随机修改一下,有序可以一直用同一个!
比如我的启动命令是
docker run -it -v "/spider/:/spider/" -e ConnectionStrings:MainConnectionString="User id=postgres;Password=12345678;Host=192.168.0.29;Port=8002;Database=spiderdb;Pooling=true;MaxPoolSize=10;MinPoolSize=0;Connection Lifetime=0;" -e RedisConfig:Mainconnection="192.168.0.29:8004,password=12345678,defaultdatabase=9" -e KeeperConfig:UserToken="112uuyt7765bsgehdeuw23iewe" --name myspider -d imgspider:1097
PasteSpider采用netcore的EF编写,并不需要执行sql语句创建数据库啥的,系统第一次运行的时候会自行判断设定的数据库是否存在,是否需要升级等,这便于后续的自动升级。你只要确保这个数据库连接字符串中的数据库是否和你其他的数据库重复了。
这里提供一个最简单的版本模式,单例PasteSpider,数据库采用Sqlite,内存服务使用程序的内存不使用redis,则有启动命令可以参考如下:(注意路径的映射,不然下次升级的时候数据就丢失了,下面案例使用的sqlite数据库映射到了宿主的/spider/data/文件夹下)
docker run -it -v "/spider/:/spider/" -v /spider/data/:/app/data/ -p 8012:80 -e KeeperConfig:SqlDataType="sqlite" -e KeeperConfig:UseRedis=false -e KeeperConfig:UserToken="67uiyt876jyhb567" --name myspider -d imgspider:2000
启动命令要保存好,下次升级PasteSpider的时候就简单了,直接修改引用的镜像版本号就行了,也就是最后面的imgspider:xxxx
打开浏览器输入地址,这个地址是多少就要看你的centos7服务器的IP和你上面启用PasteSpider的-p的配置了。
PasteSpider的初始账号是:admin@spider.com 密码是:123456,为了你的服务器安全,建议登陆后更改密码!
在docker中
docker logs myspider
可以查看执行日志,或者查看日志文件夹!
由于PasteSpider要上传文件,所以一般要修改上传文件的大小限制。
nginx中配置spier的路由规则的地方添加如下代码
server {
server_name spider.pastecode.cn;
listen 80;
#charset koi8-r;
#access_log logs/pastecode.access.log main;
#由于PasteSpider部分使用了长连接,在这里需要配置下
location /statushub {
proxy_pass http://127.0.0.1:8012;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
location / {
#这个要看你的服务是部署在哪个端口的,我是部署在宿主的8012端口
proxy_pass http://127.0.0.1:8012/;
index index.html;
proxy_set_header Host "$server_addr:$server_port";
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header referer "$server_addr:$server_port";
proxy_http_version 1.1;
client_max_body_size 2M;
client_body_buffer_size 2M;
proxy_set_header Connection "Keep-Alive";
proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
}
}
这个配置其实看个人哈,比如我的话会把前端和后端分开,后端的是接口都是/api/开头,当然了上面的/statushub除外
前端文件在??? 容器内的/wwwroot/文件夹内,也就是你把这个文件夹的文件弄到宿主文件夹上,就可以前后端分离部署了,如果你访问/swagger/你还可以针对性的执行二次开发!
上面中有一个配置要注意client_max_body_size client_body_buffer_size,我感觉因该是后者,这个是限制文件上传大小的,在为服务同步项目文件的时候要用
比如我的配置修改成2MB的限定,默认好像是1MB,至于要调整多少要看你的项目的最大文件的大小,如果超过大小的,你使用SFTP自己上传也是可以的,这个看个人需求。
如果官网的版本更新了如何升级?
停止和删除现有的容器
docker stop myspider && docker rm myspider
然后重新按照本文的从官网打包最新版本并下载。解压缩,docker load镜像,然后把之前的启动命令找出来,修改后面调用的版本号就行了。
然后试着访问下,默认管理端的页面地址为/page/index.html
打开后看到如下:
使用默认的账号密码登陆即可!
默认账号:admin@spider.com
默认密码:123456
登陆后,记得点击右上方修改密码!
如上所示,就是登陆后台后的样子,通过上面的菜单可以大致看出PasteSpider的功能!
以下是PasteSpider在实际环境中占用的资源情况:
以上罗列出的是三台使用pastespider的linux服务器中pastespdier的资源占用情况,pastespider附带的服务postgres数据库(后续版本将支持mysql等)和redis缓存。第四列为内存占用,大概在137MB~253MB之间,可以看成是非常节省资源的!
每次升级服务的文件都要打开网页找到服务,很麻烦,有更简单的办法么?
1.直接配置SVN/GIT模式,也就是你源码提交,系统自动升级
使用PasteSpider实现类似Jenkins的功能,让你的2G服务器也可以飞起
2.使用PasteSpiderFile进行文件的同步和服务的升级操作!
tar -zxvf spider.1015.tar.gz
要先解压,然后一层一层找到.tar
然后
docker load -i spider.tar
我的启用命令是这个
docker run -it -v "/Users/apeart/spider/:/spider/" -e ConnectionStrings:MainConnectionString="User id=postgres;Password=12345678;Host=192.168.0.29;Port=8002;Database=spiderdb;Pooling=true;MaxPoolSize=10;MinPoolSize=0;Connection Lifetime=0;" -e RedisConfig:Mainconnection="192.168.0.29:8004,password=12345678,defaultdatabase=9" --name myspider -d imgspider:1021
-e 后面的字符串是认大小写的,注意!
如果没有redis,你也可以使用程序的内存缓存,配置信息是
-e KeeperConfig:UseRedis=false
如果不想使用Postgresql和Redis你可以使用应用内存缓存和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
启动命令如下
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
介绍的顺序有点乱,好多人直接去安装postgresql了