美文网首页面向简历编程(重学php)
1.1 windows 上搭建hyperf环境

1.1 windows 上搭建hyperf环境

作者: 回眸淡然笑 | 来源:发表于2023-05-25 15:38 被阅读0次

    1、安装docker客户端

    开启Hyper-V

    一、启用Hyper-V

    打开控制面板 - 程序和功能 - 启用或关闭Windows功能,勾选Hyper-V,然后点击确定即可,如图:

    1513668234-6433-20171206211858191-1177002365.png
    下载windwos版本docker安装包 地址
    如下图

    启动docker.exe可能回报没有可用的linux系统或者wsl需要更新。
    第一种情况处理办法:在 Microsoft Store 获取linux,这里我获取的是 ubuntu
    image.png
    第二种情况处理办法:下载wsl更新包,然后运行 wsl更新包

    修改docker 镜像仓库

    安装好后登陆docker(没有账号的请到官网进行注册)


    image.png

    使用git快速获取lnmp

    windows上推荐使用cmder来代替cmd

    cmdercmder是一个增强型命令行工具,不仅可以使用windows下的所有命令,更爽的是可以使用linux的命令,shell命令。

    后面的步骤和在mac上的一样。毕竟docker是跨系统的,真香。

    切换到你准备安装dnmp的目录下

    $ git clone https://github.com/shmilylbelva/dnmp.git //建议使用https://github.com/yeszao/dnmp版本,功能更强大
    $ cd dnmp
    $ docker-compose up
    

    即开始安装资源,如下图


    image.png

    完成以后可以在浏览器中访问localhost,出现以下界面代表ok。

    image.png
    出现 SQLSTATE[HY000] [1130] Host '172.19.0.2' is not allowed to connect to this MySQL servermysql提示,是因为目前使用mysql-server 8.0.28以上的版本,php版本需要7.4.7以上才能连接,所以需要修改yal文件php版本为7.4.7以上,然后重新build
    $ docker stop php                      # 第一步:停止容器
    $ docker rm php                     # 第二步:删除容器
    $ docker-compose up -d --no-deps --build php  # 第三步:重新启动容器
    

    其中最后一条命令参数作用:
    -d:后台执行
    --no-deps:不启动link的容器
    --build:启动容器前先构建镜像

    设置mysql远程可访问

    新开一个终端进入mysql容器

    docker ps //查看容器
    docker exe -it mysql /bin/bash // 进入容器
    mysql //进入mysql终端,应为初始mysql没有密码,所以直接能够进入
    update mysql.user set host = '%' where user = 'root';//修改远程可访问
    ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';//修改密码为123456
    FLUSH PRIVILEGES;//生效
    

    刷新浏览器后,mysql连接成功


    image.png

    说明,连接MySQL这要分两种情况,

    第一种情况,在PHP代码中

    // 连接MySQL
    $dbh = new PDO('mysql:host=mysql;dbname=mysql', 'root', '123456');
    
    // 连接Redis
    $redis = new Redis();
    $redis->connect('redis', 6379);
    

    因为容器与容器是expose端口联通的,而且在同一个networks下,所以连接的host参数直接用容器名称,port参数就是容器内部的端口。更多请参考《docker-compose ports和expose的区别》

    第二种情况,在主机中通过命令行或者Navicat等工具连接。主机要连接mysql和redis的话,要求容器必须经过ports把端口映射到主机了。以 mysql 为例,docker-compose.yml文件中有这样的ports配置:3306:3306,就是主机的3306和容器的3306端口形成了映射,所以我们可以这样连接:

    $ mysql -h127.0.0.1 -uroot -p123456 -P3306
    $ redis-cli -h127.0.0.1
    

    这里host参数不能用localhost是因为它默认是通过sock文件与mysql通信,而容器与主机文件系统已经隔离,所以需要通过TCP方式连接,所以需要指定IP。

    dnmp目录结构

    /
    ├── data                        数据库数据目录
    │   ├── esdata                  ElasticSearch 数据目录
    │   ├── mongo                   MongoDB 数据目录
    │   ├── mysql                   MySQL8 数据目录
    │   └── mysql5                  MySQL5 数据目录
    ├── services                    服务构建文件和配置文件目录
    │   ├── elasticsearch           ElasticSearch 配置文件目录
    │   ├── mysql                   MySQL8 配置文件目录
    │   ├── mysql5                  MySQL5 配置文件目录
    │   ├── nginx                   Nginx 配置文件目录
    │   ├── php                     PHP5.6 - PHP7.4 配置目录
    │   ├── php54                   PHP5.4 配置目录
    │   └── redis                   Redis 配置目录
    ├── logs                        日志目录
    ├── docker-compose.sample.yml   Docker 服务配置示例文件
    ├── env.smaple                  环境配置示例文件
    └── www                         PHP 代码目录
    

    启动hyperf

    docker exe -it php /bin/sh // 进入容器
    cd HAdmin
    composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/  //配置阿里云镜像
    install-php-extensions redis   安装php扩展swoole和redis
    install-php-extensions swoole
    composer install //安装composer包
    php bin/hyperf.php start //启动hyperf
    
    image.png image.png

    修改php.ini 末尾添加swoole.use_shortname=Off,否则启动hyperf会报错

    image.png
    重新启动
    php bin/hyperf.php start
    
    image.png

    配置nginx

    因为我是本地win上搭建的docker,这里地址需要填写虚拟机的php容器地址

     docker exec -it php /bin/sh
    
    image.png
    upstream hyperf_websocket {
        server 172.18.0.5:9504;//虚拟机的php容器地址
    }
    server {
        listen       80;
        server_name  www.hadmin.dev;//设置的本地hosts域名
        root   /www/HAdmin;
        index  index.php index.html index.htm;
        #charset koi8-r;
    
        //  http部分
        location / {
            client_max_body_size    20m;
            # 将客户端的 Host 和 IP 信息一并转发到对应节点
            proxy_set_header Host $http_host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    
            # 转发Cookie,设置 SameSite
            proxy_cookie_path / "/; secure; HttpOnly; SameSite=strict";
    
            # 执行代理访问真实服务器
            proxy_pass http://172.18.0.5:9501;
            
        }
        //socket部分
        location /wss {
                # WebSocket Header
                proxy_http_version 1.1;
                proxy_set_header Upgrade websocket;
                proxy_set_header Connection "Upgrade";
                # 将客户端的 Host 和 IP 信息一并转发到对应节点
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header Host $http_host;
                # 客户端与服务端无交互 60s 后自动断开连接,请根据实际业务场景设置
                proxy_read_timeout 60s ;
                # 执行代理访问真实服务器
                proxy_pass http://hyperf_websocket;
        }
        //  以下的不用
        access_log /dev/null;
        #access_log  /var/log/nginx/nginx.localhost.access.log  main;
        error_log  /var/log/nginx/nginx.localhost.error.log  warn;
    
        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }
    
    
        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        location ~ [^/]\.php(/|$) {
            fastcgi_pass   php:9000;
            include        fastcgi-php.conf;
            include        fastcgi_params;
        }
    
    }
    
    

    前端请求ws服务,需要填写该地址
    ws://socket.tik-im.com/wss/default.io
    因为Hadmin设置的ws服务路由规则为wss/default.io

    image.png

    相关文章

      网友评论

        本文标题:1.1 windows 上搭建hyperf环境

        本文链接:https://www.haomeiwen.com/subject/zmbxedtx.html