Skip to content
master
Switch branches/tags
Code
This branch is up to date with master.
Contribute

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
 
 
log
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

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

[ENGLISH]

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. 拷贝环境配置文件env.sample.env,启动:
    $ cd dnmp
    $ cp env.sample .env   # Windows系统请用copy命令,或者用编辑器打开后另存为.env
    $ docker-compose up
    
    注意:Windows安装360安全卫士的同学,请先将其退出,不然安装过程中可能Docker创建账号过程可能被拦截,导致启动时文件共享失败;
  5. 访问在浏览器中访问:

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

要修改端口、日志文件位置、以及是否替换source.list文件等,请修改.env文件,然后重新构建:

$ docker-compose build php54    # 重建单个服务
$ docker-compose build          # 重建全部服务

3.切换PHP版本

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

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

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

    fastcgi_pass   php54:9000;

要改用PHP7.2,修改为:

    fastcgi_pass   php72:9000;

重启 Nginx 生效。

$ docker exec -it dnmp_nginx_1 nginx -s reload

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/sh'

5.使用Log

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

5.1 Nginx日志

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

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

error_log  /var/log/nginx/nginx.localhost.error.log  warn;

5.2 PHP-FPM日志

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

另外,建议直接在PHP中打开错误日志:

error_reporting(E_ALL);
ini_set('error_reporting', 'on');
ini_set('display_errors', 'on');

如果确实需要,可按一下步骤开启(在容器中)。

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

5.3 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

我们建议在主机HOST中使用composer,避免PHP容器变得庞大

  1. 在主机创建一个目录,用以保存composer的配置和缓存文件:
    mkdir ~/dnmp/composer
    
  2. 打开主机的 ~/.bashrc 或者 ~/.zshrc 文件,加上:
    composer () {
        tty=
        tty -s && tty=--tty
        docker run \
            $tty \
            --interactive \
            --rm \
            --user $(id -u):$(id -g) \
            --volume ~/dnmp/composer:/tmp \
            --volume /etc/passwd:/etc/passwd:ro \
            --volume /etc/group:/etc/group:ro \
            --volume $(pwd):/app \
            composer "$@"
    }
    
    
  3. 让文件起效:
    source ~/.bashrc
    
  4. 在主机的任何目录下就能用composer了:
    cd ~/dnmp/www/
    composer create-project yeszao/fastphp project --no-dev
    
  5. (可选)如果提示需要依赖,用--ignore-platform-reqs --no-scripts关闭依赖检测。
  6. (可选)第一次使用 composer 会在 ~/dnmp/composer 目录下生成一个config.json文件,可以在这个文件中指定国内仓库,例如:
    {
        "config": {},
        "repositories": {
            "packagist": {
                "type": "composer",
                "url": "https://packagist.laravel-china.org"
            }
        }
    }
    
    

7.数据库管理

本项目默认在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访问的安全策略

9.常见问题

9.1 如何在PHP代码中使用curl?

参考这个issue:https://github.com/yeszao/dnmp/issues/91

License

MIT

About

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

Resources

License

Packages

No packages published