SlideShare a Scribd company logo
PaaSing Your
Code Around
EMAIL: CHRIS@CTANKERSLEY.COM
TWITTER: @DRAGONMANTANK
1
Who Am I?
 Chris Tankersley
 Been Doing PHP for 9+ Years
 Lots of projects no one
uses, and a few that some do:
 https://github.com/dragonman
tank
2
What is PaaS?
3
Software as a Service (SaaS)
Software Package
Platform as a Service
Platform as a Service (PaaS)
Server Language Deployment Scripts
Infrastructure as a Service (IaaS)
Server Infrastructure Storage Network
4
Why use a PaaS?
 Offload the work to someone else
 Possibly (maybe) more cost effective
 Small shops don‟t have to hire as many people
 Scalability, both up and down
5
PaaS Workflow
Git
repo
Feature Branch
Feature Branch
Feature Branch
Run Paas
Deployment Your App Runs!
6
Basic Knowledge
 Just about all of them use git
 Just about all of them work best with a command
line
 Your OS doesn‟t matter, they all pretty much
support everything
 A server-side scripting language
 Bash, Ruby, Python
7
Other Considerations
 Where will uploaded files live?
 Does my app scale across multiple servers?
 How well does my application perform?
 Can I automate everything?
8
9
Let‟s set up a site on a
PaaS
 https://github.com/dragonmantank/paasing-
your-code-around
10
What I built
 Silex App that displayed user-supplied „texts‟ from
drunk elephants
 Silex
 Symfony Forms
 Ruckusing Migrations
 Twig
11
What did I want to find
out?
 How much code I had to change to get it to work
 How much of a pain was it to get the deployment
process set up
 How long the deployments took
 How easy the deployments were
 How easy things were to manage
12
What I did
 Created the basic app in vagrant
 Signed up for a PaaS
 Heroku
 Engineyard
 Redhat OpenShift
 Amazon ElasticBeanstalk
 Made the app work
 Each set of code is in paas/[service]
 You can fork the repo, checkout the branch, and
set up the config
13
Heroku
14
Heroku
 Heroku is a container-based PaaS
 Each container (dyno) is a little virtualized
environment
 “Supports” PHP 5.3.27 and Apache 2.2.25 out of
the box
 Has a command line interface for working with
your apps
15
Heroku – Creating an
Application
16
Heroku – Deploying an
App
 Push your branch to Heroku‟s master branch
17
Heroku – Getting it to
Work
 Heroku will only detect a PHP app if there is an
index.php file in the root
 Docroot is automatically set to the root of your
repo
 PHP is supported via a partnership with
Facebook, not that you‟ll find that on their site
 Had to add a custom Procfile, bootstrap files, and
Buildpack
 Composer is slooooooow. Sites took 2-15 minutes
to bootstrap
 Deploy hooks are done via the Procfile
18
Heroku – General Notes
 Extension support is hit or miss. You might need to
compile your own
 Since buildpacks actually set up an entire
environment, really study what buildpack you use
 Might want to commit vendor/ to your deploy
branch to speed things up
 While PHP 5.3.27 is the base install, you can
actually install any PHP via a buildpack
 Heroku uses ephemeral storage, so make sure all
your files are saved to something like S3
19
Engineyard
20
Engineyard
 Engineyard is an AWS-based PaaS
 You set up Environments, which are groups of
EC2 instances
 Supports PHP 5.4.17 and MySQL 5.5 out of the box
 Has a command line interface for working with
your apps
 Works with your VCS host to pull down and deploy
code
21
Engineyard – Creating an
Application
 Create a new application
 Select the Language
 Give it a Repo to pull from
 Give it a Name
 Tell it the docroot
 Add your deploy key to your git server
 Set up an Environment
 Give it a name
 Give it a type (Production, Development, etc)
 Select a DB
 Set up SSH keys
22
Engineyard – Deploying
an App
 Give it a branch name and click „Deploy‟
23
Engineyard – Getting it to
Work
 Had to add a deploy/ script to get the database
migrations to work
24
Engineyard – General
Notes
 You need to set up SSH keys to get into the boxes
 DB credentials are in
/data/[app_name]/shared/config/databases.yml
 They are also exposed through the $_SERVER array
 When you stop an instance without a public
