Crawlab系列-v0.6.0版本手动部署

引言

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目录下,完整效果如下:

image.png

接着,我们开始配置域名解析,在/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即可看到页面

image.png

中间件部署

在部署后端服务之前,还需要部署mongodbseaweedfs服务,其中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,可以看到以下界面即成功

image.png

至此,两个中间件服务我们也部署完成。

后端部署

后端环境会比较复杂,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 ,等下会分别在这两个目录配置每个进程。

image.png

配置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
复制代码

image.png

前端请求信息

image.png

配置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个节点信息:

image.png

测试

接着,我们创建一个爬虫测试下。

image.png

这里,我们选择工作节点执行爬虫。创建爬虫之后,我们新建一个测试文件,如下:

image.png

最后执行爬虫,可以看到,爬虫执行成功

image.png

最后

至此,我们已经完成了Crawlab v0.6版本手动部署的全部过程,这里只是简单演示一个简单的部署方式,如果是生产级那需要独立服务,中间件服务、业务进程服务都需要独立,同时如果量大的话,注意做好集群,避免单点。

以上,如果有什么问题欢迎添加个人微信或者公众号交流。

个人微信: daydaycoupons 或者 微信公众号:AnyinWechart 

猜你喜欢

转载自juejin.im/post/7048976058095239205