docker快速搭建分布式爬虫pyspider

简介

pyspider是Python中强大Web爬虫框架,并且支持分布式架构。

为什么使用docker搭建pyspider

在安装pyspider时爬过一些坑,比如使用pip install pyspider时,python的版本要求在3.6及以下,因为async等已经是python3.7的关键字;
使用git clone代码安装pyspider,python3 setup.py intall,使用过程会遇到ssl证书的问题,总而言之,可能会遇到版本兼容问题。

使用docker部署pyspider

  • docker的安装不做说明;
  • 直接进入正题。
docker network create --driver bridge pyspider
mkdir -p  /volume1/docker/Pyspider/mysql/{conf,logs,data}/  /volume1/docker/Pyspider/redis/
docker run --network=pyspider --name redis -d -v /volume1/docker/Pyspider/redis:/data -p 6379:6379 redis
docker run --network pyspider -p 33060:3306 --name pymysql -v /volume1/docker/Pyspider/mysql/conf/my.cnf:/etc/mysql/my.cnf -v /volume1/docker/Pyspider/mysql/logs:/logs -v /volume1/docker/Pyspider/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root123 -d mysql

docker run --network=pyspider --name scheduler -d -p 23333:23333 --restart=always binux/pyspider --taskdb "mysql+taskdb://pyspider:[email protected]:33060:33060/taskdb" --resultdb "mysql+projectdb://pyspider:[email protected]:33060:33060/resultdb" --projectdb "mysql+projectdb://pyspider:[email protected]:33060:33060/projectdb" --message-queue "redis://redis:6379/0" scheduler --inqueue-limit 10000 --delete-time 3600
  • 使用docker-compose部署

    • docker-compose.yml
version: ‘2‘
services:
  phantomjs:
    image: ‘binux/pyspider:latest‘
    command: phantomjs
    cpu_shares: 256
    environment:
      - ‘EXCLUDE_PORTS=5000,23333,24444‘
    expose:
      - ‘25555‘ # 暴露端口25555给link到此service的容器
    mem_limit: 256m
    restart: always

  phantomjs-lb:
    image: ‘dockercloud/haproxy:latest‘ # 使用haproxy使用负载均衡
    links:
      - phantomjs
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock # docker-compose v2版本中haproxy需要指定docker socket(MAC系统中)
    restart: always

  fetcher:
    image: ‘binux/pyspider:latest‘
    command: ‘--message-queue "redis://redis:6379/0" --phantomjs-proxy "phantomjs:80" fetcher --xmlrpc‘ # fetcher以rpc的方式启动
    cpu_shares: 256
    environment:
      - ‘EXCLUDE_PORTS=5000,25555,23333‘
    links:
      - ‘phantomjs-lb:phantomjs‘
    mem_limit: 256m
    restart: always

  fetcher-lb:
    image: ‘dockercloud/haproxy:latest‘ # 使用haproxy使用负载均衡
    links:
      - fetcher
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock # docker-compose v2版本中haproxy需要指定docker socket(MAC系统中)
    restart: always

  processor:
    image: ‘binux/pyspider:latest‘
    command: ‘--projectdb "mysql+projectdb://pyspider:[email protected]:33060/projectdb" --message-queue "redis://redis:6379/0" processor‘
    cpu_shares: 256
    mem_limit: 256m
    restart: always

  result-worker:
    image: ‘binux/pyspider:latest‘
    command: ‘--taskdb "mysql+taskdb://pyspider:[email protected]:33060/taskdb"  --projectdb "mysql+projectdb://pyspider:[email protected]:33060/projectdb" --resultdb "mysql+resultdb://pyspider:[email protected]:33060/resultdb" --message-queue "redis://redis:6379/0" result_worker‘
    cpu_shares: 256
    mem_limit: 256m
    restart: always

  webui:
    image: ‘binux/pyspider:latest‘
    command: ‘--taskdb "mysql+taskdb://pyspider:[email protected]:33060/taskdb"  --projectdb "mysql+projectdb://pyspider:[email protected]:33060/projectdb" --resultdb "mysql+resultdb://pyspider:[email protected]:33060/resultdb" --message-queue "redis://redis:6379/0" webui --max-rate 3 --max-burst 6 --scheduler-rpc "http://scheduler:23333/" --fetcher-rpc "http://fetcher/"‘
    cpu_shares: 256
    environment:
      - ‘EXCLUDE_PORTS=24444,25555,23333‘
    ports:
      - ‘15000:5000‘ # webui的对外的端口为5000,可以通过http://localhost:5000访问webui服务。
    links:
      - ‘fetcher-lb:fetcher‘ # link到其它负载均衡haproxy的服务。
    mem_limit: 256m
    restart: always

  webui-lb:
    image: ‘dockercloud/haproxy:latest‘
    links:
      - webui
    restart: always

  nginx:
    image: ‘nginx‘
    links:
      - ‘webui-lb:HAPROXY‘
    ports:
      - ‘5080:80‘
    volumes:
      - /volume1/docker/Pyspider/nginx/nginx.conf:/etc/nginx/nginx.conf
      - /volume1/docker/Pyspider/nginx/conf.d/:/etc/nginx/conf.d/
      - /volume1/docker/Pyspider/nginx/sites-enabled/:/etc/nginx/sites-enabled/
    restart: always

networks:
  default:
    external:
      name: pyspider #指定docker-compose的网络接口为:pyspider;实现和docker run方式创建容器的互通。

如果想创建更多的fetcher, result_work, phantomjs容器实例,可以使用: docker-compose scale phantomjs=2 processor=4 result-worker=2 docker-compose会自动帮你创建2个phantomjs服务,4个processor服务,2个result-worker服务;haproxy会自动实现负载均衡

