Pivotal Cloud Foundry
A Developer’s Perspective
What is Cloud Foundry?
• Cloud Foundry is a open source
• Cloud Foundry is a platform for
developing and running cloud
• 12 Factor Apps (http://12factor.net)
What is Cloud Foundry?
• Works with many languages and
• A platform that allows you to
automatically provision resources.
• Enables continuous integration/
• Allows you to focus on writing cloud
• Java - Grails, Play, Spring, or any other JVM-based language or framework
• Ruby - JRuby, Rack, Rails, or Sinatra
• PHP - Cake, Symfony, Zend, Nginx, or HTTPD
• Python - Django or Flask
What is Pivotal Cloud Foundry?
• Pivotal Cloud Foundry is a reference
implementation of Cloud Foundry for
• Open source software provides the
basis for the Pivotal Cloud Foundry
• Pivotal offers additional commercial
features, enterprise services,
support, docs, certs, etc.
Cloud Foundry vs PCF
• PCF is easier to install
• Has nicer web GUI.
• Additional features like auto-scaling,
LDAP/AD (SAML) support, metrics
server, notiﬁcations, Ops Metrics.
• Many of the services come installed
by default (MongoDB, Neo4J,
RabbitMQ, Redis, etc).
Pivotal Web Services (PWS)
• Hosted version of PCF.
• Exactly the same user experience /
• Register for a free trial account.
• (Recommend using Chrome)
Logical way of organising users and resources
• Mainly interface using the Command Line Interface (CLI)
• Download the CF CLI here: https://console.run.pivotal.io/2/tools
• Alternative download: https://github.com/cloudfoundry/
• Unzip and copy cf to C:\windows
• Add the following environment variables:
• https_proxy=http://PMCC749I:[email protected]:8080
Login to PWS
• Start Terminal ( + R, type ‘cmd’)
• cf -v (gets version)
• cf help (gets list of commands)
• cf help
• cf login -a api.run.pivotal.io
• cf target (ﬁnd out which server)
• You will be prompted for your Email
Create a PHP App
• cd \Users\\
• mkdir demo
• cd demo
• notepad index.php
• cf push
• eg. cf push sp-miccheng-demo1
• Visit the website: http://.cfapps.io
• eg. http://sp-miccheng-demo1.cfapps.io
What happens when you cf push?
1. Files in folder / local build artefacts are uploaded to CF (PWS).
2. Auto detection of type of apps you are deploying, appropriate
buildpack is installed and a “droplet” (Cloud Foundry unit of
execution) is build.
3. Droplet build in a staging area and stored in blob store.
4. Droplet is deployed to droplet execution agent and application is
started (route is allotted).
• Buildpacks are used to detect the type of application you are
• It sets up the the proper execution environment on Cloud Foundry.
• Only used during the build / staging time - not in the running app.
• See available buildpacks: cf buildpacks
Hostname & Domains
• All CF apps use a shared domain by default (eg. cfapps.io).
• When we deploy an app, we also declare a hostname (eg. sp-
• The combo and hostname + domain = route
• Hostname can be conﬁgured in CLI or manifest.yml.
• You can also add custom routes manually to apps.
Application Start Command
• Each buildpack has a default command to start your application.
• To override default start command:
• cf push my-app -c “node server.js”
• To reset to the buildpack start command:
• cf push my-app -c “null”
• Application manifests tell cf push what to do with applications.
• This includes everything from how many instances to create and
how much memory to allocate to what services applications should
• YAML format.
• Online Generator: http://cfmanigen.mybluemix.net
Scaling a CF app
• Horizontal scaling - adding more instanced
• cf scale -i
• Vertical scaling - adjust disk space limit and memory limit
• cf scale -k 512M
• cf scale -m 1G
• cf push
• cf scale -i 2
• Application conﬁgurations as environment variables.
• How CF runtime communicates with a deployed app about the
• cf env
• Use the manifest ﬁle to add environments.
• You can also set using CLI: cf set-env OMG “oh my god”
• View what kinds of services are available
• cf marketplace
• Creating a service instance
• cf create-service
• Example: cf create-service elephantsql turtle miccheng-db
• See created services: cf services
• See details of a service: cf service
• Bind service instance to app instances:
• cf bind-service
• This will add env variables to the app instances.
Logs / Events
• Tailing logs: cf logs
• Recent logs: cf logs --recent
• Logs can be drained to external log aggregators (eg. PaperTrail,
• Signiﬁcant System Events: cf events
Login to app container
• All apps run in a linux container (LXC)
• You can SSH into the container if you need to take a look at what’s
going on (eg. troubleshooting, verify ﬁle version, etc)
• cf ssh -i
• User-provided services - enable developers to use services that are
not available in the marketplace with their applications running on
• Managed Services for Cloud Foundry - services integrated with
Cloud Foundry via APIs, and enable end users to provision reserved
resources and credentials on demand.