IP, the IPs will change
 Since it‟s booting an EC2 instance, it‟s slow. Takes
10-15 minutes to provision the environment
(Deploys are much quicker)
 Natively supports Composer!
25
Redhat OpenShift
26
OpenShift
 OpenShift is a „cartridge‟ (container) PaaS
 Supports PHP 5.3.17 and MySQL 5.1 when using
the Zend Server cartridge
 Has a command line interface for working with
your apps
 The largest offering of platforms out of the test
PaaS‟s
27
OpenShift – Creating an
Application
28
OpenShift – Deploying an
App
 Push your branch to OpenShift‟s master branch
29
OpenShift– Getting it to
Work
 Had to fetch and merge their master branch
 Docroot is php/, so our deploy script changes that
 php-intl extension had too old of an ICU
version, so had to downgrade it through
Composer
 Could have completely redone PHP, like in Heroku
 Composer is not natively supported, so do it via
the deploy script
 Deploy script is bash, so fairly easy to work with
30
OpenShift – General Notes
 You need to set up SSH keys to get into the boxes
 Cartridge system is interesting and works well
 Does offer persistent storage, in the
$OPENSHIFT_DATA_DIR
31
AWS ElasticBeanstalk
32
ElasticBeanStalk
 It‟s a Rackspace-based PaaS!
33
ElasticBeanStalk
 It‟s a Rackspace-based PaaS!
 It‟s an AWS-based PaaS
 Supports PHP 5.4 out of the box, and Amazon RDS
for DB
 Has a nice command line interface
34
ElasticBeanstalk –
Creating an Application
 Log in AWS and go to ElasticBeanstalk
 Create an Application through their „eb‟ tool
 Go to your repo
 Run „eb init‟ and answer the questions
35
ElasticBeanstalk –
Deploying an App
 Run „eb branch‟ to assign your branch to an
environment
 Run „git aws.push‟ to deploy
36
ElasticBeanstalk – Getting
it to Work
 Had to run „eb init‟ and run through their
setup, even though the environment existed
 Had to run „eb branch‟ to assign the current
branch to an environment so that „git aws.push‟
would work
37
ElasticBeanstalk – General
Notes
 It‟s AWS, so provisioning the servers can take 10-15
minutes
 Supports Composer out of the box, which is nice
 Deploy hooks are done via their
container_commands
38
So What did I Learn?
39
Deploy Scripts Are Your
Friend
 While you‟ve got shell access, you still don‟t want
to do stuff manually
 Knowing Bash scripting was incredibly helpful
40
Understand Your Type of
PaaS
 Usually either container-based
 OpenShift
 Heroku
 Or Server-based
 ElasticBeanstalk
 Engineyard
 These work internally differently, so understand
how each works makes your life easier
41
Your Code Should Just
Work
 A good PaaS won‟t need you to modify your
code
 My code modifications were changing DB-
backends or making assumptions I shouldn‟t have
 Most of the differences in the sample code are
deploy scripts and the config file
 That‟s ignoring storage issues, which you might
need to work on
42
Questions? 43
Thank You!
 chris@ctankersley.com
 @dragonmantank
 https://joind.in/9070
44

More Related Content

PDF
构建高可用数据库监控系统
George Ang
 
PPTX
Teched 2013 监和控
Cheng Zhang
 
KEY
分享平台构建之旅
tblanlan
 
PDF
美团点评技术沙龙08 - 分布式监控系统实践
美团点评技术团队
 
PDF
2014 Hpocon 黄慧攀 upyun - 平台架构的服务监控
Michael Zhang
 
PDF
Zabbix による監視のあれこれ
Cosign930
 
PPTX
Monitor
daniieMS
 
构建高可用数据库监控系统
George Ang
 
Teched 2013 监和控
Cheng Zhang
 
分享平台构建之旅
tblanlan
 
美团点评技术沙龙08 - 分布式监控系统实践
美团点评技术团队
 
2014 Hpocon 黄慧攀 upyun - 平台架构的服务监控
Michael Zhang
 
Zabbix による監視のあれこれ
Cosign930
 
Monitor
daniieMS
 

Similar to PaaSing Your Code Around (20)

PDF
Midwest php 2013 deploying php on paas- why & how
dotCloud
 
