简介

Laravel 致力于让你在 PHP 开发过程中更加轻松愉快,这其中也包括本地开发环境的搭建。 Vagrant 提供了一种简单、优雅的方式来管理和配置虚拟机。

Laravel Homestead 是一个官方预封装的 Vagrant box,它为你提供了一个完美的开发环境,你无需在本地安装 PHP ,web 服务器,或其他服务软件。 Vagrant box 是完全一次性的,你不用担心系统被搞乱!如果有什么地方出错了,你可以在几分钟内销毁并重建 box !

Homestead 可以运行在 Windows 、Mac 或 Linux 系统上,它里面包含了 Nginx Web 服务器、PHP 7.1 、MySQL 、Postgres 、Redis 、Memcached 、Node ,以及一些有利于你开发 laravel 应用的其他程序。

如果你使用的是 Windows 系统,你可能需要启用硬件虚拟化(VT-x)。这通常需要通过 BIOS 来启用它。如果你在一个 UEFI 系统上使用 Hyper-V,您可能还需要禁用 Hyper-V 才能启用 VT-x。

内置软件

  • Ubuntu 16.04
  • Git
  • PHP 7.1
  • Nginx
  • MySQL
  • MariaDB
  • Sqlite3
  • Postgres
  • Composer
  • Node (With Yarn, Bower, Grunt, and Gulp)
  • Redis
  • Memcached
  • Beanstalkd
  • Mailhog
  • ngrok

安装与设置

第一步

在你使用 Homestead 环境之前,你必须先安装 VirtualBox 5.1VMWare 或者 Parallels 中的一个,然后再安装 Vagrant。上述软件均提供了针对不同操作系统的可视化安装包。

若要使用 VMware provider,你需要同时购买 VMware Fusion / Workstation 以及 VMware Vagrant 插件 的软件授权,因为它们不是免费的。使用 VMware 的优势是:可以获得开箱即用的共享文件夹特性。

若要使用 Parallels provider,你需要安装 Parallels Vagrant 插件 ,这是免费的。

安装 Homestead Vagrant Box

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

vagrant box add laravel/homestead

如果上面的命令运行失败,请先确保你已经安装了最新版本的 Vagrant。

  • 如果使用国内网络,可以复制终端上显示的 homestead box 下载地址手动下载并重命名。例如重命名为 virtualbox-3.0.0.box。

然后,新建一个 metadata.json 文件,并写入以下示例内容:

{
"name": "laravel/homestead",
"versions":
[
{
"version": "3.0.0",
"providers": [
{
"name": "virtualbox",
"url": "virtualbox-3.0.0.box"
}
]
}
]
}

最后,使用以下命令手动添加 box

vagrant box add metadata.json # 添加 box
vagrant box list # 列出所有 box

安装 Homestead

你可以简单使用 Git 克隆代码仓库的方式来安装 Homestead。建议将克隆的代码仓库重命名为 Homestead ,并放置到你的「home」目录中,如此一来 Homestead box 就能作为主机,为你的所有 Laravel 项目提供服务:

cd ~

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

由于 Homestead 的 master 分支并不是稳定分支,你应该检出已经标签过的稳定版本。你可以在 Github Release Page 找到最新的稳定版本。

cd Homestead

// 检出所需要的版本...
git checkout v5.4.0

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

// Mac / Linux...
bash init.sh // Windows...
init.bat

配置 Homestead

配置你的提供者

Homestead.yaml 中的 provider 参数设置取决于你用的是哪一个 Vagrant 提供者 virtualbox 、vmware_fusion 、vmware_workstation 或者 parallels。你可以根据自己的实际情况来设置提供者:

provider: virtualbox

配置共享文件夹

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

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

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

folders:
- map: ~/Code
to: /home/vagrant/Code
type: "nfs"
  • 如果使用 NFS ,建议你安装 vagrant-bindfs 插件。 这个插件会替你处理 box 中的文件或目录权限问题。

你也可以在配置中传递任何 Vagrant 共享文件夹 支持的参数,在 options 配置项下列出它们:

folders:
- map: ~/Code
to: /home/vagrant/Code
type: "rsync"
options:
rsync__args: ["--verbose", "--archive", "--delete", "-zz"]
rsync__exclude: ["node_modules"]

配置 Nginx 站点

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

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

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

关于 Hosts 文件

你必须将在 Nginx sites 中所添加的「域名」也添加到你本机电脑的 hosts 上。 hosts 文件会将请求重定向至 Homestead 环境中设置的本地域名。在 Mac 或 Linux 上,该文件通常会存放在 /etc/hosts。在 Windows 上,则存放于 C:\Windows\System32\drivers\etc\hosts。设置内容如下所示:

