khs1994-docker / lnmp

:computer: :whale: :elephant: :dolphin: :penguin: :rocket: Start Docker LNMP(LEMP) In less than 2 minutes Powered by Docker Compose. 让 PHP 开发者快速(一键)搭建基于容器技术(Docker、Kubernetes)的开发、测试、生产(CI/CD by Drone)环境.

Home Page:https://docs.lnmp.khs1994.com

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

生产环境下php的`opcache`启动不了啊

cgfeel opened this issue · comments

使用的镜像:

  • khs1994/php:7.4.3-fpm-alpine
  • khs1994/php:8.1.1-s6-alpine

一开始我是修改php.production.ini,后来在phpinfo中发现opcache调用的是 /usr/local/etc/php/conf.d/php-ext-opcache.ini,于是我就做了个数据卷,替换默认的的php-ext-opcache.ini,重启服务,发现opcache还是没启动起来
image

于是我就去容器总看数据卷是否已配置成功

$ docker exec -it eed9f34ee774 cat /usr/local/etc/php/conf.d/php-ext-opcache.ini
zend_extension=opcache
opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=512
opcache.interned_strings_buffer=64
opcache.max_accelerated_files=100000
opcache.validate_timestamps=1
opcache.revalidate_freq=60
opcache.save_comments=1

然后我想可能是网页缓存,我就给链接随意加了个参数?t=2342342,还是没有启动起来,请问这是怎么回事呢?

手动重启php-fpm好像也不管用的

$ docker exec -it 0e8c24db170d kill -USR2 1
$ docker exec -it 0e8c24db170d ps aux
PID   USER     TIME  COMMAND
    1 root      0:00 php-fpm: master process (/usr/local/etc/php-fpm.conf)
   23 www-data  0:00 php-fpm: pool www
   24 www-data  0:00 php-fpm: pool www
   25 root      0:00 ps aux
$ docker exec -it 0e8c24db170d php -i | grep opcache
/usr/local/etc/php/conf.d/php-ext-opcache.ini,
opcache.blacklist_filename => no value => no value
opcache.consistency_checks => 0 => 0
opcache.dups_fix => Off => Off
opcache.enable => Off => Off
...
$ docker exec -it 0e8c24db170d cat /usr/local/etc/php/conf.d/php-ext-opcache.ini
zend_extension=opcache
opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=512
opcache.interned_strings_buffer=64
opcache.max_accelerated_files=100000
opcache.validate_timestamps=1
opcache.revalidate_freq=60
opcache.save_comments=1
opcache.fast_shutdown=1

上面是在镜像khs1994/php:7.4.3-fpm-alpine看到的情况,我切换到默认提供的khs1994/php:8.1.1-s6-alpine也存在一样的问题

$ docker exec -it 4bc3dda7cbc2 php -i | grep opcache
/usr/local/etc/php/conf.d/php-ext-opcache.ini,
opcache.blacklist_filename => no value => no value
opcache.consistency_checks => 0 => 0
opcache.dups_fix => Off => Off
opcache.enable => Off => Off
opcache.enable_cli => On => On
$ docker exec -it 0e8c24db170d cat /usr/local/etc/php/conf.d/php-ext-opcache.ini
zend_extension=opcache
opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=512
opcache.interned_strings_buffer=64
opcache.max_accelerated_files=100000
opcache.validate_timestamps=1
opcache.revalidate_freq=60
opcache.save_comments=1
opcache.fast_shutdown=1

即便把扩展指向绝对路径,也不管用的

$ docker exec -it 8220b093e999 php -i | grep opcache
/usr/local/etc/php/conf.d/php-ext-opcache.ini,
opcache.blacklist_filename => no value => no value
opcache.consistency_checks => 0 => 0
opcache.dups_fix => Off => Off
opcache.enable => Off => Off
...
$ docker exec -it 8220b093e999 cat /usr/local/etc/php/conf.d/php-ext-opcache.ini
zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20190902/opcache.so
opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=512
opcache.interned_strings_buffer=64
opcache.max_accelerated_files=100000
opcache.validate_timestamps=1
opcache.revalidate_freq=60
opcache.save_comments=1
opcache.fast_shutdown=1
$ docker exec -it 8220b093e999 ls /usr/local/lib/php/extensions/no-debug-non-zts-20190902/opcache.so
/usr/local/lib/php/extensions/no-debug-non-zts-20190902/opcache.so

我查到配置文件有这么一段

    - source: php7_fpm_conf_d_zz_docker_conf
      target: /usr/local/etc/php-fpm.d/zz-docker.conf

打开php7_fpm_conf_d_zz_docker_conf对应的zz-docker.production.conf,包含了opcachexdebug,其中opcache是通过这样启动的:

opcache.enable=${LNMP_OPCACHE_ENABLE}

于是我就将配置文件添加环境变量:

  php7:
    environment:
      - APP_ENV=production
      - LNMP_DOCKER_VERSION=v20.10 x86_64 Docker Swarm
      - LNMP_OPCACHE_ENABLE=1

问题解决了

怎么配置多个站点和切换多个版本的PHP呢,例如配置abc.com的PHP版本为PHP5.6,bbc.com的版本为PHP7.2,jkr.do的PHP版本为PHP8.1,有没有官方案例,没看懂