dnmp 运行多PHP版本(PHP74安装支持swoole,kafka, redis) 及运行hyperf项目

官方文档: https://github.com/yeszao/dnmp

本身默认PHP7.1版本
如果需要同时支持多个版本PHP,需要另外在配置
下面举例子配置多个PHP版本 -- PHP7.4

  1. dnmp/service目录下复制多一份php目录, 并修改成PHP74

  1. 根目录下docker-compose.yml 同样复制php配置同一份
    注意修改php相关变量、字符串为php74
php74:
    build:
      context: ./services/php74
      args:
        PHP_VERSION: php:${PHP74_VERSION}-fpm-alpine
        CONTAINER_PACKAGE_URL: ${CONTAINER_PACKAGE_URL}
        PHP_EXTENSIONS: ${PHP74_EXTENSIONS}
        TZ: "$TZ"
    container_name: php74
    expose:
      - 9501
    extra_hosts:
      - "www.site1.com:172.17.0.1"
    volumes:
      - ${SOURCE_DIR}:/www/:rw
      - ${PHP74_PHP_CONF_FILE}:/usr/local/etc/php/php.ini:ro
      - ${PHP74_FPM_CONF_FILE}:/usr/local/etc/php-fpm.d/www.conf:rw
      - ${PHP74_LOG_DIR}:/var/log/php
      - ${DATA_DIR}/composer74:/tmp/composer
    restart: always
    cap_add:
      - SYS_PTRACE
    networks:
      - default

  1. 根目录下.env 文件同样复制php配置同一份
    注意扩展配置的不同
PHP74_VERSION=7.4
PHP74_PHP_CONF_FILE=./services/php/php.ini
PHP74_FPM_CONF_FILE=./services/php/php-fpm.conf
PHP74_LOG_DIR=./logs/php
PHP74_EXTENSIONS=pdo_mysql,mysqli,mbstring,gd,curl,sockets,opcache,rdkafka,redis,pcntl

  1. 由于按docker-composer up 命令直接全部打包镜像生成容器,会发现php74到swoole扩展并没有生效
    所以需要改动php74目录下dockerfile文件, 另外进行编译安装
    需要添加以下dockerfile命令

RUN apk --update add --no-cache --virtual .build-deps autoconf  g++ libtool make curl-dev gettext-dev linux-headers

RUN wget https://github.com/emcrisostomo/fswatch/releases/download/1.14.0/fswatch-1.14.0.tar.gz \
    && tar -xf fswatch-1.14.0.tar.gz \
    && cd fswatch-1.14.0/ \
    && ./configure \
    && make \
    && make install

RUN docker-php-source extract && \
    mkdir /usr/src/php/ext/swoole && \
    curl -sfL https://github.com/swoole/swoole-src/archive/v4.7.1.tar.gz -o swoole.tar.gz && \
    tar xfz swoole.tar.gz --strip-components=1 -C /usr/src/php/ext/swoole && \
    docker-php-ext-configure swoole \
        --enable-http2   \
        --enable-mysqlnd \
        --enable-openssl \
        --enable-sockets --enable-swoole-curl --enable-swoole-json && \
    docker-php-ext-install -j$(nproc) swoole && \
    rm -f swoole.tar.gz $HOME/.composer/*-old.phar && \
    docker-php-source delete

RUN docker-php-ext-enable swoole

RUN echo swoole.use_shortname = 'Off'  >> /usr/local/etc/php/conf.d/docker-php-ext-swoole.ini && \
    cat /usr/local/etc/php/conf.d/docker-php-ext-swoole.ini

  1. 添加完成执行下命令,测试

默认

$ docker-compose up                         # 创建并且启动所有容器
$ docker-compose up -d                      # 创建并且后台运行方式启动所有容器
$ docker-compose up nginx php mysql         # 创建并且启动nginx、php、mysql的多个容器
$ docker-compose up -d nginx php  mysql     # 创建并且已后台运行的方式启动nginx、php、mysql容器


$ docker-compose start php                  # 启动服务
$ docker-compose stop php                   # 停止服务
$ docker-compose restart php                # 重启服务
$ docker-compose build php                  # 构建或者重新构建服务

$ docker-compose rm php                     # 删除并且停止php容器
$ docker-compose down                       # 停止并删除容器,网络,图像和挂载卷

单独编译调试可以执行

docker-compose stop php74 && docker-compose rm php74 && docker-compose build php74 &&  docker-compose up -d  php74

nginx虚拟机配置

参考配置如下:

server {
    # 监听端口
    listen 80;
    # 绑定的域名,填写您的域名
    server_name localadminnovelbusi.hnyapu.cn;

    add_header Access-Control-Allow-Origin $http_origin;
    add_header Access-Control-Allow-Headers X-Requested-With,Origin,Content-Type,token;
    add_header Access-Control-Allow-Methods GET,POST,OPTIONS;
    add_header Access-Control-Allow-Credentials true;

    location / {
        # 将客户端的 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://php74容器IP:9501;
    }
}

参考文档: https://hyperf.wiki/2.2/#/zh-cn/tutorial/nginx

重启nginx

进入PHP74容器

进入PHP74容器
docker exec -it 容器ID sh 

#进入项目目录下
#启动项目
php bin/hyperf.php server:watch

posted @ 2022-12-16 19:19  洪先森  阅读(823)  评论(0编辑  收藏  举报