Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

cyberfeipunk/dnmp

Repository files navigation

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

DNMP项目特点:

  1. 100%开源
  2. 100%遵循Docker标准
  3. 支持多版本PHP共存,可任意切换(PHP5.4、PHP5.6、PHP7.2)
  4. 支持绑定任意多个域名
  5. 支持HTTPS和HTTP/2
  6. PHP源代码、MySQL数据、配置文件、日志文件都可在Host中直接修改查看
  7. 内置完整PHP扩展安装命令
  8. 默认安装pdo_mysqlredisxdebugswoole等常用热门扩展,拿来即用
  9. 带有phpmyadmin和phpredisadmin数据库在线管理程序
  10. 实际项目中应用,确保100%可用
  11. 一次配置,Windows、Linux、MacOs皆可用

1.项目结构

目录说明:

/
├── conf 配置文件目录
│  ├── conf.d Nginx用户站点配置目录
│  ├── nginx.conf Nginx默认配置文件
│  ├── mysql.cnf MySQL用户配置文件
│  ├── php-fpm.conf PHP-FPM配置文件(部分会覆盖php.ini配置)
│  └── php.ini PHP默认配置文件
├── Dockerfile PHP镜像构建文件
├── extensions PHP扩展源码包
├── log Nginx日志目录
├── mysql MySQL数据目录
├── www PHP代码目录
└── source.list Debian源目录

结构示意图:

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. 访问在浏览器中访问:

两个站点使用同一PHP代码:./www/localhost/index.php

3. 切换PHP版本?

默认情况下,我们同时创建 PHP5.4、PHP5.6和PHP7.2 三个PHP版本的容器,

切换PHP仅需修改相应站点 Nginx 配置的fastcgi_pass选项,

例如,示例的localhost用的是PHP5.4,Nginx 配置:

 fastcgi_pass php54:9000;

要改用PHP7.2,修改为:

 fastcgi_pass php72:9000;

重启 Nginx 生效。

4. 添加快捷命令

在开发的时候,我们可能经常使用docker exec -it切换到容器中,把常用的做成命令别名是个省事的方法。

打开~/.bashrc,加上:

alias dnginx='docker exec -it dnmp_nginx_1 /bin/sh'
alias dphp72='docker exec -it dnmp_php72_1 /bin/bash'
alias dphp56='docker exec -it dnmp_php56_1 /bin/bash'
alias dphp54='docker exec -it dnmp_php54_1 /bin/bash'
alias dmysql='docker exec -it dnmp_mysql_1 /bin/bash'
alias dredis='docker exec -it dnmp_redis_1 /bin/bash'

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.localhost.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/localhost
# 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 在正式环境中安全使用

要在正式环境中使用,请:

  1. 在php.ini中关闭XDebug调试
  2. 增强MySQL数据库访问的安全策略
  3. 增强redis访问的安全策略

常见问题

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

    请参考: garylab#10

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

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

    请参考: garylab#39

  2. 如何在PHP代码中使用curl?

这里我们使用curl指的是从PHP容器curl到Nginx容器,比如Nginx中我们配置了:

在site1的PHP代码中,我们要从site1 curl site2服务器,方法如下。

首先,找到Nginx容器的IP地址,命令:

$ docker network inspect dnmp_net-php54
...
 "Containers": {
 ...{
 "Name": "nginx",
 ...
 "IPv4Address": "172.27.0.3/16",
 ...
 },

这个命令会显示连接到该网络的所有容器,容器nginx的IPv4Address就是nginx的IP地址。 修改docker-compose.yml,在php54服务下加上:

 php54:
 ...
 extra_hosts:
 - "www.site2.com:172.27.0.3"

这样就可以在www.site1.com中curl site2了。

License

MIT

About

Docker LNMP (Nginx, PHP7/PHP5, MySQL, Redis)

Resources

License

Stars

Watchers

Forks

Packages

Contributors

Languages

  • Dockerfile 56.8%
  • Shell 24.8%
  • PHP 18.4%

AltStyle によって変換されたページ (->オリジナル) /