全新环境安装Homestead

Thursday, March 23, 2017

Homestead 与 虚拟机

Laravel Homestead 是一个官方预封装的 Vagrant box,提供给你一个完美的开发环境,你无需在本机电脑上安装 PHP、HHVM、Web 服务器或其它服务器软件。并且不用再担心系统被搞乱!Vagrant box 为你搞定一切。如果有什么地方出错了,你也可以在几分钟内快速的销毁并重建虚拟机!

  • VirtualBox – Oracle 公司的虚拟机软件, 能运行在当前大部分流行的系统上;

  • Vagrant – 一个虚拟机管理软件。提供简单、优雅的方式来管理与配置虚拟机,Homestead 构建于 Vagrant 之上, Homestead 正是构建在 Vagrant 之上;

  • Laravel Homestead – 是 Laravel 官方预封装的一个 Vagrant Box,它是一台虚拟机的原型,运行在 VirtualBox 上,提供一个完美的开发环境,你无需在本机电脑上安装 PHP、HHVM、Web 服务器或其它服务器软件。并且不用再担心系统被搞乱,如果有什么地方出错了,可以在几分钟内快速的销毁并重建虚拟机!

    Homestead 可以在 Windows、Mac 或 Linux 系统上面运行,包括以下两个东西

    1. 一个 vagrant box 虚拟机, 里面包含了 Nginx Web 服务器、PHP 7.0、MySQL、Postgres、Redis、Memcached、Node,以及所有你在使用 Laravel 开发时所需要用到的各种软件。
    2. Github 代码库, 里面装载着 vagrant 的配置脚本, 用来自动化配置网络, 端口映射, 等一些开发时候用到的配置;

安装 virtualbox 和 vagrant

virtualboxVagrant 都提供了GUI软件,并且支持所有平台,点击链接下载对应平台的软件并安装即可。

安装 Homestead Vagrant box

当 VirtualBox / VMware 以及 Vagrant 安装完成后,你使用以下命令将 laravel/homestead 这个 box 安装进你的 Vagrant 程序中。box 的下载会花费你一点时间,具体的下载时长由网络速度决定:

vagrant box add laravel/homestead

安装时会先让选择Provider,这里需要根据自己的虚拟机来选择,我选择的是virtualbox

$ vagrant box add laravel/homestead
==> box: Loading metadata for box 'laravel/homestead'
box: URL: https://atlas.hashicorp.com/laravel/homestead
This box can work with multiple providers! The providers that it
can work with are listed below. Please review the list and choose
the provider you will be working with.

1) hyperv
2) parallels
3) virtualbox
4) vmware_desktop

Enter your choice: 3

实际安装过程中,安装过程总是很漫长,所以这里提供第二种安装方式

  1. 复制上一种安装方式中的box下载链接,使用迅雷或其他工具进行下载

    复制上一种安装方式中的box下载链接,使用迅雷或其他工具进行下载

  2. 下载完成后,修改文件名,建议如下格式:

     homestead-virtualbox-[版本号].box
     例如:homestead-virtualbox-2.0.0.box
    
  3. 在文件同级目录下面创建文件 metadata.json,内容如下:

     {
     "name": "laravel/homestead",
     "versions": 
     [
         {
             "version": "[版本号]",
             "providers": [
                 {
                   "name": "virtualbox",
                   "url": "/absoulute/path/to/homestead-virtualbox-[版本号].box"
                 }
             ]
         }
     ]
    

    }

  4. 添加box并检查

     # 添加
     vagrant box add /path/to/metadata.json
     # 检查
     vagrant box list
    

    操作如下图所示

    添加box并检查

克隆Homestead并初始化

克隆代码仓库,推荐在当前用户的根目录中进行

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

初始化,这个命令会创建 Homestead.yaml 文件,这个文件会被放置在 ~/.homestead 目录中:

bash init.sh

配置Homestead

  1. 配置共享文件夹

    Homestead.yaml 文件的 folders 属性里列出所有想与 Homestead 环境共享的文件夹。这些文件夹中的文件若有变更,它们将会在你的本机电脑与 Homestead 环境 自动更新同步 。可以在这里设置多个共享文件夹:

     folders:
     	- map: ~/Code
       	  to: /home/vagrant/Code
    

    若要启用 NFS,只需要在共享文件夹的设置值中加入一个简单的参数:

     folders:
     	- map: ~/Code
       	  to: /home/vagrant/Code
           type: "nfs"
    
  2. 配置站点信息

    sites 属性可以帮助你可以轻易指定一个 域名 来对应到 Homestead 环境中的一个目录上。在 Homestead.yaml 文件中已包含了一个网站设置范本。同样的,你也可以增加多个网站到你的 Homestead 环境中。Homestead 可以同时为多个 Laravel 应用提供虚拟化环境:

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

    如果你在 Homestead box 配置之后更改了 sites 属性,那么应该重新运行 vagrant reload --provision 来更新 Nginx 配置到虚拟机上。

    配置的站点域名

  3. 安装 MariaDB

    如果希望使用 MariaDB 来替换 MySQL,可以在 Homestead.yaml 文件中增加一个 mariadb 的选项,这个选项会移除 MySQL 并安装 MariaDB。因为 MariaDB 可用作 MySQL 的替代品,所以在数据库配置信息里,还是选用 mysql 配置项。

     box: laravel/homestead
     ip: "192.168.20.20"
     memory: 2048
     cpus: 4
     provider: virtualbox
     mariadb: true
    
  4. 连接端口

    以下本地电脑连接端口将会被转发至 Homestead 环境:

    • SSH:2222 → 转发至 22
    • HTTP:8000 → 转发至 80
    • HTTPS:44300 → 转发至 443
    • MySQL:33060 → 转发至 3306
    • Postgres:54320 → 转发至 5432

    如果需要的话,也可以修改 Homestead.yaml 借助指定连接端口的通信协议来转发更多额外的连接端口给 Vagrant box:

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

    在 Homestead 中,已经预装了 MySQLPostgres 两种数据库。如果想要从本机电脑上通过 Navicat 或者是 Sequel Pro 来连接数据库,可以通过 127.0.0.1 来使用端口 33060 (MySQL)54320 (Postgres) 连接。帐号密码分别是 homestead / secret

###相关操作

  1. 启动 Vagrant box

     cd Homestead 
     vagrant up
    
  2. 关闭 Vagrant box

     cd Homestead 
     vagrant halt
    
  3. 登录 Vagrant box

     cd Homestead 
     vagrant ssh
    
  4. 移除 Vagrant box

     cd Homestead 
     vagrant destroy --force
Laravel Homestead Vagrant

Laravel邮件、事件、队列浅谈全新安装Web环境、Composer、Laravel