一、前言

Vagrant 可以让你使用单一的配置信息来部署一套虚拟环境, 最后打包为一个所谓的 box (就是已经部署好环境的虚拟机器). 你可以手动来安装和配置 box, 也可以使用自动部署工具, 如 Puppet 或者 Chef .

自动部署工具可以让你快速部署一套一模一样的环境, 避免了一大堆的手动的命令输入, 并且允许你随时删除和重建一个全新的 box, 虚拟机的管理变得更加简单.

Vagrant 还可以在虚拟机和主机上分享文件夹, 意味着你可以在主机里面编辑代码, 然后在虚拟机里面运行.

目标环境:

  • window下开发,利用xdebug远程联调
  • virtual Box的安装(5.1.30版本,5.2的版本之前提示兼容问题): 下载地址:https://www.virtualbox.org/wiki/Download_Old_Builds_5_1
  • vagrant的安装(2.0.0版本): 下载地址:https://www.vagrantup.com/
  • Homestead环境配置:
  • github地址:https://github.com/laravel/homestead.git
  • Laravel Homestead Box安装(Laravel Homestead 是一个官方预封装的 Vagrant Box,提供了一个完美的开发环境,你无需在本地安装 PHP 、web 服务器或任何服务软件) :
  • 安装命令: vagrant box add laravel/homestead
  • 内置软件: Ubuntu 16.04 Git PHP 7.1 Nginx MySQL MariaDB Sqlite3 Postgres Composer Node (带有 Yarn、Bower、Grunt 和 Gulp) Redis Memcached Beanstalkd Mailhog ngrok

二、安装明细

1. virtualbox以及vargrant的安装直接略过。
2. 下载 & 安装laravel/homestead box:

在线安装(国内通常被墙了):vagrant box add laravel/homestead 离线安装(本地安装):可以考虑自己找一些laravel/homestead的box的源,或者公司其他同事已经下载好的,可repackage出来: 假定下载好的离线box存储路径为:D:/VagrantSoftWare/homestead.box 在目录下,创建一个metadata.json,用于对vagran box一些说明:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
{
    "name": "laravel/homestead",
    "versions": [{
        "version": "4.0.0",
        "providers": [{
            "name": "virtualbox",
            "url": "file:///D:/VagrantSoftWare/homestead.box"
        }]
    }]
}

执行vagrant.exe box add metadata.json,然后通过vagrant.exe box list就可以查看到: $ vagrant.exe box list laravel/homestead (virtualbox, 4.0.0) 然后继续后续的laravel/homestead的配置安装步骤即可。

3. laravel/homestead的相关环境配置, Clone laravel的Vagrantbox环境配置到~/Homestead

[选择稳定版本]

1
2
3
cd ~
git clone https://github.com/laravel/homestead.git Homestead
git checkout v6.5.0

[初始化,并创建Homestead.yaml配置文件] bash init.sh

4. 配置Homestead.yaml

Homestead.yaml属于Homestead的配置文件, [配置提供器] provider: virtualbox #如果用了其他虚拟机比如vmware_workstation,这块提供商会不同

[和宿主机器共享文件夹]

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
folders: # 默认以vboxsf文件类型挂载
    - map: F:\windowsShare
      to: /home/vagrant/www
folders:    # 以nfs文件类型挂载
    - map: ~/Code
      to: /home/vagrant/Code
      type: "nfs"
folders:    # 以rsync同步方式,共享文件
    - map: ~/Code
      to: /home/vagrant/Code
      type: "rsync"
      options:
          rsync__args: ["--verbose", "--archive", "--delete", "-zz"]
          rsync__exclude: ["node_modules"]
[配置 Nginx 站点]

sites:
    - map: blog.test
      to: /home/vagrant/code/blog/public
      php: "7.1"
      params:
        - key: ENV
          value: DEV
5. 解析Host

192.168.10.10 blog.test

生成 ~/.ssh/id_rsa ~/.ssh/id_rsa.pub

6. vagrant的常见操作
  • vagrant up # 启动vagrant box,也就是linux虚拟机;
  • vagrant box list # 查看当前的vagrant box清单
  • vagrant.exe box repackage laravel/homestead virtualbox 4.0.0 #打包vagrantbox
  • vagrant ssh # 连接vagrant box
  • vagrant reload # 加载最新的VagrantFile,并重启vagrant box 其他跟多的,可以自行vagrant –help
7. vagrant box的相关配置文件
  • php相关配置,包含了多个版本的(5.6~7.2):/etc/php/
  • nginx配置:/etc/nginx
  • mysql配置: ~/.my.cnf 以及 /etc/mysql 其他都是类似的,都在/etc目录下,比如/etc/redis
8. XDEBUG的配置

vagrant box下的php这边都按模块进行配置了,相关模块配置都是在/etc/php/7.1/fpm/conf.d/下,比如:

xdebug配置路径: /etc/php/7.1/fpm/conf.d/20-xdebug.ini 具体配置:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
zend_extension=xdebug.so
#xdebug.remote_connect_back = 1    # 不用设定来源调试机器的时候,做调试需要设定该值,设定该值将忽略xdebug.remote_host设置。
xdebug.remote_autostart=on        # 自动开启远端模式
xdebug.remote_enable=on            # 开启远端调试
xdebug.remote_host=192.168.10.1    # 调试端监听机器
xdebug.remote_port=9000            # phpstorm的监听端口
xdebug.remote_handler=dbgp    # debug协议
xdebug.idekey = "PHPSTORM"    # php联调时候需要配置
xdebug.var_display_max_depth = 5    # 变量嵌套显示深度
xdebug.max_nesting_level = 512    # 变量嵌套显示深度层次
开启完后,由于是本地和虚拟机联调,需要到phpstorm中做对应的设置,还需要做好对应的maping映射,这个比较关键,即远端的路径,比如/home/vagrant/code/blog/应该映射到本地,这样才能正常的调试流程;
9. 挂载情况查看

[mount -l]

1
2
vagrant on /vagrant type vboxsf (rw,nodev,relatime)
home_vagrant_www on /home/vagrant/www type vboxsf (rw,nodev,relatime)
10. 服务器情况
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.1:11300         0.0.0.0:*               LISTEN      1189/beanstalkd 
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      1363/mysqld     
tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      1370/redis-server 1
tcp        0      0 127.0.0.1:11211         0.0.0.0:*               LISTEN      1214/memcached  
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      1508/nginx -g daemo
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1210/sshd       
tcp        0      0 0.0.0.0:5432            0.0.0.0:*               LISTEN      1520/postgres   
tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      1508/nginx -g daemo
tcp6       0      0 :::22                   :::*                    LISTEN      1210/sshd       
tcp6       0      0 :::5432                 :::*                    LISTEN      1520/postgres   
tcp6       0      0 :::8025                 :::*                    LISTEN      1221/mailhog    
tcp6       0      0 :::1025                 :::*                    LISTEN      1221/mailhog
11. composer安装laravel

composer的话,用vagrant用户安装就OK了,比如安装Laravel,进入到/home/vagrant/code/blog/,直接composer create-project laravel/laravel .,稍等就可以安装完成了。

12. 其他

可以基于vagrant ssh-config查对应的ssh的相关配置,默认直接ssh到虚拟机ip192.168.10.10时候需要基于私钥登录的;

三、参考

Laravel 虚拟开发环境 Homestead: https://d.laravel-china.org/docs/5.5/homestead Laravel 的本地安装遇到的问题:https://stackoverflow.com/questions/34946837/box-laravel-homestead-could-not-be-found Xdebug 远端调试文档: https://xdebug.org/docs/remote Xdebug 在phpstorm下的设置