前提说明

本教程适用于新手、老手,也适用于任何操作系统,包括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. .Net微服务实践(五)[服务发现]:Consul介绍和环境搭建

    目录 介绍 服务发现 健康检查.键值存储和数据中心 架构 Consul模式 环境安装 HTTP API 和Command CLI 示例API介绍 最后 在上篇.Net微服务实践(四)[网关]:Ocel ...

  2. C语言实现链表(链式存储结构)

    链表(链式存储结构)及创建 链表,别名链式存储结构或单链表,用于存储逻辑关系为 "一对一" 的数据.与顺序表不同,链表不限制数据的物理存储状态,换句话说,使用链表存储的数据元素,其 ...

  3. es搜索排序不正确

    沿用该文章里的数据https://www.cnblogs.com/MRLL/p/12691763.html 查询时发现,一模一样的name,但是相关度不一样 GET /z_test/doc/_sear ...

  4. Linux CentOS7 开通端口外网端口访问权限

    一.查看系统防火墙状态(如果返回 running 代表防火墙启动正常)firewall-cmd --state二.开启端口外网访问1.添加端口 返回 success 代表成功(--permanent永 ...

  5. GPS定位模块返回数据的处理

    本项目采用的是微科的VK2828U7G5LF,根据NMEA0183协议,打算采用反馈GPGLL语句来进行数据的处理. 1. 首先,本GPS模块默认的波特率是9600,因此,我们仅需要设置打开GPGLL ...

  6. SpringMVC框架详细教程(四)_使用maven导入各个版本的Spring依赖包

    使用maven导入Spring依赖包 上一节讲了如何向动态Web项目添加下载的Spring依赖包,作为补充下面列出了如何使用 maven 导入Spring的依赖包,可以选择需要的导入(推荐)或者全部导 ...

  7. Linux C++ 网络编程学习系列(7)——mbedtls编译使用

    mbedtls编译使用 环境: Ubuntu18.04 编译器:gcc或clang 编译选项: 静态编译使用 1. mbedtls源码 下载地址: https://github.com/ARMmbed ...

  8. myvue 模拟vue核心原理

    // js部分index.js class Myvue{ constructor(options){ this.data = options.data; this.dep = new Dep(); v ...

  9. 【翻译】创建String 使用“”还是构造函数(new String)

    在java中创建String,通常有以下两种方法. String x = "abc"; String y = new String("abc"); 它们之间有什 ...

  10. 聊聊Disruptor 和 Aeron 这两个开源库

    Disruptor The best way to understand what the Disruptor is, is to compare it to something well under ...