PDF
Deploying PHP on PaaS: Why and How?
Docker, Inc.
 
PDF
Deploying PHP Applications to AWS Elastic Beanstalk
Boyd Hemphill
 
PDF
Rock Solid Deployment of Web Applications
Pablo Godel
 
ODP
Deploying your SaaS stack OnPrem
Kris Buytaert
 
PDF
From Heroku to Amazon AWS
Sebastian Schleicher
 
PDF
Modern websites in 2020 and Joomla
George Wilson
 
PPTX
DevOps with Elastic Beanstalk - TCCC-2014
scolestock
 
PDF
Deploy Python apps in 5 min with a PaaS
Appsembler
 
PDF
Evolution of deploy.sh
Leonid Mamchenkov
 
PDF
Hosting Ruby Web Apps
Michael Reinsch
 
PDF
Prototyping applications with heroku and elasticsearch
protofy
 
PDF
Deploying Symfony | symfony.cat
Pablo Godel
 
PDF
Modernize Your Drupal Development
Chris Tankersley
 
PDF
Modern web dev_taxonomy
kevin_donovan
 
KEY
Django deployment with PaaS
Appsembler
 
PDF
Public PaaS Throwdown!
Ronak Mallik
 
PDF
meetPHP#8 - PHP startups prototypes
Max Małecki
 
PDF
SymfonyCon Madrid 2014 - Rock Solid Deployment of Symfony Apps
Pablo Godel
 
PDF
A 60-mn tour of AWS compute (March 2016)
Julien SIMON
 
Midwest php 2013 deploying php on paas- why & how
dotCloud
 
Deploying PHP on PaaS: Why and How?
Docker, Inc.
 
Deploying PHP Applications to AWS Elastic Beanstalk
Boyd Hemphill
 
Rock Solid Deployment of Web Applications
Pablo Godel
 
Deploying your SaaS stack OnPrem
Kris Buytaert
 
From Heroku to Amazon AWS
Sebastian Schleicher
 
Modern websites in 2020 and Joomla
George Wilson
 
DevOps with Elastic Beanstalk - TCCC-2014
scolestock
 
Deploy Python apps in 5 min with a PaaS
Appsembler
 
Evolution of deploy.sh
Leonid Mamchenkov
 
Hosting Ruby Web Apps
Michael Reinsch
 
Prototyping applications with heroku and elasticsearch
protofy
 
Deploying Symfony | symfony.cat
Pablo Godel
 
Modernize Your Drupal Development
Chris Tankersley
 
Modern web dev_taxonomy
kevin_donovan
 
Django deployment with PaaS
Appsembler
 
Public PaaS Throwdown!
Ronak Mallik
 
meetPHP#8 - PHP startups prototypes
Max Małecki
 
SymfonyCon Madrid 2014 - Rock Solid Deployment of Symfony Apps
Pablo Godel
 
A 60-mn tour of AWS compute (March 2016)
Julien SIMON
 
Ad

More from Chris Tankersley (20)

PDF
8 Rules for Better Applications - PHP Tek 2025
Chris Tankersley
 
PDF
The Art of API Design - PHP Tek 2025, Chris Tankersley
Chris Tankersley
 
PDF
Docker is Dead: Long Live Containers
Chris Tankersley
 
PDF
Bend time to your will with git
Chris Tankersley
 
PDF
Using PHP Functions! (Not those functions, Google Cloud Functions)
Chris Tankersley
 
PDF
Dead Simple APIs with OpenAPI
Chris Tankersley
 
PDF
Killer Docker Workflows for Development
Chris Tankersley
 
PDF
You Got Async in my PHP!
Chris Tankersley
 
ODP
Docker for Developers - PHP Detroit 2018
Chris Tankersley
 
ODP
Docker for Developers
Chris Tankersley
 
ODP
They are Watching You
Chris Tankersley
 
ODP
BASHing at the CLI - Midwest PHP 2018
Chris Tankersley
 
PDF
You Were Lied To About Optimization
Chris Tankersley
 
ODP
Docker for PHP Developers - php[world] 2017
Chris Tankersley
 
ODP
Docker for PHP Developers - Madison PHP 2017
Chris Tankersley
 
ODP
Docker for Developers - php[tek] 2017
Chris Tankersley
 
