Laravel Homestead 的安装和使用

Homestead 可以运行在 Windows、Mac 以及 Linux 等主流操作系统上,预装的软件和工具列表如下:

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

注:如果你使用的是 Windows,需要开启系统的硬件虚拟化(VT-x),这通常可以通过 BIOS 来开启。如果你是在 UEFI 系统上使用 Hyper-V,则需要关闭 Hyper-V 以便可以访问 VT-x。

准备

先下载安装VirtualBoxVagrant

安装及配置

以下命令本人使用的是git bash

1、安装

使用Vagrant安装Homestead盒子

命令:

vagrant box add laravel/homestead

这里写图片描述

安装过程需要较长时间(取决于你的网络连接速度),并且容易网络中断。
推荐:
复制上面图片中的下载地址并用迅雷下载(下载之后的名字可能是一串乱码
通过这种方式下载的话需要手动将其添加到 Vagrant:

vagrant box list
vagrant box remove laravel/homestead  --all

vagrant box add laravel/homestead 下载文件的路径

运行上述命令有可能报错:

Check your Homestead.yaml file, the path to your private key does not exist.

解决办法如下:

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
eval "$(ssh-agent -s)"
ssh-add -K ~/.ssh/id_rsa

再次运行上述命令即可添加成功

添加成功提示

==> box: Successfully added box 'laravel/homestead' (v0) for 'virtualbox'!

安装 Homestead

你可以通过克隆仓库代码来实现 Homestead 安装。将仓库克隆到用户目录下的 Homestead 目录,这样 Homestead 盒子就可以作为所有其他 Laravel 项目的主机:

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

克隆完成后,你需要检查 Homestead 的版本标签,因为 master 分支不会总是稳定版本,你可以在 GitHub Release Page 查找到最新稳定版本然后在本地将其检出:

cd Homestead

// Clone the desired release...
git checkout v6.1.0

接下来,在 Homestead 目录下运行 bash init.sh 命令来创建 Homestead.yaml 配置文件,生成的 Homestead.yaml 配置文件文件位于当前 Homestead 目录:

// Mac/Linux... windows下使用git bash也使用下面的命令
bash init.sh

// Windows...
init.bat

2、配置 Homestead

这里写图片描述

设置 Provider

Homestead.yaml 文件中的 provider 键表示使用哪个 Vagrant 提供者:virtualbox、vmware_fushion、 vmware_workstation 或 parallels,你可以将其设置为自己喜欢的提供者,当然对大部分人来说也没得选:

provider: virtualbox

配置共享文件夹

Homestead.yaml 文件中的 folders 属性列出了所有主机和 Homestead 虚拟机共享的文件夹,一旦这些目录中的文件有了修改,将会在本地和 Homestead 虚拟机之间保持同步,如果有需要的话,你可以配置多个共享文件夹:

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

如果要开启 NFS,只需简单添加一个标识到同步文件夹配置:

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

注:使用 NFS 的话,需要考虑安装 vagrant-bindfs 插件。该插件可用于在 Homestead 盒子中为文件和目录维护正确的用户/组权限。

你还可以通过 options 传递其他 Vagrant 支持的同步文件夹选项:

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

配置 Nginx 站点

对 Nginx 不熟?没关系!通过 sites 属性你可以方便地将“域名”映射到 Homestead 虚拟机的指定目录,Homestead.yaml 中默认已经配置了一个示例站点。和共享文件夹一样,你可以配置多个站点:

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

如果你是在 Homestead 盒子启动之后进行了上述修改,需要运行 vagrant reload –provision 更新虚拟机上的 Nginx 配置。

Hosts文件

不要忘记把 Nginx 站点配置中的域名添加到本地机器上的 hosts 文件中,该文件会将对本地域名的请求重定向到 Homestead 虚拟机,在 Mac 或 Linux上,该文件位于 /etc/hosts,在 Windows 上,位于 C:\Windows\System32\drivers\etc\hosts,添加方式如下:

192.168.10.10 firm.cn

确保 IP 地址和你的 Homestead.yaml 文件中列出的一致,一旦你将域名添加到 hosts 文件,就可以在浏览器中通过该域名访问站点了:

http://firm.cn

注:在真正可以访问之前之前还需要通过 Vagrant 启动虚拟机上的 Homestead 盒子。

启动 Vagrant Box

配置好 Homestead.yaml 文件后,在 Homestead 目录下运行 vagrant up 命令,Vagrant 将会启动虚拟机并自动配置共享文件夹以及 Nginx 站点,初次启动需要花费一点时间进行初始化:

vagrant up

报错1:

蓝屏重启

没有关闭Hyper-V和VT-x冲突

控制面板→程序→启用或关闭Windows功能 将Hyper-V以及子项全部去掉勾选就行了。确定后记得重新启动

报错2:

Check your Homestead.yaml file, the path to your private key does not exist.

运行命令:

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
eval "$(ssh-agent -s)"
ssh-add -k ~/.ssh/id_rsa

报错3:

Failed to connect to vagrantcloud-files-production.s3.amazonaws.com port 443: Timed out

Vagrant没有发现 laravel/homestead 这个Box虚拟机,这是因为版本的问题

进入Homestead目录下
vim scripts/homestead.rb
修改:config.vm.box_version = settings["version"] ||= ">= 0.4.0" 
为 config.vm.box_version = settings["version"] ||= ">= 0"

报错4:

Path: C:/Users/Administrator/.vagrant.d/data/machine-index/index

进入上面提示的目录删除 index 和index.lock

启动之后,就可以在浏览器中访问配置的站点 http://firm.cn

No input file specified.  说明配置成功

要登录到该虚拟机,使用 vagrant ssh 命令;关闭该虚拟机,可以使用 vagrant halt 命令;销毁该虚拟机,可以使用 vagrant destroy –force 命令。

可选操作

为指定项目安装 Homestead

全局安装 Homestead 将会使每个项目共享同一个 Homestead 盒子,你还可以为每个项目单独安装 Homestead,这样就会在该项目下创建 Vagrantfile,允许其他人在该项目中执行 vagrant up 命令,在指定项目根目录下使用 Composer 执行安装命令如下:

composer require laravel/homestead --dev

这样就在项目中安装了 Homestead。Homestead 安装完成后,使用 make 命令生成 Vagrantfile 和 Homestead.yaml 文件,make 命令将会自动配置 Homestead.yaml 中的 sites 和 folders 属性。该命令执行方式如下:

Mac/Linux:

php vendor/bin/homestead make

Windows:

vendor\bin\homestead make
或者
vendor\\bin\\homestead make

接下来,在终端中运行 vagrant up 命令然后在浏览器中通过 http://homestead.app 访问站点。不要忘记在 /etc/hosts 文件中添加域名 homestead.app(已配置的话忽略)。

日常使用

全局访问 Homestead

要想在文件系统的任意路径都能够运行 vagrant up 启动 Homestead 虚拟机,在 Mac/Linux 系统中,可以添加 Bash 函数到 ~/.bash_profile;在 Windows 系统上,需要添加“批处理”文件到 PATH。这些脚本允许你在系统的任意位置运行 Vagrant 命令,并且把命令执行位置指向 Homestead 的安装路径。

Mac/Linux

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

确保将该函数中的 ~/Homestead 路径调整为指向实际的 Homestead 安装路径。这样你就可以在系统的任意位置运行 homestead up 或 homestead ssh 来启动/登录虚拟机

补充知识点:/etc/profile 和 ~/.bash_profile 都可以用来设置系统 PATH,不同之处在于前者是给系统超级用户使用,后者是给普通登录用户使用的,此外要让 ~/.bash_profile 修改后生效,有两种方法,一种是退出系统重新登录,一种是使用 source ~/.bash_profile 命令。

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,也可以在任意路径下通过 homestead ssh 登录到虚拟机。

如果你需要以更简捷的方式连接到 Homestead,可以为主机添加一个别名来快速连接到 Homestead 盒子,创建完别名后,可以使用 vm 命令从任何地方以 SSH 方式连接到 Homestead 虚拟机:

alias vm="ssh vagrant@127.0.0.1 -p 2222"

连接到数据库

Homestead 默认已经在虚拟机中为 MySQL 和 Postgres 数据库做好了配置,更方便的是,这些配置值与 Laravel 的 .env 中默认提供的配置一致。

想要通过本地的 Navicat 或 Sequel Pro 连接到 Homestead 上的 MySQL 或 Postgres 数据库,可以通过新建连接来实现,主机 IP 都是 127.0.0.1,对于 MySQL 而言,端口号是 33060,对 Postgres 而言,端口号是 54320,用户名/密码是 homestead/secret

这里写图片描述

站点类型

Homestead 支持多种框架,所以即使你没有使用 Laravel 的话,也可以使用 Homestead,例如,我们可以通过 symfony2 站点类型轻松添加一个 Symfony 应用:

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

目前支持的站点类型包括 apache、laravel、proxy、silverstripe、statamic、symfony2 和 symfony4。

配置 Cron 调度任务

Laravel 提供了很方便的方式来调度 Cron 任务:只需每分钟调度运行一次 Artisan 命令 schedule:run 即可。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 目录下:

这里写图片描述

分享你的环境

有时候你可能希望和同事或客户分享自己当前的工作进度或成果
登录虚拟机运行命令

share firm.cn  //配置的站点

运行完该命令之后,你就可以看到一个 Ngrok 界面出现,其中包含活动日志和分享站点所需的公开访问 URL:

这里写图片描述

可以看到我的分享 URL 是 http://95920d84.ngrok.io/ 以及 https://95920d84.ngrok.io/,你可以通过这两个域名在任意联网机器上访问我的 Homestead 站点:

这里写图片描述

如果你想要指定一个自定义的区域,子域名或者其他 Ngrok 运行时选项,可以将它们添加到 share 命令:

share homestead.app -region=us -subdomain=laravel

目前自定义域名只有付费用户才可以使用,所以 subdomain 会提示不可用。

注:记住两个点,一个是 Vagrant 并没有什么特别的安全防范措施,另一个是当你运行 share 命令的时候,你其实是在将自己的虚拟机曝光到互联网上。所以,当你要分享自己的站点之前,先想想安全隐患,并将其规避掉。


参考链接

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容