HHVM/nginx Vagrant Bootstrap and Provisioning Script

Vagrant is an awesome tool, it allows you to provision and manage virtual machine instances, configured within a project, from the command line.

This is a bootstrap script to configure a virtual machine to use HHVM/nginx, proxied locally with Vagrant. This can also be modified to provision a non-vagrant Ubuntu instance.

#!/usr/bin/env bash

###### -- Installs and configures HHVM to run on nginx


### Add Dependency Repos
echo '    -=-=- Adding Dependency Repositories and Updating Packages'

    sudo add-apt-repository -y ppa:nginx/stable
    apt-get update


### Install Essentials
echo '    -=-=- Installing Essentials...'

    apt-get install -y unzip vim git-core curl wget build-essential python-software-properties


### Install nginx
echo '    -=-=- Installing nginx...'

    apt-get -y install nginx


### Install HHVM
echo '    -=-=- Installing HHVM...'

    wget -O - http://dl.hhvm.com/conf/hhvm.gpg.key | sudo apt-key add -
    echo deb http://dl.hhvm.com/ubuntu trusty main | sudo tee /etc/apt/sources.list.d/hhvm.list
    apt-get update
    apt-get install -y hhvm


### Post-install HHVM scripts
echo '    -=-=- Running HHVM Post-Install Scripts...'

    /usr/share/hhvm/install_fastcgi.sh
    update-rc.d hhvm defaults
    service hhvm restart

    /usr/bin/update-alternatives --install /usr/bin/php php /usr/bin/hhvm 60


### Configure Virtual Hosts
echo '    -=-=- Configuring Virtual Hosts...'

    # Remove Defaults
    sudo rm /etc/nginx/sites-available/default
    sudo rm /etc/nginx/sites-enabled/default

    # Create WebSockets-friendly Virtual Hosts Entry
    echo '

        server {

            listen 80 default_server;

            root /vagrant;
            index index.html index.htm index.php;

            access_log /var/log/nginx/vagrant.access.log;
            error_log /var/log/nginx/vagrant.error.log;

            large_client_header_buffers 8 32k;

            location / {

                try_files $uri $uri/ /index.php?$query_string;

            }

            location = /favicon.ico { log_not_found off; access_log off; }
            location = /robots.txt  { log_not_found off; access_log off; }

            error_page 404 /index.php;   

                include hhvm.conf;

        }

    ' > /etc/nginx/sites-available/vagrant

    # Symlink into 'Sites Enabled
    ln -s /etc/nginx/sites-available/vagrant /etc/nginx/sites-enabled/vagrant

    # Restart nginx
    service nginx stop
    service nginx start

    # Add entry to Hosts
    echo '127.0.0.1 vagrant' >> /etc/hosts