Step 0: Video
Step 1: Install Vagrant and Virtual Box
Step 2: Add the Alias
Add the alias above to
Step 3. Install
Step 4. Done. Go Poke Around.
Your MySQL username and password, by default, will be 'root'.
To test things out, try:
$ vagrant ssh $ php -v $ mysql -u root -p $ composer
Have fun! This also installs and enables X-Debug for you. You can stop using MAMP now.
Extra Credit 1
Edit your hosts file to set a simpler address, like
sudo vi /etc/hosts
At the bottom of this file, add:
Now, browse to
Extra Credit 2
By default, Apache will set your document root to
$ vagrant ssh $ sudo vim /etc/apache2/sites-available/000-default.conf (Change `DocumentRoot /var/www/html` to `DocumentRoot /var/www`) $ sudo service apache2 reload
Reload the browser. Now, your local project root will be treated as Apache's document root. Typically, though, you'll want to set Apache's document root to something like the
Extra Credit 3
Learn more about Vagrant:
Extra Credit 4: Multiple Websites With the Same VM
Maybe you want to run all of your sites and demos within this VM. Here's how.
For this example, maybe we're building a new app, called "Larabook." Begin by creating a new directory, "larabook" within the same directory that has the Vagrantfile that you pulled in during Step 3. Add a dummy
$ vagrant ssh $ cd /etc/apache2/sites-available/ $ sudo cp 000-default.conf larabook.conf
Open `larabook.conf, and set:
ServerName larabook.local DocumentRoot /var/www/larabook
You don't have to for this example, but you'd probably want to add some additional config to this file - like:
<Directory /var/www/larabook> Options -Indexes +FollowSymLinks AllowOverride All Require all granted </Directory>
Next, enable the new vhost, and reload Apache.
sudo a2ensite larabook sudo service apache2 reload
Lastly, don't forget to update your hosts file (on your local machine, not the VM):
sudo vi /etc/hosts
That's it. Browse to
Extra Credit 5: Laravel Setup
Let's add a Laravel project.
laravel new laravel vagrant ssh cd /etc/apache2/sites-available/ sudo cp 000-default.conf laravel.conf sudo vi laravel.conf
Within this file, set:
ServerName laravel.dev DocumentRoot /var/www/laravel/public <Directory /var/www/laravel/public> Options -Indexes +FollowSymLinks AllowOverride All Require all granted </Directory>
Next, enable the site:
sudo a2ensite laravel
On your host/local machine, update the
Finally, if you view
chmod -R 0777 app/storage
And reload the browser. Done!
@krizzlix - that's a decision you can make based on your own needs. If you have different apps with different environments (PHP differences, installations like Nemcache or APC, etc), you may want to differentiate. If you're rolling with the same stuff on each project, or the differences don't matter, go ahead and use the same box for anything.
Definitely take the time to learn how to setup Apache virtualhosts to make any option you'd like available to yourself :D Naturally I'll also mention serversforhackers.com here...
For the record, in Windows, if you have the cUrl library installed, you need to use this instead:
Also tried the trick described here with settings
When I setup "Extra Credit 5: Laravel Setup" it works for about 5 mins, then I get a white screen with this console error.
"Uncaught TypeError: Cannot call method 'create' of undefined"
I tried restarting vagrant box but nothing works.
Anyone knows whats wrong?
Thank you so much. Love laracasts. I am curious why, in step 5, Laravel is setup from the local host rather than from within the guest environment - is this required or could you run all steps after vagrant ssh?
I also experience the same issue as @nicoeg, the laravel screen appears on first load, but then loads a blank page with no errors. If I shut my mac down, come back, vagrant up etc then the laravel image loads when I goto the root of the page, but it will not reload again with a refresh, no matter how many tries. Permissions on app/storage are wide open. Any help or insight appreciated.
Finally figured it out - it was permissions related, but permissions on the vendor folder and below - it worked the first time because it had read access, but I guess a refresh triggered a write within the log folder - for similarities sake I ran chmod -R 777 on the vendor folder. Although it sucked up some hours, it was a great learning experience (I'm new). Great video - loving Laracasts.
I was having a similar permissions problem as those described above. Initially I thought I solved it by doing sudo chmod -R 0777 app/storage on host computer rather than vagrant box. However, the blank white screens returned whenever laravel tried to write to the sessions file.
After some Googling the following solution worked for me. Change the Vagrant config file to read like this on line 12:
Run vagrant reload and the problem should be solved.
This is fantastic.
Also the sql databases, are they stored inside the project in question, or are they stored globally in mac. Using mamp , there have been times when I added a project to git and forgot to export the DB, in this case is the DB within the same folder,
Hope I am making sense
I managed to get both sites working - sort of.
I have one that is local.dev which refers to the vagrant directory (var/www on the vm) and index.php shows up there.
Thanks for this.
I would add that it was hanging on the message "Verifying Hyper-V is enabled", this is because vboxmanage wasn't available and meant I had to add "C:\Program Files\Oracle\VirtualBox" to my Path environment variable
Can anyone confirm if this still works? I haven't been able to get it to work at all.
To clarify: Running the script works fine and vagrant seems to be set up properly, but navigating to the server's IP address results in a 403 Forbidden error. I've followed to steps carefully, repeatedly, but no luck.
If anyone can confirm this still works properly, I guess I'll look into troubleshooting it further. Thanks.
Found it, username = vagrant, password = vagrant. Sequel Pro now connects to the remote mysql without any extra configuration.
could get the install to work.. Fixed the File with http://foo-o-rama.com/vagrant--stdin-is-not-a-tty--fix.html#
edited the Vagrantfile # -*- mode: ruby -*- # vi: set ft=ruby : # Vagrantfile API/syntax version. Don't touch unless you know what you're doing! VAGRANTFILE_API_VERSION = "2" Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| config.vm.provision "fix-no-tty", type: "shell" do |s| s.privileged = false s.inline = "sudo sed -i '/tty/!s/mesg n/tty -s \\&\\& mesg n/' /root/.profile" end config.vm.box = "precise64" config.vm.box_url = "http://files.vagrantup.com/precise64.box" config.vm.network :private_network, ip: "192.168.101.101" config.vm.provision :shell, :path => "install.sh" config.vm.synced_folder ".", "/var/www" end
I think I've done something wrong. When I get to Step 4 above, here's what happens:
Getting errors when running this culminating in the following;
The SSH command responded with a non-zero exit status. Vagrant
I've listed the errors from the console output that were red below the gist in a comment