Docker 快速搭建 Lnmp 开发环境
64

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

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

file

demo

google

本帖已被设为精华帖!
本帖由系统于 4个月前 自动加精
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 21
Sparkfly

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
成功进入调试界面

注意:配置远程目录映射

4个月前

楼主请问一下如何关闭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;
    }

}
4个月前
Sparkfly

@ucmir 修改后,需重启服务才能生效,,,

docker-compose down
docker-compose up -d
4个月前

楼主我这边处理好了,是因为我将如下代码修改导致的

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

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

4个月前
Sparkfly

@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文件的目录

4个月前

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

4个月前

很好

4个月前

80端口下 如何配置多个站点

4个月前
Sparkfly

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

127.0.0.1 www.demo1.com
127.0.0.1 www.demo2.com 
4个月前
Sparkfly
networks:
  docker_net:
    driver: bridge
    ipam:
      driver: default
      config:
        -
          subnet: "172.100.0.0/16"
4个月前

这边记录一下我自己遇到的一个小问题的解决方法,我这边跑程序的时候抛出

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
4个月前
Sparkfly

更多优化更新,可以访问github

3个月前

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

3个月前
Sparkfly

添加 GUI 管理工具

3个月前
Sparkfly

添加 Google 代理,方便开发查阅资料

3个月前

Github有成熟且强大的这种轮子,laradock

2个月前
Sparkfly

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

2个月前

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

2个月前
Sparkfly

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

2个月前

laradock很不错的,哈哈哈哈哈,凑一波热闹就走

2个月前
Sparkfly
2个月前

  • 请注意单词拼写,以及中英文排版,参考此页
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
  • 支持表情,使用方法请见 Emoji 自动补全来咯,可用的 Emoji 请见 :metal: :point_right: Emoji 列表 :star: :sparkles:
  • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif
  • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
  请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!