ODP
Why Docker? Dayton PHP, April 2017
Chris Tankersley
 
PPTX
OOP Is More Then Cars and Dogs - Midwest PHP 2017
Chris Tankersley
 
PPTX
From Docker to Production - SunshinePHP 2017
Chris Tankersley
 
PPTX
Docker for Developers - Sunshine PHP
Chris Tankersley
 
8 Rules for Better Applications - PHP Tek 2025
Chris Tankersley
 
The Art of API Design - PHP Tek 2025, Chris Tankersley
Chris Tankersley
 
Docker is Dead: Long Live Containers
Chris Tankersley
 
Bend time to your will with git
Chris Tankersley
 
Using PHP Functions! (Not those functions, Google Cloud Functions)
Chris Tankersley
 
Dead Simple APIs with OpenAPI
Chris Tankersley
 
Killer Docker Workflows for Development
Chris Tankersley
 
You Got Async in my PHP!
Chris Tankersley
 
Docker for Developers - PHP Detroit 2018
Chris Tankersley
 
Docker for Developers
Chris Tankersley
 
They are Watching You
Chris Tankersley
 
BASHing at the CLI - Midwest PHP 2018
Chris Tankersley
 
You Were Lied To About Optimization
Chris Tankersley
 
Docker for PHP Developers - php[world] 2017
Chris Tankersley
 
Docker for PHP Developers - Madison PHP 2017
Chris Tankersley
 
Docker for Developers - php[tek] 2017
Chris Tankersley
 
Why Docker? Dayton PHP, April 2017
Chris Tankersley
 
OOP Is More Then Cars and Dogs - Midwest PHP 2017
Chris Tankersley
 
From Docker to Production - SunshinePHP 2017
Chris Tankersley
 
Docker for Developers - Sunshine PHP
Chris Tankersley
 
Ad

Recently uploaded (20)

PPTX
Smart Infrastructure and Automation through IoT Sensors
Rejig Digital
 
PPTX
cloud computing vai.pptx for the project
vaibhavdobariyal79
 
PPTX
AI and Robotics for Human Well-being.pptx
JAYMIN SUTHAR
 
PDF
Advances in Ultra High Voltage (UHV) Transmission and Distribution Systems.pdf
Nabajyoti Banik
 
PPTX
How to Build a Scalable Micro-Investing Platform in 2025 - A Founder’s Guide ...
Third Rock Techkno
 
PDF
How-Cloud-Computing-Impacts-Businesses-in-2025-and-Beyond.pdf
Artjoker Software Development Company
 
PDF
DevOps & Developer Experience Summer BBQ
AUGNYC
 
PDF
Using Anchore and DefectDojo to Stand Up Your DevSecOps Function
Anchore
 
PDF
Structs to JSON: How Go Powers REST APIs
Emily Achieng
 
PDF
How Open Source Changed My Career by abdelrahman ismail
a0m0rajab1
 
PDF
Doc9.....................................
SofiaCollazos
 
PDF
Building High-Performance Oracle Teams: Strategic Staffing for Database Manag...
SMACT Works
 
PDF
Presentation about Hardware and Software in Computer
snehamodhawadiya
 
PPTX
Coupa-Overview _Assumptions presentation
annapureddyn
 
PDF
Automating ArcGIS Content Discovery with FME: A Real World Use Case
Safe Software
 
