hyperf初步认识和安装

认识hyperf

复制代码
1. Hyperf 是一个高性能的渐进式 PHP 协程框架,封装了很多常用的组件:
MySQL 客户端、Redis 客户端、协程版的 Eloquent ORM、WebSocket 服务端及客户端、Guzzle HTTP 客户端、
Elasticsearch 客户端、AMQP 组件、基于令牌桶算法的限流器等组件。
2. 还有一些便捷的功能:
基于 PSR-11 的依赖注入容器、注解、AOP 面向切面编程、自定义进程、
Redis/RabbitMQ 消息队列、Crontab 秒级定时任务等,以上功能基本上是框架的特点。

使用docker compose 进行安装

  1. docker-compose.yml 相关部分
bash 复制代码
hyperf:
    # 服务名称(自定义)
    container_name: h_hyperf
    # 基于官网Dockerfile构建镜像
    build:
      context: ./hyperf/${PHP_VERSION}/alpine/swoole   # Dockerfile所在目录(根据实际路径调整)
      dockerfile: Dockerfile                # 指定使用的Dockerfile
      # 传递构建参数(与Dockerfile中的ARG对应)
      args:
        ALPINE_VERSION: ${ALPINE_VERSION}                # 固定Alpine版本为3.18
        SW_VERSION: ${SW_VERSION}                        # Swoole版本(与Dockerfile默认值一致)
        COMPOSER_VERSION: ${COMPOSER_VERSION}            # Composer版本(与Dockerfile默认值一致)
        PHP_BUILD_VERSION: ${PHP_BUILD_VERSION}          # PHP 8.2对应的值(需与PHP版本匹配)
        TIMEZONE: ${TIMEZONE}                            # 时区设置
    # 端口映射:主机端口:容器端口(Hyperf默认端口9501)
    ports:
      - "9501:9501"
    # 目录挂载:将本地项目代码同步到容器内(开发必备)
    volumes:
      - C:\data_disk:/data_disk
      - C:\phpstudy_pro\WWW\rf_smart_hyperf:/opt/www # 本地 hyperf_dev 目录映射到容器内项目目录
    # 环境变量:设置开发环境配置
    environment:
      - APP_ENV=dev            # 开发环境(Hyperf 会优先加载 config/autoload/prod|dev 目录下的配置(若存在),覆盖基础配置。)
      - TIMEZONE=Asia/Shanghai # 时区设置
      - SCAN_CACHEABLE=false   # 关闭扫描缓存(开发时实时更新代码)
    # 启动命令:启动Hyperf服务(默认命令,可根据项目调整)
    command: sh -c "cd /opt/www && php bin/hyperf.php server:watch" # 安装"热重载工具" Watcher 组件:composer require hyperf/watcher --dev | php bin/hyperf.php vendor:publish hyperf/watcher | docker-compose down hyperf | docker-compose up -d hyperf
    # 注:安装 Watcher 组件,生成的配置文件可能在根目录下.watcher.php,需要手动迁移到 /config/autoload 目录下watcher.php
    # command: sh -c "cd /opt/www && php bin/hyperf.php start"
    # command: tail -f /dev/null # 使用tail命令保持容器运行: docker pull hyperf/hyperf:8.2-alpine-v3.18-base | docker-compose up -d --build | docker-compose exec hyperf sh | cd /opt/www | composer create-project hyperf/hyperf-skeleton .
    networks:
      - ms-network
    # 重启策略:容器退出时不自动重启(开发环境推荐):always | no | on-failure | unless-stopped
    restart: "unless-stopped"
  1. dockerfile 代码
bash 复制代码
# hyperf/hyperf:8.2
#
# @link     https://www.hyperf.io
# @document https://hyperf.wiki
# @contact  group@hyperf.io
# @license  https://github.com/hyperf/hyperf/blob/master/LICENSE

ARG ALPINE_VERSION

FROM hyperf/hyperf:8.2-alpine-v${ALPINE_VERSION}-base

LABEL maintainer="Hyperf Developers <group@hyperf.io>" version="1.0" license="MIT"

ARG SW_VERSION
ARG COMPOSER_VERSION
ARG PHP_BUILD_VERSION
ARG TIMEZONE

##
# ---------- env settings ----------
##
ENV SW_VERSION=${SW_VERSION:-"v5.1.1"} \
    COMPOSER_VERSION=${COMPOSER_VERSION:-"2.6.6"} \
    COMPOSER_ALLOW_SUPERUSER=1 \
    TIMEZONE=${TIMEZONE:-"Asia/Shanghai"} \
    #  install and remove building packages
    PHPIZE_DEPS="autoconf dpkg-dev dpkg file g++ gcc libc-dev make php${PHP_BUILD_VERSION}-dev php${PHP_BUILD_VERSION}-pear pkgconf re2c pcre-dev pcre2-dev zlib-dev libtool automake libaio-dev openssl-dev curl-dev"

# 设置工作目录为
WORKDIR /opt/www

# 创建 www-data 用户和组
# RUN set -ex \
#     && addgroup -g 82 -S www-data 2>/dev/null || true \
#     # 创建 www-data 用户(如果不存在)
#     && adduser -u 82 -S -G www-data -s /bin/sh -D -H www-data 2>/dev/null || true

COPY composer.phar /usr/local/bin/composer
COPY swoole-src-5.1.1.tar.gz /tmp/swoole.tar.gz
COPY php-8.2.16.tar.gz /tmp/php-8.2.16.tar.gz

