通过 Vagrant 搭建虚拟机环境

时间猎人 2015-08-20

介绍

Laravel 致力于让 PHP 开发体验更愉快,也包含你的本地开发环境。Vagrant 提供了一个简单、优雅的方式来管理与供应虚拟机。

Laravel Homestead 是一个官方预载的 Vagrant「封装包」,提供你一个美好的开发环境,你不需要在你的本机端安装 PHP、HHVM、网页服务器或任何服务器软件。不用担心搞乱你的系统!Vagrant 封装包可以搞定一切。如果有什么地方出现故障,你可以在几分钟内快速的销毁并重建虚拟机。

Homestead 可以在任何 Windows、Mac 或 Linux 上面运行,里面包含了 Nginx 网页服务器、PHP 5.6、MySQL、Postgres、Redis、Memcached 还有所有你要开发精彩的 Laravel 应用程序所需的软件。

附注: 如果您是 Windows 的用户,您可能需要启用硬件虚拟化(VT-x)。通常需要通过 BIOS 来启用它。

Homestead 目前是构建且测试于 Vagrant 1.7 版本。

内置软件

安装与配置

安装 VirtualBox / VMWare 与 Vagrant

在启动你的 Homestead 环境之前,你必须先安装 VirtualBoxVagrant. 两套软件在各平台都有提供易用的可视化安装程序。

VMware

除了 VirtualBox 之外, Homestead 也支持 VMware. 如果使用 VMware 作为 provider, 你需要购买 VMware Fusion / Desktop 以及 VMware Vagrant plug-in. VMware 提供了更快、性能更好的共享文件夹。

增加 Vagrant 封装包

当 VirtualBox / VMware 和 Vagrant 安装完成后,你可以在终端机以下列命令将 'laravel/homestead' 封装包安装进你的 Vagrant 安装程序中。下载封装包会花你一点时间,时间长短将依据你的网络速度决定:

vagrant box add laravel/homestead

如果这个命令失败了, 你可能安装的是一个老版本的 Vagrant 需要指定一个完整的 URL:

vagrant box add laravel/homestead https://atlas.hashicorp.com/laravel/boxes/homestead

安装 Homestead

你可以简单地通过手动复制资源库的方式来安装 Homestead。将资源库复制至你的 "home" 目录中的 Homestead 文件夹,如此一来 Homestead 封装包将能提供主机服务给你所有的 Laravel(及 PHP)应用:

git clone https://github.com/laravel/homestead.git Homestead

一旦你克隆完 Homestead 仓库,从 Homestead 目录中执行 bash init<span class="token punctuation">.</span>sh 命令来创建 Homestead<span class="token punctuation">.</span>yaml 配置文件:

bash init.sh

Homestead<span class="token punctuation">.</span>yaml 文件,将会被放置在你的 <span class="token operator">~</span><span class="token operator">/</span><span class="token punctuation">.</span>homestead 目录中。

配置你的 Provider

Homestead<span class="token punctuation">.</span>yaml 文件中的 provider 键表明需要使用的 Vagrant prodiver:virtualboxvmware_fusion (Mac OS X)、或者 vmware_workstation (Windows),你可以根据自己的喜好设定 provider 。

provider: virtualbox

配置你的 SSH 密钥

然后你需要编辑 Homestead<span class="token punctuation">.</span>yaml。可以在文件中配置你的 SSH 公开密钥,以及主要机器与 Homestead 虚拟机之间的共享目录。

如果没有 SSH 密钥的话, 在 Mac 和 Linux 下,你可以利用下面的命令来创建一个 SSH 密钥组:

ssh-keygen -t rsa -C "you@homestead"

在 Windows 下,你需要安装 Git 并且使用包含在 Git 里的 Git Bash 来执行上述的命令。另外你也可以使用 PuTTY 和 PuTTYgen。

一旦你创建了一个 SSH 密钥,记得在你的 Homestead<span class="token punctuation">.</span>yaml 文件中的 authorize 属性指明密钥路径。

配置你的共享文件夹

Homestead<span class="token punctuation">.</span>yaml 文件中的 folders 属性列出了所有你想在 Homestead 环境共享的文件夹列表。这些文件夹中的文件若有变动,他们将会同步在你的本机与 Homestead 环境里。你可以将你需要的共享文件夹都配置进去。

如果要开启 NFS,只需要在 folders 中加入一个标识:

folders:
    - map: ~/Code
      to: /home/vagrant/Code
      type: "nfs"

配置你的 Nginx 站点

对 Nginx 不熟悉?没关系。sites 属性允许你简单的对应一个 域名 到一个 homestead 环境中的目录。一个例子的站点被配置在 Homestead<span class="token punctuation">.</span>yaml 文件中。同样的,你可以加任何你需要的站点到你的 Homestead 环境中。Homestead 可以为你每个进行中的 Laravel 应用提供方便的虚拟化环境。

你可以通过配置 hhvm 属性为 <span class="token boolean">true</span> 来让虚拟站点支持 HHVM:

sites:
    - map: homestead.app
      to: /home/vagrant/Code/Laravel/public
      hhvm: true

Each site will be accessible by HTTP via port 8000 and HTTPS via port 44300.