参考官方文档

原文地址:https://blog.51cto.com/m51cto/2388173

时间: 2024-10-03 22:29:34

docker快速搭建分布式爬虫pyspider的相关文章

使用Docker Swarm搭建分布式爬虫集群

在爬虫开发过程中,你肯定遇到过需要把爬虫部署在多个服务器上面的情况.此时你是怎么操作的呢?逐一SSH登录每个服务器,使用git拉下代码,然后运行?代码修改了,于是又要一个服务器一个服务器登录上去依次更新? 有时候爬虫只需要在一个服务器上面运行,有时候需要在200个服务器上面运行.你是怎么快速切换的呢?一个服务器一个服务器登录上去开关?或者聪明一点,在Redis里面设置一个可以修改的标记,只有标记对应的服务器上面的爬虫运行? A爬虫已经在所有服务器上面部署了,现在又做了一个B爬虫,你是不是又得依次

结合Docker快速搭建ELK日志收集分析平台

结合Docker快速搭建ELK日志收集分析平台 2017-03-27 09:39 阅读 172 评论 0 作者:马哥Linux运维-Eason ELK Stack ELK (Elasticsearch + Logstash + Kibana),是一个开源的日志收集平台,用于收集各种客户端日志文件在同一个平台上面做数据分析. Introduction Elasticsearch, 基于json分析搜索引擎Logstash, 动态数据收集管道Kibana, 可视化视图将elasticsearh所收集

docker快速搭建几个常用的第三方服务

本次和大家分享的内容是使用docker快速搭建工作中常用的第三方的服务,对于有一些互联网背景的公司来说,以下几个服务都是很需要的:redis,rabbit,elasticsearch: 本篇涉及内容深度只针对于简单的测试环境和程序员自身学习,要继续深入各位可以花时间自行研究,希望本篇内容给大家带来好的帮助. 本篇涉及docker常用几个命令: docker pull 镜像名:版本:拉去镜像 docker rmi 镜像名或id:删除镜像 docker images:获取本地已有镜像 docker

一文教您如何通过 Docker 快速搭建各种测试环境(Mysql, Redis, Elasticsearch, MongoDB) | 建议收藏

原文:一文教您如何通过 Docker 快速搭建各种测试环境(Mysql, Redis, Elasticsearch, MongoDB) | 建议收藏 欢迎关注个人微信公众号: 小哈学Java, 文末分享阿里 P8 高级架构师吐血总结的 <Java 核心知识整理&面试.pdf>资源链接!! 个人网站: https://www.exception.site 小哈今天给大家分享的主题是,如何通过 Docker 快速搭建各种测试环境,本文列举的,也是小哈在工作中经常用到的,其中包括 Mysql

Docker-教你如何通过 Docker 快速搭建各种测试环境

今天给大家分享的主题是,如何通过 Docker 快速搭建各种测试环境,本文列举的,也是作者在工作中经常用到的,其中包括 MySQL.Redis.Elasticsearch.MongoDB 安装步骤,通过几行命令秒秒钟就能轻松搞定.友情提示:搭建之前,你需要先安装 Docker 哟,本文基于您已经安装好 Docker 的基础上!废话少说,正文开始! 一.镜像加速 Docker 默认是从官方镜像地址 Docker Hub 下下载镜像,由于服务器在国外的缘故,导致经常下载速度非常慢.为了提升镜像的下载

本地使用 docker 快速搭建一个 PHP7.4 学习环境 | Laravel China 社区

原文:本地使用 docker 快速搭建一个 PHP7.4 学习环境 | Laravel China 社区 安装 docker# 安装方法:https://hub.docker.com/?overlay=onboarding 文档手册:https://docs.docker.com/docker-hub/ 安装完成后使用命令查看版本 $ docker --version 下载镜像# 1.拉取需要的镜像# 去 hub.docker.com 拉取需要的镜像 2.查看拉取方法# 3.转到终端界面# 拉取

基于Docker快速搭建多节点Hadoop集群--已验证

Docker最核心的特性之一,就是能够将任何应用包括Hadoop打包到Docker镜像中.这篇教程介绍了利用Docker在单机上快速搭建多节点 Hadoop集群的详细步骤.作者在发现目前的Hadoop on Docker项目所存在的问题之后,开发了接近最小化的Hadoop镜像,并且支持快速搭建任意节点数的Hadoop集群. 一. 项目简介 GitHub: kiwanlau/hadoop-cluster-docker 直接用机器搭建Hadoop集群是一个相当痛苦的过程,尤其对初学者来说.他们还没开

使用scrapy-redis搭建分布式爬虫环境

scrapy-redis是scrapy框架基于redis数据库的组件,用于scrapy项目的分布式开发和部署. 有如下特征: ? 分布式爬取 您可以启动多个spider工程,相互之间共享单个redis的requests队列.最适合广泛的多个域名网站的内容爬取. ? 分布式数据处理 爬取到的scrapy的item数据可以推入到redis队列中,这意味着你可以根据需求启动尽可能多的处理程序来共享item的队列,进行item数据持久化处理 ? Scrapy即插即用组件 Scheduler调度器 + D

使用scrapy-redis 搭建分布式爬虫环境

scrapy-redis 简介 scrapy-redis 是 scrapy 框架基于 redis 数据库的组件,用于 scraoy 项目的分布式开发和部署. 有如下特征: 分布式爬取: 你可以启动多个 spider 工程,相互之间共享单个的 requests 队列,最适合广泛的多个域名的内容的抓取. 分布式数据处理: 爬取到的 scrapy 的 item 数据可以推入到 redis 队列中,着意味着你可以根据需求启动尽可能多的处理程序来共享 item 队列,进行 item 数据持久化处理 scr