# update
RUN set -ex \
    && apk update \
    # for swoole extension libaio linux-headers
    && apk add --no-cache libstdc++ openssl git bash c-ares-dev libpq-dev php82-pdo_pgsql php82-pdo_sqlite php82-pdo_odbc \
    && apk add --no-cache --virtual .build-deps $PHPIZE_DEPS unixodbc-dev sqlite-dev \
    # download
    && cd /tmp \
    # && curl -SL "https://github.com/swoole/swoole-src/archive/${SW_VERSION}.tar.gz" -o swoole.tar.gz \
    && ls -alh \
    # php extension:swoole
    && cd /tmp \
    && mkdir -p swoole \
    && tar -xf swoole.tar.gz -C swoole --strip-components=1 \
    && ln -s /usr/bin/phpize${PHP_BUILD_VERSION} /usr/local/bin/phpize \
    && ln -s /usr/bin/php-config${PHP_BUILD_VERSION} /usr/local/bin/php-config \
    && ( \
        cd swoole \
        && phpize \
        && ./configure --enable-openssl --enable-swoole-curl --enable-cares --enable-swoole-pgsql --enable-swoole-sqlite --with-swoole-odbc=unixodbc,/usr \
        && make -s -j$(nproc) && make install \
    ) \
    # 安装 exif 和 ftp 扩展
    && cd /tmp \
    && mkdir -p php-src \
    && tar -xf php-8.2.16.tar.gz -C php-src --strip-components=1 \
    # ----- [新增] 编译安装 ftp 扩展 -----
    && cd php-src/ext/ftp \
    && phpize \
    && ./configure --with-openssl-dir=/usr \
    && make -j$(nproc) \
    && make install \
    # ----- [新增结束] -----
    && cd /tmp/php-src/ext/exif \
    && phpize \
    && ./configure \
    && make -s -j$(nproc) \
    && make install \
    # max_input_vars 是 PHP 的一个配置指令,用于限制 HTTP 请求中可以接受的输入变量数量。PHP_INT_MAX 是 PHP 中预定义的常量,表示整数的最大值。
    && echo "memory_limit=1G" > /etc/php${PHP_BUILD_VERSION}/conf.d/00_default.ini \
    && echo "max_input_vars=PHP_INT_MAX" >> /etc/php${PHP_BUILD_VERSION}/conf.d/00_default.ini \
    && echo "upload_max_filesize=128M" >> /etc/php${PHP_BUILD_VERSION}/conf.d/00_default.ini \
    && echo "post_max_size=128M" >> /etc/php${PHP_BUILD_VERSION}/conf.d/00_default.ini \
    && echo "date.timezone=${TIMEZONE}" >> /etc/php${PHP_BUILD_VERSION}/conf.d/00_default.ini \
    && echo "opcache.enable_cli = 'On'" >> /etc/php${PHP_BUILD_VERSION}/conf.d/00_opcache.ini \
    && echo "extension=swoole.so" > /etc/php${PHP_BUILD_VERSION}/conf.d/50_swoole.ini \
    && echo "swoole.use_shortname = 'Off'" >> /etc/php${PHP_BUILD_VERSION}/conf.d/50_swoole.ini \
    && echo "extension=exif.so" > /etc/php${PHP_BUILD_VERSION}/conf.d/50_exif.ini \
    # ----- [新增] 注册 ftp 扩展 -----
    && echo "extension=ftp.so" > /etc/php${PHP_BUILD_VERSION}/conf.d/50_ftp.ini \
    # ----- [新增结束] -----
    # - config timezone
    && ln -sf /usr/share/zoneinfo/${TIMEZONE} /etc/localtime \
    && echo "${TIMEZONE}" > /etc/timezone \
    # install composer
    # && wget -nv -O /usr/local/bin/composer https://github.com/composer/composer/releases/download/${COMPOSER_VERSION}/composer.phar \
    && chmod u+x /usr/local/bin/composer \
    # ---------- clear works ----------
    && apk del .build-deps \
    && rm -rf /var/cache/apk/* /tmp/* /usr/share/man /usr/local/bin/php* \
    # php info
    && php -v \
    && php -m \
    && php --ri swoole \
    && php --ri exif \
    && php --ri Zend\ OPcache \
    # ----- [新增] 验证 ftp 扩展 -----
    && php --ri ftp \
    # ----- [新增结束] -----
    && composer \
    && echo -e "\033[42;37m Build Completed :).\033[0m\n"
  1. 启动hyperf项目
bash 复制代码
docker compose up -d --build h_hyperf 
相关推荐
LEE1 小时前
别再堆 AGENTS.md 了:前端团队如何把 AI Coding 做成一套可执行的工程系统
前端·后端
geovindu1 小时前
python: Face Recognition
开发语言·后端·python·人脸识别
工具派1 小时前
markdown在线编辑器怎么选?渲染管线的3个坑和md转PDF跑版记录
前端·后端
黑马程序员毕设2 小时前
基于Java的仪器管理系统设计与实现
java·开发语言·spring boot·后端·微信小程序
长大19882 小时前
执行计划看不懂?一文理清 Oracle CBO 优化器工作原理
后端
平头哥AI2 小时前
Day 13 | 一个函数回两个值:Go 的 error 是从哪冒出来的
开发语言·后端·golang
骇客野人2 小时前
SpringBoot电商购物车、结算、下单、库存方案设计与落地实施步骤
java·spring boot·后端
Cache技术分享2 小时前
517. Java 方法句柄 - 方法句柄 vs 反射 API
前端·后端
BS30813_vx3 小时前
基于 Express + uni-app 的养老院管理系统设计与实现
后端·uni-app·express