Thursday, July 04, 2013

CloudFoundry & PHP

Update:  This article is out-of-date.  Please see this updated article instead.

As a part of my job, I get to work on the support team for Pivotal's commercial offering of CloudFoundry. For those who don't know, CloudFoundry is an OpenSource PaaS (Platform as a Service) project that allows a developer to run his or her application without having to worry about managing and administering the back-end servers to run it.
For the past year and a half, CloudFoundry has been running as a free service for developers to test. In the last month, the service was updated to v2 or the second generation of the service. In addition to readying the service for production use, this update is a nice refinement of the system and adds some awesome new functionality in the system.
One of the nice new features is that users now have the ability to run any arbitrary applications on the system, regardless of CloudFoundry "officially" supporting that development stack. Borrowing a good idea from Heroku, CloudFoundry has added support for build packs. Build packs are a way that end users can customize the deployment environment for their applications. Out-of-the-box CloudFoundry provides build packs for Ruby, the JVM (Servlet, Spring, Grails, Play, Lift, etc...) and Node JS, but it does not end there. Users can specify an arbitrary build pack by specifying the "--buildpack" argument as they push their application to CloudFoundry. By using this argument, a user will indicate that a custom build pack should be used to build and deploy their application.
In an effort to learn more about the build pack system, I've created a new build pack for CloudFoundry to run PHP based applications. The build pack is hosted on Github here and instructions for using it can be found in the README.
With the PHP build pack, a user can push anything from a custom PHP application to phpMyAdmin or even Wordpress.
I encourage PHP developers to give it a shot, see how it works for them and post feedback to the Github project!