1. 程式人生 > >Linux部署Scrapyd及配置功能

Linux部署Scrapyd及配置功能

版本介紹

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:連結

[[email protected]_129_36_centos ~]# ls
Twisted-18.7.0.tar.bz2  apps
[[email protected]_129_36_centos ~]# tar -xjvf Twisted-18.7.0.tar.bz2
[[email protected]_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
[
[email protected]
_129_36_centos Twisted-18.7.0]# python3 setup.py install

再次執行:pip3 install scrapyd

3、Scrapy配置檔案

新建一個/etx/scrapyd/scrapy.conf,Scrapy在執行的時候會讀取此配置檔案。
r

[[email protected]_129_36_centos ~]# sudo mkdir /etc/scrapyd
[[email protected]_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 <module>
    from incremental import Version
ModuleNotFoundError: No module named 'incremental'
[[email protected]_129_36_centos ~]# pip3 install incremental

報錯:

builtins.ModuleNotFoundError: No module named '_sqlite3'
Failed to load application: No module named '_sqlite3'
[[email protected]_129_36_centos ~]# yum install sqlite-devel

重新編譯安裝Python

./configure
sudo make
sudo make install

終於成功運行了。

[[email protected]_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 <twisted.web.server.Site object at 0x7f34550d1a90>
2018-09-26T20:00:14+0800 [Launcher] Scrapyd 1.2.0 started: max_proc=4, runner='scrapyd.runner'

5、訪問認證

配置完成後,Scrapy和它的介面都是可以公開訪問的,我們來配置認證訪問,藉助Nginx做反向代理。

[[email protected]_129_36_centos ~]# yum install nginx
[[email protected]_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中。

[[email protected]_129_36_centos conf.d]# yum -y install httpd-tools
[[email protected]_129_36_centos conf.d]# htpasswd -c .htpasswd admin
New password:   # 輸入兩次密碼
Re-type new password:
[[email protected]_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
[[email protected]_129_36_centos conf.d]# cat .htpasswd   # 裡面是自己的密碼
[[email protected]_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更實用。
**注意:**如果不是分散式部署的話,這個比較好用。

[[email protected]_129_36_centos ~]# pip3 install scrapyrt
[[email protected]_129_36_centos ~]# scrapyrt     # 預設在9080埠執行,必須要在Scrapy專案下,因為它需要scrapy.cfg檔案
[[email protected]_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