⚠注意: Crawlab已遷移到Golang版本(v0.3.0),本文的教程僅適用於Python版本(v0.2.4),若有不清楚的,能夠加做者微信詢問,tikazyq1.html
Crawlab是基於Celery的分佈式爬蟲管理平臺,能夠集成任何語言和任何框架。自今年三月份上線以來受到爬蟲愛好者們和開發者們的好評,很多使用者還表示會用Crawlab搭建公司的爬蟲平臺。通過近3個月的迭代,咱們陸續上線了定時任務、數據分析、網站信息、可配置爬蟲、自動提取字段、下載結果、上傳爬蟲等功能,將Crawlab打造得更加實用,更加全面,可以真正幫助用戶解決爬蟲管理困難的問題。前端
可是,不斷有朋友提出來Crawlab存在部署複雜的問題。從安裝Crawlab到最終打開界面須要大概10-20分鐘的時間,而這還不包括數據庫的安裝和環境的配置。若是要將Crawlab部署在生產環境,或者用做分佈式管理的話,部署將更加困難。所以,本篇文章將詳細介紹Crawlab的部署,幫助開發者們更加方便地部署爬蟲管理平臺。python
這應該是部署應用的最方便也是最節省時間的方式了。在最近的一次版本更新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 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.yml
的yaml
文件來定義須要啓動的容器,能夠是單個,也能夠(一般)是多個的。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
依賴於mongo
和redis
容器,所以在啓動以前會同時啓動mongo
和redis
容器。這樣就不須要單獨配置mongo
和redis
服務了,大大節省了環境配置的時間。
安裝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
,在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的使用和開發。