前提说明

本教程适用于新手、老手,也适用于任何操作系统,包括Windows、linux、MacOS

介绍

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

框架组件库除了常见的协程版的 MySQL 客户端Redis 客户端,还为您准备了协程版的 Eloquent ORMWebSocket 服务端及客户端JSON RPC 服务端及客户端GRPC 服务端及客户端Zipkin/Jaeger (OpenTracing) 客户端Guzzle HTTP 客户端Elasticsearch 客户端Consul 客户端ETCD 客户端AMQP 组件Apollo 配置中心阿里云 ACM 应用配置管理ETCD 配置中心基于令牌桶算法的限流器通用连接池熔断器Swagger 文档生成Swoole Tracker视图引擎Snowflake 全局 ID 生成器 等组件,省去了自己实现对应协程版本的麻烦。

Hyperf 还提供了 基于 PSR-11 的依赖注入容器注解AOP 面向切面编程基于 PSR-15 的中间件自定义进程基于 PSR-14 的事件管理器Redis/RabbitMQ 消息队列自动模型缓存基于 PSR-16 的缓存Crontab 秒级定时任务国际化Validation 表单验证器 等非常便捷的功能,满足丰富的技术场景和业务场景,开箱即用。

官方文档

安装

先看下官方的文档说明

Hyperf 对系统环境有一些要求,仅可运行于 Linux 和 Mac 环境下,但由于 Docker 虚拟化技术的发展,在 Windows 下也可以通过 Docker for Windows 来作为运行环境,通常来说 Mac 环境下,我们更推荐本地环境部署,以避免 Docker 共享磁盘缓慢导致 Hyperf 启动速度慢的问题。

hyperf\hyperf-docker 项目内已经为您准备好了各种版本的 Dockerfile ,或直接基于已经构建好的 hyperf\hyperf 镜像来运行。

当您不想采用 Docker 来作为运行的环境基础时,您需要确保您的运行环境达到了以下的要求:

PHP >= 7.2
Swoole PHP 扩展 >= 4.4,并关闭了 Short Name
OpenSSL PHP 扩展
JSON PHP 扩展
PDO PHP 扩展 (如需要使用到 MySQL 客户端)
Redis PHP 扩展 (如需要使用到 Redis 客户端)
Protobuf PHP 扩展 (如需要使用到 gRPC 服务端或客户端)

可见,如果你打算再Windows上进行开发的话,那你可能会遇到一些困难,比如得装一个docker for windows或者装个虚拟机,由于有一部分win10系统是家庭版的,装docker for windows会遇到一些奇奇怪怪的问题,笔者建议不要采用这种方法

下面我将采用三种方法快速上手Hyperf

1、原生安装

适用范围:如果你是新手,你从来没有自己手动装过PHP环境,也没装过PHP相关扩展,你可以试试看这种方法,不过你得有耐心,因为你会遇到一系列奇奇怪怪的问题

难度指数:五星

2、使用docker安装

适用范围:如果你已经手动安装过PHP,配置过PHP环境以及相关扩展,想使用docker熟悉下,你可以试试看这种方式

难度指数:四星

3、docker-compose

适用范围:如果你有一定的docker操作经验,你可以使用这种一步到位的方法快速部署一个Hyperf项目

难度指数:三星

Tips:Linux或者MacOS用户可以跳过下面安装vmware虚拟机这一步

Windows用户安装 Vmware 和 Centos7(笔者用的是GUI版的Centos):

1、安装 Vmware 以及安装 Centos7,流程可以参考这位博主的文章,参考

2、配置一个共享文件夹,有什么作用呢,就是把你 Windows 上你的开发的项目映射到这台 Centos 虚拟机上,参考

3、配置虚拟机开机自动启动挂载脚本,目的是自动挂载上面的共享文件夹,不用自己手动操作,参考

快速开始

这里使用的是Hyperf的骨架项目,Github地址在这里

一、原生安装

原生安装的话,需要你的虚拟机要装有

  • PHP(7.2以上版本)
  • Swoole PHP 扩展 >= 4.4,并关闭了 Short Name
  • OpenSSL PHP 扩展
  • JSON PHP 扩展
  • PDO PHP 扩展 (如需要使用到 MySQL 客户端)
  • Redis PHP 扩展 (如需要使用到 Redis 客户端)
  • Protobuf PHP 扩展 (如需要使用到 gRPC 服务端或客户端)
  • 安装 Composer

