hyperf项目 docker镜像搭建

Hyperf 是一个高性能、高灵活性的渐进式 PHP 协程框架,内置协程服务器及大量常用的组件,性能较传统基于 PHP-FPM 的框架有质的提升,提供超高性能的同时,也保持着极其灵活的可扩展性,标准组件均基于 PSR 标准 实现,基于强大的依赖注入设计,保证了绝大部分组件或类都是 可替换 与 可复用 的。

因为hyperf需要安装环境依赖比较多,所以采用了docker镜像环境安装的形式来进行搭建,这样可以避免大多数因环境问题,依赖版本问题等。

准备工作

  1. 由于hyperf 基于swoole框架,所以只能在linux系统中运行,因此需要提前准备好一个linux的服务器或者linux系统的虚拟机,不推荐在windows系统中部署hyperf项目。推荐在linux上提前安装好宝塔。

  2. 在宝塔上安装nginx软件,方便对网站站点管理,设置反向代理。

  3. 在宝塔面板创建一个静态站点,因为hyperf在docker镜像中运行,所以创建站点时不需要设置php关联,

  4. 修改站点ningx的配置文件,将请求转发到指定的端口上,站点配置内容如下所示:

    server
    {
        listen 80;
        server_name hyperf.lxkj828.com;
        location ~ /socket {
          # WebSocket Header
          proxy_http_version 1.1;
          proxy_set_header Upgrade websocket;
          proxy_set_header Connection "Upgrade";
          # 将客户端的 Host 和 IP 信息一并转发到对应节点
          proxy_set_header X-Real-IP $remote_addr;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_set_header Host $http_host;
          # 客户端与服务端无交互 60s 后自动断开连接,请根据实际业务场景设置
          proxy_read_timeout 60s ;
          # 将协议架构转发到对应节点,如果使用非https请改为http
          proxy_set_header X-scheme http;
          # 执行代理访问真实服务器
          proxy_pass http://127.0.0.1:9502;
        }
        location / {
            root   html;
            index  index.html index.htm;
    
            proxy_pass    http://127.0.0.1:9501;
    
            proxy_set_header   Host             $host;
    
            proxy_set_header   X-Real-IP        $remote_addr;
    
            proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        }
       
        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
    

创建hyperf项目docker实例

  1. 使用docker命令创建镜像

        docker run --name service \
        -v /www/wwwroot/service.lxkj828.com:/data/project \
        -p 9501:9501 -p 9502:9502 -it \
        --privileged -u root \
        --entrypoint /bin/sh \
        hyperf/hyperf:7.4-alpine-v3.11-swoole
    
    • --name 【docker实例名称】
    • -v 【主机目录:实例目录】 将主机目录映射到实例对应目录中
    • -p 【实例端口:主机端口】 将实例端口映射到主机的指定端口上方便访问
  2. 设置镜像时区

        rm /etc/localtime
        ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
    
  3. 常用指令

    • systemctl start docker 启动docker服务
    • docker ps -a 查看所有docker实例
    • docker restart hyperf 重启docker实例
    • docker exec -it service /bin/bash 从宿主机以命令行形式进入docker实例
    • cd /data/project/hyperf-skeleton 在docker实例中 移动到hyperf项目目录
    • netstat -anp | grep 8502 查看指定端口占用进程id 例如端口8502
    • kill -9 4578 杀死指定进程 关闭端口占用

安装hyperf框架

  1. cd /data/project 移动到实例映射到宿主机的项目目录

  2. 使用设置命令将compoer 源设置为阿里云 提高下载速度

    composer config -g repo.packagist composer https://mirrors.aliyun.com/composer
    
  3. composer create-project hyperf/hyperf-skeleton 使用框架安装命令进行框架安装

  4. 框架安装过程中会询问时区及组件安装情况,根据需要设置即可,没有安装的组件可以开发过程中动态添加没有影响
    框架安装过程询问

  5. cd hyperf-skeleton/ 移动到项目目录 安装必备组件

  6. composer require hyperf/watcher --dev 安装热重载组件

  7. php bin/hyperf.php vendor:publish hyperf/watcher 发布热重载配置

  8. php bin/hyperf.php server:watch 使用热重载方式启动框架

  9. 框架无报错启动
    框架启动成功

  10. 访问静态网站域名,测试http服务是否能够正常使用
    在这里插入图片描述

安装websocket服务(可选)

  1. 使用composer安装websocket组件
    composer require hyperf/websocket-server
    
  2. 打开/config/autoload/server.php 增加websocket服务配置
    'servers' => [
        [
            'name' => 'ws',
            'type' => Server::SERVER_WEBSOCKET,
            'host' => '0.0.0.0',
            'port' => 9502,
            'sock_type' => SWOOLE_SOCK_TCP,
            'callbacks' => [
                Event::ON_HAND_SHAKE => [Hyperf\WebSocketServer\Server::class, 'onHandShake'],
                Event::ON_MESSAGE => [Hyperf\WebSocketServer\Server::class, 'onMessage'],
                Event::ON_CLOSE => [Hyperf\WebSocketServer\Server::class, 'onClose'],
            ],
        ],
    ],
    
  3. 配置websocket路由
        Router::addServer('ws', function () {
            Router::get('/socket', 'App\Controller\WebSocketController');
        });
    
  4. 增加对应的控制器文件
     declare(strict_types=1);
     /**
     * This file is part of Hyperf.
     *
     * @link     https://www.hyperf.io
     * @document https://hyperf.wiki
     * @contact  group@hyperf.io
     * @license  https://github.com/hyperf/hyperf/blob/master/LICENSE
     */
     namespace App\Chat\Controller;
    
     use Hyperf\Contract\OnCloseInterface;
     use Hyperf\Contract\OnMessageInterface;
     use Hyperf\Contract\OnOpenInterface;
     use Hyperf\Di\Annotation\Inject;
     use Swoole\Http\Request;
     use Swoole\Websocket\Frame;
     class WebSocketController implements OnMessageInterface, OnOpenInterface, OnCloseInterface
     {
         
         private $server;
         //收到消息处理函数
         public function onMessage($server, Frame $frame): void
         {
             echo "收到客户端消息";
             $server->push($frame->fd, $frame->data);
         
         }
         
         //链接关闭方法
         public function onClose($server, int $fd, int $reactorId): void
         {
             $server->push($fd, 'Link closed');
         }
         //链接打开方法
         public function onOpen($server, Request $request): void
         {
             $server->push($request->fd, 'Link succeeded');
         }
     }
    
  5. 使用ws链接进行调试 查看是否能够正常链接 ws://service.lxkj828.com/socket
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

独步三界

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值