Homestead.yaml 配置文件深入读懂

文章参考:(https://learnku.com/docs/laravel-development-environment/5.7/development-environment-windows/2902#3e3008)
Homestead.yaml里的配置大致可以分为以下几种:

虚拟机设置;
SSH 秘钥登录配置;
共享文件夹配置;
站点配置;
数据库配置;
自定义变量;

1. 虚拟机设置

对虚拟机的 IP,内存,CPU,虚拟机的默认提供者进行配置。这里我们基本不需要做任何配置,(有时候ip会冲突,改一下ip)。

ip: "192.168c.10.10"
memory: 2048
cpus: 1
provider: virtualbox

2. SSH 秘钥登录配置

authorize 选项是指派登录虚拟机授权连接的公钥文件,此文件填写的是主机上的公钥文件地址,虚拟机初始化时,此文件里的内容会被复制存储到虚拟机的 /home/vagrant/.ssh/authorized_keys文件中,从而实现 SSH 免密码登录。在这里我们默认填写即可。

authorize: ~/.ssh/id_rsa.pub

keys 是数组选项,填写的是本机的 SSH 私钥文件地址。虚拟机初始化时,会将此处填写的所有 SSH 私钥文件复制到虚拟机的 /home/vagrant/.ssh/ 文件夹中,从而使虚拟机能共享主机上的 SSH 私钥文件,使虚拟机具备等同于主机的身份认证。此功能为 SSH 授权提供了便利,例如在后面章节中,我们只需要在 GitHub 上配置一个 SSH 公钥,即可实现 GitHub 对虚拟机和主机共同认证。
此处我们将公钥和私钥一起同步到虚拟机中:

keys:
    - ~/.ssh/id_rsa
    - ~/.ssh/id_rsa.pub

接下来我们来生成 SSH Key,开始之前,我们先使用以下命令来检查主机上是否已经生成过 SSH Key:

ls -al ~/.ssh

如果存在 id_rsa 和 id_rsa.pub的话,请跳过以下生成 SSH 的步骤继续阅读剩下内容。

否则使用以下方法来生成 SSH Key,请将 [email protected] 替换为你的邮箱:

ssh-keygen -t rsa -C "[email protected]"
Generating public/private rsa key pair.

命令行会提示让你指定秘钥的名称,按回车键将 SSH Key 保存到默认文件名即可:

Enter a file in which to save the key (/Users/you/.ssh/id_rsa): [Press enter]

接下来会询问你为 SSH Key 设置密码,按回车键即可,默认为空密码:

Enter passphrase (empty for no passphrase): [Type a passphrase]
Enter same passphrase again: [Type passphrase again]

可以都选择默认,一路 Enter 键即可,大致如下:
在这里插入图片描述

3. 共享文件夹配置

我们可以通过 folders 来指明本机要映射到 Homestead 虚拟机上的文件夹。
map 对应的是我们本机的文件夹,格式例如:E:/Homestead/Code,以开发者实际项目目录为准。
to 对应的是 Homestead 上的文件夹。

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

我们将会在该文件夹下放置我们所有的 Laravel 项目,Homestead 会把该文件夹下的项目自动映射到虚拟机的 /home/vagrant/Code 文件夹上。

4. 站点配置

站点配置允许你在主机里,通过域名来访问虚拟机里的 Laravel 应用。如下面 sites 配置所示,将 homestead.test 映射到一个 Laravel 项目的 public 目录上。这一行配置,会命令 Homestead 为我们新建一个 Nginx 站点,并且把 Web Root 配置到指定目录下。Laravel 应用的 Nginx 站点 Web Root 配置,默认就是在根目录下的 public 目录。

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

另外,主机里直接访问虚拟机站点,必须通过绑定 hosts 来实现。接下来我们利用 hosts 文件绑定 homestead.test 到虚拟机 IP 192.168.10.10 上。

5. 数据库配置

我们可以为 Homestead 指定数据库名称,这里使用默认设置即可。

databases:
    - homestead

6. 自定义变量

最后,如果你需要自定义一些在虚拟机上可以使用的自定义变量,则可以在 variables 中进行定义。

variables:
    - key: APP_ENV
      value: local

附加:
解决 Windows 系统使用 Homestead 运行 Laravel 本地项目响应缓慢问题
点击此处

尝试过增加虚拟机配置, 但是没有任何效果, 经过验证也不是数据库的原因,通过网上查询了解到, 是因为 VirtualBox 的 IO 引起的。
解决方法:

 vagrant plugin install vagrant-winnfsd

安装成功后修改配置文件 修改配置文件前建议先备份,以免修改后出现问题!
文件1:homestead/scripts/homestead.rb

# Register All Of The Configured Shared Folders
if settings.include? 'folders'
   settings["folders"].each do |folder|
       if File.exists? File.expand_path(folder["map"])
           mount_opts = []

           if (folder["type"] == "nfs")
               mount_opts = folder["mount_options"] ? folder["mount_options"] : ['actimeo=1', 'nolock']
           elsif (folder["type"] == "smb")
               mount_opts = folder["mount_options"] ? folder["mount_options"] : ['vers=3.02', 'mfsymlinks']
           end

           # For b/w compatibility keep separate 'mount_opts', but merge with options
           options = (folder["options"] || {}).merge({ mount_options: mount_opts })

           # Double-splat (**) operator only works with symbol keys, so convert
           options.keys.each{|k| options[k.to_sym] = options.delete(k) }

           config.vm.synced_folder folder["map"], folder["to"], type: folder["type"] ||= nil, **options

           # Bindfs support to fix shared folder (NFS) permission issue on Mac
           if Vagrant.has_plugin?("vagrant-bindfs")
               config.bindfs.bind_folder folder["to"], folder["to"]
           end
       else
           config.vm.provision "shell" do |s|
               s.inline = ">&2 echo \"Unable to mount one of your folders. Please check your folders in Homestead.yaml\""
           end
       end
   end
end

查找此段代码(可能略有不同),替换为以下内容

if settings.include? 'folders'
  settings["folders"].sort! { |a,b| a["map"].length <=> b["map"].length }

  settings["folders"].each do |folder|
    config.vm.synced_folder folder["map"], folder["to"], 
    id: folder["map"],
    :nfs => true,
    :mount_options => ['nolock,vers=3,udp,noatime']
  end
end

文件2:Homestead.yaml

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

重启 Homestead 使配置文件生效,大功告成。再次运行项目响应时间已经正常了,希望帮助有相同情 况的小伙伴!

vagrant provision
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章