win10搭建 Hyperf 3.1

        官方地址:https://hyperf.io/

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


一、在系统下创建本地项目文件夹

我创建的目录为 D:\workspace ,你们可以按照自己的习惯来创建目录结构

二、创建docker容器并搭建Hyperf

1.打开win+R 输入:PowerShell 进入命令页

PS C:\Windows\system32> docker run -d --name hyperf -v D:/workspace/skeleton:/hyperf-skeleton -p 9501:9501 -it --privileged -u root --entrypoint /bin/sh hyperf/hyperf:8.1-alpine-v3.18-swoole
  1. -d 将以分离模式运行此容器,以便它在后台运行。

  2. --name 将名称“hyperf ”分配给您的容器实例。

  3. -p会将 hyperf 容器端口 9501绑定到主机上的相同端口。

  4. -v选项将容器卷 (/hyperf-skeleton)内的数据文件夹绑定到本地 宿主机共享目录 (D:/workspace/skeleton )。

冷暖自知一抹茶ck出现这个就代表创建成功了


2.进入刚刚创建的容器

PS C:\Windows\system32> docker exec -it hyperf /bin/bash
5b50ce9c9e68:/#

3.将 Composer 镜像设置为阿里云镜像

5b50ce9c9e68:/# composer config -g repo.packagist composer https://mirrors.aliyun.com/composer
5b50ce9c9e68:/# ls
bin              home             lib              opt              run              sys              var
dev              hyperf-skeleton  media            proc             sbin             tmp
etc              init.php         mnt              root             srv              usr

4.使用composer安装hyperf(然后一路n+回车进行安装)

5b50ce9c9e68:/# composer create-project hyperf/hyperf-skeleton
Creating a "hyperf/hyperf-skeleton" project at "./hyperf-skeleton"
Installing hyperf/hyperf-skeleton (v3.1.1)
  - Downloading hyperf/hyperf-skeleton (v3.1.1)
  - Installing hyperf/hyperf-skeleton (v3.1.1): Extracting archive
Created project in //hyperf-skeleton
> @php -r "file_exists('.env') || copy('.env.example', '.env');"
> Installer\Script::install
....

5.在win10的目标下查看composer下来的文件

如:我的是D:/workspace/skeleton

冷暖自知一抹茶ck

        1、目录结构

        冷暖自知一抹茶ck

        2、配置文件结构

        冷暖自知一抹茶ck

        

        那么是如何读取配置呢?

        config/config.php中

<?php

declare(strict_types=1);
use Hyperf\Contract\StdoutLoggerInterface;
use Psr\Log\LogLevel;

return [
    'app_name' => env('APP_NAME', 'skeleton'),
    'app' => [
        'name_space' => env('NAME_SPACE', 'App\Controller')
    ],
];


// 读取配置的其中一种方式为:config('app.name_space')

        如果上面的文件绝对路径为:config/autoload/client.php,那么获取的代码为:config('client.app.name_space')

        3、app的目录结构

        冷暖自知一抹茶ck



三、启动Hyperf项目

5b50ce9c9e68:/# cd hyperf-skeleton/
5b50ce9c9e68:/hyperf-skeleton# ls
Dockerfile          app                 composer.lock       docker-compose.yml  runtime
LICENSE             bin                 config              phpstan.neon        test
README.md           composer.json       deploy.test.yml     phpunit.xml         vendor

5b50ce9c9e68:/hyperf-skeleton# php bin/hyperf.php start
[DEBUG] [command] Commands registered by Hyperf\Command\Listener\RegisterCommandListener
[DEBUG] Event Hyperf\Framework\Event\BootApplication handled by Hyperf\Command\Listener\RegisterCommandListener listener.
[DEBUG] Event Hyperf\Framework\Event\BootApplication handled by Hyperf\Config\Listener\RegisterPropertyHandlerListener listener.
[DEBUG] Event Hyperf\Framework\Event\BootApplication handled by Hyperf\DbConnection\Listener\RegisterConnectionResolverListener listener.
[DEBUG] Event Hyperf\Framework\Event\BootApplication handled by Hyperf\ExceptionHandler\Listener\ExceptionHandlerListener listener.
[DEBUG] Event Hyperf\Framework\Event\BootApplication handled by Hyperf\ExceptionHandler\Listener\ErrorExceptionHandler listener.
[DEBUG] Event Hyperf\Framework\Event\BeforeMainServerStart handled by Hyperf\Process\Listener\BootProcessListener listener.
[DEBUG] Event Hyperf\Framework\Event\OnManagerStart handled by Hyperf\Server\Listener\InitProcessTitleListener listener.
[DEBUG] Event Hyperf\Framework\Event\OnStart handled by Hyperf\Server\Listener\InitProcessTitleListener listener.
[INFO] Worker#10 started.
[INFO] Worker#7 started.
[INFO] Worker#4 started.
[INFO] Worker#3 started.
...

