备注
部署就是三步走,一步准备工作,一步安装依赖,一步配置运行。 Windows下就不要考虑了,以下文档基于Linux的CentOS7、Ubuntu18
源码地址: https://github.com/staugur/tdi-php
正式版本: https://github.com/staugur/tdi-php/releases
作者博客: https://blog.saintic.com/
内容说明: 以下部署文档适用于有一点linux基础的同学,大概涉及到yum、git、php等相关命令,以及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。
这是一个基于PHP7写的web应用,使用resque作为任务队列,测试过7.0、7.2版本。
另外,此部署是直接部署到服务器上,比如物理机、云主机、VPS等,由于依赖的程序原因,理论上可以支持unix系列,但是,除了CentOS和Ubuntu外,其他机器咱也没试过,咱也不知道~~
! 建议,如果你有git,可以:
git clone https://github.com/staugur/tdi-php
! 也可以下载压缩包:
wget -O tdi-php.zip https://codeload.github.com/staugur/tdi-php/zip/master && unzip tdi-php.zip && mv tdi-php-master tdi-php
! 或者到release页面下载正式版本的包。
! 进入代码目录: cd tdi-php
很详细的安装php的步骤不是这里的重点,您可以使用yum、apt或源码编译,但是php版本要7.0+,PHP官方支持的版本是7.2和7.3,建议使用7.2(基于此版本开发)。
依赖的php扩展是curl、zip、pcntl、redis,一般前三个应该默认安装了。
redis:必需扩展,可以使用命令安装
pecl install redis
,其官方仓库是:https://github.com/phpredis/phpredisproctitle:可选扩展,可以为下面php-resque的队列处理进程设置个性的进程名称
项目中依赖的第三方模块已经写好了 composer.json ,不过为了方便,我已经将依赖的代码一起上传到git了,所以此处可以跳过。
php-resque:异步队列,官方仓库是:https://github.com/resque/php-resque/
关于php.ini配置文件
disable_functions:请不要禁用
pcntl_*
的相关函数post_max_size:可以适当调高点,比如10M
配置文件是config.php
,给出了样例文件 config.sample.php
(v0.1.0此样例包含VERSION定义,现已废弃)。
您需要使用 mv config.sample.php config.php
重命名文件,或者使用 cp config.sample.php config.php
复制一份。
可设置列表如下:
配置段 |
默认值 |
说明 |
---|---|---|
STATUS |
ready |
自主设定服务状态,ready可用、tardy不可用 |
REDIS |
无 |
redis连接串,格式是:redis://[:password]@host:port/db |
TOKEN |
无 |
签名令牌,切勿泄露、遗失,支持修改。 |
ALARMEMAIL |
无 |
报警邮箱,当检测到队列有failed时发送邮件,可选。 |
!!!以上参数 REDIS 和 TOKEN 必须设置;
配置文件中VERSION参数一般请勿修改。
配置文件中ALARMEMAIL参数是关于报警的配置,可以参考:下载异常报警
需要启动php-resque进程处理队列任务和php-fpm处理web请求,两者必须开启才能正常接收请求并处理下载任务。
$ sh online_rq.sh start #可以用run参数前台启动,status查看状态,stop停止,restart重启
$ systemctl start php-fpm #此为示例,根据实际情况使用命令启动php-fpm
警告
如果您不使用默认的php,或者说php不在系统PATH变量内,您需要创建 online_preboot.sh
脚本,online_rq.sh会尝试source这个脚本,其内容大概可以是这样:
export PHP_CLI=具体PHP命令路径
在php-fpm和php-resque进程启动后,对于php来说还需要一个WEB服务器搭配使用,比如nginx、apache。
首选Nginx,不解释;Apache HTTP Server,很遗憾,我现在也忘了怎么配置,得写.htaccess规则。
这里假设程序目录是/tdi-php,那么程序下载目录就是/tdi-php/src/downloads;
Nginx配置示例如下,您也可以配置使其支持HTTPS:
server {
listen 80;
server_name 域名;
root /tdi-php/src/;
index index.html index.htm index.php;
client_max_body_size 10M;
client_body_buffer_size 128k;
#可以设置不允许搜索引擎抓取信息
location / {
try_files $uri $uri/ /$uri.php?$query_string;
}
location ~ \.php$ {
set $denyAccess 1;
if ($uri ~* /(ping|download)) {
set $denyAccess 0;
}
if ($denyAccess) {
return 404;
}
try_files $uri = 404;
# 如果没有fastcgi.conf可以用下面两行替换
# include fastcgi_params;
# fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi.conf;
# PHP-FPM监听端口或socket
fastcgi_pass 127.0.0.1:9000;
#fastcgi_pass unix:/dev/shm/php-fpm.sock;
}
}
程序部署好+Nginx配置完成,启动后,这个域名就能对外服务了(温馨提示:您可以使用HTTPS提供服务,并且也建议用HTTPS),即可进入下一篇查看如何注册、使用。
另外,若您没有[已备案]域名,可以与我留言申请一个 tdi.saintic.com 的子域。
目前git下载可以使用git pull拉取最新代码,重启php-resque进程即完成升级;
关于定时检测、资源报警、过期清理等功能的使用,请点击跳转查看Tdi使用说明文档
Tdi for Python内置了rqdashboard路由可以直接使用Web页面查看队列情况,但是Tdi for PHP没有,不过如果需要,可以安装ruby语言编写的resque-web,命令是:gem install resque-web
小技巧
如果没有gem命令,那么你可能需要安装ruby环境,以CentOS为例,yum install ruby
resque-web –port 3000 –redis redis://[:password]@host:port/db
以上命令执行后会放入后台,其中redis参数要与tdi-php中配置的一致,否则读取不到队列数据,更多用法使用–help查看。
此时使用浏览器打开ip:3000,会看到类似界面: