爬虫管理平台Crawlab部署指南(Docker and more)

⚠注意: Crawlab已迁移到Golang版本(v0.3.0),本文的教程仅适用于Python版本(v0.2.4),若有不清楚的,能够加做者微信询问,tikazyq1.html

前言

Crawlab是基于Celery的分布式爬虫管理平台,能够集成任何语言和任何框架。自今年三月份上线以来受到爬虫爱好者们和开发者们的好评,很多使用者还表示会用Crawlab搭建公司的爬虫平台。通过近3个月的迭代,咱们陆续上线了定时任务数据分析网站信息可配置爬虫自动提取字段下载结果上传爬虫等功能,将Crawlab打造得更加实用,更加全面,可以真正帮助用户解决爬虫管理困难的问题。前端

可是,不断有朋友提出来Crawlab存在部署复杂的问题。从安装Crawlab到最终打开界面须要大概10-20分钟的时间,而这还不包括数据库的安装和环境的配置。若是要将Crawlab部署在生产环境,或者用做分布式管理的话,部署将更加困难。所以,本篇文章将详细介绍Crawlab的部署,帮助开发者们更加方便地部署爬虫管理平台。python

Docker部署

这应该是部署应用的最方便也是最节省时间的方式了。在最近的一次版本更新v0.2.3中,咱们发布了Docker功能,让你们能够利用Docker来轻松部署Crawlab。下面将一步一步介绍如何使用Docker来部署Crawlab。nginx

对Docker不了解的开发者,能够参考一下这篇文章(9102 年了,学点 Docker 知识)作进一步了解。简单来讲,Docker能够利用已存在的镜像帮助构建一些经常使用的服务和应用,例如Nginx、MongoDB、Redis等等。用Docker运行一个MongoDB服务仅需docker run -d --name mongo -p 27017:27017 mongo一行命令。如何安装Docker跟操做系统有关,这里就不展开讲了,须要的同窗自行百度一下相关教程。git

下载镜像

咱们已经在DockerHub上构建了Crawlab的镜像,开发者只须要将其pull下来使用。在pull 镜像以前,咱们须要配置一下镜像源。由于咱们在墙内,使用原有的镜像源速度很是感人,所以将使用DockerHub在国内的加速器。建立/etc/docker/daemon.json文件,在其中输入以下内容。github

{
  "registry-mirrors": ["https://registry.docker-cn.com"]
}
复制代码

这样的话,pull镜像的速度会比不改变镜像源的速度快不少。redis

执行如下命令将Crawlab的镜像下载下来。镜像大小大概在几百兆,所以下载须要几分钟时间。docker

docker pull tikazyq/crawlab:latest
复制代码

更改配置文件

拷贝一份后端配置文件./crawlab/config/config.py以及前端配置文件./frontend/.env.production到某一个地方。例如个人例子,分别为/home/yeqing/config.py/home/yeqing/.env.production数据库

更改后端配置文件config.py,将MongoDB、Redis的指向IP更改成本身数据的值。注意,容器中对应的宿主机的IP地址不是localhost,而是172.17.0.1(固然也能够用network来作,只是稍微麻烦一些)。更改前端配置文件.env.production,将API地址VUE_APP_BASE_URL更改成宿主机所在的IP地址,例如http://192.168.0.8:8000,这将是前端调用API会用到的URL。npm

运行Docker容器

更改好配置文件以后,接下来就是运行容器了。执行如下命令来启动容器。

docker run -d --rm --name crawlab \
	-p 8080:8080 \
	-p 8000:8000 \
	-v /home/yeqing/.env.production:/opt/crawlab/frontend/.env.production \
	-v /home/yeqing/config.py:/opt/crawlab/crawlab/config/config.py \
	tikazyq/crawlab master
复制代码

其中,咱们映射了8080端口(Nginx前端静态文件)以及8000端口(后端API)到宿主机。另外还将前端配置文件/home/yeqing/.env.production和后端配置文件/home/yeqing/config.py映射到了容器相应的目录下。传入参数master是表明该启动方式为主机启动模式,也就是全部服务(前端、Api、Flower、Worker)都会启动。另一个模式是worker模式,只会启动必要的Api和Worker服务,这个对于分布式部署比较有用。等待大约20-30秒的时间来build前端静态文件,以后就能够打开Crawlab界面地址地址看到界面了。界面地址默认为http://localhost:8080

Docker-Compose

固然,也能够用docker-compose的方式来部署。docker-compose是一个集群管理方式,能够利用名为docker-compose.ymlyaml文件来定义须要启动的容器,能够是单个,也能够(一般)是多个的。Crawlab的docker-compose.yml定义以下。

version: '3.3'
services:
 master: 
 image: tikazyq/crawlab:latest
 container_name: crawlab
 volumns:
 - /home/yeqing/config.py:/opt/crawlab/crawlab/config/config.py # 后端配置文件
 - /home/yeqing/.env.production:/opt/crawlab/frontend/.env.production # 前端配置文件
 ports:    
 - "8080:8080" # nginx
 - "8000:8000" # app
 depends_on:
 - mongo
 - redis
 entrypoint:
 - /bin/sh
 - /opt/crawlab/docker_init.sh
 - master
 mongo:
 image: mongo:latest
 restart: always
 ports:
 - "27017:27017"
 redis:
 image: redis:latest
 restart: always
 ports:
 - "6379:6379"
复制代码

这里先定义了master节点,也就是Crawlab的主节点。master依赖于mongoredis容器,所以在启动以前会同时启动mongoredis容器。这样就不须要单独配置mongoredis服务了,大大节省了环境配置的时间。

