Crawlab 安装配置小记

以前用过 Gerapy 来分布式管理 Scrapy 爬虫,但会碰到一些小 BUG 无法解决,也找不到相关参考资料,碰巧看到有网友推荐 Crawlab,于是在测试环境部署看看咋样。本文简要记录安装配置过程中碰到的问题。

官方称 Crawlab 是一个使用 Golang 开发的分布式爬虫管理平台,支持 Python、NodeJS、Go、Java、PHP 等多种编程语言以及多种爬虫框架。

Crawlab 支持多种部署方式,这里用官方推荐的 docker-compose 来部署。

一键部署 Crawlab

1、先到 Crawlab 的 GitHub 上复制一份 docker-compose.yml 文件到本地目录。配置文件中可以看到默认会启动 crawlab 、mongo、redis 三个容器。

2、确认已安装了 docker-compose,否则 pip install docker-compose 安装。

3、先启动看是否正常:docker-compose up,加 -d 参数会后台执行。等待所有镜像拉取完成并启动。

4、在浏览器中输入 http://服务器IP:8080 即可看到 Crawlab 控制面板,默认登陆账号密码均为 admin。

自定义 MongoDB 和 Redis 部署 Crawlab

Crawlab 会默认拉取启动 mongo 和 redis 容器。如果我们已经单独安装过 MongoDB 和 Redis,则可修改配置文件来指定服务器地址。

编辑 docker-compose.yml 文件的 environment 信息,添加对应的数据库地址、端口、用户名、密码等,master 和 worker 的 environment 中都要添加。注意:如果 MongoDB 和 Redis 是在宿主机本机安装,CRAWLAB_MONGO_HOST 和 CRAWLAB_REDIS_ADDRESS 要填写容器绑定的即 docker0 虚拟网卡的IP,一般是 172 开头的,如 "172.17.0.1",而不能是 localhost 或 127.0.0.1。再将下面的 mongo 和 redis 容器依赖删掉即可。完整的 docker-compose.yml 类似这样:

version: '3.3'
services:
  master:
    image: tikazyq/crawlab:latest
    container_name: master
    environment:
      CRAWLAB_SERVER_MASTER: "Y"
      CRAWLAB_MONGO_HOST: "172.17.0.1"
      CRAWLAB_MONGO_PORT: "27017"
      CRAWLAB_MONGO_DB: "crawlab_test"
      CRAWLAB_MONGO_USERNAME: "admin"
      CRAWLAB_MONGO_PASSWORD: "password"
      CRAWLAB_MONGO_AUTHSOURCE: "admin"
      CRAWLAB_REDIS_ADDRESS: "172.17.0.1"
      CRAWLAB_REDIS_PORT: "6379"
      CRAWLAB_REDIS_DATABASE: "1"
      CRAWLAB_REDIS_PASSWORD: "password"
    ports:
      - "8080:8080"
  worker:
    image: tikazyq/crawlab:latest
    container_name: worker
    environment:
      CRAWLAB_SERVER_MASTER: "N"
      CRAWLAB_MONGO_HOST: "172.17.0.1"
      CRAWLAB_MONGO_PORT: "27017"
      CRAWLAB_MONGO_DB: "crawlab_test"
      CRAWLAB_MONGO_USERNAME: "admin"
      CRAWLAB_MONGO_PASSWORD: "password"
      CRAWLAB_MONGO_AUTHSOURCE: "admin"
      CRAWLAB_REDIS_ADDRESS: "172.17.0.1"
      CRAWLAB_REDIS_PORT: "6379"
      CRAWLAB_REDIS_DATABASE: "1"
      CRAWLAB_REDIS_PASSWORD: "password"

多节点部署 Crawlab

多节点部署 Crawlab 时,我们用一台服务器来作为 master 主节点运行、监控、操作爬虫 。其他服务器上部署 worker 子节点,主要用来抓数据。同样是 Docker 部署。

主节点的 docker-compose.yml ,其中 CRAWLAB_SERVER_MASTER 设置为 Y

version: '3.3'
services:
  master:
    image: tikazyq/crawlab:latest
    container_name: master
    environment:
      CRAWLAB_SERVER_MASTER: "Y"
      CRAWLAB_MONGO_HOST: "172.17.0.1"
      CRAWLAB_MONGO_PORT: "27017"
      CRAWLAB_MONGO_DB: "crawlab_test"
      CRAWLAB_MONGO_USERNAME: "admin"
      CRAWLAB_MONGO_PASSWORD: "password"
      CRAWLAB_MONGO_AUTHSOURCE: "admin"
      CRAWLAB_REDIS_ADDRESS: "172.17.0.1"
      CRAWLAB_REDIS_PORT: "6379"
      CRAWLAB_REDIS_DATABASE: "1"
      CRAWLAB_REDIS_PASSWORD: "password"
      CRAWLAB_SERVER_REGISTER_TYPE: "ip" 
      CRAWLAB_SERVER_REGISTER_IP: "172.19.0.1"
    ports:
      - "8080:8080"

子节点的 docker-compose.yml ,其中 CRAWLAB_SERVER_MASTER 设置为 N

version: '3.3'
services:
  worker:
    image: tikazyq/crawlab:latest
    container_name: worker
    environment:
      CRAWLAB_SERVER_MASTER: "N"
      CRAWLAB_MONGO_HOST: "172.17.0.1" #应为MongoDB服务器外网IP
      CRAWLAB_MONGO_PORT: "27017"
      CRAWLAB_MONGO_DB: "crawlab_test"
      CRAWLAB_MONGO_USERNAME: "admin"
      CRAWLAB_MONGO_PASSWORD: "password"
      CRAWLAB_MONGO_AUTHSOURCE: "admin"
      CRAWLAB_REDIS_ADDRESS: "172.17.0.1" #应为Redis服务器外网IP
      CRAWLAB_REDIS_PORT: "6379"
      CRAWLAB_REDIS_DATABASE: "1"
      CRAWLAB_REDIS_PASSWORD: "password"
      CRAWLAB_SERVER_REGISTER_TYPE: "ip" 
      CRAWLAB_SERVER_REGISTER_IP: "172.19.0.2"

此处要注意:Crawlab 默认的 CRAWLAB_SERVER_REGISTER_TYPEmac,但多个子节点启动 docker 容器时可能会出现 mac 地址相同的情况,这也会导致在 Crawlab 管理面板的节点列表中找不到 mac 冲突的子节点,所以这里建议设置 CRAWLAB_SERVER_REGISTER_TYPEiphostname 等不重复的注册类别。

配置完后 docker-compose up -d 启动即可。

未完待续

参考资料:

Docker容器访问宿主机网络
Docker容器访问宿主机
Crawlab 文档

» 链接地址:https://wbt5.com/crawlab.html »英雄不问来路,转载请注明出处。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注