DockerPHP(Docker + Nginx + MySQL8/5 + Mariadb + PHP7/5 + Redis + Mongodb + ElasticSearch + RabbitMQ)是一款全功能的PHP环境部署服务。
项目特点:
. 支持多版本PHP共存,可任意切换(PHP5.4、PHP5.6、PHP7.1、PHP7.2、PHP7.3、PHP7.4)
. 支持绑定任意多个域名
. 支持HTTPS和HTTP/2
. PHP源代码、MySQL数据、配置文件、日志文件都可在Host中直接修改查看
. 内置完整PHP扩展安装命令
. 默认支持pdo_mysql
、mysqli
、mbstring
、gd
、curl
、opcache
等常用热门扩展,根据环境灵活配置
. 可一键选配常用服务:
- 多PHP版本:PHP5.4、PHP5.6、PHP7.1-7.3
- Web服务:Nginx、Openresty
- 数据库:MySQL5、MySQL8、Redis、memcached、MongoDB、ElasticSearch
- 消息队列:RabbitMQ
- 辅助工具:Kibana、Logstash、phpMyAdmin、phpRedisAdmin、AdminMongo
10. 实际项目中应用,确保100%
可用
11. 所有镜像源于Docker官方仓库,安全可靠
11. 一次配置,Windows、Linux、MacOs皆可用
/
├── data 数据库数据目录
│ ├── esdata ElasticSearch 数据目录
│ ├── mongo MongoDB 数据目录
│ ├── mysql MySQL8 数据目录
│ └── mysql5 MySQL5 数据目录
├── services 服务构建文件和配置文件目录
│ ├── elasticsearch ElasticSearch 配置文件目录
│ ├── mysql MySQL8 配置文件目录
│ ├── mysql5 MySQL5 配置文件目录
│ ├── nginx Nginx 配置文件目录
│ ├── php PHP5.6 - PHP7.3 配置目录
│ ├── php54 PHP5.4 配置目录
│ └── redis Redis 配置目录
├── logs 日志目录
├── docker-compose.sample.yml Docker 服务配置示例文件
├── env.smaple 环境配置示例文件
└── www PHP 代码目录
git
Docker
(系统需为Linux,Windows 10 Build 15063+,或MacOS 10.12+,且必须要64
位)docker-compose 1.7.0+
clone
项目:
$ git clone https://github.com/X.git
root
用户,还需将当前用户加入docker
用户组:
$ sudo gpasswd -a ${USER} docker
copy
命令),启动:
$ cd dnmp # 进入项目目录
$ cp env.sample .env # 复制环境变量文件
$ cp docker-compose.sample.yml docker-compose.yml # 复制 docker-compose 配置文件。默认启动3个服务:
# Nginx、PHP7和MySQL8。要开启更多其他服务,如Redis、
# PHP5.6、PHP5.4、MongoDB,ElasticSearch等,请删
# 除服务块前的注释
$ docker-compose up # 启动
http://localhost
或https://localhost
(自签名HTTPS演示)就能看到效果,PHP代码在文件./www/localhost/index.php
。首先,需要启动其他版本的PHP,比如PHP5.4,那就先在docker-compose.yml
文件中删除PHP5.4前面的注释,再启动PHP5.4容器。
PHP5.4启动后,打开Nginx 配置,修改fastcgi_pass
的主机地址,由php
改为php54
,如下:
fastcgi_pass php:9000;
为:
fastcgi_pass php54:9000;
其中 php
和 php54
是docker-compose.yml
文件中服务器的名称。
最后,重启 Nginx 生效。
$ docker exec -it nginx nginx -s reload
这里两个nginx
,第一个是容器名,第二个是容器中的nginx
程序。
PHP的很多功能都是通过扩展实现,而安装扩展是一个略费时间的过程,
所以,除PHP内置扩展外,在env.sample
文件中我们仅默认安装少量扩展,
如果要安装更多扩展,请打开你的.env
文件修改如下的PHP配置,
增加需要的PHP扩展:
PHP_EXTENSIONS=pdo_mysql,opcache,redis # PHP 要安装的扩展列表,英文逗号隔开
PHP54_EXTENSIONS=opcache,redis # PHP 5.4要安装的扩展列表,英文逗号隔开
然后重新build PHP镜像。
docker-compose build php
可用的扩展请看同文件的env.sample
注释块说明。
~/.bashrc
文件。source ~/.bashrc
~ php -v
PHP 7.2.13 (cli) (built: Dec 21 2018 02:22:47) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
with Zend OPcache v7.2.13, Copyright (c) 1999-2018, by Zend Technologies
with Xdebug v2.6.1, Copyright (c) 2002-2018, by Derick Rethans
方法1:主机中使用composer命令
~/dnmp
目录,那composer的缓存路径就是~/dnmp/data/composer
。~/.bashrc
文件。
这里需要注意的是,示例文件中的
~/dnmp/data/composer
目录需是第一步确定的目录。
source ~/.bashrc
cd ~/dnmp/www/
composer create-project yeszao/fastphp project --no-dev
~/dnmp/data/composer
目录下生成一个config.json文件,可以在这个文件中指定国内仓库,例如:
{
"config": {},
"repositories": {
"packagist": {
"type": "composer",
"url": "https://packagist.laravel-china.org"
}
}
}
方法二:容器内使用composer命令
还有另外一种方式,就是进入容器,再执行composer
命令,以PHP7容器为例:
docker exec -it php /bin/sh
cd /www/localhost
composer update
如需管理服务,请在命令后面加上服务器名称,例如:
$ 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 exec -it
进入到容器中,把常用的做成命令别名是个省事的方法。
首先,在主机中查看可用的容器:
$ docker ps # 查看所有运行中的容器
$ docker ps -a # 所有容器
输出的NAMES
那一列就是容器的名称,如果使用默认配置,那么名称就是nginx
、php
、php56
、mysql
等。
然后,打开~/.bashrc
或者~/.zshrc
文件,加上:
alias dnginx='docker exec -it nginx /bin/sh'
alias dphp='docker exec -it php /bin/sh'
alias dphp56='docker exec -it php56 /bin/sh'
alias dphp54='docker exec -it php54 /bin/sh'
alias dmysql='docker exec -it mysql /bin/bash'
alias dredis='docker exec -it redis /bin/sh'
下次进入容器就非常快捷了,如进入php容器:
$ dphp
ifconfig docker0
用于填写extra_hosts
容器访问宿主机的hosts
地址
Log文件生成的位置依赖于conf下各log配置的值。
Nginx日志是我们用得最多的日志,所以我们单独放在根目录log
下。
log
会目录映射Nginx容器的/var/log/nginx
目录,所以在Nginx配置文件中,需要输出log的位置,我们需要配置到/var/log/nginx
目录,如:
error_log /var/log/nginx/nginx.localhost.error.log warn;
大部分情况下,PHP-FPM的日志都会输出到Nginx的日志中,所以不需要额外配置。
另外,建议直接在PHP中打开错误日志:
error_reporting(E_ALL);
ini_set('error_reporting', 'on');
ini_set('display_errors', 'on');
如果确实需要,可按一下步骤开启(在容器中)。
$ docker exec -it php /bin/sh
$ mkdir /var/log/php
$ cd /var/log/php
$ touch php-fpm.error.log
$ chmod a+w php-fpm.error.log
conf/php-fpm.conf
,找到如下一行,删除注释,并改值为:
php_admin_value[error_log] = /var/log/php/php-fpm.error.log
因为MySQL容器中的MySQL使用的是mysql
用户启动,它无法自行在/var/log
下的增加日志文件。所以,我们把MySQL的日志放在与data一样的目录,即项目的mysql
目录下,对应容器中的/var/lib/mysql/
目录。
slow-query-log-file = /var/lib/mysql/mysql.slow.log
log-error = /var/lib/mysql/mysql.error.log
以上是mysql.conf中的日志文件的配置。
本项目默认在docker-compose.yml
中开启了用于MySQL在线管理的phpMyAdmin,以及用于redis在线管理的phpRedisAdmin,可以根据需要修改或删除。
phpMyAdmin容器映射到主机的端口地址是:8080
,所以主机上访问phpMyAdmin的地址是:
http://localhost:8080
MySQL连接信息:
3306
phpRedisAdmin容器映射到主机的端口地址是:8081
,所以主机上访问phpMyAdmin的地址是:
http://localhost:8081
Redis连接信息如下:
6379
要在正式环境中使用,请:
#随时提取docker的容器ID或者名称
docker ps -a | grep 'php72_crontab' |awk '{print $1}'
/var/www/data_rsync >> /var/log/rsync.log 2>&11、采用docker-compose scale server=num 扩展服务容器数量
docker-compose up --scale php72=10 -d
2、内置swarm集群管理 3、第三方集群编排工具kubernetes
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。