Linux部署Scrapyd及配置功能

文章目录

    • 版本介绍
    • 1、Python3环境的安装
    • 2、Scrapyd的安装
    • 3、Scrapy配置文件
    • 4、Scrapy启动
    • 5、访问认证
    • 6、Scrapyd-client的安装
    • 7、Scrapyd API的安装
    • 8、Scrapyrt的安装
    • 9、Scrapyd的功能
    • 10、supervisor
    • 10、其他yum安装

版本介绍

python-3.6.5
scrapyd-1.2.0

1、Python3环境的安装

Centos下Python3共存:链接

2、Scrapyd的安装

执行:pip3 install scrapyd报错

Collecting Twisted>=8.0 (from scrapyd)
  Could not find a version that satisfies the requirement Twisted>=8.0 (from scrapyd) (from versions: )
No matching distribution found for Twisted>=8.0 (from scrapyd)

官网下载Twisted:链接

[root@VM_129_36_centos ~]# ls
Twisted-18.7.0.tar.bz2  apps
[root@VM_129_36_centos ~]# tar -xjvf Twisted-18.7.0.tar.bz2
[root@VM_129_36_centos Twisted-18.7.0]# ls
CONTRIBUTING  LICENSE      NEWS.rst  README.rst  code_of_conduct.md  docs       setup.py  tox.ini
INSTALL.rst   MANIFEST.in  PKG-INFO  build       dist                setup.cfg  src
[root@VM_129_36_centos Twisted-18.7.0]# python3 setup.py install

再次执行:pip3 install scrapyd

3、Scrapy配置文件

新建一个/etx/scrapyd/scrapy.conf,Scrapy在运行的时候会读取此配置文件。
r

[root@VM_129_36_centos ~]# sudo mkdir /etc/scrapyd
[root@VM_129_36_centos ~]# sudo vi /etc/scrapyd/scrapyd.conf

官网配置文件:链接

      1 [scrapyd]
      2 eggs_dir    = eggs
      3 logs_dir    = logs
      4 items_dir   =
      5 jobs_to_keep = 5
      6 dbs_dir     = dbs
      7 max_proc    = 0
      8 max_proc_per_cpu = 4
      9 finished_to_keep = 100
     10 poll_interval = 5.0
     11 bind_address = 0.0.0.0
     12 http_port   = 6800
     13 debug       = off
     14 runner      = scrapyd.runner
     15 application = scrapyd.app.application
     16 launcher    = scrapyd.launcher.Launcher
     17 webroot     = scrapyd.website.Root
     18
     19 [services]
     20 schedule.json     = scrapyd.webservice.Schedule
     21 cancel.json       = scrapyd.webservice.Cancel
     22 addversion.json   = scrapyd.webservice.AddVersion
     23 listprojects.json = scrapyd.webservice.ListProjects
     24 listversions.json = scrapyd.webservice.ListVersions
     25 listspiders.json  = scrapyd.webservice.ListSpiders
     26 delproject.json   = scrapyd.webservice.DeleteProject
     27 delversion.json   = scrapyd.webservice.DeleteVersion
     28 listjobs.json     = scrapyd.webservice.ListJobs
     29 daemonstatus.json = scrapyd.webservice.DaemonStatus

**max_proc_per_cpu:**一台主机每个CPU最多运行4个Scrapy任务。
bind_address:默认是本地127.0.0.1,修改为0.0.0.0,可以让外网访问

4、Scrapy启动

启动:scrapyd > ~/scrapyd.log &将日志存在scrapyd.log中。

报错:

  File "/usr/local/lib/python3.6/site-packages/Twisted-18.7.0-py3.6-linux-x86_64.egg/twisted/_version.py", line 8, in 
    from incremental import Version
ModuleNotFoundError: No module named 'incremental'
[root@VM_129_36_centos ~]# pip3 install incremental

报错:

builtins.ModuleNotFoundError: No module named '_sqlite3'
Failed to load application: No module named '_sqlite3'
[root@VM_129_36_centos ~]# yum install sqlite-devel

重新编译安装Python

./configure
sudo make
sudo make install

终于成功运行了。

