在 mac
上用 brew
装 php56
时,因为 openssl
是 1.1
版本而导致各种 google
都搞不定的错误,太折腾了,现在用 docker
创建一个 php56-fpm
服务容器,nginx
直装在宿主机上。
PHP DockerHub 主页
创建容器
# 创建容器 docker run -d --name php56-fpm -p 9056:9000 -v /home/wwwroot:/var/www/html --privileged=true php:5.6-fpm
注意:
/var/www/html
是 php docker
镜像的工作目录。
-v /home/wwwroot:/var/www/html
的作用是将宿主机的站点目录挂载到容器上。比如 /home/wwwroot/siteA
,在容器中的访问位置是 /var/www/html/siteA
。
nignx
转发 php
请求时,会将执行的脚本名 SCRIPT_NAME
和脚本文件名 SCRIPT_FILENAME
转发给 fpm
,而后 fpm
去读取脚本执行。
在使用 fpm
容器时,需要注意 nginx
转发的 SCRIPT_FILENAME
是否是 fpm
容器中的有效站点路径,如果 nginx
的 root
并不能直接映射至 fpm
容器的站点 root
,我们需要在 php location
中重新定义为 fpm
容器的站点 root
。这样 fpm
才能正确的读取到脚本。
即宿主机上的 /home/wwwroot/siteA/public/index.php
要转为 /var/www/html/siteA/public/index.php
发送给 fpm
容器,否则会报 File not found
的错误。
所以 nginx
配置 server
时要注意如下的卷路径转换:
server { listen 8056; .... # 宿主机的站点根目录 root /home/wwwroot/siteA/public; location ~* (^[/]*.php)[/|$] { # 容器中的站点根目录 root /var/www/html/siteA/public; pass_proxy: 127.0.0.1:9056; include fastcgi.conf; } }
不过一般情况下大家都是 docker nginx + docker php-fpm
,两个容器都统一映射了站点目录,就不会有这个问题了。这里的 nginx
是直接装在宿主机上才导致 nginx
转发 php
请求时需要重新定义下站点的根目录。
登陆容器
# 查看容器是否运行 docker ps # 登陆容器 docker exec -it php56-fpm /bin/bash
php 的 docker 镜像是基于 ubuntu 我们可以使用 apt-get 安装需要的工具,比如 vim/vi lrzsz net-tools 之类的。
# 在使用 apt-get 安装一些工具前,需要 update 更新一下源 # 否则会 apt-get E: Unable to locate package apt-get update apt-get install vim
安装 php/pecl 扩展
安装 php 扩展
即 php 官方扩展,比如 shomp 这种自带但默认不开启的扩展。
# 查看自带了那些扩展 cd /usr/local/php/ext && ls -l # 安装扩展 dcoker-php-ext-install shmop
安装 pecl 扩展
容器中是有安装 pecl的,所以直接使用 pecl 安装即可,注意扩展对 php 版本的支持即可。
docker-php-ext-enable的主要用途是生成扩展相应的配置文件到 /usr/local/etc/php/conf.d/docker-php-ext-{extName}.ini 方便 php 加载扩展。
# igbinary php5.6 最高版本是 2.0.8 pecl install igbinary-2.0.8 docker-php-ext-enable igbinary # phpredis php5.6 最高版本是 4.3.0 pecl install redis-4.3.0 docker-php-ext-enable redis # swoole php5.6 最高版本是 2.0.11 pcel install swoole-2.0.11 docker-php-ext-enable swoole
php/php-fpm 配置
/usr/local/etc 是 php 容器的配置目录,里面自带了 php 及 php-fpm 的配置文件,配置目录结构如下:
root@aa739592b579:/usr/local# tree etc/ etc/ |-- pear.conf |-- php # php 配置目录 | |-- conf.d # php 扩展配置 | | |-- docker-php-ext-shmop.ini | |-- php.ini # cp 的 php.ini-development/production | |-- php.ini-development | |-- php.ini-production |-- php-fpm.conf # php-fpm 的配置 自带的主要是引入 php-fpm.d |-- php-fpm.conf.default # php-fpm 配置本体 同 php-fpm.d/www.conf 一致 |-- php-fpm.d # php-fpm 的扩展配置 |-- docker.conf |-- www.conf # php-fpm 配置本体 模式啊 max/min children 啊都在这里 |-- zz-docker.conf
你可映射宿主机的配置目录到容器的 /usr/local/etc,但要注意宿主机上的配置目录与容器现有的要保持一致,或者直接在容器里编辑配置文件。按 docker 的理念我们应该在宿主机上维护一份配置文件映射到容器的配置目录上,这样才能发挥出 docker 容器的复用性。
映射宿主机的 php 配置文件到容器
-v /opt/docker/conf/php/php.ini:/usr/local/etc/php/php.ini -v /opt/docker/conf/php/php-fpm.ini:/usr/local/etc/php-fpm.d/www/conf
常见问题
1、File not found
nginx 指定的 站点根目录 无法直接映射给 fpm 容器,在 location 中重新指定 fpm 容器的 站点根目录。
2、apt-get E: Unable to locate package
执行 apt-get update 刷新一下源即可。
3、容器的相关约定
工作目录:/var/www/html 建议将宿主机的站点目录映射至此目录
配置目录:/usr/local/etc 注意配置目录结构
php 扩展目录:/usr/local/php/ext 可以查看 php 自带的扩展包 使用 docker-php-ext-install 安装更方便
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]