192.168.10.10  homestead.app

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

http://homestead.app

启动 Vagrant Box

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

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

为每个项目分开安装

除了在全局范围内安装 Homestead 环境,所有项目共享相同的 Homestead box 外,你还可以为每一个项目配置一个独立的 Homestead 实例。通过传递 Vagrantfile ,可以实现为每个项目分别安装上 Homestead ,其他项目成员只需要通过简单的 vagrant up 即能跟你拥有一样的 Homestead 环境。

要将 Homestead 直接安装到项目中,需要使用 Composer:

composer require laravel/homestead --dev

一旦 Homestead 安装完毕,可以使用 make 命令生成 Vagrantfile 与 Homestead.yaml 文件,并存放于项目的根目录。make 命令将会自动在 Homestead.yaml 文件中配置 sites 及 folders

Mac / Linux:

php vendor/bin/homestead make

Windows:

vendor\\bin\\homestead make

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

如果你希望使用 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
  • 安装 MariaDB 需要连接境外网络,请确保网络畅通!

常见用法

全局使用

有时候你希望在文件系统的任何地方都可以使用 vagrant up 命令启动虚拟机,那么你需要添加以下代码到你的 Mac / Linux 系统的 Bash profile 文件里面。对于 Windows 系统,您可以通过在 PATH 环境变量中添加「批处理」文件的方式来实现此目的。下面这些脚本让你可以在文件系统的任何位置都能运行 Vagrant 命令,它相当于切换到 Homestead 目录运行 Vagrant 命令:

Mac / Linux
function homestead() {
( cd ~/Homestead && vagrant $* )
}

请将 ~/Homestead 这个路径修改为你的实际 Homestead 的安装路径,一旦这个函数安装成功,就可以在系统的任意位置运行 homestead up 或 homestead ssh 命令。

Windows

在系统的任意位置创建一个批处理文件 homestead.bat ,并添加如下内容:

@echo off

set cwd=%cd%
set homesteadVagrant=C:\Homestead cd /d %homesteadVagrant% && vagrant %*
cd /d %cwd% set cwd=
set homesteadVagrant=

请确保将 C:\Homestead 这个路径修改为你的实际 Homestead 的安装路径,创建完这个文件后,将这个文件路径添加到 PATH 环境变量中,就可以在系统的任意位置运行 homestead up 或 homestead ssh 命令。

通过 SSH 连接

你可以在 Homestead 目录运行 vagrant ssh 命令来连接虚拟主机。

但是,由于您可能需要频繁地使用 SSH 来连接 Homestead 主机,请考虑将上述「function」添加到你的主机,以便可以快速的通过 SSH 进入你的 Homestead box

连接数据库

在 box 中已经为 MySQL 和 Postgres 配置好了一个开箱即用的数据库 homestead ,为了更方便的使用它,Laravel 中的 .env 文件将这个数据库设置成了框架默认使用的数据库。

如果想要从你主机上的数据库客户端连接 MySQL 或 Postgres,可以通过 127.0.0.1 来使用端口 33060(MySQL) 或 54320(Postgres) 连接。账号密码分别是 homestead / secret

  • 因为虚拟机做了端口转发,所以在本机电脑上你应当只使用这些非标准的连接端口。但在 Laravel 数据库配置文件中,你依然要使用默认的 3306 及 5432 连接端口。

增加更多网站

一旦 Homestead 环境配置完毕且成功运行后,你可能会想要为 Laravel 应用程序增加更多的 Nginx 网站。你可以在单个 Homestead 环境中运行多个 Laravel 程序。要添加额外的网站,只需将网站配置信息添加到您的 Homestead.yaml 文件中:

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

如果 Vagrant 没有自动管理你的「hosts」文件,你可能需要手动把新增的站点加入到「hosts」文件中:

192.168.10.10  homestead.app
192.168.10.10 another.app

当你的网站添加完成后,切换到 Homestead 目录运行 vagrant reload --provision 命令就可以应用新的更改。

网站类型

Homestead 支持多种类型的网站,允许您轻松地运行那些不基于 Laravel 的项目。 例如,我们可以使用「symfony2」配置项,轻松地在 Homestead 中添加 Symfony 应用程序:

sites:
- map: symfony2.app
to: /home/vagrant/Code/Symfony/web
type: symfony2

支持的站点类型有: apache、laravel(默认)、proxy、silverstripe、statamic、symfony2 和 symfony4。

网站参数

你还可以使用「params」配置项,添加额外的 Nginx fastcgi_param 值到你的网站。例如添加一个名称为「FOO」值为「BAR」的额外配置。