[root@VM_129_36_centos Python-3.6.5]# scrapyd
2018-09-26T20:00:14+0800 [-] Loading /usr/local/lib/python3.6/site-packages/scrapyd/txapp.py...
2018-09-26T20:00:14+0800 [-] Scrapyd web console available at http://0.0.0.0:6800/
2018-09-26T20:00:14+0800 [-] Loaded.
2018-09-26T20:00:14+0800 [twisted.scripts._twistd_unix.UnixAppLogger#info] twistd 18.7.0 (/usr/local/bin/python3.6 3.6.5) starting up.
2018-09-26T20:00:14+0800 [twisted.scripts._twistd_unix.UnixAppLogger#info] reactor class: twisted.internet.epollreactor.EPollReactor.
2018-09-26T20:00:14+0800 [-] Site starting on 6800
2018-09-26T20:00:14+0800 [twisted.web.server.Site#info] Starting factory 
2018-09-26T20:00:14+0800 [Launcher] Scrapyd 1.2.0 started: max_proc=4, runner='scrapyd.runner'

**访问地址:**http://0.0.0.0:6800/ # 在云上部署就换成自己的IP

5、访问认证

配置完成后,Scrapy和它的接口都是可以公开访问的,我们来配置认证访问,借助Nginx做反向代理。

[root@VM_129_36_centos ~]# yum install nginx
[root@VM_129_36_centos ~]# vi /etc/nginx/nginx.conf

修改配置文件nginx.cong,增加如下配置。

    server {
        listen 6801;    # 这里我没有监听6800端口
        location / {
            proxy_pass  http://127.0.0.1:6800/;
            auth_basic  "Restricted";
            auth_basic_user_file  /etx/nginx/conf.d/.htpasswd;
        }
    }

/etc/nginx/conf.d/目录下,创建用户名和密码。

**安装htpasswd:**htpasswd是Apache密码生成工具,Nginx支持auth_basic认证,因此我门可以将生成的密码用于Nginx中。

[root@VM_129_36_centos conf.d]# yum -y install httpd-tools
[root@VM_129_36_centos conf.d]# htpasswd -c .htpasswd admin
New password:   # 输入两次密码
Re-type new password:
[root@VM_129_36_centos conf.d]# ls -la
total 12
drwxr-xr-x 2 root root 4096 Sep 26 20:12 .
drwxr-xr-x 4 root root 4096 Sep 26 20:08 ..
-rw-r--r-- 1 root root   44 Sep 26 20:12 .htpasswd
[root@VM_129_36_centos conf.d]# cat .htpasswd   # 里面是自己的密码
[root@VM_129_36_centos conf.d]# nginx    # 启动Nginx

htpasswd参数命令如下

-c 创建passwdfile.如果passwdfile 已经存在,那么它会重新写入并删去原有内容.
-n 不更新passwordfile,直接显示密码
-m 使用MD5加密(默认)
-d 使用CRYPT加密(默认)
-p 使用普通文本格式的密码
-s 使用SHA加密
-b 命令行中一并输入用户名和密码而不是根据提示输入密码,可以看见明文,不需要交互
-D 删除指定的用户

6、Scrapyd-client的安装

pip install scrapyd-client
scrapyd-deploy -h   # 检查是否部署成功
curl http://0.0.0.:6800/listprojects.json   # 来获取当前主机的Scrapy项目

7、Scrapyd API的安装

pip install python-scrapyd-api
>>> from scrapyd_api import ScrapydAPI
>>> scrapyd = ScrapydAPI('http://0.0.0.0:6800/')
>>> print(scrapyd.list_projects())
[]

可以通过Python直接获取主机上的Scrapy任务运行的状态。

8、Scrapyrt的安装

Scrapyrt为Scrapy提供了一个调度的HTTP接口,有了它我们就不用再执行Scrapy而是通过HTTP请求接口来调度Scrapy任务。
不需要分布式多任务的话Scrapyrt比Scrapyd更实用。
**注意:**如果不是分布式部署的话,这个比较好用。

[root@VM_129_36_centos ~]# pip3 install scrapyrt
[root@VM_129_36_centos ~]# scrapyrt     # 默认在9080端口运行,必须要在Scrapy项目下,因为它需要scrapy.cfg文件
[root@VM_129_36_centos ~]# scrapyrt -p 9081 # 更换端口

9、Scrapyd的功能

我们来操作一系列HTTP接口来实现各种操作。

10、supervisor

Supervisor (http://supervisord.org) 是一个用 Python 写的进程管理工具,可以很方便的用来启动、重启、关闭进程(不仅仅是 Python 进程)。除了对单个进程的控制,还可以同时启动、关闭多个进程,比如很不幸的服务器出问题导致所有应用程序都被杀死,此时可以用 supervisor 同时启动所有应用程序而不是一个一个地敲命令启动。

10、其他yum安装

sudo yum install -y epel-release libxslt-devel libxml2-devel openssl-devel

然后重新编译Python

你可能感兴趣的:(Scrapy)