操作系统建议选择在linux系统下,windows下docker的安装和scrapyd等等一些配置相对麻烦,
怎么安装docker和scrapyd及scrapyd-client就不细说了.不懂得可以搜搜比较简单
开干新建一个空目录,首先在新目录中创建文件scrapyd.conf,并粘贴如下配置,目的是在docker中开启scrapyd远程访问权限
[scrapyd]
eggs_dir = eggs
logs_dir = logs
items_dir =
jobs_to_keep = 5
dbs_dir = dbs
max_proc = 0
max_proc_per_cpu = 10
finished_to_keep = 100
poll_interval = 5.0
bind_address = 0.0.0.0
http_port = 6800
debug = off
runner = scrapyd.runner
application = scrapyd.app.application
launcher = scrapyd.launcher.Launcher
webroot = scrapyd.website.Root
[services]
schedule.json = scrapyd.webservice.Schedule
cancel.json = scrapyd.webservice.Cancel
addversion.json = scrapyd.webservice.AddVersion
listprojects.json = scrapyd.webservice.ListProjects
listversions.json = scrapyd.webservice.ListVersions
listspiders.json = scrapyd.webservice.ListSpiders
delproject.json = scrapyd.webservice.DeleteProject
delversion.json = scrapyd.webservice.DeleteVersion
listjobs.json = scrapyd.webservice.ListJobs
daemonstatus.json = scrapyd.webservice.DaemonStatus
然后我们将我们的项目所依赖的python环境打包到一个txt文件下,pip freeze > pythonlibs.txt
并把pythonlibs奥传到这个空目录就可以了
最后我们新建文件Dockerfile内容如下
FROM python:3.6 #FROM是指在python:3.6这个镜像上构建,也就是说在构建时就已经有了Python 环境
ADD . /code #ADD是将本地的代码放置到虚拟容器中,
WORKDIR /code #WORKDIR是指定工作目录,这里将刚才添加的代码路径设成工作路径
COPY ./scrapyd.conf /etc/scrapyd/ #COPY是将当前目录下的scrapyd.conf文件复制到虚拟容器的目录下
EXPOSE 6800 #EXPOSE是声明运行时容器提供服务端口
RUN pip3 install -r pythonlibs.txt #RUN是执行安装命令
CMD scrapyd #CMD是容器启动命令,容器运行时,此命令会被执行
截下来构建镜像,命令如下
docker build -t scrapyd:latest .
构建完成后我们查看一下镜像
docker images
查看没问题后我们可以在docker中启动scrapyd命令如下
docker run -d -p 6800:6800 scrapyd #初级用法不支持docker自启
docker run -itd --restart=always --name=scrapyd -p 0.0.0.0:6800:6800 -v /root/data:/root/data -h scrapyd scrapyd:latest /bin/bash #高级用法支持docker自启
启动后我们就可以随便在本地或者别的机器上去访问我们这台服务器的ip加6800端口的链接了http://192.168.126.90:6800,查看我们scrapyd相关东西了,我们可以通过如下命令查看我们的容器
docker ps -l
接下来我们该上传项目到scrapyd了,安装scrapyd-client后,我们进入到我们要上传的scrapy分布式项目目录找到scrapy.cfg,并做出如下修改!
修改完成后我们就可以上传项目到scrapyd了
scrapyd-deploy 部署名称 -p 项目名称
上传后会出现项目状态ID名字等等,上传过后我们就要启动我们的爬虫项目了,命令如下
curl http://192.168.126.88:6800/schedule.json -d project=项目名称 -d spider=爬虫名称
运行成功后我们就可以通过redis传输起始路由然后去192.168.126.88:6800去查看我们的项目运行状态以及相关日志了.
怎么停止爬虫呢命令如下
curl http://192.168.126.88:6800/cancel.json -dproject=项目名称 -d job=运行ID
怎么删除上传项目呢?首先先操作上面的停止命令后在操作如下命令
curl http://192.168.126.88:6800/delproject.json -d project=项目名称
到这里呢scrapyd对接docker大体就完成了我们可以让我们的分布式爬虫一直运行在服务器上的docker镜像中同时我们也可以在任何机器查看监控我们的爬虫
下面是我在scrapyd对接docker过程中出现的问题:
在制作镜像过程中,我们可能会出错这时候我们想要删除镜像重新制作,那么我们先查看镜像
docker images
列出镜像后应该查看容器,因为我们要知道直接删除镜像是删除不了的所以要先删除容器,
查看运行容器
docker ps -a
查看容器后并不能直接删除运行的容器,首先要先关闭该容器后在删除该容器命令如下
docker stop 容器id # 关闭容器
docker rm 容器id #删除容器
之后我们在删除镜像文件命令如下
docker images #查看镜像
docker rmi 镜像id #删除镜像
还有就是我们在上传项目到scrapy过程中,如果我们的项目有远程连接,我们需要在相关机器上开启这个远程连接,比如redis、mysql等我们需要开启这些远程可访问权限这样我们的项目才不会报错.