Laravel Homestead 的安装和使用

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

启动之后,就可以在浏览器中访问配置的站点 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 命令然后在浏览器中通过 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 是 95920d84.ngrok.io/ 以及 95920d84.ngrok.io/,你可以通过这两个域名在任意联网机器上访问我的 Homestead 站点:

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

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

复制代码

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

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


参考链接

转载于:https://juejin.im/post/5aa7702d5188255574595df3

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/107655.html原文链接:https://javaforall.net

(0)
上一篇 2022年3月13日 下午3:00
下一篇 2022年3月13日 下午3:35


相关推荐

  • struts2和springMVC的区别

    struts2和springMVC的区别1 拦截器级别不同 Struts2 是类级别的拦截 一个类对应一个 request 上下文 SpringMVC 是方法级别的拦截 一个方法对应一个 request 上下文 而方法同时又跟一个 url 对应 所以说从本身上 SpringMVC 就容易实现 restfulurl 而 struts2 的架构实现起来要费劲 因为 Struts2 中 Action 的一个方法可以对应一个 url 而其类属性却被所有方法共享 这也就无法用注解或其他方式标识其所属方法了 2 由上边原因 SpringMVC 的方法之间基本上独立的 独享 requestr

    2026年3月18日
    3
  • 从零开始:一台空白 Linux 服务器部署 OpenClaw 完整教程

    从零开始:一台空白 Linux 服务器部署 OpenClaw 完整教程

    2026年3月13日
    2
  • java 实用 代码_java新手实用代码有哪些?java新手代码大全「建议收藏」

    java 实用 代码_java新手实用代码有哪些?java新手代码大全「建议收藏」对于java新手来说,积累一些实用的基础代码还是很有必要的,毕竟写代码是需要实践以及积累的,那么接下来,我们就来给大家分享一些java新手代码给大家参考!1.字符串有整型的相互转换Stringa=String.valueOf(2);//integertonumericstringinti=Integer.parseInt(a);//numericstringtoan…

    2022年6月21日
    31
  • pycharm使用anaconda虚拟环境_conda和anaconda

    pycharm使用anaconda虚拟环境_conda和anacondapycharm加载anconda创建的虚拟环境一、环境​ 1、虚拟环境为xy01,python版本为3.7。二、流程​ 1、首先点击pycharm左上方File->settings,得到如下界面,再点击右上方红框,再点击add。​ 2、得到如下界面,点击左边的condaenvironment,选择existingenvironment,再选择创建的虚拟环境,最后点击OK,则pycharm已经加载新创建的conda虚拟环境。…

    2022年8月27日
    8
  • IIC协议详解

    IIC协议详解软件模拟 IIC 程序代码详解概述 通过 stm32 模拟 IIC 协议读取传感器 86BSD 压力传感器的压力值和温度值数据 利用通信波形来深入理解 IIC 协议 MCU STM32F103 从设备地址 0x28 利用逻辑分析仪进行波形分析 IIC 协议简介 I2C 总线是由 Philips 公司开发的一种简单 双向二线制同步串行总线 它只需要两根线即可在连接于总线上的器件之间传送信息 IIC 接口介绍 SDA 串行数据线 总线空闲时为高电平 SCL 串行时钟线 总线空闲时为高电平 注意 SDA SC

    2026年3月18日
    2
  • 创建MDI窗体

    创建MDI窗体创建 MDI 窗体 nbsp 2011 07 0116 12 31 转载 标签 nbsp 杂谈 nbsp 创建 MDI 窗体时 有 3 个主要步骤 分别为 创建 MDI 父窗体 创建 MDI 子窗体和从父窗体调用子窗体 1 创建 MDI 父窗体创建 MDI 父窗体的步骤如下 1 依次选择 开始 所有程序 MicrosoftVis

    2026年3月18日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号