这里有现成的工具来完成部署过程, 它叫作 Scrapyd-Client. 本节将简单介绍使用 Scrapyd-Client 部署 Scrapy 项目的方法.
一, 准备工作
请先确保 Scrapyd-Client 已经正确安装.
二, Scrapyd-Client 的功能
Scrapyd-Client 为了方便 Scrapy 项目的部署, 提供如下两个功能.
将项目打包成 Egg 文件.
将打包生成的 Egg 文件通过 addversion.json 接口部署到 Scrapyd 上.
Scrapyd-Client 帮我们把部署全部实现了, 我们不需要再去关心 Egg 文件是怎样生成的, 也不需要再去读 Egg 文件并请求接口上传了, 只需要执行一个命令即可一键部署.
三, Scrapyd-Client 部署
要部署 Scrapy 项目, 我们首先需要修改项目的配置文件. 例如之前写的 Scrapy 微博爬虫项目, 在项目的第一层会有一个 scrapy.cfg 文件, 它的内容如下:
- [settings]
- default = weibo.settings
- [deploy]
- #url = http://localhost:6800/
- project = weibo
这里需要配置一下 deploy 部分. 例如我们将项目部署到 120.27.34.25 的 Scrapyd 上, 则修改内容如下:
- [deploy]
- url = http://120.27.34.25:6800/
- project = weibo
这样我们再在 scrapy.cfg 文件所在路径执行如下命令:
scrapyd-deploy
运行结果如下:
- Packing version 1501682277
- Deploying to project "weibo" in http://120.27.34.25:6800/addversion.json
- Server response (200):
- {"status": "ok", "spiders": 1, "node_name": "datacrawl-vm", "project": "weibo", "version": "1501682277"}
返回的结果表示部署成功了.
项目版本默认为当前时间戳. 我们也可以指定项目版本, 通过 version 参数传递即可. 例如:
scrapyd-deploy --version 201707131455
值得注意的是, 在 Python 3 的 Scrapyd 1.2.0 版本中, 版本号不能指定为带字母的字符串, 它们必须为纯数字, 否则会出现报错.
如果有多台主机, 我们可以配置各台主机的别名, 修改配置文件为:
- [deploy:vm1]
- url = http://120.27.34.24:6800/
- project = weibo
- [deploy:vm2]
- url = http://139.217.26.30:6800/
- project = weibo
在此统一配置多台主机, 一台主机对应一组配置, 在 deploy 后面加上主机的别名即可. 如果想将项目部署到 IP 为 139.217.26.30 的 vm2 主机, 我们只需要执行如下命令:
scrapyd-deploy vm2
如此一来, 我们只需要在 scrapy.cfg 文件中配置好各台主机的 Scrapyd 地址, 然后调用 scrapyd-deploy 命令加主机名称即可实现部署.
如果 Scrapyd 设置了访问限制, 我们可以在配置文件中加入用户名和密码的配置, 同时修改端口成 Nginx 代理端口. 例如, 在第 1 章我们使用的是 6801, 那么这里就需要改成 6801, 修改如下:
- [deploy:vm1]
- url = http://120.27.34.24:6801/
- project = weibo
- username = admin
- password = admin
- [deploy:vm2]
- url = http://139.217.26.30:6801/
- project = weibo
- username = germey
- password = germey
通过加入 username 和 password 字段, 我们就可以在部署时自动进行 Auth 验证, 然后成功实现部署.
四, 结语
本节介绍了利用 Scrapyd-Client 来方便地将项目部署到 Scrapyd 的过程, 有了它部署不再是麻烦事.
来源: https://juejin.im/post/5b0f8f6f6fb9a00a2364a020