1. PHP安装

安装教程可以参考这里,如果遇到编译错误的问题,参考这里,配置PHP命令参考这里

PS:如果执行“php -v”版本变成5.X,那可能是你之前装过其他版本了,参考这里

2. Swoole扩展安装,OpenSSL、JSON、Redis等也同理,注意,装之前运行"php -m"查看,没有的话再安装

Swoole参考这里,JSON参考这里,OpenSSL参考这里,Redis参考这里

PS:其他扩展看你自己项目需要,GD库参考这里,zip参考这里,fileinfo参考这里

3. 安装composer

参考这里

OK,弄完上面这里,基本上环境就差不多了,如果遇到安装报错的话,应该是安装PHP那部分会出错的比较多,其他的很少出问题,下面使用Composer把骨架项目弄一下

在虚拟机的共享文件夹下面找个地方,运行下面命令,将会创建一个Hyperf的骨架项目,类似于一个啥都没有的Demo

# composer create-project hyperf/hyperf-skeleton

安装过程中可能需要一些时间,然后进入到项目里面,运行下面命令启动项目

# php bin/hyperf.php start

这样,项目就启动好了,如果没报错的话到这里就OK了,然后是测试,有两种方式,一种是浏览器打开:http://localhost:9501,另外一种是curl

# curl localhost:
//或者
# curl 0.0.0.0:
//或者
# curl 127.0.0.1:

Windows系统要怎么开发呢,还记得上面共享了一个文件夹吗,直接打开那个共享文件夹就会看到刚刚创建的项目,然后用你的编译器打开进行码码码就行了

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

你也可以去Github上把这个项目的代码拉下来,运行compose install安装相应的扩展,再启动

二、使用docker安装

前提:既然要用docker安装,那你就得装上docker命令,参考docker官方的文档进行安装即可

一些概念说明:

1、vmware虚拟机:这个是windows用户在vmware上装的虚拟机,比如上面的centos

2、docker容器:这个是在centos上运行docker run命令启动的虚拟机

3、查看docker镜像命令:docker imgaes

4、查看所有docker容器命令:docker ps -a

方法一:参考官方的安装方式

# Windows用户要注意了,由于这个是在centos上运行的,下面的主机指的是centos

# 下载并运行 hyperf/hyperf 镜像,并将镜像内的项目目录绑定到宿主机的 /tmp/skeleton 目录
docker run -v /tmp/skeleton:/hyperf-skeleton -p : -it --entrypoint /bin/sh hyperf/hyperf:7.2-alpine-cli # 镜像容器运行后,在容器内安装 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

方法二:

其实上面的方式有点繁琐,看到骨架项目里面有一个Dockerfile文件,我们可以做一个镜像来处理

Dockerfile文件的内容,有没有很熟悉,其实就是上面那一块docker安装内容的整理,这里是把这些做成一个镜像

