部署安装

备注

部署就是三步走,一步准备工作,一步安装依赖,一步配置运行。 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等服务。

NO.1 启动Redis

部署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

NO.2 部署Tdi-php程序

这是一个基于PHP7写的web应用,使用resque作为任务队列,测试过7.0、7.2版本。

另外,此部署是直接部署到服务器上,比如物理机、云主机、VPS等,由于依赖的程序原因,理论上可以支持unix系列,但是,除了CentOS和Ubuntu外,其他机器咱也没试过,咱也不知道~~

2.1 下载源码

! 建议,如果你有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

2.2 安装依赖

  • 很详细的安装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/phpredis

    • proctitle:可选扩展,可以为下面php-resque的队列处理进程设置个性的进程名称

  • 项目中依赖的第三方模块已经写好了 composer.json ,不过为了方便,我已经将依赖的代码一起上传到git了,所以此处可以跳过。

  • 关于php.ini配置文件

    • disable_functions:请不要禁用 pcntl_* 的相关函数

    • post_max_size:可以适当调高点,比如10M

2.3 修改配置

配置文件是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时发送邮件,可选。

!!!以上参数 REDISTOKEN 必须设置;

配置文件中VERSION参数一般请勿修改。

配置文件中ALARMEMAIL参数是关于报警的配置,可以参考:下载异常报警

2.4 启动程序

需要启动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命令路径

NO.3 Nginx配置

在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 的子域。

NO.4 程序升级

目前git下载可以使用git pull拉取最新代码,重启php-resque进程即完成升级;

NO.5 使用篇

关于定时检测、资源报警、过期清理等功能的使用,请点击跳转查看Tdi使用说明文档

NO.6 resque-web

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,会看到类似界面:

resque_web_image