暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

WIN10 Docker 环境下安装Hyperf,高性能PHP协程框架

土味工程师 2020-08-14
997

    最近换了一份工作,接触到了有关PHP的容器和协程技术,真是有点意思,之前一直觉得PHP已经穷途末路了,所以一直在搞Python,现在才发现PHP原来真的这么强大而且简单实用。自己虽然不是很熟悉这些东西但是却非常感兴趣。安装了解花了几天时间,现在总结一下吧,纯新手总结,如有错误请多谅解并渴望指出。

    先说说我对Hyperf这个框架的理解吧,Hyperf这个框架有点像很多东西都非常像Laeavel,从两个文档里面可以看出来,当然Laeavel我也不是很熟悉,我只会TP框架,Laeavel只看过一部分的文档,和TP框架最大的不同是Laeavel的路由和composer这两块。Laeavel更加安全,TP更为简单,到了Hyperf框架我觉得这里性能和复杂性远超了这两个框架,Hyperf是一个基于Swoole协程的框架,Swoole是C++写的,最初在我的印象中协程这个词是在Go语言里面的,因为Go语言的协程效率和性能非常高把Go语言推向了风口浪尖,好多PHP程序员都转向了Go,关于PHP的协程的详细描述可以在Hyperf文档里面可以看看,Hyperf的文档我觉得写的非常得不错,文档一开始讲协程的时候就把旧的基于PHP-FPM架构的框架拿出来对比,把阻塞等待的抢占式多线程模型在高并发环境下的情况拿出来和协作式的微型协程来对比,落差非常大,最让我觉得震撼的是文档里面hypfer默认的最大协程数是10W个,Swoole默认是3000个,传统的FPM架构的线程数是CPU核心数的两倍,通常才寥寥几个。可见其性能是多么的夸张。

    接下来说说容器技术,就是Docker,Docker是基于Go的容器引擎,很多开源的项目框架都支持Docker部署,非常简单方便快捷,解决了很多繁琐的环境安装的问题。粗俗的话来讲就是高性能的虚拟机,Hyperf的安装文档直接指出 Hyperf 对系统环境有一些要求,仅可运行于 Linux 和 Mac 环境下, win10用户想玩只能用docker了,当然Docker些简单的东西是需要我们了解的,例如镜像容器,容器端口和容器文件映射。安装Hyperf文档也有说明,但是完全没有了解过Docker的人很是蒙的,接下来我就开始说说每一条命令的意思吧

    假设已经安装了Docker,Docker的安装网上有很多教程,这里就不赘述了,我们要对官方文档安装进行一定的修改以方便进行开发,以下是官方文档的安装的第一条命令

# 下载并运行 hyperf/hyperf 镜像,并将镜像内的项目目录绑定到宿主机的 /tmp/skeleton 目录
docker run -v /tmp/skeleton:/hyperf-skeleton -p 9501:9501 -it --entrypoint /bin/sh hyperf/hyperf:latest


-v 后面就是Docker容器文件映射的命令,冒号前面 /tmp/skeleton 是宿主机的路径,就是WIN10电脑的文件路径,冒号后面 /hyperf-skeleton 是容器的文件路径,这个不用管,这里我们要对文件映射进行修改,win10系统有盘符,我来一个 D\DockerFile\test ,这里要设置一下Docker 的File sharing,增加一个 D:\DockerFile的路径,不然会报错的。

还要给这个容器起一个别名叫test-hyperf  加一个--name就行了

需要把框架默认的端口9501映射到宿主机端口9501,就是-p

学习一下docker的基本常用参数:

-i: 交互式启动

-t: 终端  (exit退出终端)

-d: 不进入容器

hyperf/hyperf:latest 这个就是框架的镜像,latest就是最新的版本,在本地找不到会自动下载。

最终修改如下:

docker run   -it --name test-hyperf -v /D/DockerFile/test:/hyperf-skeleton -p 9501:9501 hyperf/hyperf:latest

进入cmd执行命令,第一次会自动下载镜像,有点慢,我们可以在Docker设置一个国内的镜像加速域名,具体可以百度。


没有-d参数会直接进入容器

进入容器之后应该是直接进入了容器里面的微小的Linux系统,接下来可以按照官方教程来了

下载安装composer

# 镜像容器运行后,在容器内安装 Composer
wget https://github.com/composer/composer/releases/download/1.8.6/composer.phar
chmod u+x composer.phar
mv composer.phar /usr/local/bin/composer
# 将 Composer 镜像设置为阿里云镜像,加速国内下载速度
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer


# 通过 Composer 安装 hyperf/hyperf-skeleton 项目
composer create-project hyperf/hyperf-skeleton

第一个可以设置一下时区,后面全部直接回车默认就行,有兴趣可以仔细研究研究,这里只做一个简单的安装,回车完了就会开始安装一系列的插件。

接下来还是按照文档来

# 进入安装好的 Hyperf 项目目录
cd hyperf-skeleton
# 启动 Hyperf
php bin/hyperf.php start



这时候打开浏览器看看,访问127.0.0.1:9501

 

这里就安装成功了,查看本地文件夹

整个框架的文件就在这里了,但是这个框架有一个缺点并不像TP框架一样修改文件不会立马生效,需要我们重启。重启我们都要进入容器执行

docker exec -it test-hyperf /bin/bash  进入容器

CTRL + C 终止进程

php bin/hyperf.php start 再进行重启

这样就非常麻烦,于是我就想了一招,把这个容器删掉,改一下docker run 命令直接 每次重启docker就直接重启 这个框架。容器删掉并不会删掉映射到宿主机的文件。

再来学习一下docker命令:

CTRL + P+Q  退出容器

docker ps  查看正在运行的docker容器 

docker stop test-hyperf  停止名为test-hyperf的容器

docker rm test-hyperf 删除名为test-hyperf的容器


最后一招

docker run --name test-hyperf -v /D/DockerFile/test:/hyperf-skeleton -p 9501:9501  -d hyperf/hyperf:latest  php /hyperf-skeleton/bin/hyperf.php start

 

最后php /hyperf-skeleton/bin/hyperf.php start就是运行docker 容器后同时执行的命令

以后在WIN10宿主机修改代码后直接在运行一下Docker restart命令就可以重启项目。速度还是挺快的

docker restart test-hyperf

可以再使用docker ps 看下

可以看到command命令已经更改,我想要的功能可以了。

    教程到此结束,这个Hyperf框架是我第一个搭建的高性能框架,之前就只了解了一下Python的FastApi框架也是协程的,但是并没有着手搭建,这是一个非常不错的经历,Hyperf它的开发也非常简单,主要是做Api开发,开发时候的代码量比TP框架要少很多,很多插件已经实现了很多功能,简化了很多代码,有机会再给大家讲讲注解路由,验证器,模型迁移等等特点。都是我觉得非常有趣的地方,这个框架还有很多地方我也不懂,比如定时任务 ,利用jsonrpc实现多应用之间的互相提供服务调用,以及相关的k8s部署的东西,要真正的去了解还需要很多时间和精力,共勉加油!

文章转载自土味工程师,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论