sites:
- map: homestead.app
to: /home/vagrant/Code/Laravel/public
params:
- key: FOO
value: BAR

配置 Cron 调度器

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

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

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

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

端口

默认情况下,以下本地电脑端口将会被转发至 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
  • Mailhog: 8025 → Forwards To 8025

转发更多端口

如果需要的话,你可以转发更多端给 Vagrant box ,甚至可以指定它们的协议类型。

ports:
- send: 50000
to: 5000
- send: 7777
to: 777
protocol: udp

共享你的环境

有时候你想跟你的同事或者是客户共享你目前的工作进度。Vagrant 为此提供了一个内置方法 vagrant share;不过,如果你在 Homestead.yaml 文件中配置了多个站点,那么这条命令将会变得没多大用处。

为了解决这个问题,Homestead 提供了自己的 share 命令。开始之前,通过 vagrant ssh 命令 SSH 进你的 Homestead 机器中,然后运行 share homestead.app。这会从你的 Homestead.yaml 配置文件中共享 homestead.app 站点。当然了,你也可以用其他已经配置的站点来代替 homestead.app。

share homestead.app

运行完命令之后,你可以看到一个包含活动日志和共享站点外网访问路径的 Ngrok 界面。如果你想要自定义地区或者其他 Ngrok 选项,你可以添加到 share 命令后面:

share homestead.app -region=eu -subdomain=laravel
  • 谨记,Vagrant 本质上是不安全的,当你运行 share 命令的时候,你会把你的虚拟机暴露在互联网中。

多个 PHP 版本

  • 这个特性仅与 Nginx 兼容。

Homestead 6 支持在同一个虚拟机上引入多个不同版本的 PHP。您需要在 Homestead.yaml 配置文件中为某个站点指明需要使用的 PHP 版本即可。 可用的 PHP 版本有:「5.6」、「7.0」、「7.1」

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

此外,您还可以通过 CLI 使用任何支持的 PHP 版本:

php5.6 artisan list
php7.0 artisan list
php7.1 artisan list

网络接口

Homestead.yaml 文件里的 networks 配置项允许你为 Homestead 环境配置网络接口。您可以根据需要配置任意数量的接口:

networks:
- type: "private_network"
ip: "192.168.10.20"

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

networks:
- type: "public_network"
ip: "192.168.10.20"
bridge: "en1: Wi-Fi (AirPort)"

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

networks:
- type: "public_network"
bridge: "en1: Wi-Fi (AirPort)"

更新 Homestead

你可以简单的用两个步骤来更新 Homestead ,第一步,使用 vagrant box update 命令更新 Vgrant box :

vagrant box update

接下来。你需要更新 Homestead 的源代码,如果你是通过克隆仓库的方式来安装的 Homestead ,你可以在你最初克隆仓库的位置简单的运行 git pull origin master 命令。

如果你已经通过你的项目中的 composer.json 文件安装了 Homestead ,你应该确认你的 composer.json 文件中是否包含 "laravel/homestead: "^4" 并且还要更新依赖:

composer update

历史版本

如果你需要一个旧版本的 PHP ,请在尝试使用旧版本 Homestead 之前,先阅读文档 多个 PHP 版本

你可以通过添加以下配置到你的 Homestead.yaml 文件来方便的覆盖 Homestead 使用的 box 版本:

version: 0.6.0

例如:

box: laravel/homestead
version: 0.6.0
ip: "192.168.20.20"
memory: 2048
cpus: 4
provider: virtualbox

当你使用旧版本的 box 时,你需要确保 Homestead 源代码的版本与之对应,下面的图表展示了支持的 box 版本,以及与之对应的 Homestead 的源代码版本和 box 所提供的 PHP 版本:

  Homestead Version Box Version
PHP 7.0 3.1.0 0.6.0
PHP 7.1 4.0.0 1.0.0

Provider 的特殊设置

VirtualBox

Homestead 默认将 natdnshostresolver 设置为 on。这允许 Homestead 使用你的主机系统中的 DNS 设置。如果你想重写这行为,你可以在你的 Homestead.yaml 文件中添加下面这几行:

provider: virtualbox
natdnshostresolver: off

译者署名

用户名 贡献
WangYan 翻译

原文链接:http://shouce.jb51.net/laravel-5-5/source/homestead.html#configuring-homestead

作者:曼巴童鞋
链接:https://www.jianshu.com/p/ef5287448ef2
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