PDF
Orbitly Pitch Deck|A Mission-Driven Platform for Side Project Collaboration (...
zz41354899
 
PPTX
The-Ethical-Hackers-Imperative-Safeguarding-the-Digital-Frontier.pptx
sujalchauhan1305
 
PDF
Best ERP System for Manufacturing in India | Elite Mindz
Elite Mindz
 
PDF
Oracle AI Vector Search- Getting Started and what's new in 2025- AIOUG Yatra ...
Sandesh Rao
 
PDF
NewMind AI Weekly Chronicles - July'25 - Week IV
NewMind AI
 
Smart Infrastructure and Automation through IoT Sensors
Rejig Digital
 
cloud computing vai.pptx for the project
vaibhavdobariyal79
 
AI and Robotics for Human Well-being.pptx
JAYMIN SUTHAR
 
Advances in Ultra High Voltage (UHV) Transmission and Distribution Systems.pdf
Nabajyoti Banik
 
How to Build a Scalable Micro-Investing Platform in 2025 - A Founder’s Guide ...
Third Rock Techkno
 
How-Cloud-Computing-Impacts-Businesses-in-2025-and-Beyond.pdf
Artjoker Software Development Company
 
DevOps & Developer Experience Summer BBQ
AUGNYC
 
Using Anchore and DefectDojo to Stand Up Your DevSecOps Function
Anchore
 
Structs to JSON: How Go Powers REST APIs
Emily Achieng
 
How Open Source Changed My Career by abdelrahman ismail
a0m0rajab1
 
Doc9.....................................
SofiaCollazos
 
Building High-Performance Oracle Teams: Strategic Staffing for Database Manag...
SMACT Works
 
Presentation about Hardware and Software in Computer
snehamodhawadiya
 
Coupa-Overview _Assumptions presentation
annapureddyn
 
Automating ArcGIS Content Discovery with FME: A Real World Use Case
Safe Software
 
Orbitly Pitch Deck|A Mission-Driven Platform for Side Project Collaboration (...
zz41354899
 
The-Ethical-Hackers-Imperative-Safeguarding-the-Digital-Frontier.pptx
sujalchauhan1305
 
Best ERP System for Manufacturing in India | Elite Mindz
Elite Mindz
 
Oracle AI Vector Search- Getting Started and what's new in 2025- AIOUG Yatra ...
Sandesh Rao
 
NewMind AI Weekly Chronicles - July'25 - Week IV
NewMind AI
 

PaaSing Your Code Around

  • 2. Who Am I?  Chris Tankersley  Been Doing PHP for 9+ Years  Lots of projects no one uses, and a few that some do:  https://github.com/dragonman tank 2
  • 4. Software as a Service (SaaS) Software Package Platform as a Service Platform as a Service (PaaS) Server Language Deployment Scripts Infrastructure as a Service (IaaS) Server Infrastructure Storage Network 4
  • 5. Why use a PaaS?  Offload the work to someone else  Possibly (maybe) more cost effective  Small shops don‟t have to hire as many people  Scalability, both up and down 5
  • 6. PaaS Workflow Git repo Feature Branch Feature Branch Feature Branch Run Paas Deployment Your App Runs! 6
  • 7. Basic Knowledge  Just about all of them use git  Just about all of them work best with a command line  Your OS doesn‟t matter, they all pretty much support everything  A server-side scripting language  Bash, Ruby, Python 7
  • 8. Other Considerations  Where will uploaded files live?  Does my app scale across multiple servers?  How well does my application perform?  Can I automate everything? 8
  • 9. 9
  • 10. Let‟s set up a site on a PaaS  https://github.com/dragonmantank/paasing- your-code-around 10
  • 11. What I built  Silex App that displayed user-supplied „texts‟ from drunk elephants  Silex  Symfony Forms  Ruckusing Migrations  Twig 11
  • 12. What did I want to find out?  How much code I had to change to get it to work  How much of a pain was it to get the deployment process set up  How long the deployments took  How easy the deployments were  How easy things were to manage 12
  • 13. What I did  Created the basic app in vagrant  Signed up for a PaaS  Heroku  Engineyard  Redhat OpenShift  Amazon ElasticBeanstalk  Made the app work  Each set of code is in paas/[service]  You can fork the repo, checkout the branch, and set up the config 13
  • 15. Heroku  Heroku is a container-based PaaS  Each container (dyno) is a little virtualized environment  “Supports” PHP 5.3.27 and Apache 2.2.25 out of the box  Has a command line interface for working with your apps 15
  • 16. Heroku – Creating an Application 16
  • 17. Heroku – Deploying an App  Push your branch to Heroku‟s master branch 17
  • 18. Heroku – Getting it to Work  Heroku will only detect a PHP app if there is an index.php file in the root  Docroot is automatically set to the root of your repo  PHP is supported via a partnership with Facebook, not that you‟ll find that on their site  Had to add a custom Procfile, bootstrap files, and Buildpack  Composer is slooooooow. Sites took 2-15 minutes to bootstrap  Deploy hooks are done via the Procfile 18
  • 19. Heroku – General Notes  Extension support is hit or miss. You might need to compile your own  Since buildpacks actually set up an entire environment, really study what buildpack you use  Might want to commit vendor/ to your deploy branch to speed things up  While PHP 5.3.27 is the base install, you can actually install any PHP via a buildpack  Heroku uses ephemeral storage, so make sure all your files are saved to something like S3 19
  • 21. Engineyard  Engineyard is an AWS-based PaaS  You set up Environments, which are groups of EC2 instances  Supports PHP 5.4.17 and MySQL 5.5 out of the box  Has a command line interface for working with your apps  Works with your VCS host to pull down and deploy code 21
  • 22. Engineyard – Creating an Application  Create a new application  Select the Language  Give it a Repo to pull from  Give it a Name  Tell it the docroot  Add your deploy key to your git server  Set up an Environment  Give it a name  Give it a type (Production, Development, etc)  Select a DB  Set up SSH keys 22
  • 23. Engineyard – Deploying an App  Give it a branch name and click „Deploy‟ 23
  • 24. Engineyard – Getting it to Work  Had to add a deploy/ script to get the database migrations to work 24
  • 25. Engineyard – General Notes  You need to set up SSH keys to get into the boxes  DB credentials are in /data/[app_name]/shared/config/databases.yml  They are also exposed through the $_SERVER array  When you stop an instance without a public IP, the IPs will change  Since it‟s booting an EC2 instance, it‟s slow. Takes 10-15 minutes to provision the environment (Deploys are much quicker)  Natively supports Composer! 25
  • 27. OpenShift  OpenShift is a „cartridge‟ (container) PaaS  Supports PHP 5.3.17 and MySQL 5.1 when using the Zend Server cartridge  Has a command line interface for working with your apps  The largest offering of platforms out of the test PaaS‟s 27
  • 28. OpenShift – Creating an Application 28
  • 29. OpenShift – Deploying an App  Push your branch to OpenShift‟s master branch 29
  • 30. OpenShift– Getting it to Work  Had to fetch and merge their master branch  Docroot is php/, so our deploy script changes that  php-intl extension had too old of an ICU version, so had to downgrade it through Composer  Could have completely redone PHP, like in Heroku  Composer is not natively supported, so do it via the deploy script  Deploy script is bash, so fairly easy to work with 30
  • 31. OpenShift – General Notes  You need to set up SSH keys to get into the boxes  Cartridge system is interesting and works well  Does offer persistent storage, in the $OPENSHIFT_DATA_DIR 31
  • 33. ElasticBeanStalk  It‟s a Rackspace-based PaaS! 33
  • 34. ElasticBeanStalk  It‟s a Rackspace-based PaaS!  It‟s an AWS-based PaaS  Supports PHP 5.4 out of the box, and Amazon RDS for DB  Has a nice command line interface 34
  • 35. ElasticBeanstalk – Creating an Application  Log in AWS and go to ElasticBeanstalk  Create an Application through their „eb‟ tool  Go to your repo  Run „eb init‟ and answer the questions 35
  • 36. ElasticBeanstalk – Deploying an App  Run „eb branch‟ to assign your branch to an environment  Run „git aws.push‟ to deploy 36
  • 37. ElasticBeanstalk – Getting it to Work  Had to run „eb init‟ and run through their setup, even though the environment existed  Had to run „eb branch‟ to assign the current branch to an environment so that „git aws.push‟ would work 37
  • 38. ElasticBeanstalk – General Notes  It‟s AWS, so provisioning the servers can take 10-15 minutes  Supports Composer out of the box, which is nice  Deploy hooks are done via their container_commands 38
  • 39. So What did I Learn? 39
  • 40. Deploy Scripts Are Your Friend  While you‟ve got shell access, you still don‟t want to do stuff manually  Knowing Bash scripting was incredibly helpful 40
  • 41. Understand Your Type of PaaS  Usually either container-based  OpenShift  Heroku  Or Server-based  ElasticBeanstalk  Engineyard  These work internally differently, so understand how each works makes your life easier 41
  • 42. Your Code Should Just Work  A good PaaS won‟t need you to modify your code  My code modifications were changing DB- backends or making assumptions I shouldn‟t have  Most of the differences in the sample code are deploy scripts and the config file  That‟s ignoring storage issues, which you might need to work on 42
  • 44. Thank You!  [email protected] @dragonmantank  https://joind.in/9070 44