Docker 快速搭建 Lnmp 开发环境

头条 Sparkfly ⋅ 于 2个月前 ⋅ 最后回复由 Sparkfly 5天前 ⋅ 2183 阅读

分享链接:https://github.com/helingfeng/Docker-LNMP
使用Docker搭建一个简洁高效的LNMP开发环境

  • 支持多平台
  • PHP5 和 PHP7 同时支持
  • 支持 HTTPS 配置
  • 日志文件本地映射
  • 通过.env可以区分生产与测试环境
  • 免费Google搜索,http://127.0.0.1:8080

file

demo

google

本文章首发在 Laravel China 社区
本帖已被设为精华帖!
本帖由系统于 2个月前 自动加精
回复数量: 21
  • Docker 快速搭建 Lnmp 开发环境

    只要你敢尝试一次,就再也不会拒绝它

    如何使用?

    1. 安装工具

    2. 下载代码

    $ git clone https://github.com/helingfeng/Docker-LNMP.git

    4. 启动服务

    $ cd Docker-LNMP
    $ docker-compose up -d

    第一次启用服务,需要下载并编译各种工具,请耐心等待一段时间

    demo

    表示成功启动服务

    5. 访问 Demo

    打开浏览器访问:

    demo

    问题与解答 ?

    1. workspace工作目录映射

    volumes:
          - ./www/:/var/www/html/:rw

    ./www/ 修改为你的 workspace 工作目录,注意 nginx php-fpm 两个应用都需要修改

    2. 多个项目系统,采用虚拟域名,如何相互之间访问

    php-fpm 应用添加 extra_hosts 指向 nginx 应用

    extra_hosts:
          - www.demo1.com:172.100.0.2

    这里的 172.100.0.2 表示 nginx 应用ip

    3. 如何切换php版本

    nginx 配置文件 .conf 选项 fastcgi_pass 参数定义

    fastcgi_pass   fpm56:9000;
    或者
    fastcgi_pass   fpm72:9000;
    

    4. PhpStorm 安装 xdebug 调试

    添加扩展

    php72 应用为例,首先需要修改 Dockerfile 文件,安装 xdebug 扩展;

    PECL extensions 安装说明可以在官网找到:
    https://hub.docker.com/_/php/

    RUN pecl install xdebug-2.6.0 \
        && docker-php-ext-enable xdebug

    重新构建 php72 镜像(删除镜像,启动docker-compose

    配置 xdebug

    修改 php72.ini 文件追加

    xdebug.auto_trace = on
    xdebug.default_enable = on
    xdebug.auto_profile = on
    xdebug.collect_params = on
    xdebug.collect_return = on
    xdebug.profiler_enable = on
    xdebug.remote_enable = on
    xdebug.remote_port = 9005
    xdebug.remote_handler = dbgp
    xdebug.remote_autostart = on
    xdebug.remote_connect_back = on
    ; 配置这个可以查看调试日志
    xdebug.remote_log = /var/log/php-fpm/xdebug_remote.log
    ;xdebug.trace_output_dir = "/var/log/php-fpm/xdebug/"
    ;xdebug.profiler_output_dir = "/var/log/php-fpm/xdebug/"
    xdebug.idekey = PHPSTORM
    配置 PhpStorm

    端口一致即可,上述我配置的是9005端口

    参看一下这个文档:https://www.jianshu.com/p/e9ad4c99d118

    开启调试,出现异常

    设置断点,点击开始调试时,并没有成功进入调试模式。

    查看 xdebug_remote.log 日志,报错如下

    Log opened at 2018-06-01 13:51:09
    I: Checking remote connect back address.
    I: Checking header 'HTTP_X_FORWARDED_FOR'.
    I: Checking header 'REMOTE_ADDR'.
    I: Remote address found, connecting to 172.100.0.1:9005.
    W: Creating socket for '172.100.0.1:9005', poll success, but error: Operation now in progress (29).
    E: Could not connect to client. :-(
    Log closed at 2018-06-01 13:51:09
    修改 php72.ini 文件配置

    根据下面资料:

    ; 这个地址为主机ip,通过`ifconfig`查看
    xdebug.remote_host = 192.168.1.123
    xdebug.remote_connect_back = 0
    成功进入调试界面

    注意:配置远程目录映射

    2个月前
  • 楼主请问一下如何关闭https跳转呀,我把本地conf/conf.d/demo.conf配置修改之后还是会有跳转
    下面是我的配置

    server {
        listen       80;
        server_name  127.0.0.1 localhost www.demo.com;
        root   /var/www/html/demo;
    
        location ~ .*$ {
            fastcgi_pass   fpm:9000;
            fastcgi_index  index.php;
            include        fastcgi_params;
            fastcgi_param SCRIPT_FILENAME $document_root/index.php;
        }
    
    }
    
    2个月前
  • @ucmir 修改后,需重启服务才能生效,,,

    docker-compose down
    docker-compose up -d
    2个月前
  • 楼主我这边处理好了,是因为我将如下代码修改导致的

    include /etc/nginx/conf.d/*.conf;

    我之前看这个目录我是不对的,因为我本地并没有这个目录,所以就设置了一个我本地的绝对路径导致的问题。后来我又对照了你原来的代码讲这里的配置改回来就可以了,我想问一下这里为什么是这个地址,我本地没有的地址,是怎么样的一个引用机制可以正常的引入虚拟机的配置文件?
    是因为虽然配置文件虽然在我本地,其实引用目录其实还是docker里的目录吗?

    2个月前
  • @ucmir 可以这样理解,是有目录映射配置,你可以看 docker-compose.yml 文件中 volumes 参数

      nginx:
        image: nginx:alpine
        ports:
          - "80:80"
          - "443:443"
        volumes:
          - ./www/:/var/www/html/:rw
          - ./conf/nginx/conf.d:/etc/nginx/conf.d/:ro
          - ./conf/nginx/nginx.conf:/etc/nginx/nginx.conf:ro
          - ./log/nginx/:/var/log/nginx/:rw
    ...

    /etc/nginx/conf.d/ 相当于 ./conf/nginx/conf.d
    ./conf/nginx/conf.d 就是本项目的相对路径

    所有的相对路径,是相对于docker-compose.yml文件的目录

    2个月前
  • @Sparkfly 很透彻,我这边已经了解了,整个的运行机制,谢谢你的耐心解答 :+1:

    2个月前
  • 很好

    2个月前
  • 80端口下 如何配置多个站点

    2个月前
  • @Cody nginx 配置虚拟域名,如,www.demo1.com www.demo2.com 对应不同的站点
    然后本地加 hosts

    127.0.0.1 www.demo1.com
    127.0.0.1 www.demo2.com 
    2个月前
  • networks:
      docker_net:
        driver: bridge
        ipam:
          driver: default
          config:
            -
              subnet: "172.100.0.0/16"
    2个月前
  • 这边记录一下我自己遇到的一个小问题的解决方法,我这边跑程序的时候抛出

    SQLSTATE[HY000] [2002] Connection refused

    后来发现原因是我把数据库地址写成了127.0.0.1,实际上的数据库地址应该是docker-compose.yml文件中配置ipv4_address的ip地址

      mysql:
        image: mysql:5.6
        ports:
          - "3306:3306"
        volumes:
          - ./conf/mysql/my.cnf:/etc/mysql/my.cnf:ro
          - ./mysql/:/var/lib/mysql/:rw
          - ./log/mysql/:/var/log/mysql/:rw
        environment:
          MYSQL_ROOT_PASSWORD: "123456"
        networks:
          docker_net:
            ipv4_address: 172.100.0.5
    2个月前
  • 更多优化更新,可以访问github

    1个月前
  • 请问下,win10 本地开发导致访问很慢的问题,现在解决了吗

    1个月前
  • 添加 GUI 管理工具

    1个月前
  • 添加 Google 代理,方便开发查阅资料

    3周前
  • Github有成熟且强大的这种轮子,laradock

    1周前
  • @Alexanderwmc 是的,但是我只是需要一个简单的开发环境,,, :grinning:

    1周前
  • @Sparkfly 我就用laradock做的开发环境及服务器部署,自从用了这玩意儿,腰不酸了腿不痛了,连胳膊也不抽筋了 :joy: 里边集成了好多镜像,做开发时用到了就开,不用就不开,还可以学习别人配置docker的方式,何乐而不为?

    1周前
  • @Alexanderwmc 不明白你在说啥?都是用 docker-compose 编排服务。个人看法,一般写代码,比较喜欢把不可能执行到的代码删除,而不是注释或保留,只是想代码的思路更纯粹一些。我的初衷是觉得初学者需要一个简单的开始,没有你想的那么高大上,,,,至于你想了解其他服务怎么配置,上 dockerhub 官方镜像就可以随便玩

    1周前
  • laradock很不错的,哈哈哈哈哈,凑一波热闹就走

    1周前
您需要登陆以后才能留下评论!

Composer 中国全量镜像

Top 250 扩展包

Lumen 中文文档

Laravel 速查表

Laravel 中文文档

Laravel 项目开发规范

Laravel 开发环境部署

Composer 中文文档

Elasticsearch-PHP 中文文档

Lumen 中文文档

GraphQL PHP 中文文档

社区文档撰写指南

TDD 构建 Laravel 论坛笔记

PHP PSR 标准规范

PHP 设计模式全集

Dingo API 中文文档