专栏首页浪子编程走四方使用docker搭建一套开发环境全家桶

使用docker搭建一套开发环境全家桶

DNMP介绍

DNMP(Docker + Nginx + MySQL + PHP7/5 + Redis)是一款全功能的LNMP一键安装程序。支持的服务丰富、功能强大、使用简单、兼容多平台。是适用于多端的一款docker开发与生产环境的PHP环境全家桶。

DNMP项目特点:

  1. 100%开源
  2. 100%遵循Docker标准
  3. 支持多版本PHP共存,可任意切换(PHP5.4、PHP5.6、PHP7.1、PHP7.2、PHP7.3)
  4. 支持绑定任意多个域名
  5. 支持HTTPS和HTTP/2
  6. PHP源代码、MySQL数据、配置文件、日志文件都可在Host中直接修改查看
  7. 内置完整PHP扩展安装命令
  8. 默认支持 pdo_mysqlmysqlimbstringgdcurlopcache等常用热门扩展,根据环境灵活配置
  9. 可一键选配常用服务:
    • 多PHP版本:PHP5.4、PHP5.6、PHP7.1-7.3
    • Web服务:Nginx、Openresty
    • 数据库:MySQL5、MySQL8、Redis、memcached、MongoDB、ElasticSearch
    • 消息队列:RabbitMQ
    • 辅助工具:Kibana、Logstash、phpMyAdmin、phpRedisAdmin、AdminMongo
  10. 实际项目中应用,确保 100%可用
  11. 所有镜像源于Docker官方仓库,安全可靠
  12. 一次配置,Windows、Linux、MacOs皆可用
  13. 支持快速安装扩展命令 install-php-extensions apcu

具体使用文档可参考:https://gitee.com/bruce_qiq/dnmp/blob/master/README.md。文档中已经有一个明确的使用教程。接来下,主要针对安装完之后,做的一些基本操作做一个简单的演示,因为部分操作在源文档不是很详细,并且有明显的坑。主要记录几个功能:

1.修改无法连接MySQL问题。

2.配置NGINX虚拟域名。

3.安装PHP扩展。

因为个人打算持续使用该包来做自己的开发环境,后面会针对不同的问题做总结,同时也会根据原主的仓库基础下,进行迭代更新。欢迎关注。公号卡二条的技术圈

修改MySQL连接问题

由于dnmp在安装时,是将本地的3305端口映射到MySQL容器的3306端口,因此我们在连接是需要连接3305端口。

在示例代码的www目录下面,有一个localhost目录,我们找到测试MySQL的一段代码,如下:

// 检测MySQL服务
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 扩展未安装 ×';
    }
}

我们只需要修改为如下代码:

// 检测MySQL服务
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 扩展未安装 ×';
    }
}

这里的192.168.2.103是我们宿主机的ip,根据你实际的情况填写即可。可以通过ifconfig查看。如果是Windows系统,则使用ipconfig查看。

ifconfig

配置NGINX域名

在配置之前,我们需要明确这么几个东西。我们源码目录位置、NGINX配置文件位置、NGINX日志文件位置。

特别注意:

1.我们可以通过截图看见,conf.d目录下面存在两个配置文件。这两个就是我事先配置好的域名文件。这个文件,是通过NGINX容器映射到本地磁盘。因此可以通过宿主机进行查看。

2.logs文件就是NGINX的error,access等相关日志文件,同样的是在NGINX容器中映射到宿主机的。

3.这里的www就是程序源码路径,我们的所有程序源码都放在这里即可。

对于NGINX域名配置文件,推荐进入到容器进行编写,而不是通过在宿主机进行编写。

第一步:进入我们的www目录,安装一个应用程序。这里推荐使用compser来安装,对于composer的使用,也可以参考文档进行简单配置即可使用。

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

这样本地就按照好了一个tp5的框架了。第二步:进入NGINX容器,通过docker ps查看docker容器的container-id,使用docker exec命令进入到容器内部。

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

进入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就是默认的配置文件。

创建一个域名配置文件。

/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文件。复制如下内容:

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重写文件,避免重复编写,单独放一个文件,以后其他的thinkphp项目,直接引入即可。
    include rewrite/thinkphp.conf;
    location ~ \.php$ {
            # 这里的php是php容器的名称,可以改为实际的ip,不建议使用,因为ip会变化。
            fastcgi_pass    php:9000;
            include         fastcgi-php.conf;
            fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
            include         fastcgi_params;
        }
}

测试域名配置,并重启NGINX服务。

/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 #

将域名添加到宿主机的host文件。

访问测试

PHP扩展安装

在搭建docker环境时,PHP的Redis扩展默认是没安装,这里就以Redis扩展为例。

由于内置了部分扩展(具体有哪些扩展,参考上面提到的使用文档),因此直接使用命令安装即可。

install-php-extensions redis

测试扩展

/www # php --ri redis

redis

Redis Support => enabled
Redis Version => 5.3.1
......

本文分享自微信公众号 - 卡二条的技术圈(qq1005349393),作者:浪子编程走四方

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-09-09

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Linux文件同步工具之rsync

    1.最近公司的项目在使用jenkins做自动化构建,因为jenkins在构建时是比较耗性能的,便单独使用了一台服务器做构建服务器。但是个人觉得这样成本过高,单独...

    A梦多啦A
  • lnmp+coreseek实现站内全文检索

    <font color='red'>在安装csft的过程中出现了三种错误情况,错误情况如下错误记录,可以参考修改即可</font>

    A梦多啦A
  • Jenkins实现自动化邮件发送踩坑记录

    本文分享Jenkins实现邮件发送,就不演示如何安装,如果需要查看,可点击底部阅读原文,分享Jenkins多种安装方式。写这篇文章,是在实际使用Jenkins过...

    A梦多啦A
  • Linux之安装Tomcat8 原

        修改List-5的server.xml,将port的值修改为其它值就可以了,默认值是8080

    克虏伯
  • 利用rbd命令把 ceph pool 中的一个镜像导出

    查看镜像 [root@node1 ~]# rbd ls images a56330e7-79d7-4639-a68f-366ac344bfe2 eccfee07...

    院长技术
  • 每天一道剑指offer-二叉树的镜像

    今天的题目 每天的题目见github(看最新的日期): https://github.com/gzc426 具体的题目可以去牛客网对应专题去找。

    乔戈里
  • Linux开发环境第三方库规划

    让工作变得有条理,不乱糟糟,即使存在大量的第三方,也有章可循。简而言之,就是要保持目录的干净(如/usr/local目录),保持文件的干净(如profile文...

    一见
  • 浏览器环境检测

    本文是直接把seleniumpyppeteer 以及正常打开浏览器 的环境差异直接列出来

    爬虫
  • 【趣学程序】Linux流的重定向

    趣学程序-shaofeer
  • python中创建和遍历二叉树

    py3study

扫码关注云+社区

领取腾讯云代金券