爬蟲管理平臺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的使用和開發。

相關文章
相關標籤/搜索