Bash Aliases

如果要增加 Bash aliases 到你的 Homestead 封装包中,只要将内容添加到 <span class="token operator">~</span><span class="token operator">/</span><span class="token punctuation">.</span>homestead 目录最上层的 aliases 文件中即可。

启动 Vagrant 封装包

当你根据你的喜好编辑完 Homestead<span class="token punctuation">.</span>yaml 后,在终端机里进入你的 Homestead 文件夹并执行 vagrant up 命令。

Vagrant 会将虚拟机开机,并且自动配置你的共享目录和 Nginx 站点。如果要移除虚拟机,可以使用 vagrant destroy <span class="token operator">--</span>force 命令。

为了你的 Nginx 站点,别忘记在你的机器的 hosts 文件将「域名」加进去。hosts 文件会将你的本地域名的站点请求指向你的 Homestead 环境中。在 Mac 和 Linux,该文件放在 <span class="token operator">/</span>etc<span class="token operator">/</span>hosts。在 Windows 环境中,它被放置在 C<span class="token punctuation">:</span>\<span class="token package">Windows<span class="token punctuation">\</span>System32<span class="token punctuation">\</span>drivers<span class="token punctuation">\</span>etc<span class="token punctuation">\</span>hosts</span>。你要加进去的内容类似如下:

192.168.10.10  homestead.app

务必确认 IP 地址与你的 Homestead<span class="token punctuation">.</span>yaml 文件中的相同。一旦你将域名加进你的 hosts 文件中,你就可以通过网页浏览器访问到你的站点。

http://homestead.app

继续读下去,你会学到如何连接到数据库!

常见用法

通过 SSH 连接

要通过 SSH 连接上您的 Homestead 环境,在终端机里进入你的 Homestead 目录并执行 vagrant ssh 命令。

因为你可能会经常需要通过 SSH 进入你的 Homestead 虚拟机,可以考虑在你的主要机器上创建一个"别名" 用来快速 SSH 进入 Homestead 虚拟机:

alias vm="ssh [email protected] -p 2222"

一旦你创建了这个别名,无论你在主要机器的哪个目录,都可以简单地使用 "vm" 命令来通过 SSH 进入你的 Homestead 虚拟机。

你也可以在 Homestead 目录使用 vagrant ssh 命令。

连接数据库

Homestead 封装包中,已经预了 MySQL 与 Postgres 两种数据库。为了更简便,Laravel 的 local 数据库配置已经默认将其配置完成。

如果想要从本机上通过 Navicat 或者 Sequel Pro 连接 MySQL 或者 Postgres 数据库,你可以连接 <span class="token number">127.0</span><span class="token punctuation">.</span><span class="token number">0.1</span> 的端口 33060 (MySQL) 或 54320 (Postgres)。而帐号密码分别是 Homestead / secret

附注: 从本机端你应该只能使用这些非标准的连接端口来连接数据库。因为当 Laravel 运行在虚拟机时,在 Laravel 的数据库配置文件中依然是配置使用默认的 3306 及 5432 连接端口。

增加更多的站点

在 Homestead 环境上架且运行后,你可能会需要为 Laravel 应用程序增加更多的 Nginx 站点。你可以在单一个 Homestead 环境中运行非常多 Laravel 安装程序。有两种方式可以达成:第一种,在 Homestead<span class="token punctuation">.</span>yaml 文件中增加站点然后在 Homestead 目录中执行 vagrant provision

Note: 这个操作是具有破坏性的,当执行 provision 命令,你现有的数据库会被摧毁并重新创建。

另外,也可以使用存放在 Homestead 环境中的 serve 命令文件。要使用 serve 命令文件,请先 SSH 进入 Homestead 环境中,并执行下列命令:

serve domain.app /home/vagrant/Code/path/to/public/directory 80

附注: 在执行 serve 命令过后,别忘记将新的站点加进本机的 hosts 文件中。

连接端口

以下的端口将会被转发至 Homestead 环境:

  • SSH: 2222 → Forwards To 22
  • HTTP: 8000 → Forwards To 80
  • HTTPS: 44300 → Forwards To 443
  • MySQL: 33060 → Forwards To 3306
  • Postgres: 54320 → Forwards To 5432

增加额外端口

你也可以自定义转发额外的端口至 Vagrant box,只需要指定协议:

ports:
    - send: 93000
      to: 9300
    - send: 7777
      to: 777
      protocol: udp

Blackfire Profiler

Blackfire Profiler 是由 SensioLabs 创建的一个分析工具,它会自动的收集代码执行期间的相关数据,比如 RAM, CPU time, 和 disk I/O. 如果你使用 Homestead ,那么使用这个分析工具会变得非常简单。

blackfire 所需的包已经安装在 Homestead box 中,你只需要在 Homestead<span class="token punctuation">.</span>yaml 文件中设置 Server ID 和 token :

blackfire:
    - id: your-server-id
      token: your-server-token
      client-id: your-client-id
      client-token: your-client-token

当你设定完 Blackfire 的凭证信息,使用 vagrant provision 令配置生效。当然,你也需要通过阅读Blackfire 文档 来学习如何在你的浏览器中安装 Blackfire 扩展。

相关推荐