using virtual box laravel's homestead box
Tags: beginners, laravel, homestead, virtualbox
Published: 2018-03-19 05:22:34

---
title: using virtual box laravel's homestead box
published: true
description: 
tags: beginners, laravel, homestead, virtualbox
---

Whilst trying to [sep up Virtual Box, Vagrant and Scotch Box](https://dev.to/aurelkurtula/setting-up-virtual-box-vagrant-and-scotch-box--4jd8) I found Scotch Box too heavy for my needs. It offers more then I need and seemed to encourage the use of one box per project - though there were ways around it.

So I have been trying out a different box called [homestead](https://laravel.com/docs/5.6/homestead), created by Laravel. It offers all the requirements to working with PHP - which is all I really wanted. 

## Get started 

First we need to install the box

```
vagrant box add laravel/homestead
```

We would do that only one time, regardless of how many homestead boxes you'll want to initiate 

Now go to any directory you'd like to install the initial homestead folder and clone homestead 

```
git clone https://github.com/laravel/homestead.git Homestead
cd Homestead
bash init.sh
```

The last line will create a `Homestead.yaml` configuration file within the `Homestead` folder. This is where you setup all your projects. Inside `Homestead.yaml` we have something like this 

```yaml
---
ip: "192.168.10.10"
memory: 2048
cpus: 1
provider: virtualbox

authorize: ~/.ssh/id_rsa.pub

keys:
    - ~/.ssh/id_rsa

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

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

databases:
    - homestead
```

The only thing you need to edit to quickly get up and running are the `folders` and `sites` properties. The above setting are the default but it's unlikely they'd work for you.

The `folders` property needs to point to the php project folder you'd want to run with in the homestead box. Then the `sites` property is where you specify a domain name for the project! 

**The project folders are completely independent from the homestead configuration folder**. (It's what I am loving in comparison to Scotch Box ([covered previously](https://dev.to/aurelkurtula/setting-up-virtual-box-vagrant-and-scotch-box--4jd8)))

For the purpose of this demonstration, lets assume that our projects are inside `~/MyWORK/test-projects`. The the `folders` property would reflect that

```yaml
folders:
    - map: ~/MyWORK/test-projects
      to: /home/vagrant/code
```

`Map` points to the directory in our machine, and `to` points to the directory in the virtual machine. By mapping the two, we ensure that they stay in synchrony. So eventually when we run a website from the virtual machine, it's files mirror the files we have at `~/MyWORK/test-projects`

The `sites` property then, maps a directory from the virtual machine with a custom domain 

```
sites:
    - map: site1.test
      to: /home/vagrant/code/site1
```

Again `/home/vagrant/code/` has been mapped to a directory from our machine, hence everything within `~/MyWORK/test-projects` exists inside `/home/vagrant/code/`, meaning that `/site1` exists in `~/MyWORK/test-projects/sites` - where we actually write code. 

## Editing the hosts file

As it's noted in `Homestead.yaml` the IP address for this virtual box is `192.168.10.10` so, inside our hosts file (`/etc/hosts` on macs and `C:\Windows\System32\drivers\etc\hosts` on windows) we need to add this line:

```
192.168.10.10  site1.test
```

Hence when we visit `site1.test` in the browser it will trigger homestead and in turn `Homestead.yaml` will serve the web project located at `/home/vagrant/code/site1`

## Running vagrant

Now that everything is setup, from the terminal, with `Homestead` directory we need to start vagrant

```
vagrant up
```

As usual, the first time vagrant runs it will take some time as it needs to install the box. But every other time it will be quick to start and stop

## Working with Databases

The homestead box comes with MySQL and PostgreSQL already setup and they are running the moment homestead vagrant box is up.

You can connect to those from `127.0.0.1` and port `33060` (MySQL) or `54320` (PostgreSQL). The username and password for both databases is `homestead` / `secret`.

## Conclusion 

This box is a lot easier then Scotch Box. I love the fact that it does encourage us to use one box for all our PHP projects - which is what I wanted. 

The thing that I want to know is, how does the mapping work in terms of space, are the projects cloned or just referenced?