DNMP介紹
DNMP(Docker + Nginx + MySQL + PHP7/5 + Redis)是一款全功能的LNMP一鍵安裝程序。支持的服務(wù)豐富、功能強(qiáng)大、使用簡單、兼容多平臺(tái)。是適用于多端的一款docker開發(fā)與生產(chǎn)環(huán)境的PHP環(huán)境全家桶。
DNMP項(xiàng)目特點(diǎn):
100%
開源
100%
遵循Docker標(biāo)準(zhǔn)
- 支持多版本PHP共存,可任意切換(PHP5.4、PHP5.6、PHP7.1、PHP7.2、PHP7.3)
- 支持綁定任意多個(gè)域名
- 支持HTTPS和HTTP/2
- PHP源代碼、MySQL數(shù)據(jù)、配置文件、日志文件都可在Host中直接修改查看
- 內(nèi)置完整PHP擴(kuò)展安裝命令
- 默認(rèn)支持
pdo_mysql
、 mysqli
、 mbstring
、 gd
、 curl
、 opcache
等常用熱門擴(kuò)展,根據(jù)環(huán)境靈活配置
- 可一鍵選配常用服務(wù):
- 多PHP版本:PHP5.4、PHP5.6、PHP7.1-7.3
- Web服務(wù):Nginx、Openresty
- 數(shù)據(jù)庫:MySQL5、MySQL8、Redis、memcached、MongoDB、ElasticSearch
- 消息隊(duì)列:RabbitMQ
- 輔助工具:Kibana、Logstash、phpMyAdmin、phpRedisAdmin、AdminMongo
- 實(shí)際項(xiàng)目中應(yīng)用,確保
100%
可用
- 所有鏡像源于Docker官方倉庫,安全可靠
- 一次配置,Windows、Linux、MacOs皆可用
- 支持快速安裝擴(kuò)展命令
install-php-extensions apcu
- 具體使用文檔可參考:https://gitee.com/bruce_qiq/dnmp/blob/master/README.md。文檔中已經(jīng)有一個(gè)明確的使用教程。接來下,主要針對(duì)安裝完之后,做的一些基本操作做一個(gè)簡單的演示,因?yàn)椴糠植僮髟谠次臋n不是很詳細(xì),并且有明顯的坑。主要記錄幾個(gè)功能:
1.修改無法連接MySQL問題。
2.配置NGINX虛擬域名。
3.安裝PHP擴(kuò)展。
因?yàn)閭€(gè)人打算持續(xù)使用該包來做自己的開發(fā)環(huán)境,后面會(huì)針對(duì)不同的問題做總結(jié),同時(shí)也會(huì)根據(jù)原主的倉庫基礎(chǔ)下,進(jìn)行迭代更新。歡迎關(guān)注。公號(hào)卡二條的技術(shù)圈
修改MySQL連接問題
由于dnmp在安裝時(shí),是將本地的3305端口映射到MySQL容器的3306端口,因此我們?cè)谶B接是需要連接3305端口。
在示例代碼的www目錄下面,有一個(gè)localhost目錄,我們找到測(cè)試MySQL的一段代碼,如下:
// 檢測(cè)MySQL服務(wù)
function getMysqlVersion()
{
if (extension_loaded('PDO_MYSQL')) {
try {
$dbh = new PDO('mysql:host=192.168.2.103;dbname=mysql', 'root', '123456');
$sth = $dbh->query('SELECT VERSION() as version');
$info = $sth->fetch();
} catch (PDOException $e) {
return $e->getMessage();
}
return $info['version'];
} else {
return 'PDO_MYSQL 擴(kuò)展未安裝 ×';
}
}
我們只需要修改為如下代碼:
// 檢測(cè)MySQL服務(wù)
function getMysqlVersion()
{
if (extension_loaded('PDO_MYSQL')) {
try {
$dbh = new PDO('mysql:host=192.168.2.103;port=3305;dbname=mysql', 'root', '123456');
$sth = $dbh->query('SELECT VERSION() as version');
$info = $sth->fetch();
} catch (PDOException $e) {
return $e->getMessage();
}
return $info['version'];
} else {
return 'PDO_MYSQL 擴(kuò)展未安裝 ×';
}
}
這里的192.168.2.103是我們宿主機(jī)的ip,根據(jù)你實(shí)際的情況填寫即可??梢酝ㄟ^ifconfig查看。如果是Windows系統(tǒng),則使用ipconfig查看。
ifconfig
配置NGINX域名
在配置之前,我們需要明確這么幾個(gè)東西。我們?cè)创a目錄位置、NGINX配置文件位置、NGINX日志文件位置。特別注意:
1.我們可以通過截圖看見,conf.d目錄下面存在兩個(gè)配置文件。這兩個(gè)就是我事先配置好的域名文件。這個(gè)文件,是通過NGINX容器映射到本地磁盤。因此可以通過宿主機(jī)進(jìn)行查看。
2.logs文件就是NGINX的error,access等相關(guān)日志文件,同樣的是在NGINX容器中映射到宿主機(jī)的。
3.這里的www就是程序源碼路徑,我們的所有程序源碼都放在這里即可。
對(duì)于NGINX域名配置文件,推薦進(jìn)入到容器進(jìn)行編寫,而不是通過在宿主機(jī)進(jìn)行編寫。
第一步:進(jìn)入我們的www目錄,安裝一個(gè)應(yīng)用程序。這里推薦使用compser來安裝,對(duì)于composer的使用,也可以參考文檔進(jìn)行簡單配置即可使用。
ert@ertiaodeMac-mini ~/develop/env/dnmp/www master ● composer create-project topthink/think=5.1.35 tp5
Creating a "topthink/think=5.1.35" project at "./tp5"
Installing topthink/think (v5.1.35)
- Installing topthink/think (v5.1.35): Loading from cache
Created project in /app/tp5
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 2 installs, 0 updates, 0 removals
- Installing topthink/think-installer (v2.0.0): Loading from cache
- Installing topthink/framework (v5.1.39): Loading from cache
Writing lock file
Generating autoload files
ert@ertiaodeMac-mini ~/develop/env/dnmp/www master ● ll
total 0
drwxr-xr-x 3 ert staff 96B 9 6 22:02 localhost
drwxr-xr-x 19 ert staff 608B 9 8 22:26 tp5
這樣本地就按照好了一個(gè)tp5的框架了。第二步:進(jìn)入NGINX容器,通過docker ps查看docker容器的container-id,使用docker exec命令進(jìn)入到容器內(nèi)部。
ert@ertiaodeMac-mini ~/develop/env/dnmp/www master ● docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0f5f9cd08aa2 dnmp_php "docker-php-entrypoi…" 27 hours ago Up About an hour 9000/tcp, 9501/tcp php
8bc44fc8c578 dnmp_nginx "/docker-entrypoint.…" 27 hours ago Up 26 hours 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp nginx
f02ad53bf14d mysql:5.7.28 "docker-entrypoint.s…" 27 hours ago Up 26 hours 33060/tcp, 0.0.0.0:3305->3306/tcp mysql5
ert@ertiaodeMac-mini ~/develop/env/dnmp/www master ● docker exec -it 8bc44fc8c578 /bin/sh
/www # ls
localhost tp5
進(jìn)入NGINX配置文件路徑
/ # cd /etc/nginx/
/etc/nginx # ls -la
total 60
drwxr-xr-x 1 root root 4096 Sep 8 20:23 .
drwxr-xr-x 1 root root 4096 Sep 7 19:34 ..
drwxr-xr-x 5 root root 160 Sep 8 20:05 conf.d
-rw-r--r-- 1 root root 429 Sep 6 22:02 fastcgi-php.conf
-rw-r--r-- 1 root root 1077 Jul 8 00:14 fastcgi.conf
-rw-r--r-- 1 root root 1062 Sep 6 22:02 fastcgi_params
-rw-r--r-- 1 root root 2837 Jul 8 00:14 koi-utf
-rw-r--r-- 1 root root 2223 Jul 8 00:14 koi-win
-rw-r--r-- 1 root root 5231 Jul 8 00:14 mime.types
lrwxrwxrwx 1 root root 22 Jul 11 04:27 modules -> /usr/lib/nginx/modules
-rw-r--r-- 1 root root 760 Sep 6 22:02 nginx.conf
drwxr-xr-x 2 root root 4096 Sep 8 20:23 rewrite
-rw-r--r-- 1 root root 636 Jul 8 00:14 scgi_params
-rw-r--r-- 1 root root 664 Jul 8 00:14 uwsgi_params
-rw-r--r-- 1 root root 3610 Jul 8 00:14 win-utf
conf.d就是我們的域名配置路徑,nginx就是默認(rèn)的配置文件。
創(chuàng)建一個(gè)域名配置文件。
/etc/nginx # cd conf.d/ && touch tp5.conf
/etc/nginx/conf.d # ls -la
total 16
drwxr-xr-x 5 root root 160 Sep 8 20:05 .
drwxr-xr-x 1 root root 4096 Sep 8 20:23 ..
-rw-r--r-- 1 root root 48 Sep 6 22:02 .gitignore
-rw-r--r-- 1 root root 2254 Sep 6 22:02 localhost.conf
-rw-r--r-- 1 root root 505 Sep 8 20:29 tp5.conf
配置tp5.conf文件。復(fù)制如下內(nèi)容:
server {
listen 80;
server_name tp5.com;
root /www/tp5/public;
index index.php;
#NGINX日志文件,如果是其他的域名,直接替換nginx.tp5.com.xx.log文件名稱即可。
access_log /var/log/nginx/nginx.tp5.com.access.log;
error_log /var/log/nginx/nginx.tp5.com.error.log;
#thinkphp5的url重寫文件,避免重復(fù)編寫,單獨(dú)放一個(gè)文件,以后其他的thinkphp項(xiàng)目,直接引入即可。
include rewrite/thinkphp.conf;
location ~ \.php$ {
# 這里的php是php容器的名稱,可以改為實(shí)際的ip,不建議使用,因?yàn)閕p會(huì)變化。
fastcgi_pass php:9000;
include fastcgi-php.conf;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
測(cè)試域名配置,并重啟NGINX服務(wù)。
/etc/nginx/conf.d # nginx -t && nginx -s reload
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
/etc/nginx/conf.d #
將域名添加到宿主機(jī)的host文件。
訪問測(cè)試
PHP擴(kuò)展安裝
在搭建docker環(huán)境時(shí),PHP的Redis擴(kuò)展默認(rèn)是沒安裝,這里就以Redis擴(kuò)展為例。
由于內(nèi)置了部分?jǐn)U展(具體有哪些擴(kuò)展,參考上面提到的使用文檔),因此直接使用命令安裝即可。
install-php-extensions redis
測(cè)試擴(kuò)展
/www # php --ri redis
redis
Redis Support => enabled
Redis Version => 5.3.1
......
總結(jié)
到此這篇關(guān)于使用docker搭建一套開發(fā)環(huán)境全家桶的文章就介紹到這了,更多相關(guān)docker搭建開發(fā)環(huán)境全家桶內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!