安装docker-compose也很简单,你们去网上百度一下就能够了。

安装完docker-compose和定义好docker-compose.yml后,只须要运行如下命令就能够启动Crawlab。

docker-compose up
复制代码

一样,在浏览器中输入http://localhost:8080就能够看到界面。

多节点模式

docker-compose的方式很适合多节点部署,在原有的master基础上增长几个worker节点,达到多节点部署的目的。将docker-compose.yml更改成以下内容。

version: '3.3'
services:
 master: 
 image: tikazyq/crawlab:latest
 container_name: crawlab
 volumns:
 - /home/yeqing/config.master.py:/opt/crawlab/crawlab/config/config.py # 后端配置文件
 - /home/yeqing/.env.production.master:/opt/crawlab/frontend/.env.production # 前端配置文件
 ports:    
 - "8080:8080" # nginx
 - "8000:8000" # app
 depends_on:
 - mongo
 - redis
 entrypoint:
 - /bin/sh
 - /opt/crawlab/docker_init.sh
 - master
 worker1: 
 image: tikazyq/crawlab:latest
 volumns:
 - /home/yeqing/config.worker.py:/opt/crawlab/crawlab/config/config.py # 后端配置文件
 - /home/yeqing/.env.production.worker:/opt/crawlab/frontend/.env.production # 前端配置文件
 ports:
 - "8001:8000" # app
 depends_on:
 - mongo
 - redis
 entrypoint:
 - /bin/sh
 - /opt/crawlab/docker_init.sh
 - worker
 worker2: 
 image: tikazyq/crawlab:latest
 volumns:
 - /home/yeqing/config.worker.py:/opt/crawlab/crawlab/config/config.py # 后端配置文件
 - /home/yeqing/.env.production.worker:/opt/crawlab/frontend/.env.production # 前端配置文件
 ports:
 - "8002:8000" # app
 depends_on:
 - mongo
 - redis
 entrypoint:
 - /bin/sh
 - /opt/crawlab/docker_init.sh
 - worker
 mongo:
 image: mongo:latest
 restart: always
 ports:
 - "27017:27017"
 redis:
 image: redis:latest
 restart: always
 ports:
 - "6379:6379"
复制代码

这里启动了多增长了两个worker节点,以worker模式启动。这样,多节点部署,也就是分布式部署就完成了。

直接部署

直接部署是以前没有Docker时的部署方式,相对于Docker部署来讲有些繁琐。但了解如何直接部署能够帮助更深刻地理解Docker是如何构建Crawlab镜像的。这里简单介绍一下。

拉取代码

首先是将github上的代码拉取到本地。

git clone https://github.com/tikazyq/crawlab
复制代码

安装

安装前端所需库。

npm install -g yarn pm2
cd frontend
yarn install
复制代码

安装后端所需库。

cd ../crawlab
pip install -r requirements
复制代码

配置

分别配置前端配置文件./frontend/.env.production和后端配置文件./crawlab/config/config.py。分别须要对部署后API地址以及数据库地址进行配置。

构建

这里的构建是指前端构建,须要执行如下命令。

cd ../frontend
npm run build:prod
复制代码

构建完成后,会在./frontend目录下建立一个dist文件夹,里面是打包好后的静态文件。

Nginx

安装nginx,在ubuntu 16.04是如下命令。

sudo apt-get install nginx
复制代码

添加/etc/nginx/conf.d/crawlab.conf文件,输入如下内容。

server {
    listen    8080;
    server_name    dev.crawlab.com;
    root    /home/yeqing/jenkins_home/workspace/crawlab_develop/frontend/dist;
    index    index.html;
}
复制代码

其中,root是静态文件的根目录,这里是npm打包好后的静态文件。

如今,只须要启动nginx服务就完成了启动前端服务。

nginx reload
复制代码

启动服务

这里是指启动后端服务。咱们用pm2来管理进程。执行如下命令。

pm2 start app.py # API服务
pm2 start worker.py # Worker
pm2 start flower.py # Flower
复制代码

这样,pm2会启动3个守护进程来管理这3个服务。咱们若是想看后端服务的日志的话,能够执行如下命令。

pm2 logs [app]
复制代码

而后在浏览器中输入http://localhost:8080就能够看到界面了。

预览模式

预览模式是一种让用户比较快的上手的一种部署模式。跟直接部署相似,但不用通过构建nginx启动服务的步骤。在启动时只须要执行如下命令就能够了。相较于直接部署来讲方便一些。

python manage.py serve
复制代码

该模式一样会启动3个后端服务和1个前端服务。前端服务是经过npm run serve来进行的,所以是开发者模式。注意:强烈不建议在生产环境中用预览模式。预览模式只是让开发者快速体验Crawlab以及调试代码问题的一种方式,而不是用做生产环境部署的。

结语

本文介绍了三种Crawlab的部署方式,分别是Docker部署直接部署预览模式。其中,Docker部署是推荐部署方式,由于它部署方便、快捷,并且能有效的管理节点,利用docker-compose能够快速搭建集群模式(分布式)的Crawlab服务。直接部署是Docker部署发布以前的一种部署方式,较为繁琐,但对于不了解Docker的开发者来讲是一种替代方案。预览模式让开发者能够快速体验Crawlab,但不建议在生产环境中使用。0.2.3版本中Docker的发布下降了部署Crawlab的难度和繁琐程度,企业和我的均可以在各自的平台上快速部署Crawlab。

Github: tikazyq/crawlab

若是您以为Crawlab对您的平常开发或公司有帮助,请加做者微信拉入开发交流群,你们一块儿交流关于Crawlab的使用和开发。

相关文章
相关标签/搜索