2021年10月25日 07:22 by scott
数据抓取Scrapyd是个不错的工具,能实现scrapy项目的远程执行。但是也有一些缺点:
1. 没有权限认证体系,暴露到公网不安全;
2. 自己无法后台运行;
针对这两个问题,通过探索和总结得到如下解决方案:
1. 通过nginx中添加auth_basic实现权限管理;
2. 通过supervisor实现scrapyd后台运行;
1. 已通过conda安装了虚拟环境,假定名字为crawl;
2. 已安装supervisor,默认安装的配置文件目录为/etc/supervisor;
3. 已安装nginx,默认安装的配置文件目录为/etc/nginx;
4. 已安装apache2-utils,安装命令为sudo apt install apache2-utils;
5. 已生成秘钥文件,生成命令为 cd /etc/nginx/conf.d && sudo htpasswd -c .htpasswd admin
1. 配置supervisor,编写配置文件/etc/supervisor/conf.d/scrapyd.conf,内容如下:
[program:scrapyd]
directory=/home/ubuntu/workspace/
command=/home/ubuntu/.conda/envs/crawl/bin/scrapyd
autostart=true
autorestart=true
startsecs=5
stderr_logifle=/tmp/scrapyd_stderr.log
stdout_logfile=/tmp/scrapyd_stdout.log
redirect_stderr=true
stdout_logfile_maxbytes=20MB
stdout_logfile_backups=10
注意配置中的command,这里用的虚拟环境里安装scrapyd
2. 重新启动supervisor, 命令如下:
supervisorctl reload
3. 配置nginx,编写配置文件/etc/nginx/conf.d/scrapy.conf,内容如下:
server {
listen 8600;
access_log /home/ubuntu/workspace/logs/scrapyd_access.log;
error_log /home/ubuntu/workspace/logs/scrapyd_error.log;
location / {
proxy_pass http://127.0.0.1:6800/;
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/conf.d/.htpasswd;
}
}
4. 重新载入nginx配置:
sudo nginx -s reload
这里通过外部工具完美解决了scrapyd本身存在的问题,主要使用了nginx的转发和秘钥配置功能,以及supervisor监控并后台运行程序的功能。