DNMP PLUS
dnmp = Docker
+ Nginx
+ MySQL
+ PHP
+ Redis
+ MongDB
plus = xhgui
+ xhprof
+ tideways
dnmp-plus = PHPer 的一鍵安裝開發環境
+ PHP 非侵入式監控平臺(優化系統性能、定位 Bug 的神器)
DNMP PLUS 項目特點,在 yeszao 的 DNMP 項目基礎上新增:
- PHP xhprof 擴展 - Facebook 開發的 PHP 性能追蹤及分析工具
- PHP tideways 擴展 - xhprof 的分支,支持 PHP7
- PHP mongodb 擴展
- MongoDB 服務
- Mongo Express - MongoDB 服務管理系統
- xhgui - XHProf 分析數據數據的 GUI 系統
推薦閱讀
- dnmp-plus PHPer 的一鍵安裝式終極 debug 開發環境
- dnmp-plus 一鍵安裝式環境詳細安裝與使用
- 超全的設計模式簡介(45種)
- design-patterns-for-humans 中文版
- MongoDB 資源、庫、工具、應用程序精選列表中文版
- 有哪些鮮爲人知,但是很有意思的網站?
- 一份攻城獅筆記
- 每天蒐集 Github 上優秀的項目
- 一些有趣的民間故事
- 超好用的谷歌瀏覽器、Sublime Text、Phpstorm、油猴插件合集
目錄結構
├── .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://localhost
基本使用
lnmp-plus 自帶 nginx、php72、php56、mysql、mongo、redis、phpmyadmin、phpredisadmin、mongo-express 這些鏡像服務
# 創建並且啓動容器
$ 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/guanguans.github.io/issues/9
安裝
$ 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
在要分析項目 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,此時已經有了內容,愉快的查看項目的性能追蹤及分析吧
PHP 和擴展
切換 Nginx 使用的 PHP 版本
默認同時創建 PHP5.6
和 PHP7.2
2 個 PHP 版本的容器,切換 PHP 僅需修改相應站點 Nginx 配置的 fastcgi_pass
選項,例如,示例的 http://localhost 用的是 PHP7.2,Nginx 配置:
fastcgi_pass php72:9000;
要改用 PHP5.6,修改爲:
fastcgi_pass php56:9000;
重啓 Nginx 生效
$ docker-compose restart nginx
安裝 PHP 擴展
PHP 的很多功能都是通過擴展實現,而安裝擴展是一個略費時間的過程,
所以,除 PHP 內置擴展外,在 env.sample
文件中我們僅默認安裝少量擴展,
如果要安裝更多擴展,請打開你的 .env
文件修改如下的 PHP 配置,
增加需要的 PHP 擴展:
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
數據庫管理
- 默認 phpMyAdmin 地址:http://localhost:8080
- 默認 phpRedisAdmin 地址:http://localhost:8081
- 默認 Mongo Express 地址:http://localhost:8082