# Default Dockerfile
#
# @link https://www.hyperf.io
# @document https://doc.hyperf.io
# @contact group@hyperf.io
# @license https://github.com/hyperf-cloud/hyperf/blob/master/LICENSE FROM hyperf/hyperf:7.2-alpine-v3.-cli
LABEL maintainer="Hyperf Developers <group@hyperf.io>" version="1.0" license="MIT" ##
# ---------- env settings ----------
##
# --build-arg timezone=Asia/Shanghai
ARG timezone ENV TIMEZONE=${timezone:-"Asia/Shanghai"} \
COMPOSER_VERSION=1.9. \
APP_ENV=prod # update
RUN set -ex \
&& apk update \
# install composer
&& cd /tmp \
&& wget https://github.com/composer/composer/releases/download/${COMPOSER_VERSION}/composer.phar \
&& chmod u+x composer.phar \
&& mv composer.phar /usr/local/bin/composer \
# show php version and extensions
&& php -v \
&& php -m \
# ---------- some config ----------
&& cd /etc/php7 \
# - config PHP
&& { \
echo "upload_max_filesize=100M"; \
echo "post_max_size=108M"; \
echo "memory_limit=1024M"; \
echo "date.timezone=${TIMEZONE}"; \
} | tee conf.d/-overrides.ini \
# - config timezone
&& ln -sf /usr/share/zoneinfo/${TIMEZONE} /etc/localtime \
&& echo "${TIMEZONE}" > /etc/timezone \
# ---------- clear works ----------
&& rm -rf /var/cache/apk/* /tmp/* /usr/share/man \
&& echo -e "\033[42;37m Build Completed :).\033[0m\n" WORKDIR /opt/www # Composer Cache
# COPY ./composer.* /opt/www/
# RUN composer install --no-dev --no-scripts COPY . /opt/www
RUN composer install --no-dev -o EXPOSE 9501 ENTRYPOINT ["php", "/opt/www/bin/hyperf.php", "start"]

既然有Dockerfile,我们直接吧这个Dockerfile做成一个镜像吧

做镜像的命令是:docker build -t 镜像名:版本号 .
PS:.表示最后的Dockerfile文件的位置,可以为绝对路径
eg:docker build -t dev:1.0 .
做完镜像后
运行 docker images看看你创建的镜像
然后就可以启动了
启动的命令说明:docker run -v 主机卷:目标卷 -p 主机端口:目标端口 镜像名:版本号
eg:docker run -v /data/:/opt/www -p :9501 dev:1.0
查看docker日志,加上-f表示持续查看
docker logs -f 容器id 查看所有的容器
docker ps -a

记得你打包镜像的时候使用的镜像名跟版本号要跟后面启动的命令用的镜像名和版本号要保持一致

题外话,如果我想让这个docker容器跟另外一个docker容器,比如redis,要进行通信,要怎么做呢?参考这里

两个容器相互访问,使用--link

eg:docker run -v /data/:/opt/www -p : --link xxx1:redis xxx2

三、docker-compose

前提:安装docker-compose,参考这里

安装完docker-compose后,在centos虚拟机任何地方创建一个docker-compose.yml文件

version: '2.0'

services:
hyperf-test:
container_name: hyperf-test
hostname: hyperf-test
restart: always
image: dev:1.0
ports:
- :
expose:
-
volumes:
- /mnt/hgfs/hyperf-test/:/opt/www

说明:

1、"/mnt/hgfs/hyperf-test" 这个目录是我挂载我windows主机到centos虚拟机的地址,可以自由换成你自己的地址

2、hyperf-test里面的image使用的镜像是第二步我们用Dockerfile做的镜像

创建完成后呢,在这个docker-compose.yml文件的目录下,参考下面命令把容器启动、停止、重启、删除

// 启动容器
# docker-compose up
// 停止容器
# docker-compose stop
// 重启
# docker-compose restart
// 停止容器并删除
# docker-compose down

跟第二步一样,如果我想让两个容器建立通信,docker-compose.yml要怎么写呢

version: '2.0'

services:
redis2:
image: redis
container_name: redis2
hostname: redis2
restart: always
command: --appendonly yes
ports:
- :
expose:
-
privileged: true
volumes:
- /data/redis_data:/data hyperf-test:
container_name: hyperf-test
hostname: hyperf-test
restart: always
image: dev:1.0
ports:
- :
external_links:
- redis2
links:
- redis2:redis
depends_on:
- redis2
expose:
-
volumes:
- /mnt/hgfs/hyperf-test/:/opt/www

说明:

1、把redis的配置也写上

2、使用link关联两个容器

3、上面其实启动了两个容器,一个是redis,另外一个是hyperf,并且将两者建立一个连接

其中,由于redis使用挂载的方法,不会因为重启丢失数据,所以得先在主机目录/data/redis_data建好文件并设置好权限,如果后面启动再次出现权限问题:

  • 关闭SELinux,执行“setenforce 0”
  • docker-compose加上“privileged: true”
  • docker run 加上“--privileged=true”

docker-compose link使用方法参考这里

参考资料

Hyperf官方文档

Hyperf基础教程的更多相关文章

  1. matlab基础教程——根据Andrew Ng的machine learning整理

    matlab基础教程--根据Andrew Ng的machine learning整理 基本运算 算数运算 逻辑运算 格式化输出 小数位全局修改 向量和矩阵运算 矩阵操作 申明一个矩阵或向量 快速建立一 ...

  2. <<Bootstrap基础教程>> 新书出手,有心栽花花不开,无心插柳柳成荫

    并非闲的蛋疼,做技术也经常喜欢蛋疼,纠结于各种技术,各种需求变更,还有一个很苦恼的就是UI总是那么不尽人意.前不久自己开源了自己做了多年的仓储项目(开源地址:https://github.com/he ...

  3. Memcache教程 Memcache零基础教程

    Memcache是什么 Memcache是danga.com的一个项目,来分担数据库的压力. 它可以应对任意多个连接,使用非阻塞的网络IO.由于它的工作机制是在内存中开辟一块空间,然后建立一个Hash ...

  4. Selenium IDE 基础教程

    Selenium IDE 基础教程 1.下载安装     a 在火狐浏览其中搜索附件组件,查找 Selenium IDE     b 下载安装,然后重启firefox 2.界面讲解      在菜单- ...

  5. html快速入门(基础教程+资源推荐)

    1.html究竟是什么? 从字面上理解,html是超文本标记语言hyper text mark-up language的首字母缩写,指的是一种通用web页面描述语言,是用来描述我们打开浏览器就能看到的 ...

  6. 转发-UI基础教程 – 原生App切图的那些事儿

    UI基础教程 – 原生App切图的那些事儿 转发:http://www.shejidaren.com/app-ui-cut-and-slice.html 移动APP切图是UI设计必须学会的一项技能,切 ...

  7. 【Unity3D基础教程】给初学者看的Unity教程(四):通过制作Flappy Bird了解Native 2D中的RigidBody2D和Collider2D

    作者:王选易,出处:http://www.cnblogs.com/neverdie/ 欢迎转载,也请保留这段声明.如果你喜欢这篇文章,请点[推荐].谢谢! 引子 在第一篇文章[Unity3D基础教程] ...

  8. oracle基础教程(8)oracle修改字符集

    oracle基础教程(8)oracle修改字符集 1.用dba连接数据库 -->sqlplus / as sysdba 2.查看字符集 -->SELECT parameter, value ...

  9. 改写《python基础教程》中的一个例子

    一.前言 初学python,看<python基础教程>,第20章实现了将文本转化成html的功能.由于本人之前有DIY一个markdown转html的算法,所以对这个例子有兴趣.可仔细一看 ...

随机推荐

  1. 个推IGt.BaseTemplate.php,不仅有bug,还有bom头,好恶心!

    错误截图,提交吧,还有一个不明飞行物. 去掉utf-8 BOM:set nobomb保留utf-8 BOM:set bomb

  2. 在scratch中怎样编写抓蝴蝶游戏

    打开scratch2.0软件,进入工作界面,将语言切换为简体中文:将默认的演员猫删除掉:在新建背景中选择“从背景库中选择背景”: 选择户外,来点一个背景图flower bed,然源后点下面的确定: 背 ...

  3. 【前端】CSS总结

    ========================   CSS层叠样式表======================== 命名规则:使用字母.数字或下划线和减号构成,不要以数字开头 一.css的语法-- ...

  4. keras与卷积神经网络(CNN)实现识别minist手写数字

    在本篇博文当中,笔者采用了卷积神经网络来对手写数字进行识别,采用的神经网络的结构是:输入图片——卷积层——池化层——卷积层——池化层——卷积层——池化层——Flatten层——全连接层(64个神经元) ...

  5. protobuf总结

    1.protobuf是什么? protobuf(protocol buffers)是一种语言中立,平台无关,可扩展的序列化数据的格式,可以用于通信协议,数据存储等. protobuf 相比于xml,j ...

  6. "为文本添加下划线"组件:<u> —— 快应用组件库H-UI

     <import name="u" src="../Common/ui/h-ui/text/c_tag_underline"></impor ...

  7. JNDI数据源的配置及使用 (2010-11-21 21:16:43)转载▼

    JNDI数据源的配置及使用 (2010-11-21 21:16:43)转载▼ 标签: 杂谈 分类: 数据库 数据源的作用 JDBC操作的步骤: 1. 加载驱动程序 2. 连接数据库 3. 操作数据库 ...

  8. Java方法的重点

    方法就是完成功能一个语句集合体 使用方法的原则:方法的原子性,一个方法只实现一个功能. 方法的重载 1.函数名必须相同 2.形参列表必须不同(可以是个数不同,类型不同,不然完全一样) 3.返回值可以相 ...

  9. L3 多层感知机

    **本小节用到的数据下载 1.涉及语句 import d2lzh1981 as d2l 数据1 : d2lzh1981 链接:https://pan.baidu.com/s/1LyaZ84Q4M75G ...

  10. A - Smith Numbers POJ

    While skimming his phone directory in 1982, Albert Wilansky, a mathematician of Lehigh University,no ...