将 vagrant 和 homestead 用于多个站点和每个项目安装

Using vagrant and homestead for multiple sites and per project installation

我用XAMPP已经有一段时间了,后来发现Laravel,发现自己挺喜欢的,也想用Homestead。我遇到的问题是,我似乎无法 运行 多个站点。

我尝试了各种方法,但目前的主要问题是,一个项目有效,而所有其他项目在尝试访问其网页时都出现连接超时。

这些是我使用 Homestead 所采取的步骤

  1. 正在安装 VirtualBox
  2. 正在安装 Vagrant
  3. 添加宅基地vagrant box add laravel/homestead
  4. 克隆存储库git clone https://github.com/laravel/homestead.git Homestead
  5. 使用 bash init.sh 脚本在 Homestead 目录中创建 Homestead.yaml 文件
  6. 创建一个新项目laravel new projectA
  7. 需要宅基地composer require laravel/homestead
  8. 生成 Vagrantfile php vendor/bin/homestead make
  9. 修改 Homestead.yaml 以具有以 10
  10. 结尾的 IP
  11. 创建另一个项目laravel new projectB
  12. 需要宅基地composer require laravel/homestead
  13. 生成 Vagrantfile php vendor/bin/homestead make
  14. 修改 Homestead.yaml 以拥有以 11 结尾的 IP
  15. 将这两个站点添加到主机文件 sudo nano /etc/hosts => xxx.xx.xx.10 projecta.app & xxx.xx.xx.11 projectb.app
  16. 从两个目录之一启动 vagrant vagrant up

现在,我遇到了问题,只有一个项目可以访问。它始终是我调用 vagrant up 的那个。因此,如果我从项目 A 调用 vagrant up,我可以访问 http://projecta.app 并且 http://projectb.app 超时。可悲的是,反之亦然。

这是我的vagrant global-status

id       name    provider   state   directory                           
------------------------------------------------------------------------
fc6fadb  default virtualbox running /Users/mknb/work/projectA

我想我会从 projectB 目录中再做一个 vagrant up,但这当然行不通。

我不想使用全局 Homestead,因为 Laravel 说可以安装 per project,那么我该如何实现呢?您需要更多信息吗?

除了IP和域名我没有修改Homestead.yaml homestead.app => projecta.app

使用 Homestead 进行全局安装似乎相当容易,因为我只需向 Homestead.yaml 添加更多站点,但正如我所说,我希望按项目进行安装。有人可以帮忙吗?

当然,从 Homestead 目录启动 vagrant 是行不通的。

通过以您的方式使用 Homestead,您可以为每个项目创建一个虚拟机。因此,VirtualBox 无法转发来自您的主机对 all 个虚拟机的 HTTP 请求。每次只能 运行 一台机器(也就是一个项目)。

对于运行多个Homestead的项目,可以按如下方式进行:

  • 克隆 Homestead git clone https://github.com/laravel/homestead.git Homestead
  • Homestead 文件夹中,运行 bash init.sh

编辑 ~/.homestead/Homestead.yamlfolders 属性 以与 VM 共享您的两个项目的代码:

folders:
    - map: ~/pj1
      to: /path/to/project1
    - map: ~/pj2
      to: /path/to/project2

编辑 ~/.homestead/Homestead.yamlsites 属性 使 Nginx 启用两个站点的域:

sites:
    - map: project1.local
      to: /home/vagrant/pj1/public
    - map: project2.local
      to: /home/vagrant/pj2/public

编辑您的 hosts 文件以将这些域转发到本地主机

127.0.0.1 project1.local
127.0.0.1 project2.local
  • 运行 vagrant up 在您克隆 Homestead 代码的文件夹中(其中包含 init.sh 文件)。

现在,您只需一个 Homestead 虚拟机就可以 运行 任意数量的项目。

接受的答案中缺少一些重要的步骤,尽管它对我有很大帮助。我已经添加了那些必要的步骤。谢谢 @Hieu Le 的回答。

