• Welcome to PuPHPet

    A simple GUI to set up virtual machines for Web development.

    Easily share with friends and coworkers

    Everything is controlled via a simple-to-read YAML file, and comes packaged in a small ZIP archive.

    Deploy to any server in the world!

    Native support for Rackspace, Digital Ocean, Linode, and more! Free plugin to deploy to any SSH-enabled server.

    Open sourced, MIT licensed.

    Want to help out?

    Get started right away. It's free!

    About This Project

    A little bit of history.

    Howdy!

    My name is Juan. I like building things people love to use. I hope you enjoy PuPHPet!

    What's all this about, then?

    This is a gui configurator for the Vagrant automation tool. It uses Puppet as the provisioning backend.

    What is Vagrant/Puppet and why should I care?

    I used to develop locally on a virtual machine. In fact, I wrote a length, detailed step-by-step tutorial (Setting Up a Debian VM, Step by Step) that goes through the process from beginning to end on setting up a Debian VM. It works wonderfully, and I love editing my files on my daily OS (Windows back then, OS X now), and running the applications within a proper environment.

    The first problem is obvious: there is a lot of setup involved. Just look at that tutorial. From beginning to end it may take upward of an hour to do the whole process! What happens if you mess up somewhere? You have to start all over!

    The next problem comes after you've got the VM up and running. I had to be very careful when making changes to the system, because I was afraid of screwing it up and having to either restart it from scratch or googling trying to undo the damage.

    The third large issue is, how to properly share my environment with other developers? Do I really want to upload this multi-GB file? That's a big pain in the butt!

    Vagrant and Puppet takes care of all these issues, and more, for you!

    The Debian tutorial can be written once, and run multiple times. I no longer have to worry about damaging my VM environment - if I screw something up I can destroy it, re-run Vagrant, and within 3 minutes I have a fully working environment once again! To share, I simply point developers to my Github repo where they download appx. 50KB of text files and run Vagrant on their own machines! Awesome!

    Want some more details?

    I wrote some fairly in-depth introductions to both Vagrant and Puppet:

    How do I know you won't give me some virus?!

    This app is completely open-sourced

    You can always clone it locally and run it off of your own machine to make sure there is nothing shady going on behind the scenes.

    Please fork me!

    I have been using Puppet/Vagrant for a little under two weeks as of Monday, May 13. If you are a Vagrant or Puppet maestro, I would love it if you could contribute some of your knowledge by submitting pull requests! If you don't know either Vagrant or Puppet you can still be kick-ass and submit requests for other things!

    Some FAQs

    How do you pronounce PuPHPet?

    The p is silent.

    What do I need to get started with PuPHPet?

    There are a few pre-requisites before you can begin your virtualized journey.

    First, you must install the necessary tools. They're easy to get and will only take a minute:

    Second … well, that's all you need, really.

    I downloaded the zip file, now what?

    Using the terminal, or cmd line, cd into your extracted directory and run $ vagrant up. This will kick-off the initial process.

    Vagrant will download the box file, which can take a few minutes. It will only have to do this once, even if you create separate environments later on.

    Then, it will hand control over to Puppet which will begin setting up your environment by installing required packages and configuring tools as desired.

    You will then be able to ssh into your new box with $ vagrant ssh. You can also access any virtual hosts you created by editing your hosts file and creating entries for the Box IP Address and Server Name you provided during configuration (ex: 192.168.56.101 puphpet.dev www.puphpet.dev). To shut down the VM, simply run $ vagrant halt. To start it back up run $ vagrant up again. Destroy it with $ vagrant destroy.

    Further customizations with config.yaml

    I have completely rewritten PuPHPet to take advantage of a built-in configuration tool for Puppet called Hiera. Simply look inside your downloaded folder and open puppet/config.yaml. This is the magical file that controls everything!

    For example, if you want to have more OS-level packages installed (like vim, curl, git, etc) simply add more packages to server.packages. The exact same process exists for apache.modules.

    To create a new Apache or Nginx vhost, simply copy/paste the one you may have created and customize to your needs.

    Attention: if you see some sections with non-sensical array keys (ex: rIreAN33ne2a) that means they have to be unique! If you copy/paste to add new settings, you must ensure you change this unique key to some other random string! Bad Things Will Happen if you don't.

    Learn you some Vagrant

    You may want to learn the basics of Vagrant CLI by going here. You really only need to learn the very basics - that is what I created this app for!

    How do I update my hosts file?

    You will need to open and edit your hosts file with a text editor like notepad, sublime_text, nano, etc. The location of the hosts file varies by operation system.

    Windows users could look here: c:\windows\system32\drivers\etc\hosts

    Linux and Mac OSX users could look here: /etc/hosts.

    Example Entry: 192.168.56.101 puphpet.dev www.puphpet.dev

    Download Your Customized Archive

    Your server is ready to be spun up!

    Or see your custom YAML config file here

    Great! Now what?

    1. Extract the downloaded zip file
    2. Open a terminal window and go to the extracted folder
    3. Run $ vagrant up and go grab a coffee

    Read the instructions!

    After you run $ vagrant up you'll get a list of instructions. Please read them if you have any questions or problems! They will answer most of the frequently asked questions. If you open an issue on the github page, MAKE SURE TO PASTE YOUR config.yaml CONTENTS! I cannot help if I do not have this information! In fact, I will ignore your ticket until you add it!

    Follow on Twitter

    New features are added all the time. The best way to keep up to date is to follow @puphpet!

    The config file

    Everything in your VM is controlled via the puphpet/config.yaml file. Here, you can choose which packages you want installed and change the settings for many things.

    If you change anything, you can have it take effect within your virtual machine by running $ vagrant provision. If you make changes before you actually spin up your vm, the changes will be applied on your first $ vagrant up.

    Custom config file

    You can create a custom config file at puphpet/config-custom.yaml to override anything that you have defined in puphpet/config.yaml. This file is ignored by Git by default. Simply copy the structure from config.yaml and replace the values you want. You can also create completely new keys to define functionality not present in PuPHPet by default!

    The virtual machine will live inside your local PC. Click here for instructions.

    Free! Not as performant as VMWare or Parallels, but it is free! Download Virtualbox here.
    More performant than VirtualBox. Requires purchase of VMWare Fusion
    More performant than VirtualBox. Requires purchase of VMWare Workstation
    More performant than VirtualBox. Requires purchase of Parallels Desktop 9
    Machines
    Click to add a local machine
    This is the ID used within the Vagrantfile. It is only used for your internal identification.
    The hostname the machine should have. This answer lists all valid characters.
    IP address to use for accessing the VM. This is the
    Memory to assign to VM in megabytes (only integers)
    Number of CPUs to assign to VM (only integers)
    Forwarded Ports
    Click to add a machine forwarded port pair
    Port on Host to forward to VM. More information.

    Port on VM to accept from Host. This port is automatically added to iptables. More information.

    Shared Folders
    Click to add a shared folder

    Path your files are stored on host machine, more information.

    Windows users: You must use forward-slash c:/dev/vagrant/webroot or double back-slash c:\\dev\\vagrant\\webroot

    Path your hosts' files are mounted on guest machine, more information.
    This is the slowest option of all. More information.
    NFS is highly recommended for OSX and Linux! Make sure to install the
    Windows only, and highly recommended. More information.
    If you are on Windows you need rsync installed. The simplest way
    The host IP where the SMB mount is located. If this isn't specified, Vagrant will attempt to determine this automatically.
    The username used for authentication to mount the SMB mount. This is the username to access the mount, not the username of the account where the folder is being mounted to. This is usually your Windows username. If this isn't specified, Vagrant will prompt you for it.
    The password used for authentication to mount the SMB mount. This is the password for the username specified by smb_username. If this is not specified, Vagrant will prompt you for it. It is highly recommended that you do not set this, since it would expose your password directly in your config.yaml.
    A list of arguments to supply to rsync.
    Files or directories to exclude from the sync.
    Vagrant's rsync-auto will watch and automatically sync this folder.
    Vagrant's rsync-auto will not watch and automatically sync this folder.
    Proxy Options

    Requires installing the vagrant-proxyconf plugin: vagrant plugin install vagrant-proxyconf

    Click here for more information.

    A new server will be spun up at Rackspace. Click here for instructions.

    Username you use to login to Rackspace

    The Rackspace server will not be accessible without your

    The username associated with the private key entered.
    Your public key is also required.
    Machines
    Click to add a Rackspace machine
    This is the ID used within the Vagrantfile. It is only used for your internal identification.
    The hostname the machine should have. This answer lists all valid characters.
    Name your Rackspace server as it will appear in the Rackspace Control Panel.
    Choose the one closest to you, or your target audience!
    Pricing information. Rackspace charges by the hour, but also shows what a full month would cost.
    Shared Folders
    Click to add a shared folder

    Path your files are stored on host machine,

    Path your hosts' files are uploaded to on guest machine, more information.

    A new server will be spun up at Digital Ocean. Click here for instructions.

    Change if you already have an SSH key you would like to use. Leave as default otherwise.

    The Digital Ocean server will not be accessible without your

    The username associated with the private key entered.
    Machines
    Click to add a Digital Ocean machine
    This is the ID used within the Vagrantfile. It is only used for your internal identification.
    The hostname the machine should have. This answer lists all valid characters.
    Choose the one closest to you, or your target audience!
    Pricing information. Digital Ocean charges by the hour, but also shows what a full month would cost.
    Shared Folders
    Click to add a shared folder

    Path your files are stored on host machine,

    Path your hosts' files are uploaded to on guest machine, more information.

    A new server will be spun up at Linode. Click here for instructions.

    The username associated with the private key entered.

    The Linode server will not be accessible without your

    Change if you already have an SSH key you would like to use. Leave as default otherwise.
    Machines
    Click to add a Linode machine
    This is the ID used within the Vagrantfile. It is only used for your internal identification.
    The hostname the machine should have. This answer lists all valid characters.
    Name your Linode server as it will appear in the Linode Control Panel.
    Choose the one closest to you, or your target audience!
    Pricing information. Linode charges by the hour, but also shows what a full month would cost.
    Shared Folders
    Click to add a shared folder

    Path your files are stored on host machine,

    Path your hosts' files are uploaded to on guest machine, more information.

    A new server will be spun up at Amazon. Click here for instructions.

    Get it here. You can leave this blank and fill it in manually in your config.yaml if you want.
    Get it here. You can leave this blank and fill it in manually in your config.yaml if you want.
    Machines
    Click to add an AWS machine
    This is the ID used within the Vagrantfile. It is only used for your internal identification.
    The hostname the machine should have. This answer lists all valid characters.
    The Key Pair name from here.

    The EC2 server will not be accessible without your

    Choose the one closest to you, or your target audience!

    The AMI must be available to the region and size

    You must know what username your chosen AMI requires for initial boot up!
    Assign security groups to this instance. Get them here.
    The subnet to boot the instance into, for VPC. Get them here.
    Assign an elastic IP address to this instance. Get them here.
    Shared Folders
    Click to add a shared folder

    Path your files are stored on host machine,

    Path your hosts' files are uploaded to on guest machine, more information.

    A new server will be spun up at Google Compute Engine. Click here for instructions.

    The email address provided by your service account.

    The path to the service account private

    The GCE server will not be accessible without your

    The username associated with the private key entered.
    Your public key is also required.
    The ID of your project.
    Machines
    Click to add a GCE machine
    This is the ID used within the Vagrantfile. It is only used for your internal identification.
    The hostname the machine should have. This answer lists all valid characters.
    Name your Google Compute Engine instance as it will appear in the Developer Console.
    Choose the one closest to you, or your target audience!
    Pricing information. Google Compute Engine charges by the hour, but also shows what a full month would cost.
    Tags for this machine. Comma-separated.
    Shared Folders
    Click to add a shared folder

    Path your files are stored on host machine,

    Path your hosts' files are uploaded to on guest machine, more information.

    Do not create a server with Vagrant, simply run Puppet.

    Included in your generated archive is standalone-puppet.sh.

    Upload this file and all files inside the puphpet directory to your remote server under opt.

    You can use the following rsync command:

    LOCAL_PUPHPET_DIR='/path/to/puphpet/directory'
    SSH_KEY='/path/to/id_rsa
    SSH_USERNAME='ssh_username'
    IP_ADDRESS=123.123.123.123
    
    rsync -azO --no-perms -e "ssh -i ${SSH_KEY}" \
        ${LOCAL_PUPHPET_DIR} ${SSH_USERNAME}@${IP_ADDRESS}:/opt

    Your directory tree should end up looking like:

    opt
    ├── puphpet
    │   ├── config.yaml
    │   ├── files
    │   ├── puppet
    │   ├── shell
    │   └── standalone-puppet.sh
                    

    Make standalone-puppet.sh executable with: chmod +x /opt/puphpet/standalone-puppet.sh

    Finally, you may kick PuPHPet off by running /opt/puphpet/standalone-puppet.sh

    You must run this as either root or a sudo-enabled user.

    No exec-* files are run via this method!

    You are responsible for running any shell scripts before and after.

    System Packages

    Install system packages

    Packages to install via the OS package manager, separated by comma. Do not add Apache/Nginx or PHP here - you will choose those later.

    Users & Groups

    Add users & groups to server

    Add groups here. Not all groups require users.

    Add users here. Not all users require groups, but if you want to add a user to a group, the group must be listed above in the Groups section.

    The required format for users to be added to groups is {USER}:{GROUP}. If you want to create a user without assigning to a group, simply use {USER}. You can also assign a user to multiple groups using {USER}:{GROUP}:{GROUP} - a user can belong to as many groups as you want.

    User home directories will be placed at /home/{USER}.

    Locale

    Set system locale

    Per the Debian Locale wiki it is highly recommended to leave your default locale empty.
    Add as many as you want to support here.
    Per the Debian Locale wiki it is highly recommended to leave your default locale empty.

    Firewall

    Open select ports

    Warning: This is for fairly advanced use! Try to only open ports as you need them. The SSH port (usually 22 and defined in vagrantfile.ssh.port) is automatically opened for you.
    Firewall Rules
    Click to add a firewall rule

    Resolv

    Configure resolv.conf

    Manage your /etc/resolv.conf file.

    Full details can be seen here.

    List of nameservers, up to 3. Queried in order listed.

    If blank defaults to $::domain in Puppet.

    List of search domains, up to six domains with a total of 256 characters.

    Cron Jobs

    Add cron jobs

    The user must exist. root is a valid option. If you're deploying locally, vagrant is also valid, if deploying remotely then enter the ssh username you chose in the Deploy Target area. If you'd like a different user make sure to add them here.

    If you don't define a user, the user that runs Puppet will be used by default. This user has root access, and most likely is root.

    Minute, hour, day and month values can all be left blank, as long as one of them is not blank. e.g. hour, day and month can be blank if minute has a value.

    Cron Jobs
    Click to add a cron job

    Custom Files

    Information on dotfiles and custom executable bash files

    dotfiles

    You can add all your dot files ( .bash_aliases, .vimrc, .gitconfig, etc), to the puphpet/files/dot/ folder that will appear after you extract your generated zip file.

    During initial startup, they will automatically be copied into the VM. There is a sample .bash_aliases file there for you to start with - overwrite at will!

    Custom Bash Files

    You can run your own custom code after the VM finishes provisioning by adding files to the puphpet/files/exec-always, puphpet/files/exec-always-unprivileged, puphpet/files/exec-once, puphpet/files/exec-once-unprivileged, puphpet/files/startup-always, puphpet/files/startup-always-unprivileged, puphpet/files/startup-once and puphpet/files/startup-once-unprivileged folders.

    Files are executed in alphabetical order, and filenames must end in .sh. Files within exec-once-* are run before files within exec-always-*, and files within startup-once-* are run before files within startup-always-*. Files in exec-once-* and exec-always-* are run before files in startup-once-* and startup-always-*.

    Files within *-unprivileged are run as the default user while the other ones area run using sudo. Files within *-unprivileged are run after all other files on the same running order as "privileged" files.

    Files within exec-always-* will run on initial $ vagrant up and all $ vagrant provision, while files within exec-once-* will run only the first time you run Vagrant, unless you SSH into the VM and remove the /.puphpet-stuff/exec-once-ran and/or /.puphpet-stuff/exec-once-unprivileged-ran files and re-run Vagrant.

    Files within startup-always-* will run on each $ vagrant up, while files within startup-once-* will only run on the next time you run Vagrant, unless you SSH into the VM and remove the /.puphpet-stuff/startup-once-ran and/or /.puphpet-stuff/startup-once-unprivileged-ran files and re-run Vagrant.

    You cannot install Apache with Nginx. Apache will be deselected.

    Virtual Hosts
    Click to add an Nginx virtual host
    Don't forget to update your computer's hosts file!
    Separated by comma.
    Root directory of your web project. Can be different from each vhost's root directory.
    80 for normal browsing, if you choose another append it to the URL in your browser, eg: http://awesome.dev:1337
    Value in megabytes (1m = 1 megabyte). 0 = disabled
    SSL Options

    Let’s Encrypt is a new Certificate Authority: It’s free, automated, and open.

    Generates a valid SSL certificate. Automatically renews the certificate once a month. It's awesome!

    More information

    This will only work on a public domain!

    Do not choose this option for local development domains.

    THE DOMAIN MUST BE PUBLIC AND REACHABLE FROM THE INTERNET.

    If you do not know your server's IP address ahead of time, $ vagrant up may fail initially. You need to assign your domain to the new server via an A record or a floating IP address. As long as your domain resolves to the created server this will work!

    Simply run $ vagrant provision once the domain is resolving properly!

    Make sure to also add this domain to the Let's Encrypt tab by clicking here!

    Forwards all non-SSL traffic to SSL vhost.

    Absolute path to SSL Certificate File. Usually ends in .crt. Leave blank to use a generic one. DO NOT LEAVE BLANK FOR PRODUCTION.

    Absolute path to SSL Certificate Key File. Usually ends in .key. Leave blank to use a generic one DO NOT LEAVE BLANK FOR PRODUCTION.

    Should be different from the normal non-SSL Port chosen above!
    Forwards all non-SSL traffic to SSL vhost.
    Virtual Host Rewrites
    Click to add a virtual host rewrite
    Virtual Host Location
    Click to add a virtual host location

    Best practices suggest your vhost's root directory is not the same as each location's root directory.

    Enables directory listings.
    Designates location as internal-only. See nginx documentation for more details.
    The last file should be the accessor to your PHP script or front controller. More information.
    name value, separated by comma. Unlike Apache, each variable must have a value.
    name value, separated by comma. More information.
    name value, separated by comma. More information.
    Location Rewrites
    Click to add a location rewrite rule

    Best practices suggest your vhost's root directory is not the same as each location's root directory.

    Enables directory listings.
    Designates location as internal-only. See nginx documentation for more details.
    The last file should be the accessor to your PHP script or front controller. More information.
    name value, separated by comma. Unlike Apache, each variable must have a value.
    name value, separated by comma. More information.
    name value, separated by comma. More information.
    Location Rewrites
    Click to add a location rewrite rule

    Best practices suggest your vhost's root directory is not the same as each location's root directory.

    Enables directory listings.
    Designates location as internal-only. See nginx documentation for more details.
    The last file should be the accessor to your PHP script or front controller. More information.
    name value, separated by comma. Unlike Apache, each variable must have a value.
    name value, separated by comma. More information.
    name value, separated by comma. More information.
    Location Rewrites
    Click to add a location rewrite rule

    Best practices suggest your vhost's root directory is not the same as each location's root directory.

    Enables directory listings.
    Designates location as internal-only. See nginx documentation for more details.
    The last file should be the accessor to your PHP script or front controller. More information.
    name value, separated by comma. Unlike Apache, each variable must have a value.
    name value, separated by comma. More information.
    name value, separated by comma. More information.
    Location Rewrites
    Click to add a location rewrite rule
    Proxy Upstreams
    Click to add an Nginx proxy upstream
    Proxies
    Click to add an Nginx proxy

    You cannot install Apache with Nginx. Apache will be deselected.

    proxy_fcgi is required for PHP.

    ssl is automatically added when you create an SSL vhost below. Do not add it here.

    Shared Folders
    Click to add an Apache virtual host
    Don't forget to update your computer's hosts file!
    Separated by comma.
    Location of your site's index.php file, or other landing page.
    80 for normal browsing, if you choose another append it to the URL in your browser, eg: http://awesome.dev:1337
    name value, separated by comma.
    File must exist inside VM on initial $ vagrant up! The custom fragment would be added here.
    SSL Options

    Let’s Encrypt is a new Certificate Authority: It’s free, automated, and open.

    Generates a valid SSL certificate. Automatically renews the certificate once a month. It's awesome!

    More information

    This will only work on a public domain!

    Do not choose this option for local development domains.

    THE DOMAIN MUST BE PUBLIC AND REACHABLE FROM THE INTERNET.

    If you do not know your server's IP address ahead of time, $ vagrant up may fail initially. You need to assign your domain to the new server via an A record or a floating IP address. As long as your domain resolves to the created server this will work!

    Simply run $ vagrant provision once the domain is resolving properly!

    Make sure to also add this domain to the Let's Encrypt tab by clicking here!

    To redirect all non-SSL traffic to SSL, create two vhosts - one on port 80 and one on port 443.

    Add Redirect permanent / https://{YOUR_VHOST_NAME}/ to the non-SSL vhost's Custom Directives to redirect all traffic to the SSL vhost.

    Absolute path to SSL Certificate File. Usually ends in .crt. Leave blank to use a generic one. DO NOT LEAVE BLANK FOR PRODUCTION.

    Absolute path to SSL Certificate Key File. Usually ends in .key. Leave blank to use a generic one. DO NOT LEAVE BLANK FOR PRODUCTION.

    Absolute path to SSL Certificate Chain File. Usually ends in .crt and may have the name of your SSL provider. Leave blank to use a generic one. DO NOT LEAVE BLANK FOR PRODUCTION.

    Absolute path to SSL CA Certificate. Leave blank to use a generic one. DO NOT LEAVE BLANK FOR PRODUCTION.

    To redirect all non-SSL traffic to SSL, create two vhosts - one on port 80 and one on port 443.

    Add Redirect permanent / https://{YOUR_VHOST_NAME}/ to the non-SSL vhost's Custom Directives to redirect all traffic to the SSL vhost.

    Virtual Host Directories
    Click to add a virtual host directory
    Should be same as vhost Document Root, or nested inside.
    Default index file: index.php, index.html, app.php, etc
    Separated by comma.
    Separated by comma.
    Separated by comma.
    File must exist inside VM on initial $ vagrant up! The custom fragment would be added here.
    Virtual Host Files Matches
    Click to add a filesmatch
    Regex allowed.
    Regex allowed.
    name value, separated by comma.
    File must exist inside VM on initial $ vagrant up! The custom fragment will be added here.
    Regex allowed.
    Regex allowed.
    name value, separated by comma.
    File must exist inside VM on initial $ vagrant up! The custom fragment will be added here.
    Regex allowed.
    Regex allowed.
    name value, separated by comma.
    File must exist inside VM on initial $ vagrant up! The custom fragment will be added here.

    Let's Encrypt

    Let’s Encrypt is a new Certificate Authority

    This email address will be displayed as the admin for your generated certificates

    The domains chosen below must match up with the domains you have selected to use Let's Encrypt SSL certificates in either the Nginx or Apache tabs!

    A cron job is made to automatically renew your certificate(s).

    Domains
    Click to add a host

    PHP is a toy language accidentally chosen to power some of the largest websites in the world. You probably want Ruby?

    All settings added to a single INI file. All settings.
    Make sure to define pid. All settings.
    Modules to be installed via PEAR. If you want beta or alpha versions of a package, append it to the name: log -> log-beta
    Modules to be installed via PECL. If you want beta or alpha versions of a package, append it to the name: apc -> apc-beta
    PHP-FPM Pools
    Click to add a PHP-FPM pool
    Make sure to define prefix and security.limit_extensions.
    Addons
    Composer will be available as a system service: $ composer

    Not using Xdebug? Still pounding out var_dump() and print_r() and echo?

    Xdebug and You: Why You Should be Using a Real Debugger

    CLI debugging will be automatically available. Simply run $ xdebug foo.php!

    Follow instructions here to setup PHPStorm to listen for a CLI connection. Other IDEs should be similar.

    Choose the one closest to you, or your target audience!
    Blackfire Options
    Agent Options
    Optional.
    Optional.
    Write logs to here. Defaults to stderr.
    Log verbosity level.
    Extension Options
    The agent timeout.
    Write logs to here. Optional.
    Log verbosity level.

    It is highly recommended not installing Xhprof on production servers.

    Logs will be available from http://<ip_address>/xhprof/xhprof_html.

    Add to top of your file:

    xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);

    Add to the bottom of your file:

    $xhprof_data = xhprof_disable();
    $appNamespace = 'some_namespace_here';
    include_once '/var/www/html/xhprof/xhprof_lib/utils/xhprof_lib.php';
    include_once '/var/www/html/xhprof/xhprof_lib/utils/xhprof_runs.php';
    $xhprof_runs = new XHProfRuns_Default();
    $xhprof_runs->save_run($xhprof_data, $appNamespace);

    These instructions grabbed from geekyboy.com

    WP-CLI will be available as a system service:

    $ wp

    Drush will be available as a system service:

    $ drush

    Ruby

    Configure Ruby versions and gems

    Ruby Versions
    Click to add a Ruby version
    Set this as system-wide default version. Don't set more than one version as default.
    The best way to manage a Ruby application's gems. More information
    Choosing Ruby <= 1.9.2 requires compiling. This will take time! All others have binaries available.
    To install a specific version, use {gem}@{version}. eg: rails@4.1.3. For latest just use {gem}.

    Python

    Configure Python versions and packages

    Ubuntu comes with Python 2.7, and CentOS comes with Python 2.6 out of the box.

    Any extra Python versions you choose will be installed using pyenv as system installations, not user installations.

    All extra Python versions require compiling. Choose sparingly - each additional version will add extra time to the initial $ vagrant up!

    At least one Python version must be installed to install packages via pip!

    To install a specific package version, use {package}@{version}.

    eg: Django@1.6.5. For latest just use {package}.

    All valid Packages list.

    Versions
    Click to add a Python version

    A platform for easily building fast, scalable network applications.

    CentOS 6 support has been dropped.

    To install a specific version, use {package}@{version}.

    eg: express@4.10.4. For latest just use {package}.

    If you install MariaDB, you cannot install MySQL

    Assign a password to the root user. Database will only be installed when a password is entered here.

    The preferred way to connect to your database is using a dedicated application like Sequel Pro (OS X), HeidiSQL (Windows), and MySQL Workbench (Cross Platform).

    Connect using SSH tunnel, username vagrant and SSH key generated at puphpet/files/dot/ssh/id_rsa. This key is generated after your initial $ vagrant up!

    Users
    Click to add a user
    Enter {username}@{host} for a specific host. If no host is defined, eg: {username}", it will automagically be converted to {username}@localhost
    Password is required for each user.
    Databases
    Click to add a database
    Optional. Make sure this file is inside the VM, or is inside a shared folder before running $ vagrant up
    Grants
    Click to add a grant
    User must be defined in section above!
    Can be *.* for all databases/tables, {database}.* for all tables in a specific database, or {database}.{table} for a specific table in a specific database.
    Choose "All" or a mix of the others.

    MariaDB is a drop-in replacement for MySQL. It is highly recommended you use MariaDB instead.

    Assign a password to the root user. Database will only be installed when a password is entered here.

    The preferred way to connect to your database is using a dedicated application like Sequel Pro (OS X), HeidiSQL (Windows), and MySQL Workbench (Cross Platform).

    Connect using SSH tunnel, username vagrant and SSH key generated at puphpet/files/dot/ssh/id_rsa. This key is generated after your initial $ vagrant up!

    Users
    Click to add a user
    Enter {username}@{host} for a specific host. If no host is defined, eg: {username}", it will automagically be converted to {username}@localhost
    Password is required for each user.
    Databases
    Click to add a database
    Optional. Make sure this file is inside the VM, or is inside a shared folder before running $ vagrant up
    Grants
    Click to add a grant
    User must be defined in section above!
    Can be *.* for all databases/tables, {database}.* for all tables in a specific database, or {database}.{table} for a specific table in a specific database.
    Choose "All" or a mix of the others.

    The world's most advanced open source database.

    Assign a password to the root user. Database will only be installed when a password is entered here.

    The preferred way to connect to your database is using a dedicated application like Valentina Studio (OS X) and pgAdmin (Cross Platform).

    Connect using SSH tunnel, username vagrant and SSH key generated at puphpet/files/dot/ssh/id_rsa. This key is generated after your initial $ vagrant up!

    To login via CLI, you must use $ psql {DBUSERNAME} -h 127.0.0.1 -d {DBNAME}

    Users
    Click to add a user
    Databases
    Click to add a database
    Grants
    Click to add a grant

    An open-source document database, and the leading NoSQL database

    IP Address Mongo will listen on. Will usually be local.
    Port will automatically be added to iptables.
    Databases
    Click to add a database

    An open source, advanced key-value store.

    The most widely deployed SQL database engine in the world.

    The preferred way to connect to your database is using a dedicated application like Valentina Studio (OS X), Sqliteman (Windows/Linux), SQLite Administrator (Windows), and SQLite Manager (FireFox).

    Connect using SSH tunnel, username vagrant and SSH key generated at puphpet/files/dot/ssh/id_rsa. This key is generated after your initial $ vagrant up!

    Databases
    Click to add a database

    Web and API based SMTP testing

    Minimum port number is 1000.

    MailHog will be available at http://{SERVER_IP_ADDRESS}:{HTTP_PORT}

    It is highly recommended not installing MailHog on production servers.

    A simple, fast work queue.

    Admin console for Beanstalk queue server, written in PHP. If installed, it will be available at http://{SERVER_IP_ADDRESS}/beanstalk_console/public/

    It is highly recommended not installing Beanstalk Console on production servers.

    More information.

    Set empty to disable binlog.

    Open source message broker software that implements AMQP.

    Assign a password to the root user. Database will only be installed when a password is entered here.
    Separated by comma.
    Users
    Click to add a user

    Solr powers the search and navigation features of many of the world's largest internet sites.

    Minimum port number is 1000.

    Solr will be available at
    http://{SERVER_IP_ADDRESS}:{HTTP_PORT}/solr.