本文经授权转载自清雨的博客,作者会定期更新相关信息,欢迎前往阅读。
1、安装 Docker CE → 传送门
CentOS 使用者可以直接参考这篇文章:Docker CE 简明安装步骤 for CentOS
2、一些前期准备
sudo mkdir -p /opt/docker
sudo chown ${USER} -R /opt/docker
mkdir -p /opt/docker/crawlab/data/mongodb
mkdir -p /opt/docker/crawlab/data/redis
mkdir -p /opt/docker/crawlab/logs/crawlab
mkdir -p /opt/docker/crawlab/spiders
mkdir -p /opt/docker/crawlab/tmp
touch /opt/docker/crawlab/docker-compose.yml
cat /dev/null > /opt/docker/crawlab/docker-compose.yml
3、编排 Docker Compose
cat << EOF > /opt/docker/crawlab/docker-compose.yml
version: '3.3' # Docker Compose Version 根据自己的需要选择,不同版本的配置参数略有不同,请自行查阅官方文档
services:
master: # 主节点(服务名称)
image: tikazyq/crawlab:latest
container_name: crawlab-master
environment: # 环境变量
# CRAWLAB_API_ADDRESS 请根据需求改成自己宿主机的物理 IP 地址
CRAWLAB_API_ADDRESS: "192.168.31.200:8000" # localhost IP,前端调用的 API 地址,默认为 localhost:8000
CRAWLAB_SERVER_MASTER: "Y" # 主节点(Y/N)
CRAWLAB_TASK_WORKERS: "5" # 任务并行执行个数,未配置此参数时,默认为:4
CRAWLAB_LOG_LEVEL: "info" # 日志级别
CRAWLAB_MONGO_HOST: "mongo" # MongoDB Host IP,由于在 Docker Compose Cluster 服务集群里,可直接引用服务名称
CRAWLAB_REDIS_ADDRESS: "redis" # Redis Host IP,由于在 Docker Compose Cluster 服务集群里,可直接引用服务名称
volumes: # 卷映射格式 "宿主: 容器"
- "/opt/docker/crawlab/spiders/:/app/spiders/" # 持久化爬虫项目文件到宿主机本地
- "/opt/docker/crawlab/logs/crawlab/:/var/logs/crawlab/" # 持久化日志数据到宿主机本地
- "/opt/docker/crawlab/tmp/:/tmp/" # 持久化临时文件目录到宿主机本地
- "/etc/localtime:/etc/localtime" # 使容器时区与时间和宿主同步
networks: # 固定 ipv4_address,请根据自己的需求分配
default:
ipv4_address: "172.31.16.100"
ports: # 端口映射格式 "宿主: 容器"
- "8080:8080" # frontend 开放前端页面访问端口
- "8000:8000" # frontend 和 backend 的通信端口(前端和后端的通信端口)
depends_on: # 依赖的服务
- mongo
- redis
worker: # 工作节点 (服务名称) 设置(如不需要工作节点,可将此 sercive 的整段配置此 docker-compose.yml 文件里删除)
image: tikazyq/crawlab:latest
container_name: crawlab-worker
volumes: # 卷映射格式 "宿主: 容器"
- "/etc/localtime:/etc/localtime" # 使容器时区与时间和宿主同步
networks: # 固定 ipv4_address,请根据自己的需求分配
default:
ipv4_address: "172.31.16.101"
environment:
CRAWLAB_SERVER_MASTER: "N" # 主节点(Y/N)
CRAWLAB_TASK_WORKERS: "5" # 任务并行执行个数,未配置此参数时,默认为:4
CRAWLAB_MONGO_HOST: "mongo" # MongoDB Host IP,由于在 Docker Compose Cluster 服务集群里,可直接引用服务名称
CRAWLAB_REDIS_ADDRESS: "redis" # Redis Host IP,由于在 Docker Compose Cluster 服务集群里,可直接引用服务名称
depends_on: # 依赖的服务
- mongo
- redis
mongo: # MongoDB 服务
image: mongo:latest
restart: always
volumes: # 卷映射格式 "宿主: 容器"
- "/etc/localtime:/etc/localtime" # 使容器时区与时间和宿主同步
- "/opt/docker/crawlab/data/mongodb/:/data/db/" # 持久化 MongoDB 数据到宿主机本地
networks: # 固定 ipv4_address,请根据自己的需求分配
default:
ipv4_address: "172.31.16.251"
ports: # 端口映射格式 "宿主: 容器"
- "27017:27017"
redis: # Redis 服务
image: redis:latest
restart: always
volumes: # 卷映射格式 "宿主: 容器"
- "/etc/localtime:/etc/localtime" # 使容器时区与时间和宿主同步
- "/opt/docker/crawlab/data/redis/:/data/" # 持久化 Redis 数据到宿主机本地
networks: # 固定 ipv4_address,请根据自己的需求分配
default:
ipv4_address: "172.31.16.252"
ports: # 端口映射格式 "宿主: 容器"
- "6379:6379"
networks: # 配置此 Docker Compose Cluster 服务集群的网络
default:
driver: bridge
ipam:
driver: default
config:
- subnet: "172.31.16.0/24" # 固定网域,请根据自己的需求分配
# 以下配置为 Docker Compose 2.X 版本的参数,3.X 版本已移除部分支持
# gateway: "172.31.16.254" # 配置固定的子网网关
# ip_range: "172.31.16.1/24" # 固定网域里允许分配的 IP 地址子网段范围
# 配置参考资料:
# https://tikazyq.github.io/crawlab-docs/Config/
# https://docs.docker.com/compose/compose-file/
EOF
一些关于配置的说明:
- 固定各个服务的 IP 是为了方便和物理网络的其它服务对接,此时只要在物理网络终端设置好路由表,就能直接通过 Docker 服务的 Subnet 网段,便捷的访问运行在容器里的各类服务。
- MongoDB 和 Redis 的数据持久化到本地可根据自己的需求来设置,如果想在执行 docker-compose down 命令后保存原本的任务队列 / 任务运行详情 / 定时任务设置等,则必须持久化 MongoDB 的数据,至于 Redis 的数据未持久化是否有影响,博主这边暂时未测试过。
P.S:一定要同步容器时区设置,否则定时任务可能无法按照你预设的时间执行。
4、运行 Crawlab 服务集群
# 切换到 Crawlab 工作目录
cd /opt/docker/crawlab
# 后台启动 Crawlab 服务群,并重定向运行日志至 /tmp/crawlabs.log
nohup docker-compose up > /tmp/crawlabs.log 2>&1 &
5、测试集群是否能正常工作
打开 http://localhost:8080/ 或 http://<;your_ip>:8080/
使用默认的账号密码 admin/admin 尝试登录,能登录则正常
否则请查看运行日志 /tmp/crawlabs.log 排查错误
6、其它爬虫的集成与对接
略
7、常见问题 Q&A
https://tikazyq.github.io/cra…
另外,感谢微信“Crawlab 开发交流群”的群主及同仁在博主部署时提供的各种帮助。
有部署上的疑问,大家可以留言一起交流。
参考资料:
- https://tikazyq.github.io/cra…
- https://docs.docker.com/compo…
- https://tikazyq.github.io/cra…
本文由文章发布工具 ArtiPub 自动生成