将 vagrant 和 homestead 用于多个站点和每个项目安装
Using vagrant and homestead for multiple sites and per project installation
我用XAMPP已经有一段时间了,后来发现Laravel,发现自己挺喜欢的,也想用Homestead。我遇到的问题是,我似乎无法 运行 多个站点。
我尝试了各种方法,但目前的主要问题是,一个项目有效,而所有其他项目在尝试访问其网页时都出现连接超时。
这些是我使用 Homestead 所采取的步骤
- 正在安装 VirtualBox
- 正在安装 Vagrant
- 添加宅基地
vagrant box add laravel/homestead
- 克隆存储库
git clone https://github.com/laravel/homestead.git Homestead
- 使用
bash init.sh
脚本在 Homestead
目录中创建 Homestead.yaml 文件
- 创建一个新项目
laravel new projectA
- 需要宅基地
composer require laravel/homestead
- 生成 Vagrantfile
php vendor/bin/homestead make
- 修改 Homestead.yaml 以具有以 10
结尾的 IP
- 创建另一个项目
laravel new projectB
- 需要宅基地
composer require laravel/homestead
- 生成 Vagrantfile
php vendor/bin/homestead make
- 修改 Homestead.yaml 以拥有以 11 结尾的 IP
- 将这两个站点添加到主机文件
sudo nano /etc/hosts
=> xxx.xx.xx.10 projecta.app
& xxx.xx.xx.11 projectb.app
- 从两个目录之一启动 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.yaml
的 folders
属性 以与 VM 共享您的两个项目的代码:
folders:
- map: ~/pj1
to: /path/to/project1
- map: ~/pj2
to: /path/to/project2
编辑 ~/.homestead/Homestead.yaml
的 sites
属性 使 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 上移动它。按照以下步骤操作。
cd
到您要添加的新 Laravel 项目的目录中。我假设你有所有 laravel 文件,并且它使用 MAMP
或任何非流浪解决方案工作。
- 运行
vagrant init laravel/homestead
。此命令将在这个新项目中添加必要的 VagrantFile
。
- 打开你的第一个原始项目文件的目录并打开它的
Homestead.yaml
编辑器中的文件。
现在按照 @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
- 在终端
cd
进入你的第一个原创项目
目录。
- 运行 命令
vagrant reload --provision
。这将重新加载
vagrant machine 以便我们在 .yaml
文件中所做的更改生效。您的原始项目数据库将保持不变。
- 运行
vagrant ssh
- 运行
ls
并确保您可以看到新项目的文件夹。如果它在那里
您已正确配置新站点。
- 点击 url 添加
http://
的新网站,你就是
完成。
就像 here 所说的那样,您可以将 Homestead 直接安装到您的项目中,在您拥有的每个项目的根目录中使用此 composer require laravel/homestead --dev
来要求它。现在通过 make
命令你可以在项目的根目录中生成 Vagrantfile
和 Homestead.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.
我用XAMPP已经有一段时间了,后来发现Laravel,发现自己挺喜欢的,也想用Homestead。我遇到的问题是,我似乎无法 运行 多个站点。
我尝试了各种方法,但目前的主要问题是,一个项目有效,而所有其他项目在尝试访问其网页时都出现连接超时。
这些是我使用 Homestead 所采取的步骤
- 正在安装 VirtualBox
- 正在安装 Vagrant
- 添加宅基地
vagrant box add laravel/homestead
- 克隆存储库
git clone https://github.com/laravel/homestead.git Homestead
- 使用
bash init.sh
脚本在Homestead
目录中创建 Homestead.yaml 文件 - 创建一个新项目
laravel new projectA
- 需要宅基地
composer require laravel/homestead
- 生成 Vagrantfile
php vendor/bin/homestead make
- 修改 Homestead.yaml 以具有以 10 结尾的 IP
- 创建另一个项目
laravel new projectB
- 需要宅基地
composer require laravel/homestead
- 生成 Vagrantfile
php vendor/bin/homestead make
- 修改 Homestead.yaml 以拥有以 11 结尾的 IP
- 将这两个站点添加到主机文件
sudo nano /etc/hosts
=>xxx.xx.xx.10 projecta.app
&xxx.xx.xx.11 projectb.app
- 从两个目录之一启动 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.yaml
的 folders
属性 以与 VM 共享您的两个项目的代码:
folders:
- map: ~/pj1
to: /path/to/project1
- map: ~/pj2
to: /path/to/project2
编辑 ~/.homestead/Homestead.yaml
的 sites
属性 使 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 上移动它。按照以下步骤操作。
cd
到您要添加的新 Laravel 项目的目录中。我假设你有所有 laravel 文件,并且它使用MAMP
或任何非流浪解决方案工作。- 运行
vagrant init laravel/homestead
。此命令将在这个新项目中添加必要的VagrantFile
。 - 打开你的第一个原始项目文件的目录并打开它的
Homestead.yaml
编辑器中的文件。 现在按照 @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
- 在终端
cd
进入你的第一个原创项目 目录。 - 运行 命令
vagrant reload --provision
。这将重新加载 vagrant machine 以便我们在.yaml
文件中所做的更改生效。您的原始项目数据库将保持不变。 - 运行
vagrant ssh
- 运行
ls
并确保您可以看到新项目的文件夹。如果它在那里 您已正确配置新站点。 - 点击 url 添加
http://
的新网站,你就是 完成。
就像 here 所说的那样,您可以将 Homestead 直接安装到您的项目中,在您拥有的每个项目的根目录中使用此 composer require laravel/homestead --dev
来要求它。现在通过 make
命令你可以在项目的根目录中生成 Vagrantfile
和 Homestead.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.