我假设您已经按照 Laravel docs 的说明正确安装了第一个站点。现在你有另一个 laravel 站点,你想在 vagrant 上移动它。按照以下步骤操作。

  1. cd 到您要添加的新 Laravel 项目的目录中。我假设你有所有 laravel 文件,并且它使用 MAMP 或任何非流浪解决方案工作。
  2. 运行vagrant init laravel/homestead。此命令将在这个新项目中添加必要的 VagrantFile
  3. 打开你的第一个原始项目文件的目录并打开它的 Homestead.yaml 编辑器中的文件。
  4. 现在按照 @Hieu Le 在接受的答案中定义的步骤 修改.yaml 文件

    folders:
         - map: ~/pj1
           to: /path/to/project1
         - map: ~/pj2
           to: /path/to/project2
    
    sites:
        - map: project1.local
          to: /home/vagrant/pj1/public
        - map: project2.local
          to: /home/vagrant/pj2/public
    

    Edit your hosts file to forward these domain fo localhost

    127.0.0.1 project1.local
    127.0.0.1 project2.local
    
  5. 在终端cd进入你的第一个原创项目 目录。
  6. 运行 命令 vagrant reload --provision。这将重新加载 vagrant machine 以便我们在 .yaml 文件中所做的更改生效。您的原始项目数据库将保持不变。
  7. 运行 vagrant ssh
  8. 运行 ls 并确保您可以看到新项目的文件夹。如果它在那里 您已正确配置新站点。
  9. 点击 url 添加 http:// 的新网站,你就是 完成。

就像 here 所说的那样,您可以将 Homestead 直接安装到您的项目中,在您拥有的每个项目的根目录中使用此 composer require laravel/homestead --dev 来要求它。现在通过 make 命令你可以在项目的根目录中生成 VagrantfileHomestead.yaml 文件。

  • Mac/Linux:

    php vendor/bin/homestead make
    
  • Windows:

    vendor\bin\homestead make
    

在每个项目根目录下,您将有一个要编辑的 Homestead.yaml 文件:

  • 项目-A

    ip: "192.168.10.10"
    ...
    folders:
        - map: "~/Code/projecta"
          to: "/home/vagrant/projecta"
    sites:
        - map: project.a
          to: "/home/vagrant/projecta/public"
    
  • 项目-B

    ip: "192.168.10.10"
    ...
    folders:
        - map: "~/Code/projectb"
          to: "/home/vagrant/projectb"
    sites:
        - map: project.b
          to: "/home/vagrant/projectb/public"
    

将此添加到 /etc/hosts:

    192.168.10.10 project.a
    192.168.10.10 project.b

然后你必须 cd 到每个项目的根目录和 vagrant up。 现在,如果您 vagrant ssh 来自每个项目,您将在您的 VM 环境中拥有该项目。

有一个快捷命令可以代理您要添加的网站..

无需弄乱您的 Homestead.yaml 文件并重新配置您的 vagrant box...

这适用于全局安装和每个项目安装

只要确保您要添加另一个项目...

您将它添加到您的共享文件夹中的(整个项目) 在您的 Homestead.yaml

中声明

假设您的共享文件夹是 C:/Users/MYACCOUNT/Codes

在该文件夹中添加另一个项目 laravel new homestead.app

然后

假设您在 Homestead 中使用 ssh 类型 a.) 如果你使用 nginx

serve homestead.app /home/Vagrant/Code/homestead/public

b.) 如果你使用 hhvm serve-hhvm homestead.app /home/Vagrant/Code/homestead/public 只需将您的域名和路径更改为项目的 public 文件夹

然后以管理员身份编辑您的 etc/hosts 文件

您在 Homestead.yaml

中定义的 IP 地址是什么

通常默认为192.168.10.10

用它代替 127.0.0.1

为什么?因为如果你使用 127.0.0.1 你的 url 会看起来像 homestead.app:8000

如果您使用 Homestead.yaml

中的 IP 地址

192.168.10.10 homestead.app

你的网站不用8000端口也能访问 只需使用 homestead.app

此解决方案比预配好得多...而且速度更快...

这就是我所做的

第 1 步:首先,您只需将其他项目和数据库映射到 homestead.yaml 文件 enter image description here。

第 2 步:创建您在现有 workbench 连接中提到的数据库 enter image description here。

第 3 步:在您的项目 .env 文件中提及该数据库。 enter image description here

第 4 步:在 drivers/etc/hosts 文件和 运行 homestead reload --provision 中添加另一个路径。你的问题解决了。 :)enter image description here.