Crawlab安装

0.6.0beta目前有问题,建议稳定版出了再用,稳定版出之前先用0.5.x。

Crawlab0.6.0-beta.20211224

按照0.6.0文档快速开始中的步骤(需提前安装Docker):

  1. docker pull crawlabteam/crawlab
  2. # docker pull mongo 后面设置了使用自己的MongoDB,不用Crawlab的,所以这一步不用装
  3. pip install docker-compose
  4. 在作为主节点的服务器创建配置文件并命名为docker-compose.yml,然后输入以下内容。下面的文件内容并不是快速开始中的,而是Docker - 外部 MongoDB中的,具体在下面代码第一行的注释。另外,CRAWLAB_MONGO_URI和CRAWLAB_MONGO_AUTHMECHANISM和CRAWLAB_MONGO_AUTHMECHANISMPROPERTIES不知道有什么用,所以我注释掉了
  5. # from https://docs-next.crawlab.cn/zh/guide/installation/docker.html#%E5%A4%96%E9%83%A8-mongodb,这个文档是Crawlab0.6.0的文档,这个文档的链接来自https://github.com/crawlab-team/crawlab英文README中超链接Documentation (v0.6-beta)
    # 外部 MongoDB 的主节点
    version: '3.3'
    services:
      master:
        image: crawlabteam/crawlab
        container_name: crawlab_master
        restart: always
        environment:
          CRAWLAB_NODE_MASTER: Y  # Y: 主节点
          # CRAWLAB_MONGO_URI: <mongo_uri>  # mongo uri (单独设置)
          CRAWLAB_MONGO_HOST: your host  # mongo host address
          CRAWLAB_MONGO_PORT: '27017'  # mongo port 
          CRAWLAB_MONGO_DB: 'crawlab'  # mongo database,没有数据库会自动创建 
          CRAWLAB_MONGO_USERNAME: your username  # mongo username
          CRAWLAB_MONGO_PASSWORD: your password  # mongo password 
          CRAWLAB_MONGO_AUTHSOURCE: 'admin'  # mongo auth source 
          # CRAWLAB_MONGO_AUTHMECHANISM: <mongo_auth_mechanism>  # mongo auth mechanism 
          # CRAWLAB_MONGO_AUTHMECHANISMPROPERTIES: <mongo_auth_mechanism_properties>  # mongo auth mechanism properties
        volumes:
          - "/opt/crawlab/master:/data"  # 持久化 crawlab 数据
        ports:
          - "8080:8080"  # 开放 api 端口
          - "9666:9666"  # 开放 grpc 端口

  6. 在作为工作节点的服务器创建docker-compose.yml,然后输入以下内容。工作节点可能需要有公网IP,因我将腾讯云服务器作为主节点,将本地虚拟机里的CentOS作为工作节点,然后Crawlab页面中不显示虚拟机中的工作节点,只显示腾讯云服务器中的主节点;再另外找一台服务器作为工作节点,Crawlab页面中就显示这个新服务器的工作节点了。
  7. # 工作节点
    version: '3.3'
    services:
      worker:
        image: crawlabteam/crawlab
        container_name: crawlab_worker
        restart: always
        environment:
          CRAWLAB_NODE_MASTER: N  # N: 工作节点
          CRAWLAB_GRPC_ADDRESS: <master_node_ip>:9666  # grpc address。需将<master_node_ip>替换为主节点IP,并保证其能被工作节点访问
          CRAWLAB_FS_FILER_URL: http://<master_node_ip>:8080/api/filer  # seaweedfs api
        volumes:
          - "/opt/crawlab/master:/data"  # 持久化 crawlab 数据

  8. 分别在主节点和工作节点的yml所在文件夹中执行docker-compose up -d以启动容器,如果出错可以执行docker-compose down关闭并删除当前容器,然后重试前面的步骤。另外docker-compose stop是停止容器,docker-compose ps是列出容器和容器状态。
  9. 浏览器打开主节点ip:8080,进入Crawlab页面,默认帐号密码都是admin。由于工作节点是通过端口8080(API)以及9666(gRPC)来连接主节点的,您需要保证它们都是处于开放状态,没有被主节点防火墙所禁用。
  10. 在Crawlab页面左侧列表中用户处修改密码为f9j4R1S9r3k4D8v2(随便打的密码),页面右上角可设置语言

不建议将用户名admin修改为其他名字,目前0.6.0和0.5.x的社区版有一个问题,修改名字后即便在MongoDB中手动删除admin用户,然后只要一重启Docker,就会自动再生成admin用户,密码还是默认的admin,这样别人就可以用admin登录Crawlab页面。

