Crawlab 支持Nodejs脚本执行

2022-08-29 19:31:27 浏览数 (1)

最近打算使用nodejs写点爬虫,爬取一些自己感兴趣的信息,发现项目Crawlab不错,可以支持在线写爬虫,制定定时任务,支持分布式,但是对nodejs的支持不是很友好,官方也缺乏文档指引。想在Crawlab上使用nodejs写好爬虫,得自己好好折腾下了

一、安装Crawlab

在服务器上先按照docker,然后按照官方文档的指引,下载好docker-compose.yml, 然后执行docker-compose up -d,启动镜像,访问http://<your_ip>:8080

代码语言:txt复制
version: '3.3'
services:
  master:
    image: crawlabteam/crawlab
    container_name: crawlab_master
    restart: always
    environment:
      CRAWLAB_NODE_MASTER: "Y"  # Y: 主节点
      # mongo host address. 在 Docker-Compose 网络中,直接引用 service 名称
      CRAWLAB_MONGO_HOST: "mongo"  
      CRAWLAB_MONGO_PORT: "27017"  # mongo port 
      CRAWLAB_MONGO_DB: "crawlab"  # mongo database 
      CRAWLAB_MONGO_USERNAME: "username"  # mongo username
      CRAWLAB_MONGO_PASSWORD: "password"  # mongo password 
      CRAWLAB_MONGO_AUTHSOURCE: "admin"  # mongo auth source 
    volumes:
      - "/opt/crawlab/master:/data"  # 持久化 crawlab 数据
    ports:
      - "8080:8080"  # 开放 api 端口
    depends_on:
      - mongo

  mongo:
    image: mongo:4.2
    restart: always
    environment:
      MONGO_INITDB_ROOT_USERNAME: "username"  # mongo username
      MONGO_INITDB_ROOT_PASSWORD: "password"  # mongo password
    volumes:
      - "/opt/crawlab/mongo/data/db:/data/db"  # 持久化 mo ngo 数据
    ports:
      - "27017:27017"  # 开放 mongo 端口到宿主机

官方虽然声称支持任何语言的爬虫,但是默认的指引安装的镜像只是预装了paython的爬虫执行环境,默认情况下使用nodejs会报错。

创建nodejs爬虫例子创建nodejs爬虫例子
官方镜像不带Node执行环境官方镜像不带Node执行环境

二、支持Nodejs环境

我们可以直接在crawlab master镜像里安装nodejs,这样就可以直接支持node脚本执行了,但是这样每次重建镜像,都得重新安装nodejs, 比较理想的办法是构建一个支持node的crawlab镜像,说干就干。 先下载好node到本地

代码语言:javascript复制
// cd 到docker-compose.yml 目录下执行
wget https://nodejs.org/dist/v16.16.0/node-v16.16.0-linux-x64.tar.xz
// 解压xz
xz -d node-v16.16.0-linux-x64.tar.xz

然后创建如下的Dockerfile

代码语言:javascript复制
FROM crawlabteam/crawlab:0.6.0

MAINTAINER easonxie@tencent.com

RUN cd /usr/local

ENV PATH "$PATH:/usr/local/node-v16.16.0-linux-x64/bin/"

COPY ./node-v16.16.0-linux-x64.tar /usr/local/node-v16.16.0-linux-x64.tar

RUN tar -xvf /usr/local/node-v16.16.0-linux-x64.tar -C /usr/local

RUN npm config set registry https://mirrors.tencent.com/npm/

RUN npm i -g pnpm

完成后,在Dockerfile目录下执行

代码语言:javascript复制
docker build -t node-crawlab .

编译完成后,修改下docker-compose.yml

代码语言:javascript复制
version: '3.3'
services:
  master:
    image: node-crawlab
    container_name: crawlab_master
    restart: always
    environment:
      CRAWLAB_NODE_MASTER: "Y"  # Y: 主节点
      # mongo host address. 在 Docker-Compose 网络中,直接引用 service 名称
      CRAWLAB_MONGO_HOST: "mongo"  
      CRAWLAB_MONGO_PORT: "27017"  # mongo port 
      CRAWLAB_MONGO_DB: "crawlab"  # mongo database 
      CRAWLAB_MONGO_USERNAME: "username"  # mongo username
      CRAWLAB_MONGO_PASSWORD: "password"  # mongo password 
      CRAWLAB_MONGO_AUTHSOURCE: "admin"  # mongo auth source 
    volumes:
      - "/opt/crawlab/master:/data"  # 持久化 crawlab 数据
    ports:
      - "8080:8080"  # 开放 api 端口
    depends_on:
      - mongo

  mongo:
    image: mongo:4.2
    restart: always
    environment:
      MONGO_INITDB_ROOT_USERNAME: "username"  # mongo username
      MONGO_INITDB_ROOT_PASSWORD: "password"  # mongo password
    volumes:
      - "/opt/crawlab/mongo/data/db:/data/db"  # 持久化 mo ngo 数据
    ports:
      - "27017:27017"  # 开放 mongo 端口到宿主机

执行docker-compose -d 重新执行镜像。然后重新去执行之前创建的nodejs 爬虫

已经支持nodejs了已经支持nodejs了

可以看到,任务已经支持了nodejs运行。

这个镜像我已经打包推送到Dockerhub里,小伙伴们可以直接把官方的crawlabteam/crawlab换成我提交的这个

easonxie/crawlab-nodejs 就不用再折腾了

0 人点赞