Introducing new staticfile-buildpack for running static sites on Cloud Foundry.

"We need a fast way to share out HTML/CSS prototypes"

$ cf push staticfile
Starting app staticfile in org demo / space demo as admin...
OK
-----> Using root folder
-----> Copying project files into public/
-----> Setting up nginx

urls: staticfile.cfapps.io

We were hosting a hands-on introduction to Cloud Foundry with a client's design team. Teaching them how to use Cloud Foundry, and how to use it early and often. Production is for week 1, not for the last week of a project.

This team produced HTML/CSS/JavaScript front ends. Locally they were dev/testing with Grunt, and using livereload to see their changes immediately in their browser.

Simple sharing

They wanted to share different branches/pull requests with internal clients/other teams. They now only need to push to their Cloud Foundry with a new app name:

touch Staticfile
cf push ourproject-branchname -m 64M

Root folder

Their build tools put their HTML/CSS/JavaScript in a subfolder dist. To target a subfolder as the root folder, add the following line to Staticfile:

root: dist

Basic authentication

They also wanted to be able to protect the sites with user:password basic authentication.

basic-auth

Simply create a Staticfile.auth file with each line containing user:encryptedpassword [readme] and push again.

http://www.htaccesstools.com/htpasswd-generator/ is a good site to generate the Staticfile.auth credentials.

For example, if the username & password were both bob, then Staticfile.auth would look like (see example app):

bob:$apr1$DuUQEQp8$ZccZCHQElNSjrg.erwSFC0

One line per user:encryptedpassword.

New buildpack

The solution for them was a new buildpack to make it very easy, and install it for everyone to share across the company.

$ cf buildpacks
Getting buildpacks...

buildpack
staticfiles_buildpack
java_buildpack
ruby_buildpack
nodejs_buildpack
go_buildpack
python_buildpack
php_buildpack

Public Cloud Foundry?

If your Cloud Foundry, such as Pivotal Web Services does not yet support this buildpack built-in then you can specify it when you deploy/push:

cf target api.run.pivotal.io
cf push myproject -m 64M -b https://github.com/cloudfoundry-community/staticfile-buildpack.git

Example apps

There are some example apps with different Staticfile included.

https://github.com/cloudfoundry-community/staticfile-buildpack/tree/master/test/fixtures

Learn more

Read the README to learn more.

If you are a Cloud Foundry administrator, read the installation section for uploading the latest versions.