最近在折腾mac下安装docker并配置 PHP,mysql,redis,nginx,mongodb的环境,碰到的问题不少,然后我想网上是不是有这样的一键包,果然一搜索有未大神开源了,这个docker-compose造福技术圈呀,于是我赶快拿来试了试,嘿呦喂,别说还真好用。
环境说明
我是M2的系统,M1系列的也是可以成功的。
Windows、Linux、MacOS
本地安装 docker 和 `docker-compose 2.0.0+`
项目特点
1、支持多版本 PHP 共存,可任意切换
2、支持绑定任意多个域名,支持多个虚拟目录
3、PHP 源代码、MySQL 数据、配置文件、日志文件都可在主机中直接修改查看
4、默认支持 pdo_mysql、redis、zip、gd、curl、xlswriter 等常用热门扩展,根据环境灵活配置
5、可一键配置常用服务
– 多 PHP 版本:PHP7.2、PHP7.3、PHP7.4、PHP8.0、PHP8.1、PHP8.2、PHP8.3
– Web 服务:Nginx
– 数据库:
– 关系型:MySQL、
– 非关系型:Redis、Mongo
搜索引擎:Elasticsearch
消息队列:RabbitMQ
辅助工具:Kibana、mongo-express
实际项目中应用,确保 100% 可用
所有镜像源于 Docker 官方仓库,安全可靠
6、一次配置,Windows、Linux、MacOS 皆可用
目录结构
|-- data 数据库数据目录
| |--- mysql mysql 数据目录(多版本)
| | |--- mysql8.0 mysql8.0 数据目录
|--- logs 日志目录
| |--- mysql mysql 日志目录(多版本)
| | |--- mysql8.0 mysql8.0 日志目录
|--- plugins 插件目录
| |--- elasticsearch elasticsearch 插件目录(多版本)
| | |--- elasticsearch8.4 elasticsearch8.4 插件目录
|--- resource 资源目录(存放图片和.md的说明文件)
|--- servers 服务构建文件和配置文件目录
| |--- elasticsearch elasticsearch 配置文件目录(多版本)
| |--- kibana kibana 配置文件目录(多版本)
| |--- mysql mysql 配置文件目录(多版本)
| |--- mongo mongo 配置文件目录(多版本)
| |--- nginx nginx 配置文件目录(多版本)
| |--- php php 配置文件目录(多版本)
| | |--- php7.2 php7.2 配置文件目录
| | |--- php7.3 php7.3 配置文件目录
| |--- redis redis 配置文件目录(多版本)
| |--- rabbitmq rabbitmq 配置文件目录(多版本)
| |--- panel 服务面板
| | |--- vhost 站点配置文件目录
| | |--- ssl https 证书目录
| | |--- sock 套接字文件目录
|--- www 项目文件目录
|--- bashrc.sample .bashrc 配置示例文件(宿主机使用容器内命令)
|--- sample.env 环境配置示例文件
|--- compose.sample.yml Docker 服务配置示例文件
部署要求
下载项目(公众号回复下载)
命名配置文件,一键启动
1、可以先看看目录结构和配置文件是不是你想要的是的话,即可一键启动
cd dnmp # 进入项目目录
cp sample.env .env # 复制并改名 .env 配置文件
cp compose.sample.yml compose.yml # 复制并改名 compose.yml 配置文件
# 执行 docker compose up 之前,建议看一下compose.yml 文件,以便快速上手。
docker compose up # 启动服务
2、启动后查看配置文件
http://localhost/ # PHP72
http://localhost/73 # PHP73
http://localhost/74 # PHP74
http://localhost/80 # PHP80
http://localhost/81 # PHP81
http://localhost/82 # PHP82
http://localhost/83 # PHP83
详细配置文件
大家可以下载项目后,看看作者写的很详细的,我这就不在叙述了,我说点需要注意的地方。
这个地方的配置需要和 nginx 那块的保持一致,才能访问到PHP
原因
如果 Nginx 和 PHP-FPM 在同一主机,Nginx 会通过 9000 端口(或套接字文件)把这个目录值和脚本 URI 传给 PHP-FPM。
PHP-FPM 再通过 9000 端口(或套接字文件)接收 Nginx 发过来的目录值和脚本 URI,发给 PHP 解析。
PHP 收到后,就到指定的目录下查找 PHP 文件并解析,完成后再通过 9000 端口(或套接字文件)返回给 Nginx。
如果 Nginx 和 PHP-FPM 在同一个主机里面,PHP 就总能找到 Nginx 指定的目录。
但是,如果他们在不同的容器呢?
未做任何处理的情况,Nginx 容器中的站点根目录,PHP-FPM 容器肯定不存在。 所以,这里需要保证 Nginx 和 PHP-FPM 都挂载了宿主机的 ./www。 (当然,你也可以指定别的目录)