1 Star 5 Fork 3

phprao / dnmp2

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
MIT

DNMP(Docker + Nginx + MySQL + PHP7/5)是一款全功能的LNMP一键安装程序

DNMP项目特点:

  1. 100%开源
  2. 100%遵循Docker标准
  3. 支持多版本PHP随意切换(PHP5.4、PHP5.6、PHP7.2)
  4. 支持绑定任意多个域名
  5. 支持HTTPS和HTTP/2
  6. PHP源代码位于host中
  7. MySQL data位于host中
  8. 所有配置文件可在host中直接修改
  9. 所有日志文件可在host中直接查看
  10. 内置完整PHP扩展安装命令
  11. 实际项目中应用,确保100%可用
  12. 一次配置,Windows、Linux、MacOs皆可用

1.项目结构

目录说明:

/
├── conf                    配置文件目录
│   ├── conf.d              Nginx用户站点配置目录
│   ├── nginx.conf          Nginx默认配置文件
│   ├── mysql.cnf           MySQL用户配置文件
│   ├── php-fpm.conf        PHP-FPM配置文件(部分会覆盖php.ini配置)
│   └── php.ini             PHP默认配置文件
├── docker-compose54.yml    PHP5.4 docker-compose项目文件
├── docker-compose56.yml    PHP5.6 docker-compose项目文件
├── docker-compose.yml      PHP最新版docker-compose项目文件
├── log                     Nginx日志目录
├── mysql                   MySQL数据目录
├── php                     PHP各版本的Dockerfile目录
└── www                     PHP代码目录

结构示意图:

Demo Image

2. 快速使用

  1. 本地安装gitdockerdocker-compose
  2. clone项目:
    $ git clone https://github.com/yeszao/dnmp.git
  3. 如果不是root用户,还需将当前用户加入docker用户组:
    $ sudo gpasswd -a ${USER} docker
  4. 启动:
    $ cd dnmp
    $ docker-compose up
  5. 在浏览器中访问 localhost,会看到类似如下的输出:

Demo Image

这是项目的演示效果,PHP代码在这个目录:./www/site1/

3. 使用其他PHP版本?

默认情况下,我们启动的是最新版本的PHP,命令如下:

$ docker-compose up

docker-compose stop后,我们可以用下面的命令启动PHP5.4PHP5.6:

$ docker-compose -f docker-compose54.yml up
$ docker-compose -f docker-compose56.yml up

如果该版本是第一次启动,那么还需要加上--build参数构建,不然还是会启动最新版本:

$ docker-compose -f docker-compose54.yml up --build
$ docker-compose -f docker-compose56.yml up --build

在版本切换时,我们不需要修改任何配置文件,包括Nginx配置文件和php.ini等, 除非是代码兼容错误,否则切换版本后应该都能正常工作。

注意:因为所有PHP版本使用的是同一个端口配置,所以我们同时只能使用一个版本,要切换到另外一个版本,必须先停止原来的版本。

4. HTTPS和HTTP/2

本项目的演示站点有两个:

要预览这两个站点,请在主机的hosts文件中加上如下两行:

127.0.0.1 www.site1.com
127.0.0.1 www.site2.com
  • Linux和Mac的hosts文件位置: /etc/hosts
  • Windows的hosts文件位置: C:\Windows\System32\drivers\etc\hosts

然后通过浏览器这两个地址就能看到效果,其中:

  • Site1和localhost是同一个站点,是经典的http站,
  • Site2是自定义证书的https站点,浏览器会有安全提示,忽略提示访问即可。

5. 使用Log

Log文件生成的位置依赖于conf下各log配置的值。

5.1 Nginx日志

Nginx日志是我们用得最多的日志,所以我们单独放在根目录log下。

log会目录映射Nginx容器的/var/log/dnmp目录,所以在Nginx配置文件中,需要输出log的位置,我们需要配置到/var/log/dnmp目录,如:

error_log  /var/log/dnmp/nginx.site1.error.log  warn;

5.1 PHP-FPM日志

大部分情况下,PHP-FPM的日志都会输出到Nginx的日志中,所以不需要额外配置。

如果确实需要,可按一下步骤开启。

  1. 在主机中创建日志文件并修改权限:
    $ touch log/php-fpm.error.log
    $ chmod a+w log/php-fpm.error.log
  2. 主机上打开并修改PHP-FPM的配置文件conf/php-fpm.conf,找到如下一行,删除注释,并改值为:
    php_admin_value[error_log] = /var/log/dnmp/php-fpm.error.log
  3. 重启PHP-FPM容器。

5.2 MySQL日志

因为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中的日志文件的配置。

6. 使用composer

dnmp默认已经在容器中安装了composer,使用时先进入容器:

$ docker exec -it dnmp_php_1 /bin/bash

然后进入相应目录,使用composer:

# cd /var/www/html/site1
# composer update

因为composer依赖于PHP,所以,是必须在容器里面操作composer的。

7. phpmyadmin和phpredisadmin

本项目默认在docker-compose.yml中开启了用于MySQL在线管理的phpMyAdmin,以及用于redis在线管理的phpRedisAdmin,可以根据需要修改或删除。

7.1 phpMyAdmin

phpMyAdmin容器映射到主机的端口地址是:8080,所以主机上访问phpMyAdmin的地址是:

http://localhost:8080

MySQL连接信息:

  • host:(本项目的MySQL容器网络)
  • port:3306
  • username:(手动在phpmyadmin界面输入)
  • password:(手动在phpmyadmin界面输入)

7.2 phpRedisAdmin

phpRedisAdmin容器映射到主机的端口地址是:8081,所以主机上访问phpMyAdmin的地址是:

http://localhost:8081

Redis连接信息如下:

  • host: (本项目的Redis容器网络)
  • port: 6379

8 使用XDEBUG调试

默认情况下,我们已经安装了Xdebug扩展,但并未在php.ini中配置启用。

要使用xdebug调试,在php.ini文件最后加上这几行:

[XDebug]
xdebug.remote_enable = 1
xdebug.remote_handler = "dbgp"
xdebug.remote_host = "172.17.0.1"
xdebug.remote_port = 9000
xdebug.remote_log = "/var/log/dnmp/php.xdebug.log"

然后重启PHP容器。

常见问题

  1. 遇到“No releases available for package "pecl.php.net/redis”

    请参考: https://github.com/yeszao/dnmp/issues/10

说明:这个问题主要是受国内网络环境影响,现在PHP7以上的版本直接采用从源码安装扩展,所以这个问题已经没有了。

  1. PHP5.6错误“ibfreetype6-dev : Depends: zlib1g-dev but it is not going to be installed or libz-dev”

    请参考: https://github.com/yeszao/dnmp/issues/39

License

MIT

MIT License Copyright (c) 2017 Gary Meng Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

简介

DNMP(Docker + Nginx + MySQL + PHP7/5)是一款全功能的LNMP一键安装程序。 展开 收起
MIT
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
1
https://gitee.com/phprao/dnmp2.git
git@gitee.com:phprao/dnmp2.git
phprao
dnmp2
dnmp2
master

搜索帮助