冷暖自知一抹茶ck

四、修改本地代码测试

由于 Hyperf 是持久化的 CLI 框架,当您修改完您的代码后, 通过 CTRL + C 终止当前启动的进程实例,并重新执行 php bin/hyperf.php start 启动命令即可。

1.IndexController 下新建一个test方法

冷暖自知一抹茶ck

2.在config下的routes下添加

Router::addRoute(['GET', 'POST', 'HEAD'], '/test', 'App\Controller\IndexController@test');

3.重新执行 php bin/hyperf.php start 启动命令

PS C:\Windows\system32> docker exec -it hyperf /bin/bash
5b50ce9c9e68:/# cd hyperf-skeleton/
5b50ce9c9e68:/hyperf-skeleton# php bin/hyperf.php start

冷暖自知一抹茶ck


4.在浏览器输入http://127.0.0.1:9501/test

冷暖自知一抹茶ck

到这里一个简单的使用Hyperf过程就完成了,更详情的内容请查看https://hyperf.wiki/3.0/ 开发文档。

五、Hyperf 热加载与守护进程的方式运行

用 php bin/hyperf.php start 启动命令,使用过程中一不小心把终端给关闭,再重新去启动时就会显示以下问题:

冷暖自知一抹茶ck


问题原因:就由于上次已经启动过了,导致端口被占用了
解决办法:
1.先查看端口对应的进程

5b50ce9c9e68:/hyperf-skeleton# netstat -tulp|grep 9501
tcp        0      0 0.0.0.0:9501            0.0.0.0:*               LISTEN      466/skeleton.Master

2.使用kill 杀掉进程ID

5b50ce9c9e68:/hyperf-skeleton# kill -9 466

1、以守护进程的方式运行

在运行的时候可以在后边加一个**&**号,这样就会以守护进程的方式运行,这样就算不小心关闭终端也没事了。

2、使用 Watcher 热加载

1.到项目中安装 hyperf/watcher

5b50ce9c9e68:/hyperf-skeleton#  composer require hyperf/watcher --dev

2.生成配置文件 watcher.php

5b50ce9c9e68:/hyperf-skeleton# php bin/hyperf.php vendor:publish hyperf/watcher

冷暖自知一抹茶ck


3、启动热加载

5b50ce9c9e68:/hyperf-skeleton# php bin/hyperf.php server:watch

在你修改代码后间每到隔时间就会扫描文件,然后就会自动重载服务。

冷暖自知一抹茶ck

##获取容器地址

PS C:\Windows\system32> docker ps
CONTAINER ID   IMAGE                                   COMMAND     CREATED         STATUS         PORTS                    NAMES
5b50ce9c9e68   hyperf/hyperf:8.1-alpine-v3.18-swoole   "/bin/sh"   9 minutes ago   Up 9 minutes   0.0.0.0:9501->9501/tcp   hyperf
PS C:\Windows\system32> docker inspect --format='{{.Name}} - {{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)
/hyperf - 172.17.0.2
PS C:\Windows\system32>




问题1:SQLSTATE[HY000][1130] Host ‘host.docker.internal‘ is not allowed to connect to this MySQL server

产生原因:

    由于搭建了docker环境,把项目放到docker环境内部了,和主机mysql隔离了,所以当docker项目访问mysql时,访问性质是:局域网访问

解决方案: 

    mysql局域网访问,需要改变其自带库中user表的字段User为root的host字段值,流程如下:

    一 、Navicat操作

        冷暖自知一抹茶ck


        冷暖自知一抹茶ck


    二 、 刷新mysql权限:

        对用户做了权限变更之后,一定记得重新加载一下权限,将权限信息从内存中写入数据库。

        冷暖自知一抹茶ck



附:

    更改镜像存储位置、替换国内源
    win10环境下使用Docker-Toolbox 搭建 Hyperf框架过程

    windows 上搭建hyperf环境

    windows下的docker容器内的hyperf框架连接宿主机的mysql数据库


    Hyperf入门



冷暖自知一抹茶ck
请先登录后发表评论
  • 最新评论
  • 总共0条评论