Symfony2 +Vagrant performance - running slow - speeding up? - performance

I have started using vagrant with Symfony2.* to develop Web projects. I am using Windows, performance is very slow, because nfs mount isn't supported.
I've put cache into memory, which gave exotic boost, disabled xdebug (as posted here). However page still loads in more than 14 seconds in dev enviroment on windows machines. Any help would be appreciated.
Symfony >=2.3, PHP >= 5.4, Windows 7, Dell Precission m6700 quad-core i7/16GB/SSD

I've had the same performance problems, although with developing Drupal sites (also PHP based). Lately I've had quite some success by using the new rsync folder feature, which was introduced in Vagrant 1.5.
If you're working with a large number of files (10.000 - 100.000), I experienced that the built-in rsync-auto feature had a hard time keeping up. Switching to this neat little plugin saved my day. Just as the vagrant rsync folder feature, the gatling rsync plugin also only provides a one way sync (host -> guest). Since a lot of Drupal tools and compass generate files on guest, this plugin will help to sync the changes from guest to host.
If you're looking for a comparison: here you can find a recent benchmark blog post on rsync vs NFS.

Under Windows you absolutely need to use NFS OR RSYNC for sharing
folder with Vagrant.
RSYNC is an good solution when automatic mode is activated but it's
not bidirectional.
Try this config.yaml (make with PuPHPet): https://github.com/comexpertise/PuPHPet-config-lamp-webdev
Optimized for Windows: use NFS shares OR RSYNC.
Very speed but not free: Swith VirtualBox to VMWare with the Vagrant VMWare plugin (and use NFS or RSYNC sharing types).
Another solution (best performances): need to disable Vagrant sharing folders for use local file system of VM, and configure your favorite IDE/FTP for use SFTP and simply upload modified files (Netbeans can automatically upload new created/modified files)
Edit: Read my comment #2 before about newest versions of Vagrant. You need more speed? Try VMware + Vagrant VMware plugin, it's the best (y)

there is a great plugin enabling NFS on windows for Vagrant: vagrant-winnfsd
$ vagrant plugin install vagrant-winnfsd
https://github.com/GM-Alex/vagrant-winnfsd

Related

What we install in Virtualbox using Vagrant?

I just started learning Vagrant and succeeded in using it. I went through this vagrantbox.es where we "download" the "templates".
I have some doubts and would be great if anyone can explain me:
1) Vagrant --> My understanding is t hat it helps in automating installing the Virtual machines in Virtualization software like Virtualbox. Is this correct?
2) Now, as per the instructions that I followed in one of the video tutorials, we need to 'download' the VM, from this link.
My doubt is what are we downloading from the link in point #2? Using Vagrant, are we downloading a VM (and which gets installed into Virtualbox, for example?). Can't we use any .iso image and let vagrant install it? I am bit confused here.
Can anyone who has used vagrant explain what exactly are we downloading?
2) Now, as per the instructions that I followed in one of the video tutorials, we need to 'download' the VM, from this link.
Must be a bit dated tutorials, even though it is still a good reference, nowadays people will download boxes from https://atlas.hashicorp.com/boxes/search. The platform is officially supported by hashicorp but everyone can upload boxes into the platform, and you can directly reference boxes from atlas such as ubuntu/trusty64 in your vagrantfile and vagrant will know how to download the box and install it for you so it saves you some steps.
My doubt is what are we downloading from the link in point #2? Using Vagrant, are we downloading a VM (and which gets installed into Virtualbox, for example?). Can't we use any .iso image and let vagrant install it? I am bit confused here.
There are some 'official' box supported by hashicorp. Some organization like laravel pushes their own official boxes (like laravel/homestead and they support virtual box and vmware provider). It will be up to you to review the box you reference and make sure about its source.
you can create your own box from the OS iso using tool such as packer you will find plenty of available packer templates on github to create boxes for different OS flavors
And finally, are these images "full" OS plus the tools (e.g. tomcat, php as you described)
This will depend - in the case of Laravel they would provide a box with OS + the stack but generally the boxes are minimal (and you want to keep it this way). You will provision this using a tool of your choice (shell, ansible, puppet ...)

What vagrant really is

I'm puzzled by vagrant because I can't understand what it really is.
As we all know, if we want to run another system in our current system, we must install virtualbox and the mirror of that system such as CentOS.
When I installed vagrant it required virtualbox, so it can't be another virtualbox.
I thought it may be a system management just like bower but the vagrant box homestead which contains mysql, nginx, redis, php and memcache is just over 600M which is less than the smallest Linux system..
So I'm very confused. Could you tell me what the vagrant really is?
From the Vagrant website:
Vagrant is a tool for building complete development environments. With an easy-to-use workflow and focus on automation, Vagrant lowers development environment setup time, increases development/production parity, and makes the "works on my machine" excuse a relic of the past.
Basically Vagrant allows you to easily set up a virtual development environment. Everybody can build and configure pre-packaged environments called boxes and publish them for others to use. One of those boxes being homestead.
Here's an article that explains it more in-depth: What is Vagrant and Why should I care?
From the Vagrant website
Create and configure lightweight, reproducible, and portable development environments.
Instead of just installing your software requirements, Vagrant installs a whole development environment with similar hardware and software setup. So you never have to bother with your software not working on some other hardware during development.

Vagrant on Windows and access to shared folders

I'm working with Vagrant to leverage development environments for my developer teams. Their host OS is Windows, the Vagrant development box is Ubuntu. But most important, our boxes will be stored on our NAS, in folder shared with samba.
My own PC runs Fedora, and my Vagrant file contains this code:
config.vm.box_url = "smb://<nas>/boxes/ubuntu-1404-64.box"
From Fedora, this works. From Windows, this doesn't with the following error:
protocol smb not supported or disabled in libcurl
I've tried on Windows with file://, but this logically doesn't work. So, here I am, looking for a good solution. I know a possible workaround is to mount the network share on each Windows PC, but I don't like this solution.
Any idea? Thanks.
I'm not sure what's the status now, but in the past you could've done it by using file:////server/path/file, not sure if its still possible.
P.S #1
box_url setting can be an array of possible URLs. So try just putting all possible combination for every OS there to create multiplatform Vagrantfile.
P.S #2
We solved this by hosting the box over local httpd and not using NFS/SMB.

I have a windows pc, can I develop with LAMP?

I have a pc running windows but I want to use a linux server. Is there a way for me to develop my website on my computer before I rent space on a server? Also its probably important to note that I have no linux experience. Should I just stick with wamp?
Unless you specifically and purposely use .NET features in your PHP Application, then an application developed in WAMP will work fine on a LAMP Server as long as you have included all the same PHP plugins.
PHP is independent from Linux or Windows. 99.9% of the time you have to knowingly use features from the host OS.
You should try ubuntu in a virtualbox, there are lots of well written guides that'll get you up and running.
For best performance, use coLinux. Install a linux distro like ubuntu (easier for beginners) and you should be ok.
Yes. I have developed and maintained a website like this before. My development environment was WAMP and the server was a LAMP shared server. Shouldn't be a problem till your site is using fairly basic libraries and they are available both for windows/linux.
However as others mentioned, its wiser to have the development environment as close possible to the production environment. You don't hit any surprises that way. And hey its not difficult and involves no cost:
You can use dual boot to have linux as other operating system.
Depending on your machine, you can just install VirtualBox and install a Linux VM.

Sync Eclipse project between Linux and a windows computers

My situation is like this:
I got a windows computer and a Linux computer , and an Eclipse project I'd like to sync between them. What is the best way to do this ?
Thanks in advance
Use a version control system, such as git or Subversion.
This is how we do it:
We have a linux file server running Samba (this allows Windows boxes to connect to it), install a CVS server, point your Eclipse installations at your CVS directory.
Can't offer much more info than that, but I think an CVS / file server based on Linux (we use Ubuntu) and samba is the best option.

Resources