dnmp 运行多PHP版本(PHP74安装支持swoole,kafka, redis) 及运行hyperf项目
官方文档: https://github.com/yeszao/dnmp
本身默认PHP7.1版本
如果需要同时支持多个版本PHP,需要另外在配置
下面举例子配置多个PHP版本 -- PHP7.4
- dnmp/service目录下复制多一份php目录, 并修改成PHP74
- 根目录下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
- 根目录下.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
- 由于按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
- 添加完成执行下命令,测试
默认
$ 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