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: admin@exmaple.com  # sender email 发送者邮箱
          # CRAWLAB_NOTIFICATION_MAIL_SENDERIDENTITY: admin@exmaple.com  # 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条)

<think>嗯,用户问的是如何在Docker启动Crawlab安装第三方依赖。首先,我需要回忆一下Crawlab的基本结构和Docker部署的常见方法。Crawlab是一个基于Golang和Vue.js开发的分布式爬虫管理平台,支持通过Docker快速部署。但用户在使用过程中可能需要安装额外的Python库或者其他系统依赖来运行特定的爬虫脚本。 接下来,用户的问题核心在于如何在Docker环境中安装这些第三方依赖。根据以往的经验,Docker容器默认是精简的,可能缺少一些必要的包。常规的做法可能是在Dockerfile里添加安装步骤,或者进入容器手动安装。但CrawlabDocker镜像可能有特定的结构,需要确认如何处理。 首先,我需要考虑CrawlabDocker镜像是否基于某个特定的基础镜像,比如Python环境。如果是的话,用户可能需要通过pip安装Python包,或者使用apt-get安装系统库。例如,如果用户需要安装requests库或者Chrome驱动,可能需要不同的处理方式。 然后,用户可能使用的是官方提供的Docker镜像,这时候直接修改Dockerfile可能比较麻烦,特别是如果他们是通过docker-compose up启动的话。这时候可能需要通过Dockerfile来构建自定义镜像,或者在启动容器时执行安装命令。 另外,Crawlab的架构分为主节点和工作节点,可能需要分别处理依赖安装,确保所有节点都有相同的环境。不过如果用户只是单节点部署,可能只需要在主节点安装即可。 还有,用户可能遇到的问题是,在容器启动后,手动安装的依赖在容器重启后会丢失,因为Docker容器是无状态的。所以推荐的方法应该是通过Dockerfile构建自定义镜像,这样每次启动时都会包含所需的依赖。 需要分步骤考虑:1)如何安装Python依赖;2)如何安装系统依赖;3)如何持久化这些更改。比如,使用Dockerfile中的RUN指令执行pip install或者apt-get命令。同时,需要注意权限问题,可能需要使用sudo或者切换用户,但在Dockerfile中通常以root身份运行,所以可能不需要sudo。 然后,用户可能需要具体的操作示例,比如修改docker-compose.yml文件,指定构建自定义的Dockerfile,或者在启动命令中添加执行安装脚本的步骤。例如,在docker-compose.yml中使用command字段来运行sh -c,先安装依赖再启动Crawlab。 另外,还需要考虑依赖安装的时间,如果依赖较多,可能会增加镜像构建时间,或者需要优化层缓存。此外,如果依赖有特定的版本要求,需要确保版本兼容性。 总结一下,可能的解决方案包括:自定义Dockerfile,在构建时安装依赖;或者在容器启动时通过脚本安装;或者使用volume挂载本地依赖包。其中,自定义Dockerfile可能是最可靠的方法。 最后,需要验证这些步骤是否正确,比如构建镜像时是否会执行安装命令,启动后容器内是否确实存在所需的依赖。同时提醒用户注意镜像的大小和构建效率,以及如何处理中国地区可能存在的网络问题,比如更换pip源或apt源为国内镜像。</think>在Docker中启动Crawlab安装第三方依赖,需要通过构建自定义镜像或在容器启动时执行安装命令。以下是具体步骤: --- ### 一、通过自定义Dockerfile安装(推荐) 1. **创建Dockerfile** 在Crawlab官方镜像基础上添加安装步骤: ```dockerfile FROM crawlabteam/crawlab:latest # 安装系统依赖(以Ubuntu为例) RUN apt-get update && \ apt-get install -y python3-dev build-essential libssl-dev # 示例依赖 # 安装Python依赖 RUN pip install --no-cache-dir requests selenium psycopg2-binary # 示例Python库 ``` 2. **构建镜像** ```bash docker build -t crawlab-custom . ``` 3. **修改docker-compose.yml** 替换镜像名为自定义镜像: ```yaml services: master: image: crawlab-custom # 使用自定义镜像 # 其他配置保持不变... ``` --- ### 二、启动容器时动态安装 在`docker-compose.yml`中通过`command`指令实现: ```yaml services: master: image: crawlabteam/crawlab:latest command: - sh - -c - | apt-get update && apt-get install -y python3-dev && \ pip install requests && \ /app/docker/start.sh # 最后执行原始启动脚本 # 其他环境变量和配置保持不变... ``` --- ### 三、安装特定类型依赖的示例 1. **安装Chrome驱动(用于Selenium)** ```dockerfile RUN apt-get update && \ apt-get install -y wget unzip chromium-driver && \ wget https://chromedriver.storage.googleapis.com/114.0.5735.90/chromedriver_linux64.zip && \ unzip chromedriver_linux64.zip -d /usr/bin/ && \ chmod +x /usr/bin/chromedriver ``` 2. **更换国内镜像源加速安装** ```dockerfile RUN pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple && \ sed -i 's/archive.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list ``` --- ### 四、验证依赖安装 进入容器检查是否安装成功: ```bash docker exec -it crawlab-master bash python3 -c "import requests; print(requests.__version__)" # 验证Python库 chromedriver --version # 验证系统工具 ``` --- ### 五、注意事项 1. **层缓存优化** 将高频变化的操作(如`pip install`)放在Dockerfile靠后位置,利用缓存加速构建。 2. **多节点部署** 如果使用Worker节点,需确保所有节点镜像包含相同依赖。 3. **依赖精简原则** 仅安装必要依赖,避免镜像臃肿。 4. **国内网络问题** 可预先在Dockerfile中配置镜像源,或在`docker-compose.yml`中设置代理: ```yaml environment: HTTP_PROXY: "http://host.docker.internal:1080" HTTPS_PROXY: "http://host.docker.internal:1080" ``` 通过以上方法,即可在保持Crawlab核心功能的同时,灵活扩展运行环境。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值