在Crawl中运行单文件爬虫,就是只有一个py文件的爬虫,运行完成后不知道为什么文件里的代码会被清空;运行scrapy没这个问题。

Crawlab0.5.1

总体步骤大致和0.6.0beta相同。

  1. docker pull tikazyq/crawlab:latest,和0.6.0beta不同
  2. pip install docker-compose
  3. 在作为主节点的服务器创建配置文件并命名为docker-compose.yml,然后输入以下内容。
  4. # from https://docs.crawlab.cn/zh/Installation/Docker.html中安装并启动Crawlab,这个文档的链接来自https://github.com/crawlab-team/crawlab英文README中超链接Documentation
    # 以下内容只保留了原文档中master部分,删除了其余内容,同时删除了master中的depends_on,它是启用容器中的数据库,而我要用我自己的数据库,另外还开启了日志持久化,文档中建议生产环境开启它。
    # 另外,原文档中将主节点和工作节点的信息写在同一个yml文件中,我觉得如果只有一台机器,那么在一台机器中建立两个节点没有意义,所以主节点的yml我只保留了主节点的信息。这点参考了0.6.0beta的节点配置,它就是主节点和工作节点用不同的文件配置的。
    version: '3.3'
    services:
      master: 
        image: tikazyq/crawlab:latest
        container_name: master
        environment:
          # CRAWLAB_API_ADDRESS: "https://<your_api_ip>:<your_api_port>"  # backend API address 后端 API 地址. 适用于 https 或者源码部署
          CRAWLAB_SERVER_MASTER: "Y"  # whether to be master node 是否为主节点,主节点为 Y,工作节点为 N
          CRAWLAB_MONGO_HOST: your host  # MongoDB host address MongoDB 的地址,在 docker compose 网络中,直接引用服务名称
          CRAWLAB_MONGO_PORT: "27017"  # MongoDB port MongoDB 的端口
          CRAWLAB_MONGO_DB: "crawlab"  # MongoDB database MongoDB 的数据库
          CRAWLAB_MONGO_USERNAME: your username  # MongoDB username MongoDB 的用户名
          CRAWLAB_MONGO_PASSWORD: your password  # MongoDB password MongoDB 的密码
          CRAWLAB_MONGO_AUTHSOURCE: "admin"  # MongoDB auth source MongoDB 的验证源
          CRAWLAB_REDIS_ADDRESS: your host  # Redis host address Redis 的地址,在 docker compose 网络中,直接引用服务名称
          CRAWLAB_REDIS_PORT: "6379"  # Redis port Redis 的端口
          CRAWLAB_REDIS_DATABASE: your redis database index  # Redis database Redis 的数据库
          CRAWLAB_REDIS_PASSWORD: your password  # Redis password Redis 的密码
          # CRAWLAB_LOG_LEVEL: "info"  # log level 日志级别. 默认为 info
          # CRAWLAB_LOG_ISDELETEPERIODICALLY: "N"  # whether to periodically delete log files 是否周期性删除日志文件. 默认不删除
          # CRAWLAB_LOG_DELETEFREQUENCY: "@hourly"  # frequency of deleting log files 删除日志文件的频率. 默认为每小时
          CRAWLAB_SERVER_REGISTER_TYPE: "ip"  # node register type 节点注册方式. 默认为 mac 地址,也可设置为 ip(防止 mac 地址冲突)
          CRAWLAB_SERVER_REGISTER_IP: 主节点ip  # node register ip 节点注册IP. 节点唯一识别号,只有当 CRAWLAB_SERVER_REGISTER_TYPE 为 "ip" 时才生效
          # CRAWLAB_TASK_WORKERS: 8  # number of task executors 任务执行器个数(并行执行任务数)
          # CRAWLAB_RPC_WORKERS: 16  # number of RPC workers RPC 工作协程个数
          # CRAWLAB_SERVER_LANG_NODE: "Y"  # whether to pre-install Node.js 预安装 Node.js 语言环境
          # CRAWLAB_SERVER_LANG_JAVA: "Y"  # whether to pre-install Java 预安装 Java 语言环境
          # CRAWLAB_SETTING_ALLOWREGISTER: "N"  # whether to allow user registration 是否允许用户注册
          # CRAWLAB_SETTING_ENABLETUTORIAL: "N"  # whether to enable tutorial 是否启用教程
          # CRAWLAB_NOTIFICATION_MAIL_SERVER: smtp.exmaple.com  # STMP server address STMP 服务器地址
          # CRAWLAB_NOTIFICATION_MAIL_PORT: 465  # STMP server port STMP 服务器端口
          # CRAWLAB_NOTIFICATION_MAIL_SENDEREMAIL: [email protected]  # sender email 发送者邮箱
          # CRAWLAB_NOTIFICATION_MAIL_SENDERIDENTITY: [email protected]  # sender ID 发送者 ID
          # CRAWLAB_NOTIFICATION_MAIL_SMTP_USER: username  # SMTP username SMTP 用户名
          # CRAWLAB_NOTIFICATION_MAIL_SMTP_PASSWORD: password  # SMTP password SMTP 密码
        ports:    
          - "8080:8080" # frontend port mapping 前端端口映射
        volumes:
          - "/var/crawlab/log:/var/logs/crawlab" # log persistent 日志持久化

  5. 在作为工作节点的服务器创建docker-compose.yml,然后输入以下内容。工作节点需要有公网IP。
  6. # 以下内容复制的主节点的,删除了主节点中注释掉的项,修改了container_name和CRAWLAB_SERVER_MASTER和CRAWLAB_SERVER_REGISTER_IP,注释掉了ports。这么做的原因是参考了https://docs.crawlab.cn/zh/Installation/MultiNode.html中部署工作节点部分
    version: '3.3'
    services:
      master: 
        image: tikazyq/crawlab:latest
        container_name: worker
        environment:
          CRAWLAB_SERVER_MASTER: "N"  # whether to be master node 是否为主节点,主节点为 Y,工作节点为 N
          CRAWLAB_MONGO_HOST: your host  # MongoDB host address MongoDB 的地址,在 docker compose 网络中,直接引用服务名称
          CRAWLAB_MONGO_PORT: "27017"  # MongoDB port MongoDB 的端口
          CRAWLAB_MONGO_DB: "crawlab"  # MongoDB database MongoDB 的数据库
          CRAWLAB_MONGO_USERNAME: your username  # MongoDB username MongoDB 的用户名
          CRAWLAB_MONGO_PASSWORD: your password  # MongoDB password MongoDB 的密码
          CRAWLAB_MONGO_AUTHSOURCE: "admin"  # MongoDB auth source MongoDB 的验证源
          CRAWLAB_REDIS_ADDRESS: your host  # Redis host address Redis 的地址,在 docker compose 网络中,直接引用服务名称
          CRAWLAB_REDIS_PORT: "6379"  # Redis port Redis 的端口
          CRAWLAB_REDIS_DATABASE: your redis database index  # Redis database Redis 的数据库
          CRAWLAB_REDIS_PASSWORD: your password  # Redis password Redis 的密码
          CRAWLAB_SERVER_REGISTER_TYPE: "ip"  # node register type 节点注册方式. 默认为 mac 地址,也可设置为 ip(防止 mac 地址冲突)
          CRAWLAB_SERVER_REGISTER_IP: 当前工作节点ip  # node register ip 节点注册IP. 节点唯一识别号,只有当 CRAWLAB_SERVER_REGISTER_TYPE 为 "ip" 时才生效
        # 工作节点不需要对外暴露端口
        # ports:    
        #   - "8080:8080" # frontend port mapping 前端端口映射
        volumes:
          - "/var/crawlab/log:/var/logs/crawlab" # log persistent 日志持久化

  7. 分别在主节点和工作节点的yml所在文件夹中执行docker-compose up -d以启动容器,同0.6.0beta。
  8. 浏览器打开主节点ip:8080,进入Crawlab页面,默认帐号密码都是admin。0.5.1没有0.6.0beta中的9666端口
  9. 在Crawlab页面左侧列表中用户处修改密码为f9j4R1S9r3k4D8v2(随便打的密码)

Crawlab0.5.1添加爬虫时,最好手动填上结果,否则爬虫运行结束后,任务详情中虽然有日志,但可能结果中没数据,也就是数据库中也没数据。若填上了也没数据,可以爬虫结束后等几秒再刷新页面。更新:如果没手动填上结果,数据会在一个叫undefined的集合中,因虽然添加爬虫时它说了不写的话默认放到results_<spider_name>集合中,但添加完成后,运行爬虫时能看到结果集又变成undefined了,undefined就是结果集的名字。

最好手动填上结果
添加爬虫时若不手动填结果,则添加完成后运行爬虫时结果集显示undefined,undefined就是结果集的名字

 

Crawlab0.5.1爬虫运行结束后,概览中的结果数可能不对,最好去数据库中查看数据量对不对,或者去结果中看最后一页的数据量对不对(因默认每页展示10条)。我实际爬了100条数据,概览中的结果数显示80,但数据库中是100条,结果中最后一页(即第十页)的数据是10条(说明确实爬到完整数据了)。

概览中的结果数可能不对

结果中看最后一页的数据量对不对(因默认每页展示10条)

猜你喜欢

转载自blog.csdn.net/fj_changing/article/details/124371916