合规国际互联网加速 OSASE为企业客户提供高速稳定SD-WAN国际加速解决方案。 广告
# :-: **Hyperf学习记录** ## **安装Hyperf** **前期准备** * PHP >= 7.2 * Swoole PHP 扩展 >= 4.5,并关闭了`Short Name` * OpenSSL PHP 扩展 * JSON PHP 扩展 * PDO PHP 扩展 (如需要使用到 MySQL 客户端) * Redis PHP 扩展 (如需要使用到 Redis 客户端) * Protobuf PHP 扩展 (如需要使用到 gRPC 服务端或客户端) Swoole安装命令 `pecl install swoole` 根据提示关闭对应php禁用函数 **开始安装** 建议将composer镜像设置为阿里云镜像,加速国内下载速度 `composer config -g repo.packagist composer https://mirrors.aliyun.com/composer` **安装hyperf** `composer create-project hyperf/hyperf-skeleton` 根据提示关闭对应php禁用函数 ## **一、登录JWT配置** ### 1、声明: #### 2、本文来自: https://packagist.org/packages/phper666/jwt-auth #### 3、拉取依赖 `composer require phper666/jwt-auth` #### 4、发布配置 `php bin/hyperf.php jwt:publish --config` #### 5、jwt 配置 去配置`config/autoload/jwt.php`文件或者在配置文件`.env`里配置 #### 6.创建Jwt中间件 `php bin/hyperf.php gen:middleware JwtAuthMiddleware` 编辑中间件逻辑 ## **二、定义枚举类** #### 主要用于定义错误码和错误信息 ## **安装** `composer require hyperf/constants` ## **使用** 通过`gen:constant`命令可以快速的生成一个枚举类。 `php bin/hyperf.php gen:constant ErrorCode` 此生成命令仅在[hyperf/constants](https://github.com/hyperf/constants)组件版本大于等于 v2.0.1 版本时可用,小于此版本时请手动创建枚举类。 ## **三、验证器** ## **安装** ### 1.引入组件包 `composer require hyperf/validation` ### 2.添加中间键 **!!!!** 验证器组件的 Server 在`config/autoload/middlewares.php`配置文件加上一个全局中间件`Hyperf\Validation\Middleware\ValidationMiddleware`的配置 ~~~ <?php return [ // 下面的 http 字符串对应 config/autoload/server.php 内每个 server 的 name 属性对应的值,意味着对应的中间件配置仅应用在该 Server 中 'http' => [ // 数组内配置您的全局中间件,顺序根据该数组的顺序 \Hyperf\Validation\Middleware\ValidationMiddleware::class // 这里隐藏了其它中间件 ], ]; ~~~ 如没有正确设置全局中间件,可能会导致`表单请求(FormRequest)`的使用方式无效。 ## **四、Composer组件更新** #### 如需手动加载新组件进项目,或更新组件操作可运行下面命令(初始化项目依赖) ~~~ composer install ~~~ 或者 `composer update` ## **五、安装RabbitMQ** #### *RabbitMQ*是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件) #### 如需使用Hyperf AMQP组件需先安装RabbitMQ #### [hyperf/amqp](https://github.com/hyperf/amqp)是实现 AMQP 标准的组件,主要适用于对 RabbitMQ 的使用。 参考:https://blog.csdn.net/u010533511/article/details/90752530 ##### **1.安装Erlang(RabbitMQ是基于Erlang语言开发)** ##### 从EPEL源安装(注意erlang版本与rabbitmq是否对应,过低会导致rabbitmq无法启动) `yum install epel-release 启用EPEL软件源` `yum install erlang 安装erlang` ##### 安装RabbitMQ ##### 下载需要的安装包 `wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.15/rabbitmq-server-3.6.15-1.el7.noarch.rpm` #####下载完成后安装: `yum install rabbitmq-server-3.6.15-1.el7.noarch.rpm` #### **2.安装完成后添加开机启动RabbitMQ服务** `systemctl enable rabbitmq-server.service` #### **查看服务状态** `systemctl status rabbitmq-server.service` #### **启动服务** `systemctl start rabbitmq-server.service` #### **停止服务** `systemctl stop rabbitmq-server.service` #### **查看当前所有用户** `rabbitmqctl list_users` #### **查看默认guest用户的权限** `rabbitmqctl list_user_permissions guest` #### **由于RabbitMQ默认的账号用户名和密码都是guest。为了安全起见, 先删掉默认用户** `rabbitmqctl delete_user guest` #### **添加新用户** `rabbitmqctl add_user username password` #### **设置用户tag** `rabbitmqctl set_user_tags username administrator` #### **赋予用户默认vhost的全部操作权限** `rabbitmqctl set_permissions -p / username ".*" ".*" ".*"` #### **查看用户的权限** `rabbitmqctl list_user_permissions username` #### **3、开启web管理接口** 如果只从命令行操作RabbitMQ,多少有点不方便。RabbitMQ自带了web管理界面,只需要启动插件便可以使用 `rabbitmq-plugins enable rabbitmq_management` #### **开启用户远程访问** 默认情况下,RabbitMQ的默认的guest用户只允许本机访问, 如果想让guest用户能够远程访问的话,只需要将配置文件中的loopback_users列表置为空即可,如下: {loopback\_users, []} 另外关于新添加的用户,直接就可以从远程访问的,如果想让新添加的用户只能本地访问,可以将用户名添加到上面的列表, 如只允许admin用户本机访问。 {loopback\_users, [“admin”]} #### **4.Hyperf加载AMPQ组件** ##### **安装** `composer require hyperf/amqp` ##### **添加配置文件** ~~~php php bin/hyperf.php vendor:publish hyperf/amqp ~~~ ## **六、路由** 如果安装了 devtool 组件,可使用 `php bin/hyperf.php describe:routes` 命令获取路由列表信息, 并且提供 path 可选项,方便获取单个路由信息,对应的命令 `php bin/hyperf.php describe:routes --path=/foo/bar`。 ## **七、Supervisor 部署** #### 项目部署时发现ssh链接断开后hyperf进程,端口都还在运行,但是项目的接口失效,连接超时,翻阅文档发现可以用## **Supervisor部署**记录一下。 [Supervisor](http://www.supervisord.org/)是`Linux/Unix`系统下的一个进程管理工具。可以很方便的监听、启动、停止和重启一个或多个进程。通过[Supervisor](http://www.supervisord.org/)管理的进程,当进程意外被`Kill`时,[Supervisor](http://www.supervisord.org/)会自动将它重启,可以很方便地做到进程自动恢复的目的,而无需自己编写`shell`脚本来管理进程。 ## [安装 Supervisor](https://hyperf.wiki/2.0/#/zh-cn/tutorial/supervisor?id=%e5%ae%89%e8%a3%85-supervisor) 这里仅举例`CentOS`系统下的安装方式: ~~~ # 安装 epel 源,如果此前安装过,此步骤跳过 yum install -y epel-release yum install -y supervisor ~~~ ## [创建一个配置文件](https://hyperf.wiki/2.0/#/zh-cn/tutorial/supervisor?id=%e5%88%9b%e5%bb%ba%e4%b8%80%e4%b8%aa%e9%85%8d%e7%bd%ae%e6%96%87%e4%bb%b6) ~~~ cp /etc/supervisord.conf /etc/supervisord.d/supervisord.conf ~~~ 编辑新复制出来的配置文件`/etc/supervisord.d/supervisord.conf`,并在文件结尾处添加以下内容后保存文件: ~~~ # 新建一个应用并设置一个名称,这里设置为 hyperf [program:hyperf] # 设置命令在指定的目录内执行 directory=/var/www/hyperf/ # 这里为您要管理的项目的启动命令 command=php ./bin/hyperf.php start # 以哪个用户来运行该进程 user=root # supervisor 启动时自动该应用 autostart=true # 进程退出后自动重启进程 autorestart=true # 进程持续运行多久才认为是启动成功 startsecs=1 # 重试次数 startretries=3 # stderr 日志输出位置 stderr_logfile=/var/www/hyperf/runtime/stderr.log # stdout 日志输出位置 stdout_logfile=/var/www/hyperf/runtime/stdout.log ~~~ ## [启动 Supervisor](https://hyperf.wiki/2.0/#/zh-cn/tutorial/supervisor?id=%e5%90%af%e5%8a%a8-supervisor) 运行下面的命令基于配置文件启动 Supervisor 程序: ~~~ supervisord -c /etc/supervisord.d/supervisord.conf ~~~ ## [使用 supervisorctl 管理项目](https://hyperf.wiki/2.0/#/zh-cn/tutorial/supervisor?id=%e4%bd%bf%e7%94%a8-supervisorctl-%e7%ae%a1%e7%90%86%e9%a1%b9%e7%9b%ae) ~~~ # 启动 hyperf 应用 supervisorctl start hyperf # 重启 hyperf 应用 supervisorctl restart hyperf # 停止 hyperf 应用 supervisorctl stop hyperf # 查看所有被管理项目运行状态 supervisorctl status # 重新加载配置文件 supervisorctl update # 重新启动所有程序 supervisorctl reload ~~~ ## **八、Model模型** 基于Laravel开发的ORM组件,使用方法类似于Laravel. 输出ORM封装的sql语句 `$query->toSql()` 输出sql对应的变量值 `$query->getBindings()` ## **九、邮件发送** #### 安装PHPMailer扩展包 Composer安装 `composer require phpmailer/phpmailer` #### 相关配置 开启qq或163邮箱POP3/SMTP服务,并获取授权码,其中163免费企业邮箱没有授权码,填入邮箱密码即可。 ~~~ $mail->Password = ~~~ 由于阿里,腾讯云等服务器几乎默认关闭了25端口,建议使用465或者587端口来发送邮件,邮箱服务器为 163企业邮箱 ~~~ smtp.ym.163.com ~~~ 163邮箱 ~~~ smtp.163.com ~~~ qq邮箱 ~~~ smtp.qq.com ~~~ 使用465端口时,需配置 ~~~ $mail->SMTPSecure = 'ssl'; ~~~ 使用587端口时,需配置(未测试) ~~~ $mail->SMTPSecure = 'tls'; ~~~ 使用ssl方式登录邮箱时,需**切记**开启服务器PHP openssl扩展!!!查看是否启用openssl扩展命令为 `php -m` 如有使用swoole需启用openssl,查看swoole是否启用openssl命令为 `php --ri swoole`