Laravel Homestead

    Laravel 致力于让 PHP 的开发过程变得更加轻松愉快,这其中也包括你的本地开发环境。

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

    Homestead 可以在 Windows、Mac 或 Linux 系统上面运行,里面包含了 Nginx Web 服务器、PHP 7.0、MySQL、Postgres、Redis、Memcached、Node,以及所有你在使用 Laravel 开发时所需要用到的各种软件。

    • Ubuntu 16.04
    • Git
    • PHP 7.0
    • Nginx
    • MySQL
    • MariaDB
    • Sqlite3
    • Postgres
    • Composer
    • Node (With PM2, Bower, Grunt, and Gulp)
    • Redis
    • Memcached
    • Beanstalkd

    第一步

    在你启动 Homestead 环境之前,须先安装 VirtualBox 5.x 或 以及 Vagrant。这些软件在各个常用的平台都有提供简单易用的界面安装包。

    若要使用 VMware provider,你需要同时购买 VMware Fusion / Workstation 以及 的软件授权。使用 VMware 可以在共享文件夹上获得较快的性能。

    安装 Homestead Vagrant box

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

    如果上面的命令运行失败,代表你使用的可能是旧版的 Vagrant,请升级你的 Vagrant。

    安装 Homestead

    你可以通过手动克隆代码仓库的方式来安装 Homestead。建议将代码仓库克隆至「home」目录中的 Homestead 文件夹,如此一来 Homestead box 就能将主机服务提供给你所有的 Laravel 项目:

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

    一旦你克隆完 Homestead 的代码仓库,即可在 Homestead 目录中运行 bash init.sh 命令来创建 Homestead.yaml 配置文件。Homestead.yaml 文件将会被放置在你的 ~/.homestead 目录中:

    1. bash init.sh

    配置 Homestead

    配置你的提供者

    Homestead.yaml 文件中的 provider 参数设置取决于你用的是哪一个 Vagrant 提供者:virtualboxvmware_fusionvmware_workstation。你可以根据自己的喜好来设置提供者:

    1. provider: virtualbox

    配置共享文件夹

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

    1. folders:
    2. - map: ~/Code
    3. to: /home/vagrant/Code

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

    1. folders:
    2. - map: ~/Code
    3. type: "nfs"

    配置 Nginx 网站

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

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

    关于 Hosts 文件

    1. 192.168.10.10 homestead.app

    务必确认 IP 地址与 Homestead.yaml 文件中设置的相同。将域名设置在 文件之后,你就可以通过网页浏览器访问你的网站。

    1. http://homestead.app

    启动 Vagrant box

    编辑完 Homestead.yaml 后,在命令行里进入你的 Homestead 目录并运行 vagrant up 命令。Vagrant 就会根据 Homestead.yaml 里的配置信息,为虚拟机设置共享文件夹和 Nginx 网站。

    如果要移除虚拟机,可以使用 vagrant destroy --force 命令。

    除了全局使用同一个 Homestead 环境,Homestead 还允许你为项目独立配置一个独占的 Homstead。

    通过传递 Vagrantfile,可以实现为每个项目分别安装上 Homestead,其他项目成员只需要通过简单的 vagrant up 即能跟你拥有一样的 Homestead 环境。

    使用 Composer 将 Homestead 直接安装至项目中:

    1. composer require laravel/homestead --dev

    一旦 Homestead 安装完毕,可以使用 make 命令生成 VagrantfileHomestead.yaml 文件,并存放于项目的根目录。

    这个 make 命令将会自动在 Homestead.yaml 文件中配置 sitesfolders

    Mac / Linux:

    1. php vendor/bin/homestead make

    Windows:

    1. vendor\\bin\\homestead make

    接着,在命令行中运行 vagrant up 并通过网页浏览器访问 http://homestead.app。再次提醒,你仍然需要在 /etc/hosts 里配置 homestead.app 或其它想要使用的域名。

    安装 MariaDB

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

    全局使用

    如果你希望在文件系统的任何地方都可以 vagrant up 开启 Homestead 虚拟机,你可以把以下代码放到你的 Bash profile 里面,这个函数允许你在文件系统的任何位置都可以对 Homestead 运行 Vagrant 命令:

    1. function homestead() {
    2. ( cd ~/Homestead && vagrant $* )
    3. }

    请确定 ~/Homestead 这个路径跟你的实际 Homestead 的安装路径一致,一旦这个函数安装成功,你即可自由的在任何文件系统位置中使用 homestead uphomestead ssh

    通过 SSH 连接

    你可能会经常需要使用 SSH 来连接 Homestead 主机,建议你可以在本机电脑上创建一个「别名」以便快速连接 Homestead box。

    Homestead 中,已经预装了 MySQL 与 Postgres 两种数据库。为了方便使用,Laravel 在 .env 的默认数据库设置中已经将其设置好了。

    如果想要从本机电脑上通过 Navicat 或者是 Sequel Pro 来连接数据库,可以通过 127.0.0.1 来使用端口 (MySQL) 或 54320 (Postgres) 连接。帐号密码分别是 homestead / secret

    增加更多网站

    一旦 Homestead 环境配置完毕且成功运行后,你可能会想要为 Laravel 应用程序增加更多的 Nginx 网站。你可以在单个 Homestead 环境中运行多个 Laravel 程序。在 Homestead.yaml 文件中增加另一个网站的设置后,进入 Homestead 目录并运行 vagrant provision 命令,即可新增一个网站。

    配置 Cron 调度器

    Laravel 提供了便利的方式来 调度 Cron 任务,通过 schedule:run Artisan 命令,调度便会在每分钟被运行。schedule:run 命令会检查定义在你 App\Console\Kernel 类中调度的任务,判断哪个任务该被运行。

    如果你想为 Homestead 网站使用 schedule:run 命令,你可以在定义网站时将 schedule 选项设置为 true

    1. sites:
    2. - map: homestead.app
    3. to: /home/vagrant/Code/Laravel/public
    4. schedule: true

    该网站的 Cron 任务会被定义在虚拟机的 /etc/cron.d 文件夹中。

    连接端口

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

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

    转发更多连接端口

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

    1. ports:
    2. - send: 93000
    3. to: 9300
    4. - send: 7777
    5. to: 777
    6. protocol: udp

    Homestead.yaml 文件里的 networks 配置项允许你为 Homestead 环境配置网络接口。你可以任意配置多个网络接口:

    1. networks:
    2. - type: "private_network"
    3. ip: "192.168.10.20"

    想要配置一个 接口的话,增加 bridge 配置项,然后 type 填写为 public_network

    1. networks:
    2. - type: "public_network"
    3. ip: "192.168.10.20"

    想要配置一个 DHCP, 接口的话,请从配置中移除 ip选项: