引言
Crawlab 是开源分布式爬虫管理平台,近期发布了 v0.6 beta 版本,在性能、稳定性、易用性等方面做了大量的优化。
近期在群里看到很多同学反馈手动部署各种问题,本着爱折腾的性子,下载了一波源码,并且手动编译,终于手动部署成功,在此分享给大家。
前提条件
本地所需编译环境:
- node v16.8.0
- go 1.17
服务器所需环境:
- CentOS 7.x
- 安装docker
- 安装docker-compose
- 安装nginx
前端部署
源码编译
- clone 源码并配置及编译
# git clone https://github.com/crawlab-team/crawlab.git
# cd crawlab/frontend
# touch .env.production
# npm run build
复制代码
这里新增了一个.env.production文件,这是用来配置构建生产环境的时候请求后端的地址。这里我就配置为我自己的域名地址:
VUE_APP_API_BASE_URL=http://crawlab.anyin.org.cn/api
复制代码
- 配置nginx
在上一节,我们通过前端源码编译会在前端的根目录下生成dist文件,将其打包编译并上传到nginx服务器的/usr/share/nginx/crawlab
目录下,完整效果如下:
接着,我们开始配置域名解析,在/etc/nginx/conf.d
目录下新增域名的配置文件,我这里命名为:crawlab.anyin.org.cn,配置内容如下:
# cat crawlab.anyin.org.cn.conf
server {
listen 80;
server_name crawlab.anyin.org.cn;
root /usr/share/nginx/crawlab/dist;
client_max_body_size 0;
include /etc/nginx/default.d/*.conf;
location / {
try_files $uri $uri/ /index.html;
}
location /api/ {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-NginX-Proxy true;
proxy_set_header Host $http_host;
proxy_pass http://127.0.0.1:8000/;
}
error_page 404 /404.html;
location = /404.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
复制代码
root
指令指向了前端文件的目录/api
是反向代理,代理到后端的api服务
至此,前端已部署完成,访问:http://crawlab.anyin.org.cn
即可看到页面
中间件部署
在部署后端服务之前,还需要部署mongodb
和seaweedfs
服务,其中mongodb
作为数据存储服务,seaweedfs
是文件存储服务。为了方便,这里两个服务我们都使用docker进行部署
生产环境下这两个服务的数据都需要做持久化
mongodb
# cat docker-compose.yml
version: '3'
services:
mongo:
image: mongo:latest
ports:
- 27017:27017
# docker-compose up -d
复制代码
seaweedfs
# cat docker-compose.yml
version: '3'
services:
master:
image: chrislusf/seaweedfs
ports:
- 9333:9333
- 19333:19333
command: "master -ip=master"
volume:
image: chrislusf/seaweedfs
ports:
- 8082:8080
- 18080:18080
- 9325:9325
command: 'volume -mserver="master:9333" -port=8080 -metricsPort=9325'
depends_on:
- master
filer:
image: chrislusf/seaweedfs
ports:
- 8888:8888
- 18888:18888
- 9326:9326
command: 'filer -master="master:9333" -metricsPort=9326'
tty: true
stdin_open: true
depends_on:
- master
- volume
# docker-compose up -d
复制代码
docker-compose up -d
为启动命令- mongodb启动之后,可以通过
docker logs -f --tail 100 <container_id>
查看日志 - seaweedfs部署之后访问:
http://<ip>:8888
,可以看到以下界面即成功
至此,两个中间件服务我们也部署完成。
后端部署
后端环境会比较复杂,Crawlab 0.6版本区分2个服务,分别是:master、worker,所以我们后端编译源码之后,需要分别启动2个进程,2个进程最好是放在不同的服务器上,这里我们为了演示,就放到统一个服务器上。
源码编译
# cd crawlab/backend
# CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o crawlab main.go
复制代码
编译完成之后,会生成crawlab可执行文件,接着上传到服务器上,这里我放到/root/crawlab
目录下。
# mkdir -p /root/crawlab/api /root/crawlab/master /root/crawlab/worker
# #上传二进制文件到`/root/crawlab`目录下
# cd /root/crawlab
# chmod +x crawlab
复制代码
刚说到后端服务会有2个进程,所以这里我们创建2个文件夹,分别为:master/worker ,等下会分别在这两个目录配置每个进程。
配置master服务
把crawlab拷贝一份到api目录下,并且创建配置文件,最后启动服务
# cp crawlab api/
# cd api/
# cat config-api.yml
mongo:
host: 127.0.0.1
port: 27017
db: crawlab
username: ""
password: ""
authSource: "admin"
server:
host: 0.0.0.0
port: 8000
spider:
fs: "/tmp/spiders"
workspace: "/tmp/workspace"
repo: "/tmp/repo"
task:
workers: 16
cancelWaitSeconds: 30
grpc:
address: 127.0.0.1:9666
server:
address: 0.0.0.0:9666
authKey: Crawlab2021!
fs:
filer:
proxy: http://127.0.0.1:8888
url: http://127.0.0.1:8000/filer
authKey: Crawlab2021!
node:
master: 'Y'
config:
path: /root/crawlab/api/config-api.json
# #启动命令
# nohup ./crawlab api --c config-api.yml > log.file 2>log.error &
复制代码
查看后台日志
# cd /root/crawlab/api
# tail -f -n 100 log.file
复制代码
前端请求信息
配置worker服务
接着我们启动worker服务,配置如下:
mongo:
host: 127.0.0.1
port: 27017
db: crawlab
username: ""
password: ""
authSource: "admin"
server:
host: 0.0.0.0
port: 8000
spider:
fs: "/tmp/spiders"
workspace: "/tmp/workspace"
repo: "/tmp/repo"
task:
workers: 16
cancelWaitSeconds: 30
grpc:
address: 127.0.0.1:9666
server:
address: 0.0.0.0:9666
authKey: Crawlab2021!
fs:
filer:
proxy: http://127.0.0.1:8888
url: http://127.0.0.1:8000/filer
authKey: Crawlab2021!
node:
master: 'N'
config:
path: /root/crawlab/worker/config-worker.json
复制代码
启动命令:
# nohup ./crawlab worker --c config-worker.yml > log.file 2>log.error &
复制代码
最后我们可以在Web页面看到2个节点信息:
测试
接着,我们创建一个爬虫测试下。
这里,我们选择工作节点执行爬虫。创建爬虫之后,我们新建一个测试文件,如下:
最后执行爬虫,可以看到,爬虫执行成功
最后
至此,我们已经完成了Crawlab v0.6版本手动部署的全部过程,这里只是简单演示一个简单的部署方式,如果是生产级那需要独立服务,中间件服务、业务进程服务都需要独立,同时如果量大的话,注意做好集群,避免单点。
以上,如果有什么问题欢迎添加个人微信或者公众号交流。
个人微信: daydaycoupons 或者 微信公众号:AnyinWechart