I am trying to configure a Homestead environment for a Laravel server, but I can't get it to work. I followed the documentation to install and configure Homestead and Vagrant. This is my Homestead.yaml
---
ip: "192.168.10.10"
memory: 2048
cpus: 2
provider: virtualbox
authorize: ~/.ssh/id_rsa.pub
keys:
- ~/.ssh/id_rsa
folders:
- map: C:\\Users\\meadi\\PhpstormProjects
to: /home/vagrant/code
sites:
- map: blog.test
to: /home/vagrant/code/blog/public
databases:
- homestead
features:
- mariadb: false
- ohmyzsh: false
- webdriver: false
Where PhpstormProjects is the folder with all my php projects, and blog
is the folder of the project that I am trying to make the set up for. Running vagrant up
in the project root resulted in this Vagrantfile
(used the Vagrant tool in PhpStorm so I assume this is a template provided by PhpStorm):
# -*- mode: ruby -*-
# vi: set ft=ruby :
# All Vagrant configuration is done below. The "2" in Vagrant.configure
# configures the configuration version (we support older styles for
# backwards compatibility). Please don't change it unless you know what
# you're doing.
Vagrant.configure("2") do |config|
# The most common configuration options are documented and commented below.
# For a complete reference, please see the online documentation at
# https://docs.vagrantup.com.
# Every Vagrant development environment requires a box. You can search for
# boxes at https://vagrantcloud.com/search.
config.vm.box = "laravel/homestead"
# Disable automatic box update checking. If you disable this, then
# boxes will only be checked for updates when the user runs
# `vagrant box outdated`. This is not recommended.
# config.vm.box_check_update = false
# Create a forwarded port mapping which allows access to a specific port
# within the machine from a port on the host machine. In the example below,
# accessing "localhost:8080" will access port 80 on the guest machine.
# NOTE: This will enable public access to the opened port
# config.vm.network "forwarded_port", guest: 80, host: 8080
# Create a forwarded port mapping which allows access to a specific port
# within the machine from a port on the host machine and only allow access
# via 127.0.0.1 to disable public access
# config.vm.network "forwarded_port", guest: 80, host: 8080, host_ip: "127.0.0.1"
# Create a private network, which allows host-only access to the machine
# using a specific IP.
# config.vm.network "private_network", ip: "192.168.33.10"
# Create a public network, which generally matched to bridged network.
# Bridged networks make the machine appear as another physical device on
# your network.
# config.vm.network "public_network"
# Share an additional folder to the guest VM. The first argument is
# the path on the host to the actual folder. The second argument is
# the path on the guest to mount the folder. And the optional third
# argument is a set of non-required options.
# config.vm.synced_folder "../data", "/vagrant_data"
# Provider-specific configuration so you can fine-tune various
# backing providers for Vagrant. These expose provider-specific options.
# Example for VirtualBox:
#
# config.vm.provider "virtualbox" do |vb|
# # Display the VirtualBox GUI when booting the machine
# vb.gui = true
#
# # Customize the amount of memory on the VM:
# vb.memory = "1024"
# end
#
# View the documentation for the provider you are using for more
# information on available options.
# Enable provisioning with a shell script. Additional provisioners such as
# Ansible, Chef, Docker, Puppet and Salt are also available. Please see the
# documentation for more information about their specific syntax and use.
# config.vm.provision "shell", inline: <<-SHELL
# apt-get update
# apt-get install -y apache2
# SHELL
end
I see that most of the file is commented out, but I don't know if I should enable any of this configurations. After running vagrant provision
I expected to be able to connect to the server in a browser. I set up hosts
mapping from 192.168.10.10 to blog.test, and I also tried connecting straight to 192.168.10.10 and localhost:8000, but with no success, Chrome telling me the site can't be reached.
Browsing the remote in PhpStorm shows me this folder structure:
I see that there is no '/home/vagrant/code' directory, even though that is the mapping in Homestead.yaml
, and when running vagrant up
I get this printed in the console:
==> default: Mounting shared folders...
default: /vagrant => C:/Users/meadi/PhpstormProjects/blog
I assume that I misconfigured something that resulted in the code folder not being mounted in the VM thus resulting in no public
folder to be served. Can anyone help me out? I followed multiple tutorials and I can't seem to find out what I missed. Thanks in advance!
Also, here is my Remote configuration in PhpStorm. I assume that if I misconfigured that, the folder structure I see in the Remote won't be accurate.
The problem may hide in this part of your Homestead.yaml:
folders:
- map: C:\\Users\\meadi\\PhpstormProjects
to: /home/vagrant/code
At first, you don't have to use double backslashes in your path, you're enough to write like this:
C:\Users\meadi\PhpstormProjects
Second, your project folder is mapped to /home/vagrant/code, but you want to set your project in "blog" folder, so you need to change your mapping like this:
/home/vagrant/code/blog
Also, you should put your concrete blog project in "blog" directory on your host machine:
C:\Users\meadi\PhpstormProjects\blog
And define this path in your Homestead.yaml
The final variant is:
folders:
- map: C:\Users\meadi\PhpstormProjects\blog
to: /home/vagrant/code/blog
If you want to create another project (e.g., shop), you must add another mapping:
folders:
- map: C:\Users\meadi\PhpstormProjects\blog
to: /home/vagrant/code/blog
- map: C:\Users\meadi\PhpstormProjects\shop
to: /home/vagrant/code/shop
EDIT
Check, if you have followed all these installation steps: