As you readers probably know, I can’t stand XAMPP and MAMP, being two steaming piles of crap, and have long advocated that you set up VirtualBox & Vagrant, then head over to http://www.puphpet.com, fill in the forms to configure your VM, generate the config.yaml, and then unzip it and run ‘vagrant up’ to install it. Brilliant so far.
Yesterday I had a total downer of a day, trying to run an old legacy PHP 5.3 app. PuPHPet doesn’t have the EOL PHP 5.3, so at first I settled as a one off for MAMP, but it was slow and horrible.
Then I thought, wait! If I don’t configure Apache or PHP in puphpet, I could get a box up and install 5.3 myself. That’s when I discovered the awesomeness of the puphpet/files folder.
The only thing I used in there was the ssh keys. But there are empty folders waiting for .sh files (shell scripts) to be dropped in.
So for this box, I created exec-once/install-stuff.sh which contained the following:
#!/bin/bash yum -y install httpd php yum -y install php-mysql php-devel php-gd php-pecl-memcache php-pspell php-snmp php-xmlrpc php-xml
Then upon running vagrant provision, it not only looked for changes in config.yaml, but it checks for changes in these files too!
I then made set-vhosts.sh, and import-database.sh, which look like these:
#!/bin/bash echo " =========================================== Adding vhosts to /etc/httpd/conf/httpd.conf =========================================== " echo " <VirtualHost *:80> DocumentRoot /var/www/fife/web ServerName fife ErrorLog /var/www/fife/log/error.log <Directory "/var/www/fife"> Options -Indexes +FollowSymLinks Order allow,deny Allow from all AllowOverride All </Directory> </VirtualHost> " >> /etc/httpd/conf/httpd.conf
#!/bin/bash mysql -u root --password=123 --database=fortdev < /var/www/fife/data/sql_scripts/symf_fortdev.sql
I take it by now you get the idea! So now you can totally destroy your VM, and put any customisations in these shell scripts, so your full setup can be back up in 5 minutes flat with a vagrant up and vagrant provision!!!
You can then also start thinking about using puPHPet for deploying your setup to your production server 🙂 There’s a vagrant plugin called Vagrant Managed Servers, which will take care of that for you. https://github.com/tknerr/vagrant-managed-servers . I haven’t looked at it yet, but of course you can expect a blog post on it here when I figure it all out!!