最近打算使用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环境
我们可以直接在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运行。
这个镜像我已经打包推送到Dockerhub里,小伙伴们可以直接把官方的crawlabteam/crawlab换成我提交的这个
easonxie/crawlab-nodejs 就不用再折腾了