Windows下Laravel Homestead的安装和使用

时间:2024-10-03 06:58:31

文章目录

  • 简介
  • 准备
  • 安装及配置
    • 1、安装
      • 使用Vagrant安装Homestead盒子
      • 安装 Homestead
    • 2、配置 Homestead
      • 设置 Provider
      • 配置共享文件夹
      • 配置 Nginx 站点
      • Hosts文件
  • 启动 Vagrant Box
  • 可选操作
    • 为指定项目安装 Homestead
      • Mac/Linux
      • Windows
    • 通过 SSH 连接
    • 连接到数据库
    • 站点类型
    • 配置 Cron 调度任务
    • 分享你的环境

简介

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

问题:
1、安装Vagrant报2503、2502
管理员身份运行cmd并输入命令:

	msiexec /package msi文件路径加文件名
  • 1

安装及配置

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

1、安装

使用Vagrant安装Homestead盒子

命令:

vagrant box add laravel/homestead
  • 1

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

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

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

Check your  file, the path to your private key does not exist.
  • 1

解决办法如下:

ssh-keygen -t rsa -b 4096 -C "your_email@"
eval "$(ssh-agent -s)"
ssh-add -K ~/.ssh/id_rsa
  • 1
  • 2
  • 3

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

添加成功提示

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

安装 Homestead

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

cd ~
git clone /laravel/ Homestead
  • 1
  • 2

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

cd Homestead

// Clone the desired release...
git checkout v6.1.0
  • 1
  • 2
  • 3
  • 4

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

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

// Windows...

  • 1
  • 2
  • 3
  • 4
  • 5

2、配置 Homestead

这里写图片描述

设置 Provider

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

provider: virtualbox
  • 1

配置共享文件夹

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

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

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

folders:
    - map: ~/Development
      to: /home/vagrant/Code
      type: "nfs"
  • 1
  • 2
  • 3
  • 4

注:使用 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"]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

配置 Nginx 站点

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

sites:
    - map: 
      to: /home/vagrant/Code/Laravel/public
    - map: 
      to: /home/vagrant/laravelapp/firm/public
  • 1
  • 2
  • 3
  • 4
  • 5

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

Hosts文件

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

192.168.10.10 
  • 1

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


  • 1

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

启动 Vagrant Box

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

vagrant up
  • 1

报错1:

蓝屏重启
  • 1

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

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

报错2:

Check your  file, the path to your private key does not exist.
  • 1

运行命令:

ssh-keygen -t rsa -b 4096 -C "your_email@"
eval "$(ssh-agent -s)"
ssh-add -k ~/.ssh/id_rsa
  • 1
  • 2
  • 3

报错3:

Failed to connect to vagrantcloud-files-production. port 443: Timed out
  • 1

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

进入Homestead目录下
vim scripts/
修改:.box_version = settings["version"] ||= ">= 0.4.0" 
为 .box_version = settings["version"] ||= ">= 0"
  • 1
  • 2
  • 3
  • 4

报错4:

Path: C:/Users/Administrator/./data/machine-index/index
  • 1

进入上面提示的目录删除 index 和
报错5:

This Vagrant environment has specified that it requires the Vagrant
version to satisfy the following version requirements:

 >= 2.1.0

You are running Vagrant 2.0.1, which does not satisfy
these requirements. Please change your Vagrant version or update
the Vagrantfile to allow this Vagrant version. However, be warned
that if the Vagrantfile has specified another version, it probably has
good reason to do so, and changing that may cause the environment to
not function properly.
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

则是vagrant版本旧了,直接从官网下载最新的vagrant安装覆盖即可。
报错6:

Bridged Network Address: '192.168.10.0'
Host-only Network 'Qualcomm Atheros AR9485 Wireless Network Adapter': '192.168.10.0'
  • 1
  • 2

修改的ip 本人改为192.168.0.200

启动之后,就可以在浏览器中访问配置的站点

No input file specified.  说明配置成功
  • 1

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

可选操作

为指定项目安装 Homestead

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

composer require laravel/homestead --dev
  • 1

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

Mac/Linux:

php vendor/bin/homestead make
  • 1

Windows:

vendor\bin\homestead make
或者
vendor\\bin\\homestead make
  • 1
  • 2
  • 3

接下来,在终端中运行 vagrant up 命令然后在浏览器中通过 访问站点。不要忘记在 /etc/hosts 文件中添加域名 (已配置的话忽略)。
#日常使用
##全局访问 Homestead
要想在文件系统的任意路径都能够运行 vagrant up 启动 Homestead 虚拟机,在 Mac/Linux 系统中,可以添加 Bash 函数到 ~/.bash_profile;在 Windows 系统上,需要添加“批处理”文件到 PATH。这些脚本允许你在系统的任意位置运行 Vagrant 命令,并且把命令执行位置指向 Homestead 的安装路径。

Mac/Linux

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

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

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

Windows

在系统的任意位置创建一个批处理文件 :

@echo off

set cwd=%cd%
set homesteadVagrant=C:\Homestead

cd /d %homesteadVagrant% && vagrant %*
cd /d %cwd%

set cwd=
set homesteadVagrant=
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

你需要将脚本中实例路径 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"
  • 1

连接到数据库

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: 
      to: /home/vagrant/Code/Symfony/web
      type: symfony2
  • 1
  • 2
  • 3
  • 4

目前支持的站点类型包括 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: 
      to: /home/vagrant/Code/Laravel/public
      schedule: true
  • 1
  • 2
  • 3
  • 4

该站点的 Cron 任务会被定义在虚拟机的 /etc/ 目录下:

这里写图片描述

分享你的环境

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

share   //配置的站点
  • 1

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

这里写图片描述

可以看到我的分享 URL 是 / 以及 /,你可以通过这两个域名在任意联网机器*问我的 Homestead 站点:

这里写图片描述

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

share  -region=us -subdomain=laravel
  • 1

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

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

转自/post/