Docker的LNMP一鍵安裝開發環境 + PHP非侵入式監控平臺xhgui(優化系統性能、定位Bug)

DNMP PLUS

dnmp = Docker + Nginx + MySQL + PHP + Redis + MongDBphp

plus = xhgui + xhprof + tidewayshtml

dnmp-plus = PHPer 的一鍵安裝開發環境 + PHP 非侵入式監控平臺(優化系統性能、定位 Bug 的神器)mysql


DNMP PLUS 項目特色,在 yeszaoDNMP 項目基礎上新增:nginx

  • PHP xhprof 擴展 - Facebook 開發的 PHP 性能追蹤及分析工具
  • PHP tideways 擴展 - xhprof 的分支,支持 PHP7
  • PHP mongodb 擴展
  • MongoDB 服務
  • Mongo Express - MongoDB 服務管理系統
  • xhgui - XHProf 分析數據數據的 GUI 系統

推薦閱讀

目錄結構

├── .github                     Github 配置目錄
├── conf                        配置文件目錄
│   ├── conf.d                  Nginx 用戶站點配置目錄
│   ├── mysql.cnf               MySQL 用戶配置文件
│   ├── nginx.conf              Nginx 默認配置文件
│   ├── php-fpm.conf            PHP-FPM 配置文件
│   ├── php.ini                 PHP 配置文件
│   ├── redis.conf              Redis 配置文件
├── docs                        文檔目錄
├── extensions                  PHP 擴展源碼包
├── log                         日誌目錄
├── mongo                       MongoDB 數據目錄
├── mysql                       MySQL 數據目錄
├── www                         PHP 代碼目錄
├── Dockerfile                  PHP 鏡像構建文件
├── docker-compose-sample.yml   Docker 服務配置示例文件
├── env.smaple                  環境配置示例文件
└── travis-build.sh             Travis CI 構建文件

環境要求

  • Docker
  • Docker-compose
  • Git

快速使用

$ git clone https://github.com/guanguans/dnmp-plus.git --recursive
$ cd dnmp-plus
$ cp env.sample .env
$ cp docker-compose-sample.yml docker-compose.yml
$ docker-compose up -d

默認 web 根目錄 www/localhost/,瀏覽器訪問 http://localhostgit

clipboard.png

基本使用

lnmp-plus 自帶 nginx、php7二、php5六、mysql、mongo、redis、phpmyadmin、phpredisadmin、mongo-express 這些鏡像服務github

# 建立而且啓動容器
$ docker-compose up 服務1 服務2 ...
# 建立而且啓動全部容器
$ docker-compose up

# 建立而且已後臺運行的方式啓動容器
$ docker-compose up -d 服務1 服務2 ...

# 啓動服務
$ docker-compose start 服務1 服務2 ...

# 中止服務
$ docker-compose stop 服務1 服務2 ...

# 重啓服務
$ docker-compose restart 服務1 服務2 ...

# 構建或者從新構建服務
$ docker-compose build 服務1 服務2 ...

# 進入命令行容器
$ docker-compose exec 服務 bash

# 刪除而且中止容器
$ docker-compose rm 服務1 服務2 ...

# 中止並刪除容器,網絡,圖像和掛載卷
$ docker-compose down 服務1 服務2 ...

xhgui 使用,能夠參考 https://github.com/guanguans/...

安裝

$ cd www/xhgui-branch
$ composer install

修改 xhgui-branch 配置文件 www/xhgui-branch/config/config.default.php

<?php
return array(
    ...
    'debug'        => true, // 改成true,便於調試
    'mode'         => 'development',
    ...
    'extension'    => 'tideways', // 改成支持 PHP7 的 tideways
    ...
    'save.handler' => 'mongodb',
    'db.host'      => 'mongodb://mongo:27017', // 127.0.0.1 改成 mongo
    ...
);

hosts 文件中增長

127.0.0.1             xhgui.test

瀏覽器訪問 http://xhgui.test

clipboard.png

在要分析項目 nginx 配置文件中修改,以默認的 localhost 配置 conf/conf.d/localhost.conf 爲例

...
location ~ \.php$ {
    fastcgi_pass   php72:9000;
    fastcgi_index  index.php;
    include        fastcgi_params;
    fastcgi_param  PATH_INFO $fastcgi_path_info;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    # 在執行主程序以前運行咱們指定的PHP腳本
    fastcgi_param  PHP_VALUE "auto_prepend_file=/var/www/html/xhgui-branch/external/header.php"; 
}
...

重啓 nginx

$ docker-compose restart nginx

瀏覽器訪問 http://localhost,再訪問 http://xhgui.test,此時已經有了內容,愉快的查看項目的性能追蹤及分析吧

clipboard.png

clipboard.png

PHP 和擴展

切換 Nginx 使用的 PHP 版本

默認同時建立 PHP5.6PHP7.2 2 個 PHP 版本的容器,切換 PHP 僅需修改相應站點 Nginx 配置的 fastcgi_pass 選項,例如,示例的 http://localhost 用的是 PHP7.2,Nginx 配置:web

fastcgi_pass   php72:9000;

要改用 PHP5.6,修改成:redis

fastcgi_pass   php56:9000;

重啓 Nginx 生效sql

$ docker-compose restart nginx

安裝 PHP 擴展

PHP 的不少功能都是經過擴展實現,而安裝擴展是一個略費時間的過程,
因此,除 PHP 內置擴展外,在 env.sample 文件中咱們僅默認安裝少許擴展,
若是要安裝更多擴展,請打開你的 .env 文件修改以下的 PHP 配置,
增長鬚要的 PHP 擴展:mongodb

PHP72_EXTENSIONS=pdo_mysql,opcache,redis,xdebug,mongodb,tideways
PHP56_EXTENSIONS=opcache,redis,xdebug,mongodb,xhprof

而後從新構建 PHP 鏡像

docker-compose build php72
docker-compose up -d

使用 Log

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

Nginx 日誌

Nginx 日誌是咱們用得最多的日誌,因此咱們單獨放在根目錄 log 下。log 會目錄映射 Nginx 容器的 /var/log/nginx 目錄,因此在 Nginx 配置文件中,須要輸出 log 的位置,咱們須要配置到 /var/log/nginx 目錄,如:

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

MySQL 日誌

由於 MySQL 容器中的 MySQL 使用的是 mysql 用戶啓動,它沒法自行在 /var/log 下的增長日誌文件。因此,咱們把 MySQL 的日誌放在與 data 同樣的目錄,即項目的mysql目錄下,對應容器中的 /var/lib/mysql/ 目錄。

mysql.conf 中的日誌文件的配置:

slow-query-log-file     = /var/lib/mysql/mysql.slow.log
log-error               = /var/lib/mysql/mysql.error.log

數據庫管理

參考連接

License

MIT

相關文章
相關標籤/搜索