Laravel 虚拟开发环境 Homestead的更多相关文章

  1. Laravel 虚拟开发环境 Homestead 密码

    默认数据库账号密码账号: homestead 密码:secret 默认 ssh 账号密码账号:vagrant 密码:vagrant创建默认 root 用户sudo passwd root

  2. Python虚拟开发环境

    最近,一直在不同版本的Python之间来回折腾,发现了几个Python虚拟开发环境工具,具体如下: 1. Virtualenv,可以指定开发环境的Python版本.继承已有开发环境配置,virtual ...

  3. 使用Anaconda3配置多版本Python虚拟开发环境

    有时候,为了使用比较干净的开发环境,或者为了测试一些版本的扩展库,我们可能需要创建虚拟开发环境,在不同的虚拟开发环境中,只安装需要的扩展库,这样可以最大程度上减少不同扩展库之间的兼容性带来的冲突或其他 ...

  4. 在windows下使用多版本Python安装相应的虚拟开发环境

    在windows下面使用多版本Python安装相应的虚拟开发环境   在搭建一个项目的时候,希望使用最新版的Python3.7版本,但是Python3.6的版本也要留下,那么问题来了,如何解决这个问题 ...

  5. 用pyenv和virtualenv搭建单机多版本python虚拟开发环境

    作为主流开发语言, 用python 开发的程序越来越多. 方便的是大多linux系统里面都默认集成了python, 开发可以随时随地开始. 但有时候这也成为了一个短板, 比如说有时候我们需要开发和调试 ...

  6. Python虚拟开发环境pipenv

    简介 requests库的作者,requests库的作者,requests库的作者(重要的事情说三遍)的又一力作,囊落了virtualenv, pip, pipfile等作为虚拟开发环境的命令行工具 ...

  7. 用pyenv 和 virtualenv 搭建单机多版本python 虚拟开发环境

    作为主流开发语言, 用python 开发的程序越来越多. 方便的是大多linux系统里面都默认集成了python, 开发可以随时随地开始. 但有时候这也成为了一个短板, 比如说有时候我们需要开发和调试 ...

  8. python虚拟开发环境搭建(virtualenv和virtualenvwrapper)

    虚拟开发环境的搭建 (0) 搭建虚拟环境的意义 使不同的开发环境独立 环境升级不影响其他开发环境,也不影响全局 防止包管理的混乱 (1) 指定 虚拟环境的创建目录 环境变量设置 创建 WORKON_H ...

  9. Windows使用Vagrant&VirtualBox搭建虚拟开发环境

    Vagrant 是一款用来构建虚拟开发环境的工具 , 我们可以通过 Vagrant 封装一个 Linux 的开发环境 , 分发给团队成员 ; 成员可以在自己喜欢的桌面系统 Mac/Windows/Li ...

随机推荐

  1. [转]基于MefBootstrapper的Bootstrapper

    public class Bootstrapper : MefBootstrapper    {        ModuleCatalog moduleCatalog; protected overr ...

  2. 工控安全入门(四)—— DNP3协议

    我们之前看过了法国施耐德的Modbus.德国西门子的S7comm,这次就让我们把目光投到美洲,看看加拿大的HARRIS的DNP3有什么特别之处. 这次选用的流量包部分来自w3h的gitbub: htt ...

  3. css3之文本和颜色功能之text-shadow

    总本看一下 1.text-shadow 语法:text-shadow: h-shadow v-shadow blur color; h-shadow: 必需.水平阴影的位置.允许负值. v-shado ...

  4. python时间处理,datetime中的strftime/strptime

    python中datetime模块非常好用,提供了日期格式和字符串格式相互转化的函数strftime/strptime 1.由日期格式转化为字符串格式的函数为: datetime.datetime.s ...

  5. springcloud:RPC和HTTP

    1.RPC和HTTP 无论是微服务还是SOA,都面临着服务间的远程调用.那么服务间的远程调用方式有哪些呢? 常见的远程调用方式有以下2种: RPC:Remote Produce Call远程过程调用, ...

  6. LA3902 Networlk

    Network Consider a tree network with n nodes where the internal nodes correspond to servers and the ...

  7. Stream的去重排序

    1.List<Integer>排序 List<Integer> list = new ArrayList<>();list.add(50);list.add(25) ...

  8. Docx 生成word文档

    1.生成word代码 /// <summary> /// 生成word文档 /// </summary> /// <param name="tempPath&q ...

  9. Django项目:CRM(客户关系管理系统)--53--44PerfectCRM实现账号快速注册登陆

    # gbacc_ajax_urls.py # ————————42PerfectCRM实现AJAX全局账号注册———————— from django.conf.urls import url fro ...

  10. TZ_05_Spring_事物的xml开发和annotation开发

    1.Spring_事物的xml开发 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=& ...