备注
部署就是三步走,一步准备工作,一步安装依赖,一步配置运行。 Windows下就不要考虑了,以下文档基于Linux的CentOS7
源码地址: https://github.com/staugur/tdi
正式版本: https://github.com/staugur/tdi/releases
作者博客: https://blog.saintic.com/
内容说明: 以下部署文档适用于有一点linux基础的同学,大概涉及到yum、git、docker等命令,以及redis、nginx等服务。
部署redis很简单,CentOS用户可以yum install redis
,Ubuntu用户可以apt-get install redis-server
,都可以编译安装,给一个教程链接:http://www.runoob.com/redis/redis-install.html
也可以docker启动,用官方镜像启动一个docker redis,镜像:https://hub.docker.com/_/redis。
这是一个基于Python Flask框架写的web应用,使用rq作为任务队列,部署要求python2.7、3.5+,可以普通部署和Docker部署。
备注
目前测试了CentOS、Ubuntu的py2.7、py3.6、py3.7版本,由于模块依赖,理论上可使用3.5及以上版本和2.7版本。
建议使用2.7版本,另外,Docker内置的py版本是2.7。
即直接部署到服务器上,比如物理机、云主机、VPS等,目前可用CentOS、Ubuntu的操作系统、Python2.7(支持pypy)和Redis。
这里演示了一个简单的部署流程图:
! 建议,如果你有git,可以:
git clone https://github.com/staugur/tdi
! 也可以下载压缩包:
wget -O tdi.zip https://codeload.github.com/staugur/tdi/zip/master && unzip tdi.zip && mv tdi-master tdi
! 或者到release页面下载正式版本的包。
! 进入代码目录: cd tdi
# CentOS
$ yum install -y gcc python-devel libffi-devel
# Ubuntu
$ apt-get install gcc python-dev libffi-dev
$ cd tdi/src/
$ pip install -r requirements.txt
配置文件是config.py
,此配置首先从环境变量读取信息,读取不到时使用默认值,可设置列表如下:
配置段 |
环境变量名 |
默认值 |
说明 |
---|---|---|---|
HOST |
crawlhuabantdi_host |
127.0.0.1 |
监听地址 |
PORT |
crawlhuabantdi_port |
13145 |
监听端口 |
LOGLEVEL |
crawlhuabantdi_loglevel |
INFO |
日志级别,可选DEBUG, INFO, WARNING, ERROR, CRITICAL |
STATUS |
crawlhuabantdi_status |
ready |
自主设定服务状态,ready可用、tardy不可用 |
REDIS |
crawlhuabantdi_redis_url |
无 |
redis连接串,格式是:redis://[:password]@host:port/db |
TOKEN |
crawlhuabantdi_token |
无 |
签名令牌,切勿泄露、遗失,支持修改。 |
NORQDASH |
crawlhuabantdi_norqdash |
no |
是否关闭rq-dashboard,yes、no,这是一个可以查看队列任务的页面 |
ALARMEMAIL |
crawlhuabantdi_alarmemail |
无 |
报警邮箱,当检测到队列有failed时发送邮件,可选。v0.2.2新增 |
!!!以上参数 REDIS 和 TOKEN 无默认值,必须手动设置,示例如下(可以写入.bash_profile中):
$ export crawlhuabantdi_redis_url="redis://@127.0.0.1:6379/1"
$ export crawlhuabantdi_token="test"
其中ALARMEMAIL参数是v0.2.2新增配置,关于报警,可以参考:下载异常报警
需要启动rq进程处理队列任务和主进程处理web请求,两者必须开启才能正常接收请求并处理下载任务。
开发环境:
$ python main.py
$ sh online_rq.sh start #或者python rq_worker.py
正式环境:
$ sh online_gunicorn.sh start #可以用run参数前台启动,status查看状态,stop停止,restart重启
$ sh online_rq.sh start #启动参数同上
使用Docker可以无缝部署到支持的操作系统中,且可以直接使用打包好的镜像,不需要直接再像上面那样走很多步骤。
$ git clone https://github.com/staugur/tdi
$ cd tdi
$ docker build -t tdi .
$ docker pull registry.cn-beijing.aliyuncs.com/staugur/tdi
启动命令:
$ docker run -tdi --name 容器名 --restart=always --net=host \
-e crawlhuabantdi_redis_url=REDIS连接串 \
-e crawlhuabantdi_token=令牌 \
-v 下载目录挂载点:/Tdi/downloads \
镜像:标签
镜像及标签:
镜像:自主构建的即tdi,官方镜像是:registry.cn-beijing.aliyuncs.com/staugur/tdi
标签(这里表示版本,每个稳定版打一个标签):
latest:默认,最新版本,可能是最新的稳定版,但最可能是正在开发的版本,所以建议用稳定版
v0.3.0:压缩方式由zip改为tar
v0.2.1:支持了py3、更新了过期时间等
v0.2.0:忘记了~
v0.1.0:第一个稳定版
解释说明:
> 容器名:就是启动容器的名字;–net=host,即容器使用物理网络
> REDIS连接串:其格式请参考上方修改配置那段
> 令牌:英文字母开头加数字、字母或下划线,2-32位字符串
> 挂载点:程序运行在容器内,下载的图片都在内部,路径是/Tdi/downloads
,需要挂载出来,供nginx访问,比如挂载点是/data/TdiDownloads/
> 示例:
$ docker run -tdi --name Tdi1 --restart=always --net=host \
-e crawlhuabantdi_redis_url=redis://:passwd@127.0.0.1:6379/0 \
-e crawlhuabantdi_token=test \
-v /data/Downloads/Tdi1:/Tdi/downloads \
registry.cn-beijing.aliyuncs.com/staugur/tdi [或自行打包的镜像名]
在程序启动后,默认情况下,监听地址是127.0.0.1:13145。
如果您是普通部署,假设程序目录是/tdi,那么程序下载目录就是/tdi/src/downloads;
如果您是Docker部署,需要将容器内部的downloads目录挂载到宿主机上,以供nginx访问。
Nginx配置示例如下,您也可以配置使其支持HTTPS:
server {
listen 80;
server_name 域名;
charset utf-8;
#防止在IE9、Chrome和Safari中的MIME类型混淆攻击
add_header X-Content-Type-Options nosniff;
client_max_body_size 10M;
client_body_buffer_size 128k;
#可以设置不允许搜索引擎抓取信息
#此路径是为了下载实际图片压缩包,直接走nginx,这段可以说是最重要的配置
location /downloads {
#程序下载目录,源码src下的downloads目录或者容器的主机挂载点
alias /tdi/src/downloads/;
default_type application/octet-stream;
#开启目录索引,建议关闭,开启后能看到downloads下所有文件
#autoindex on;
#autoindex_format html;
#autoindex_exact_size on;
#autoindex_localtime on;
proxy_max_temp_file_size 0;
if ($request_filename ~* ^.*?\.(zip|tgz)$){
add_header Content-Disposition 'attachment;';
}
}
location / {
#13145是默认端口
proxy_pass http://127.0.0.1:13145;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
#此路径是为了方便查看rq中的任务,可以注释,不过建议加个basic认证以免所有人都可看,相关文档:http://www.nginx.cn/doc/standard/httpauthbasic.html
#location ~ /rqdashboard {
# auth_basic "Please Verify!";
# auth_basic_user_file /etc/nginx/passwd;
# proxy_pass http://127.0.0.1:13145;
# proxy_set_header Host $host;
# proxy_set_header X-Real-IP $remote_addr;
# proxy_set_header X-Forwarded-Proto $scheme;
# proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#}
}
程序部署好+Nginx配置完成,启动后,这个域名就能对外服务了(温馨提示:您可以使用HTTPS提供服务,并且也建议用HTTPS),即可进入下一篇查看如何注册、使用。
另外,若您没有[已备案]域名,可以与我留言申请一个 tdi.saintic.com 的子域。
PS:补充说明
您也可以使用已有域名配置,将Tdi设置为子目录,合并到配置文件中(server里),核心配置段:
server{
listen 80;
server_name 此处为已有域名;
#...你的其他配置...
#在已有配置文件中增加以下两段,具体下载目录和端口自行修改:
client_max_body_size 10M;
client_body_buffer_size 128k;
#此路径是为了下载实际图片压缩包,直接走nginx,这段可以说是最重要的配置
location ^~ /downloads/ {
#下载程序目录
alias /tdi/src/downloads;
default_type application/octet-stream;
proxy_max_temp_file_size 0;
if ($request_filename ~* ^.*?\.(zip|tgz|tar)$){
add_header Content-Disposition 'attachment;';
}
}
#此路径是tdi程序中的路由,需要代理过去
location ~ ^/(ping|download|rqdashboard) {
proxy_pass http://127.0.0.1:13145;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
#...你的其他配置...
}
目前git下载可以使用git pull拉取最新代码,重启主程序和rq进程即完成升级;
Docker升级需要docker pull拉取latest或最新稳定版,需要重新启动一个新容器完成升级。
关于定时检测、资源报警、过期清理等功能的使用,请看下一篇!