How to create new site in Homestead without losing existing data? - laravel

When I create a new Laravel 5 project, I edit my Homestead.yaml, my /etc/hosts and then do:
homestead halt
homestead up --provision
That makes my new site available but I lose my database tables for ALL of my other projects on the machine and have to manually reload them from backups. I've searched around and it sounds like this is a known issue but I want to clarify that I'm not doing something stupid (which is likely).

I think you should try to use vagrant command instead.
When you have your homestead machine running, try running vagrant provision in the directory where you have your Vagrantfile. It should reload the machine and your sites should be visible and any data shouldn't be removed in this case.

If you do not want to lose existing data do as follows:
vagrant reload --provision
Trust me when i say that I tried all the advice and almost every time all my databases were destroyed.

For a proper provisioning in Homestead machine, use global-status command of Vagrant to find out your Homestead's machine ID. This provides a result as the following image.
Then run vagrant provision {your-machine-id}.

Related

does "vagrant destroy" erase apache configs?

I'm new to vagrant, I'm using scotchbox.
I've configured a couple of vhosts in apache.
I guess the right way to do this would have been to change the provisionning of my box (as it's the aim of vaghrant right?) but i did the old school way by simpply editing my config files and so on...
Now my question is :
if i run vagrant destroy, do i loose all my configs?
is there any other command (vagrant halt, vagrant suspend?) that would allow me to reboot my host machine without loosing my config?
vagrant destroy will remove entire VM so any changes that were made manually will be lost. Vagrant halt only turns of the power so to speak so nothing is lost. If you run your machine again or reboot it all your data is save, just don't use --provision option that will recreate all initial configuration.

Edit files in a Virtualbox VM (vagrant box) from host

I was messing with systemd in my Vagrant box and I think I did something wrong since the box won't boot anymore. What I need to do is to remove certain files under /etc/systemd in my Vagrant box. However since I can't boot it, I have to remove those files from the host, but I don't know how to do it.
The VM provider is virtualbox. Both the host and the guest are ubuntu 15.04.
Thanks in advance!
option 1: you can try to add vagrant ssh -c 'cmd to run' in your vagrant file, but as you said it really does not boot, I give it really low chance to success.
option 2: create a new VM and add the hard drive from the old box to the new box (add new hard drive from existing disk), boot it and you might need to mount the new hard drive then you should be able to access your data so make the change in your /etc/systemd or whatever files you need and save. once you have made all your fix, you should be able to reboot from the old vm.
I ended up just creating a new VM but I'm fairly certain that this would work: you just mount the virtual disk file (.vmdk in my case) as a hard drive and make the fix. For different formats of virtual disks you need different tools to mount them, which I'm not going to cover here.

Is Vagrant Provision suppose to wipe out all your data

I just ran vagrant provision in a futile attempt at getting my customized synced_folders directive to work and now my whole guest box is wiped out.
Is this normal? I don't see any references to Vagrant docs about this behavior.
As per the doc:
Provisioners in Vagrant allow you to automatically install software, alter configurations, and more on the machine as part of the vagrant up process.
The only thing I have in my config provision shell commands are installation commands. Nothing about wiping anything out.
I do have app.vm.provision for puppet that sets fqdn, user name and box name (along with the normal module_path, manifests_path and manifests_file). Maybe this caused things to be reset?
The Answer
Is Vagrant Provision suppose to wipe out all your data?
No. Vagrant should never harm your "data" (i.e., websites, code, etc.).
...now my whole guest box is wiped out. Is this normal?
Yes. Your Vagrant environment (in other words, the guest operating system created in a virtual environment by Vagrant) is volatile, and you should be able to destroy and recreate it at will without having any impact on your working files (because those should be kept in your local, or host, file system).
Explanation
On Vagrant's website, the very first thing they tell you is this:
Create and configure lightweight, reproducible, and portable development environments.
Your development environment allows you to work. You work on your data, in your development work environment. When you are done with your "development work environment," you should be able to delete it freely without affecting your data in the least.
Further, you should be able to send a collaborating developer your Vagrantfile so that they can create the exact same development environment you used to create your data (i.e., write your program, build your website, and so forth). Then, when you provide them with your code, they can use it in an environment identical to the one that your code was created in without having to reconfigure their own setup.
For more details about how your data files (code, working files, etc.) are kept safely in your computer while making them accessible to your guest system created by Vagrant, see my answer to this question.
So what appears to have happened was that when I set up a synced folder, it wiped out everything because there was nothing on my host machine in that synced folder. Unless there is a way to recover the lost data, there should be an unmistakable WARNING in their docs that this can happen.
I setup the synced_folder to be on my whole home directory. When I created a new machine, I cloned the one project I had saved and decided to just sync my individual projects instead of my whole user directory this time. When I reloaded, the project directory was empty since it was empty on my host machine.
So I guess, make sure the directories on your host machine are already setup with the data before configuring your Vagrantfile with synced_folder information.

Is it possible to export/import a virtual box machine in one file?

I have a Vagrant set up with 3 virtual machines. Each machine has its own shell script for provisioning.
Now I would like to share the exact same status of my set up with somebody else. Since the provisioning procedure takes really (!!) long for each machine, I hope there is another solution.
Ideally I would be able to save each machine as it is in one file, which the other person then could import into Virtualbox. Is there a way to do that?
If I understand you correctly you would like to make a Vagrant base box from provisioned by Vagrant VMs. This is not recommended way to go. How you can approach this is:
Create new VM manually with required OS in the VBox.
Adjust it so Vagrant can connect to it as described here and here.
Provision it using your shell scripts.
Install all the things you would find useful to have on this VM.
Use Vagrant to package it as a base box as described here.
After packaging it with Vagrant you will get a Vagrant base box file with .box extension. You can then pass this to your team mates (usb, network share, ftp etc.) and they can add it to their Vagrant installation and use it. Whenever they will do Vagrant up they will get fully provisioned VM in VBox with all the stuff you have packaged to it. Vagrant also gives you versioning capabilities. If properly configured whenever you will create new version of base box everybody who is using it will be notified and would be able to download and use new version of your box.
Hope I understood your problem correctly and this will help to solve it.

Vagrant Best Practice - Persistance

I like how through vagrant I can spin up my machine, configure it and get to coding. However when I do vagrant halt, and then do a vagrant up again, it rebuilds my machine from the base box. All the new stuff I installed, my project repository is gone.
I can see that the virtual machine still exists in virtual box and I can use it from there, but I want to use vagrant to manage it and access it while keep the persistence of the disk as I would accessing it directly from virtual box. My host is windows, my guest is precise64.
Thoughts?
Stephen
Maybe you want to use vagrant suspend? (via)

Resources