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