SlideShare a Scribd company logo
1 of 46
Download to read offline
Deploying PHP on
PAAS: Why & How?
Midwest PHP — March 2013, Minnesota
Outline
•  PHP deployment "back then"
o  a (biased) history
•  PHP deployment today
o  unresolved issues
•  How PaaS can help
o  any PaaS—not just dotCloud! ☺
•  How to help yourself with PaaS
o  and make your lives (as developers) easier
•  What's next?
Who am I? Who was I?
•  Sysadmin in a (French) PHP shop
during the "dotcom bubble" (1999-2001)
•  What did it mean to "create a site?"
o  Apache <VirtualHost> section
o  FTP account
o  MySQL database
o  sendmail aliases (hellyeah!)
o  DNS zone
•  What did it mean to "go to production?"
o  Easy! Update the <VirtualHost>
The awful truth
•  Repetitive tasks are error-prone
o  Script everything!
•  Custom setups are error-prone
o  Knowing where to differentiate is black magic
•  Moving development→production is easy
o  Having development+production is hard
A production environment is a customized, repeat version
of the development environment.
I don't see how anything could possibly go wrong.
PaaS 2000:
Account creation
•  Summer 1999: Apache mod_vhost_alias
(Apache 1.3.7/1.3.9)
o  Create a directory, boom, you're done!
•  April 1999: proftpd mod_mysql
("experimental and utterly undocumented")
o  INSERT a user, boom, you're done!
•  Postfix virtual domains
o  With all due respect, sendmail was creepy
•  BIND generic zones (PowerDNS later)
Bliss level: 9000!
PaaS 2000:
Go to production
•  Move directories, rename users
o  Error prone!
•  Create a new, clean account; copy DB
o  Different from the dev environment!
Whatever you do: if you push the wrong code
to the wrong place, something hits the fan.
PaaS 2000:
Musings with SQLite
•  In May 2000, two great things happen:
PHP4 and SQLite.
•  Deployment of simple PHP apps is easy:
Just upload the code. No DB creation.
•  Migration of said PHP apps is easy:
Just copy the code (and the .db file).
•  As long as you have this non-standard PHP.
•  And you don't mind blewing up the DB.
PaaS 2000:
It's Web Scale!
PaaS 2000:
It's Web Scale!
PaaS 2000:
It's Web Scale!
•  No load balancer yet, DNS round robin
o  Then HAProxy arrived, and Nginx, and F5...
•  Files (PHP and static assets) over NFS
o  Today, we could talk about GlusterFS, S3...
•  User accounts shared with NIS
o  LDAP is the new cool (... kind of)
•  MySQL: no replication yet
o  But if you like, we can talk about 3-way multi-master
PaaS 2000:
The Downfall
"We need this Java thing"
•  mod_jk, mod_jserv, mod_ajp, ...
"And media streaming, too"
•  realserver, ...
Those things were changing quickly.
We needed test environments.
Virtualization wasn't there yet.
☹
Let's talk about you!
Let's talk about you!
Please raise your hand if you...
•  Write PHP code?
•  Use (mainly) FTP to deploy?
•  Use SCP/rsync/similar to deploy?
•  Use capistrano/fabric/similar to deploy?
•  Deploy to a PaaS?
•  Deploy to something else?
•  Always use a staging environment?
•  Have a clean staging→production workflow?
What I do today
•  Server-whisperer for dotCloud
o  ...Among other things
•  Tackling the PaaS challenge again
o  development→production workflow
o  deployment should be as easy as "upload, done!"
o  ... even when $language	
  !=	
  "php"	
  
•  Trying to steal NetBSD's motto
o  "Of course it runs on dotCloud"
Waitaminute...
What's a PaaS?
Waitaminute...
What's a PaaS?
running appsbeefy servers
A large
Waitaminute...
What's a PaaS?
The Great
Internet
Load balancer Load balancer
number of
You
Tools:
CLI, API...
PaaS:
What's the point? (1/5)
Deploying new environments ...
•  It's fast!
o  In minutes, you have your whole stack,
complete with DB, memcached, bells & whistles
o  Cool to test some now code
o  Or to deploy older code to find regressions
•  It's cheap!
o  On most PaaS, development = free
PaaS:
What's the point? (2/5)
Leverage git, hg, ...
•  If you don't know git, I beg you to attend
Mike Stowe's talk in Room 62 at 10:30am!
•  Keep all versions of your code, ever;
go back to any of them
•  Redeploy the exact version which was online last week
before that horrible bug happened
•  Compare conversion rates on two variants
of your site
PaaS:
What's the point? (3/5)
Someone else takes care of ...
•  Optimizing your stack (≠code)
o  Crafting that crazy Nginx/PHP-FPM setup
o  Lower memory footprint
o  Better performance (APC...)
•  Upgrading your stack
o  Watch security disclosure mailing lists
o  Roll out performance and security updates
o  Give you new versions of PHP, MySQL, etc.
PaaS:
What's the point? (4/5)
Comprehensive HTTP routing
•  Attach/detach domains (virtualhosts)
o  Easy transitions to new versions
(And you keep the old version around)
•  Get nice metrics
o  Request rate, error rate, latency
o  (See screenshots!)
•  WebSocket support
o  And other languages as well
PaaS:
What's the point? (5/5)
Be Web Scale!
•  Scale horizontally and vertically
o  horizontally = more servers
o  vertically = bigger servers
•  Reliability
o  horizontal scaling for web tier
o  replication for database tier
→ Deploy to the Cloud
PaaS:
What's the point? (5/5)
Be Web Scale!
•  Scale horizontally and vertically
o  horizontally = more servers
o  vertically = bigger servers
•  Reliability
o  horizontal scaling for web tier
o  replication for database tier
→ Deploy to the Cloud without the hassle
How to deploy PHP to
PaaS
Note: my example will use dotCloud.
But the principle is the same on any PAAS.
Deployment example:
Symfony2 "KnpIpsum"
Original code:https://github.com/KnpLabs/KnpIpsum	
  
dotCloudized version:https://github.com/jpetazzo/
KnpIpsum/tree/dotcloud	
  
(Make sure you use the "dotcloud" branch)
To the Cloud, and beyond!
0: setup environment
•  Create (free) account on www.dotcloud.com
•  Install Python (!)
•  pip	
  install	
  dotcloud	
  
•  dotcloud	
  setup(Asks for login+password)
(Note: web-based push is →← that close)
To the Cloud, and beyond!
1: dotcloud.yml	
  
•  The app is described by a small YAML file
www:	
  
	
  	
  type:	
  php	
  
	
  	
  approot:	
  web	
  
mongodb:	
  
	
  	
  type:	
  mongodb	
  
mysql:	
  
	
  	
  type:	
  mysql	
  
To the Cloud, and beyond!
2: dotCloud+Symfony2
•  dotCloud has Symfony2 docs
•  The docs tell us we need a nginx.conf file
•  That's because most people deploy
Symfony2 on Apache + mod_php
•  Symfony2 apps typically ship .htaccess	
  file
•  We need the equivalent of that file
→ Drop nginx.conf file in the web directory.
To the Cloud, and beyond!
3: application specifics
•  README says to run a few manual
steps:bin/vendors	
  install	
  
php	
  app/console	
  doctrine:database:create	
  
php	
  app/console	
  doctrine:schema:create	
  
•  We will put those steps in a postinstall script
(that's just a shell script called "postinstall"),
and the postinstall script will be executed
automatically when we deploy
To the Cloud, and beyond!
4: deploy application
$	
  dotcloud	
  create	
  symfonipsum	
  
[...]	
  
$	
  dotcloud	
  push	
  
==>	
  Pushing	
  code	
  with	
  rsync	
  from	
  "./"	
  to	
  application	
  symfonipsum	
  
building	
  file	
  list	
  ...	
  done	
  
[...uploading...]	
  
[...and	
  a	
  couple	
  of	
  minutes	
  later...]	
  
14:38:10.312838:	
  -­‐-­‐>	
  Application	
  (symfonipsum)	
  fully	
  installed	
  
==>	
  Application	
  is	
  live	
  at	
  http://symfonipsum-­‐skaya.dotcloud.com	
  
But of course, it doesn't work:
we never configured the database host/port/etc.
To the Cloud, and beyond!
5: configure database
•  Find out database information:
$	
  dotcloud	
  info	
  mysql	
  
[...]	
  
ports:	
  
	
  	
  ssh:	
  	
  	
  ssh://mysql@symfonipsum-­‐skaya.azva.dotcloud.net:12345	
  
	
  	
  mysql:	
  mysql://root:XXX@symfonipsum-­‐skaya.azva.dotcloud.net:23456	
  
•  Edit app/config/config.yml,
update host/port/login/password
•  Push again
Quick break:
"The Twelve Factor App"
•  http://www.12factor.net/
•  http://www.12factor.net/config
•  "Store config in the environment"
o  App config = everything that is likely to vary between deploys
(staging, production, developer env., etc.)
o  Includes: database/memcached access information,
credentials to external services (Twitter, S3...)
o  Storing config as constants in the code is wrong! Please don't
do it!
o  A good test: can you open source the code without
compromising any credential?
To the Cloud, and beyond!
5bis: configure database
•  dotCloud will put all information in two files:
o  ~/environment.json	
  
o  ~/environment.yml	
  
•  We do the following changes:
o  Update postinstall to generate ~/symfony.yml (using the
information in environment.json)
o  Update app/config/config.yml to import ~/symfony.yml	
  
•  Push again
To the Cloud, and beyond!
6: Multiplicate the Loaves
$	
  dotcloud	
  create	
  ipsumdev	
  
$	
  dotcloud	
  push	
  
[...]	
  
$	
  dotcloud	
  create	
  symfonymongotest	
  
$	
  dotcloud	
  push	
  
[...]	
  
To the Cloud, and beyond!
7: Go live!
$	
  dotcloud	
  create	
  ipsumprod	
  -­‐f	
  live	
  
$	
  dotcloud	
  push	
  
$	
  dotcloud	
  scale	
  db:instances=2	
  
$	
  dotcloud	
  scale	
  www:memory=800M	
  
$	
  dotcloud	
  domain	
  add	
  www	
  www.loremipsum.com	
  
Drawbacks of PaaS
•  One-time initial investment (small)
o  Get familiar with the CLI, tools...
•  Per-app initial investment (variable)
o  Inject configuration variables
o  Rework your app "for the Cloud" (when needed)
o  Meddle Not In The Affairs Of Wizards!
Drawbacks of PaaS
•  One-time initial investment (small)
o  Get familiar with the CLI, tools...
•  Per-app initial investment (variable)
o  Inject configuration variables
o  Rework your app "for the Cloud" (when needed)
o  Meddle Not In The Affairs Of Wizards!
•  Higher apparent cost
o  PaaS hosting can be 4x-10x more expensive
o  Comes with 24x7 ops team, scaling, support
o  Current PaaS don't leverage cheap hosts yet
One more (semi-)
Drawback of PaaS
•  "dotcloud	
  run" (SSH access) doesn't work on the
WiFi access in this conference!
•  But we're working on that...
(WebSocket tunneling of SSH)
•  And you can't access your server, neither.
(Unless you have a cunning VPN;
OpenVPN running on 443/tcp anyone?)
•  Meawhile, you can still push to dotCloud! Yaaay!
Future of PaaS
•  PaaS on your servers / local machine
•  PaaS on a wide range of platforms
(from cheap entry-level to high-end SSD)
•  Support for more languages & databases
•  Support for more frameworks
•  More integration with 3rd parties (e.g. github)
Thank you! Questions?
@jpetazzo
jerome@dotcloud.com
www.dotcloud.com
Slides deck: http://goo.gl/jZwdC
Feedback: http://joind.in/8217
Thank you! Questions?

More Related Content

What's hot

Packaging is the Worst Way to Distribute Software, Except for Everything Else
Packaging is the Worst Way to Distribute Software, Except for Everything ElsePackaging is the Worst Way to Distribute Software, Except for Everything Else
Packaging is the Worst Way to Distribute Software, Except for Everything Elsemckern
 
Dirty Little Secrets They Didn't Teach You In Pentest Class v2
Dirty Little Secrets They Didn't Teach You In Pentest Class v2Dirty Little Secrets They Didn't Teach You In Pentest Class v2
Dirty Little Secrets They Didn't Teach You In Pentest Class v2Rob Fuller
 
Dockerを利用したローカル環境から本番環境までの構築設計
Dockerを利用したローカル環境から本番環境までの構築設計Dockerを利用したローカル環境から本番環境までの構築設計
Dockerを利用したローカル環境から本番環境までの構築設計Koichi Nagaoka
 
Modern software architectures - PHP UK Conference 2015
Modern software architectures - PHP UK Conference 2015Modern software architectures - PHP UK Conference 2015
Modern software architectures - PHP UK Conference 2015Ricard Clau
 
Travel with your mock server
Travel with your mock serverTravel with your mock server
Travel with your mock serverJorge Ortiz
 
Advanced Web Hosting
Advanced Web HostingAdvanced Web Hosting
Advanced Web HostingOVHcloud
 
Document Locking with Redis in Symfony2
Document Locking with Redis in Symfony2Document Locking with Redis in Symfony2
Document Locking with Redis in Symfony2Tom Corrigan
 
MySQL Install for Replication - Real Life Tutorial
MySQL Install for Replication - Real Life TutorialMySQL Install for Replication - Real Life Tutorial
MySQL Install for Replication - Real Life TutorialRalf Schwoebel
 
Monitoring the ELK stack using Zabbix and Grafana (Dennis Kanbier / 26-11-2015)
Monitoring the ELK stack using Zabbix and Grafana (Dennis Kanbier / 26-11-2015)Monitoring the ELK stack using Zabbix and Grafana (Dennis Kanbier / 26-11-2015)
Monitoring the ELK stack using Zabbix and Grafana (Dennis Kanbier / 26-11-2015)Nederlandstalige Zabbix Gebruikersgroep
 
Buildinga billionuserloadbalancer may2015-sre-con15europe-shuff
Buildinga billionuserloadbalancer may2015-sre-con15europe-shuffBuildinga billionuserloadbalancer may2015-sre-con15europe-shuff
Buildinga billionuserloadbalancer may2015-sre-con15europe-shuffPatrick Shuff
 
Enjoying k8s cluster with Minikube and Helm
Enjoying k8s cluster with Minikube and HelmEnjoying k8s cluster with Minikube and Helm
Enjoying k8s cluster with Minikube and Helmロフト くん
 
A Gentle Introduction To Docker And All Things Containers
A Gentle Introduction To Docker And All Things ContainersA Gentle Introduction To Docker And All Things Containers
A Gentle Introduction To Docker And All Things ContainersJérôme Petazzoni
 
Integrated Cache on Netscaler
Integrated Cache on NetscalerIntegrated Cache on Netscaler
Integrated Cache on NetscalerMark Hillick
 
Volker Fröhlich - How to Debug Common Agent Issues
Volker Fröhlich - How to Debug Common Agent IssuesVolker Fröhlich - How to Debug Common Agent Issues
Volker Fröhlich - How to Debug Common Agent IssuesZabbix
 

What's hot (15)

Packaging is the Worst Way to Distribute Software, Except for Everything Else
Packaging is the Worst Way to Distribute Software, Except for Everything ElsePackaging is the Worst Way to Distribute Software, Except for Everything Else
Packaging is the Worst Way to Distribute Software, Except for Everything Else
 
Dirty Little Secrets They Didn't Teach You In Pentest Class v2
Dirty Little Secrets They Didn't Teach You In Pentest Class v2Dirty Little Secrets They Didn't Teach You In Pentest Class v2
Dirty Little Secrets They Didn't Teach You In Pentest Class v2
 
Dockerを利用したローカル環境から本番環境までの構築設計
Dockerを利用したローカル環境から本番環境までの構築設計Dockerを利用したローカル環境から本番環境までの構築設計
Dockerを利用したローカル環境から本番環境までの構築設計
 
Modern software architectures - PHP UK Conference 2015
Modern software architectures - PHP UK Conference 2015Modern software architectures - PHP UK Conference 2015
Modern software architectures - PHP UK Conference 2015
 
Travel with your mock server
Travel with your mock serverTravel with your mock server
Travel with your mock server
 
Advanced Web Hosting
Advanced Web HostingAdvanced Web Hosting
Advanced Web Hosting
 
Document Locking with Redis in Symfony2
Document Locking with Redis in Symfony2Document Locking with Redis in Symfony2
Document Locking with Redis in Symfony2
 
MySQL Install for Replication - Real Life Tutorial
MySQL Install for Replication - Real Life TutorialMySQL Install for Replication - Real Life Tutorial
MySQL Install for Replication - Real Life Tutorial
 
Monitoring the ELK stack using Zabbix and Grafana (Dennis Kanbier / 26-11-2015)
Monitoring the ELK stack using Zabbix and Grafana (Dennis Kanbier / 26-11-2015)Monitoring the ELK stack using Zabbix and Grafana (Dennis Kanbier / 26-11-2015)
Monitoring the ELK stack using Zabbix and Grafana (Dennis Kanbier / 26-11-2015)
 
Buildinga billionuserloadbalancer may2015-sre-con15europe-shuff
Buildinga billionuserloadbalancer may2015-sre-con15europe-shuffBuildinga billionuserloadbalancer may2015-sre-con15europe-shuff
Buildinga billionuserloadbalancer may2015-sre-con15europe-shuff
 
Enjoying k8s cluster with Minikube and Helm
Enjoying k8s cluster with Minikube and HelmEnjoying k8s cluster with Minikube and Helm
Enjoying k8s cluster with Minikube and Helm
 
Ansible
AnsibleAnsible
Ansible
 
A Gentle Introduction To Docker And All Things Containers
A Gentle Introduction To Docker And All Things ContainersA Gentle Introduction To Docker And All Things Containers
A Gentle Introduction To Docker And All Things Containers
 
Integrated Cache on Netscaler
Integrated Cache on NetscalerIntegrated Cache on Netscaler
Integrated Cache on Netscaler
 
Volker Fröhlich - How to Debug Common Agent Issues
Volker Fröhlich - How to Debug Common Agent IssuesVolker Fröhlich - How to Debug Common Agent Issues
Volker Fröhlich - How to Debug Common Agent Issues
 

Viewers also liked

Endicom - Reputación Online - Victor Lozano
Endicom - Reputación Online - Victor LozanoEndicom - Reputación Online - Victor Lozano
Endicom - Reputación Online - Victor LozanoFuturo Labs
 
Сергей Орлов – Зачем онлайну офлайн?
Сергей Орлов – Зачем онлайну офлайн?Сергей Орлов – Зачем онлайну офлайн?
Сергей Орлов – Зачем онлайну офлайн?Promodo
 
Different Styles of Resorts designed by our firm in Egypt and various African...
Different Styles of Resorts designed by our firm in Egypt and various African...Different Styles of Resorts designed by our firm in Egypt and various African...
Different Styles of Resorts designed by our firm in Egypt and various African...Sherine Milad
 
Universidad nacional de cajamarca225454
Universidad nacional de cajamarca225454Universidad nacional de cajamarca225454
Universidad nacional de cajamarca225454alcur
 
小组作品完稿
小组作品完稿小组作品完稿
小组作品完稿Yini Gao
 
Engineering & Management Institute
Engineering & Management InstituteEngineering & Management Institute
Engineering & Management InstituteDronacharya
 
Ipsos MORI Mental Health Research 2015
Ipsos MORI Mental Health Research 2015Ipsos MORI Mental Health Research 2015
Ipsos MORI Mental Health Research 2015Ipsos UK
 
Startup DreamTeam with Scality & Saagie!
Startup DreamTeam with Scality & Saagie!Startup DreamTeam with Scality & Saagie!
Startup DreamTeam with Scality & Saagie!TheFamily
 
Organizational chart for New iPod Touch Implementation at Pease MS
Organizational chart for New iPod Touch Implementation at Pease MSOrganizational chart for New iPod Touch Implementation at Pease MS
Organizational chart for New iPod Touch Implementation at Pease MSScott Hutcheson
 
Digital Marketing Audit Brief
Digital Marketing Audit BriefDigital Marketing Audit Brief
Digital Marketing Audit BriefReactiveSocial
 
Profitable Prospecting with Social Media
Profitable Prospecting with Social MediaProfitable Prospecting with Social Media
Profitable Prospecting with Social MediaMaura Neill
 
Grafico diario del dax perfomance index para el 11 04-2013
Grafico diario del dax perfomance index para el 11 04-2013Grafico diario del dax perfomance index para el 11 04-2013
Grafico diario del dax perfomance index para el 11 04-2013Experiencia Trading
 
Dallas Best Places to Work Roadshow | Grand Rounds
Dallas Best Places to Work Roadshow | Grand Rounds Dallas Best Places to Work Roadshow | Grand Rounds
Dallas Best Places to Work Roadshow | Grand Rounds Glassdoor
 
Tutorial: Barras Apiladas en Infogr.am
Tutorial: Barras Apiladas en Infogr.amTutorial: Barras Apiladas en Infogr.am
Tutorial: Barras Apiladas en Infogr.amAníbal Rossi
 
Persistent Storage for Containerized Applications
Persistent Storage for Containerized ApplicationsPersistent Storage for Containerized Applications
Persistent Storage for Containerized ApplicationsColleen Corrice
 

Viewers also liked (16)

Endicom - Reputación Online - Victor Lozano
Endicom - Reputación Online - Victor LozanoEndicom - Reputación Online - Victor Lozano
Endicom - Reputación Online - Victor Lozano
 
Сергей Орлов – Зачем онлайну офлайн?
Сергей Орлов – Зачем онлайну офлайн?Сергей Орлов – Зачем онлайну офлайн?
Сергей Орлов – Зачем онлайну офлайн?
 
Different Styles of Resorts designed by our firm in Egypt and various African...
Different Styles of Resorts designed by our firm in Egypt and various African...Different Styles of Resorts designed by our firm in Egypt and various African...
Different Styles of Resorts designed by our firm in Egypt and various African...
 
Universidad nacional de cajamarca225454
Universidad nacional de cajamarca225454Universidad nacional de cajamarca225454
Universidad nacional de cajamarca225454
 
小组作品完稿
小组作品完稿小组作品完稿
小组作品完稿
 
Engineering & Management Institute
Engineering & Management InstituteEngineering & Management Institute
Engineering & Management Institute
 
EIGRP Route Summarization
EIGRP Route SummarizationEIGRP Route Summarization
EIGRP Route Summarization
 
Ipsos MORI Mental Health Research 2015
Ipsos MORI Mental Health Research 2015Ipsos MORI Mental Health Research 2015
Ipsos MORI Mental Health Research 2015
 
Startup DreamTeam with Scality & Saagie!
Startup DreamTeam with Scality & Saagie!Startup DreamTeam with Scality & Saagie!
Startup DreamTeam with Scality & Saagie!
 
Organizational chart for New iPod Touch Implementation at Pease MS
Organizational chart for New iPod Touch Implementation at Pease MSOrganizational chart for New iPod Touch Implementation at Pease MS
Organizational chart for New iPod Touch Implementation at Pease MS
 
Digital Marketing Audit Brief
Digital Marketing Audit BriefDigital Marketing Audit Brief
Digital Marketing Audit Brief
 
Profitable Prospecting with Social Media
Profitable Prospecting with Social MediaProfitable Prospecting with Social Media
Profitable Prospecting with Social Media
 
Grafico diario del dax perfomance index para el 11 04-2013
Grafico diario del dax perfomance index para el 11 04-2013Grafico diario del dax perfomance index para el 11 04-2013
Grafico diario del dax perfomance index para el 11 04-2013
 
Dallas Best Places to Work Roadshow | Grand Rounds
Dallas Best Places to Work Roadshow | Grand Rounds Dallas Best Places to Work Roadshow | Grand Rounds
Dallas Best Places to Work Roadshow | Grand Rounds
 
Tutorial: Barras Apiladas en Infogr.am
Tutorial: Barras Apiladas en Infogr.amTutorial: Barras Apiladas en Infogr.am
Tutorial: Barras Apiladas en Infogr.am
 
Persistent Storage for Containerized Applications
Persistent Storage for Containerized ApplicationsPersistent Storage for Containerized Applications
Persistent Storage for Containerized Applications
 

Similar to Deploying PHP on PaaS: Why and How?

Introduction to NodeJS with LOLCats
Introduction to NodeJS with LOLCatsIntroduction to NodeJS with LOLCats
Introduction to NodeJS with LOLCatsDerek Anderson
 
Laravel Forge: Hello World to Hello Production
Laravel Forge: Hello World to Hello ProductionLaravel Forge: Hello World to Hello Production
Laravel Forge: Hello World to Hello ProductionJoe Ferguson
 
[Mas 500] Software Development Strategies
[Mas 500] Software Development Strategies[Mas 500] Software Development Strategies
[Mas 500] Software Development Strategiesrahulbot
 
FITC - Node.js 101
FITC - Node.js 101FITC - Node.js 101
FITC - Node.js 101Rami Sayar
 
Scaling with Symfony - PHP UK
Scaling with Symfony - PHP UKScaling with Symfony - PHP UK
Scaling with Symfony - PHP UKRicard Clau
 
Firefox Crash Reporting (@ Open Source Bridge)
Firefox Crash Reporting (@ Open Source Bridge)Firefox Crash Reporting (@ Open Source Bridge)
Firefox Crash Reporting (@ Open Source Bridge)lauraxthomson
 
IMCSummit 2015 - Day 1 Developer Track - Open-Source In-Memory Platforms: Ben...
IMCSummit 2015 - Day 1 Developer Track - Open-Source In-Memory Platforms: Ben...IMCSummit 2015 - Day 1 Developer Track - Open-Source In-Memory Platforms: Ben...
IMCSummit 2015 - Day 1 Developer Track - Open-Source In-Memory Platforms: Ben...In-Memory Computing Summit
 
Cassandra and Docker Lessons Learned
Cassandra and Docker Lessons LearnedCassandra and Docker Lessons Learned
Cassandra and Docker Lessons LearnedDataStax Academy
 
Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20
Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20
Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20Michael Lihs
 
A Gentle Introduction to Docker and Containers
A Gentle Introduction to Docker and ContainersA Gentle Introduction to Docker and Containers
A Gentle Introduction to Docker and ContainersDocker, Inc.
 
OSDC 2016 - Ingesting Logs with Style by Pere Urbon-Bayes
OSDC 2016 - Ingesting Logs with Style by Pere Urbon-BayesOSDC 2016 - Ingesting Logs with Style by Pere Urbon-Bayes
OSDC 2016 - Ingesting Logs with Style by Pere Urbon-BayesNETWAYS
 
Depolying Drupal with Git, Drush Make and Capistrano
Depolying Drupal with Git, Drush Make and CapistranoDepolying Drupal with Git, Drush Make and Capistrano
Depolying Drupal with Git, Drush Make and Capistranolibsys
 
Stress Free Deployment - Confoo 2011
Stress Free Deployment  - Confoo 2011Stress Free Deployment  - Confoo 2011
Stress Free Deployment - Confoo 2011Bachkoutou Toutou
 
Node.js 101 with Rami Sayar
Node.js 101 with Rami SayarNode.js 101 with Rami Sayar
Node.js 101 with Rami SayarFITC
 
Django dev-env-my-way
Django dev-env-my-wayDjango dev-env-my-way
Django dev-env-my-wayRobert Lujo
 
AMIMOTO WordPress + Amazon Web Services for ALL Tech Levels
AMIMOTO WordPress + Amazon Web Services for ALL Tech Levels AMIMOTO WordPress + Amazon Web Services for ALL Tech Levels
AMIMOTO WordPress + Amazon Web Services for ALL Tech Levels Kel
 
Comment améliorer le quotidien des Développeurs PHP ?
Comment améliorer le quotidien des Développeurs PHP ?Comment améliorer le quotidien des Développeurs PHP ?
Comment améliorer le quotidien des Développeurs PHP ?AFUP_Limoges
 
Php Inside - confoo 2011 - Derick Rethans
Php Inside -  confoo 2011 - Derick RethansPhp Inside -  confoo 2011 - Derick Rethans
Php Inside - confoo 2011 - Derick RethansBachkoutou Toutou
 

Similar to Deploying PHP on PaaS: Why and How? (20)

Introduction to NodeJS with LOLCats
Introduction to NodeJS with LOLCatsIntroduction to NodeJS with LOLCats
Introduction to NodeJS with LOLCats
 
Laravel Forge: Hello World to Hello Production
Laravel Forge: Hello World to Hello ProductionLaravel Forge: Hello World to Hello Production
Laravel Forge: Hello World to Hello Production
 
[Mas 500] Software Development Strategies
[Mas 500] Software Development Strategies[Mas 500] Software Development Strategies
[Mas 500] Software Development Strategies
 
FITC - Node.js 101
FITC - Node.js 101FITC - Node.js 101
FITC - Node.js 101
 
Scaling with Symfony - PHP UK
Scaling with Symfony - PHP UKScaling with Symfony - PHP UK
Scaling with Symfony - PHP UK
 
Firefox Crash Reporting (@ Open Source Bridge)
Firefox Crash Reporting (@ Open Source Bridge)Firefox Crash Reporting (@ Open Source Bridge)
Firefox Crash Reporting (@ Open Source Bridge)
 
IMCSummit 2015 - Day 1 Developer Track - Open-Source In-Memory Platforms: Ben...
IMCSummit 2015 - Day 1 Developer Track - Open-Source In-Memory Platforms: Ben...IMCSummit 2015 - Day 1 Developer Track - Open-Source In-Memory Platforms: Ben...
IMCSummit 2015 - Day 1 Developer Track - Open-Source In-Memory Platforms: Ben...
 
Cassandra and Docker Lessons Learned
Cassandra and Docker Lessons LearnedCassandra and Docker Lessons Learned
Cassandra and Docker Lessons Learned
 
Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20
Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20
Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20
 
A Gentle Introduction to Docker and Containers
A Gentle Introduction to Docker and ContainersA Gentle Introduction to Docker and Containers
A Gentle Introduction to Docker and Containers
 
Php simple
Php simplePhp simple
Php simple
 
OSDC 2016 - Ingesting Logs with Style by Pere Urbon-Bayes
OSDC 2016 - Ingesting Logs with Style by Pere Urbon-BayesOSDC 2016 - Ingesting Logs with Style by Pere Urbon-Bayes
OSDC 2016 - Ingesting Logs with Style by Pere Urbon-Bayes
 
Depolying Drupal with Git, Drush Make and Capistrano
Depolying Drupal with Git, Drush Make and CapistranoDepolying Drupal with Git, Drush Make and Capistrano
Depolying Drupal with Git, Drush Make and Capistrano
 
Stress Free Deployment - Confoo 2011
Stress Free Deployment  - Confoo 2011Stress Free Deployment  - Confoo 2011
Stress Free Deployment - Confoo 2011
 
Docker 101
Docker 101 Docker 101
Docker 101
 
Node.js 101 with Rami Sayar
Node.js 101 with Rami SayarNode.js 101 with Rami Sayar
Node.js 101 with Rami Sayar
 
Django dev-env-my-way
Django dev-env-my-wayDjango dev-env-my-way
Django dev-env-my-way
 
AMIMOTO WordPress + Amazon Web Services for ALL Tech Levels
AMIMOTO WordPress + Amazon Web Services for ALL Tech Levels AMIMOTO WordPress + Amazon Web Services for ALL Tech Levels
AMIMOTO WordPress + Amazon Web Services for ALL Tech Levels
 
Comment améliorer le quotidien des Développeurs PHP ?
Comment améliorer le quotidien des Développeurs PHP ?Comment améliorer le quotidien des Développeurs PHP ?
Comment améliorer le quotidien des Développeurs PHP ?
 
Php Inside - confoo 2011 - Derick Rethans
Php Inside -  confoo 2011 - Derick RethansPhp Inside -  confoo 2011 - Derick Rethans
Php Inside - confoo 2011 - Derick Rethans
 

More from Docker, Inc.

Containerize Your Game Server for the Best Multiplayer Experience
Containerize Your Game Server for the Best Multiplayer Experience Containerize Your Game Server for the Best Multiplayer Experience
Containerize Your Game Server for the Best Multiplayer Experience Docker, Inc.
 
How to Improve Your Image Builds Using Advance Docker Build
How to Improve Your Image Builds Using Advance Docker BuildHow to Improve Your Image Builds Using Advance Docker Build
How to Improve Your Image Builds Using Advance Docker BuildDocker, Inc.
 
Build & Deploy Multi-Container Applications to AWS
Build & Deploy Multi-Container Applications to AWSBuild & Deploy Multi-Container Applications to AWS
Build & Deploy Multi-Container Applications to AWSDocker, Inc.
 
Securing Your Containerized Applications with NGINX
Securing Your Containerized Applications with NGINXSecuring Your Containerized Applications with NGINX
Securing Your Containerized Applications with NGINXDocker, Inc.
 
How To Build and Run Node Apps with Docker and Compose
How To Build and Run Node Apps with Docker and ComposeHow To Build and Run Node Apps with Docker and Compose
How To Build and Run Node Apps with Docker and ComposeDocker, Inc.
 
Distributed Deep Learning with Docker at Salesforce
Distributed Deep Learning with Docker at SalesforceDistributed Deep Learning with Docker at Salesforce
Distributed Deep Learning with Docker at SalesforceDocker, Inc.
 
The First 10M Pulls: Building The Official Curl Image for Docker Hub
The First 10M Pulls: Building The Official Curl Image for Docker HubThe First 10M Pulls: Building The Official Curl Image for Docker Hub
The First 10M Pulls: Building The Official Curl Image for Docker HubDocker, Inc.
 
Monitoring in a Microservices World
Monitoring in a Microservices WorldMonitoring in a Microservices World
Monitoring in a Microservices WorldDocker, Inc.
 
COVID-19 in Italy: How Docker is Helping the Biggest Italian IT Company Conti...
COVID-19 in Italy: How Docker is Helping the Biggest Italian IT Company Conti...COVID-19 in Italy: How Docker is Helping the Biggest Italian IT Company Conti...
COVID-19 in Italy: How Docker is Helping the Biggest Italian IT Company Conti...Docker, Inc.
 
Predicting Space Weather with Docker
Predicting Space Weather with DockerPredicting Space Weather with Docker
Predicting Space Weather with DockerDocker, Inc.
 
Become a Docker Power User With Microsoft Visual Studio Code
Become a Docker Power User With Microsoft Visual Studio CodeBecome a Docker Power User With Microsoft Visual Studio Code
Become a Docker Power User With Microsoft Visual Studio CodeDocker, Inc.
 
How to Use Mirroring and Caching to Optimize your Container Registry
How to Use Mirroring and Caching to Optimize your Container RegistryHow to Use Mirroring and Caching to Optimize your Container Registry
How to Use Mirroring and Caching to Optimize your Container RegistryDocker, Inc.
 
Monolithic to Microservices + Docker = SDLC on Steroids!
Monolithic to Microservices + Docker = SDLC on Steroids!Monolithic to Microservices + Docker = SDLC on Steroids!
Monolithic to Microservices + Docker = SDLC on Steroids!Docker, Inc.
 
Kubernetes at Datadog Scale
Kubernetes at Datadog ScaleKubernetes at Datadog Scale
Kubernetes at Datadog ScaleDocker, Inc.
 
Labels, Labels, Labels
Labels, Labels, Labels Labels, Labels, Labels
Labels, Labels, Labels Docker, Inc.
 
Using Docker Hub at Scale to Support Micro Focus' Delivery and Deployment Model
Using Docker Hub at Scale to Support Micro Focus' Delivery and Deployment ModelUsing Docker Hub at Scale to Support Micro Focus' Delivery and Deployment Model
Using Docker Hub at Scale to Support Micro Focus' Delivery and Deployment ModelDocker, Inc.
 
Build & Deploy Multi-Container Applications to AWS
Build & Deploy Multi-Container Applications to AWSBuild & Deploy Multi-Container Applications to AWS
Build & Deploy Multi-Container Applications to AWSDocker, Inc.
 
From Fortran on the Desktop to Kubernetes in the Cloud: A Windows Migration S...
From Fortran on the Desktop to Kubernetes in the Cloud: A Windows Migration S...From Fortran on the Desktop to Kubernetes in the Cloud: A Windows Migration S...
From Fortran on the Desktop to Kubernetes in the Cloud: A Windows Migration S...Docker, Inc.
 
Developing with Docker for the Arm Architecture
Developing with Docker for the Arm ArchitectureDeveloping with Docker for the Arm Architecture
Developing with Docker for the Arm ArchitectureDocker, Inc.
 

More from Docker, Inc. (20)

Containerize Your Game Server for the Best Multiplayer Experience
Containerize Your Game Server for the Best Multiplayer Experience Containerize Your Game Server for the Best Multiplayer Experience
Containerize Your Game Server for the Best Multiplayer Experience
 
How to Improve Your Image Builds Using Advance Docker Build
How to Improve Your Image Builds Using Advance Docker BuildHow to Improve Your Image Builds Using Advance Docker Build
How to Improve Your Image Builds Using Advance Docker Build
 
Build & Deploy Multi-Container Applications to AWS
Build & Deploy Multi-Container Applications to AWSBuild & Deploy Multi-Container Applications to AWS
Build & Deploy Multi-Container Applications to AWS
 
Securing Your Containerized Applications with NGINX
Securing Your Containerized Applications with NGINXSecuring Your Containerized Applications with NGINX
Securing Your Containerized Applications with NGINX
 
How To Build and Run Node Apps with Docker and Compose
How To Build and Run Node Apps with Docker and ComposeHow To Build and Run Node Apps with Docker and Compose
How To Build and Run Node Apps with Docker and Compose
 
Hands-on Helm
Hands-on Helm Hands-on Helm
Hands-on Helm
 
Distributed Deep Learning with Docker at Salesforce
Distributed Deep Learning with Docker at SalesforceDistributed Deep Learning with Docker at Salesforce
Distributed Deep Learning with Docker at Salesforce
 
The First 10M Pulls: Building The Official Curl Image for Docker Hub
The First 10M Pulls: Building The Official Curl Image for Docker HubThe First 10M Pulls: Building The Official Curl Image for Docker Hub
The First 10M Pulls: Building The Official Curl Image for Docker Hub
 
Monitoring in a Microservices World
Monitoring in a Microservices WorldMonitoring in a Microservices World
Monitoring in a Microservices World
 
COVID-19 in Italy: How Docker is Helping the Biggest Italian IT Company Conti...
COVID-19 in Italy: How Docker is Helping the Biggest Italian IT Company Conti...COVID-19 in Italy: How Docker is Helping the Biggest Italian IT Company Conti...
COVID-19 in Italy: How Docker is Helping the Biggest Italian IT Company Conti...
 
Predicting Space Weather with Docker
Predicting Space Weather with DockerPredicting Space Weather with Docker
Predicting Space Weather with Docker
 
Become a Docker Power User With Microsoft Visual Studio Code
Become a Docker Power User With Microsoft Visual Studio CodeBecome a Docker Power User With Microsoft Visual Studio Code
Become a Docker Power User With Microsoft Visual Studio Code
 
How to Use Mirroring and Caching to Optimize your Container Registry
How to Use Mirroring and Caching to Optimize your Container RegistryHow to Use Mirroring and Caching to Optimize your Container Registry
How to Use Mirroring and Caching to Optimize your Container Registry
 
Monolithic to Microservices + Docker = SDLC on Steroids!
Monolithic to Microservices + Docker = SDLC on Steroids!Monolithic to Microservices + Docker = SDLC on Steroids!
Monolithic to Microservices + Docker = SDLC on Steroids!
 
Kubernetes at Datadog Scale
Kubernetes at Datadog ScaleKubernetes at Datadog Scale
Kubernetes at Datadog Scale
 
Labels, Labels, Labels
Labels, Labels, Labels Labels, Labels, Labels
Labels, Labels, Labels
 
Using Docker Hub at Scale to Support Micro Focus' Delivery and Deployment Model
Using Docker Hub at Scale to Support Micro Focus' Delivery and Deployment ModelUsing Docker Hub at Scale to Support Micro Focus' Delivery and Deployment Model
Using Docker Hub at Scale to Support Micro Focus' Delivery and Deployment Model
 
Build & Deploy Multi-Container Applications to AWS
Build & Deploy Multi-Container Applications to AWSBuild & Deploy Multi-Container Applications to AWS
Build & Deploy Multi-Container Applications to AWS
 
From Fortran on the Desktop to Kubernetes in the Cloud: A Windows Migration S...
From Fortran on the Desktop to Kubernetes in the Cloud: A Windows Migration S...From Fortran on the Desktop to Kubernetes in the Cloud: A Windows Migration S...
From Fortran on the Desktop to Kubernetes in the Cloud: A Windows Migration S...
 
Developing with Docker for the Arm Architecture
Developing with Docker for the Arm ArchitectureDeveloping with Docker for the Arm Architecture
Developing with Docker for the Arm Architecture
 

Deploying PHP on PaaS: Why and How?

  • 1. Deploying PHP on PAAS: Why & How? Midwest PHP — March 2013, Minnesota
  • 2.
  • 3. Outline •  PHP deployment "back then" o  a (biased) history •  PHP deployment today o  unresolved issues •  How PaaS can help o  any PaaS—not just dotCloud! ☺ •  How to help yourself with PaaS o  and make your lives (as developers) easier •  What's next?
  • 4. Who am I? Who was I? •  Sysadmin in a (French) PHP shop during the "dotcom bubble" (1999-2001) •  What did it mean to "create a site?" o  Apache <VirtualHost> section o  FTP account o  MySQL database o  sendmail aliases (hellyeah!) o  DNS zone •  What did it mean to "go to production?" o  Easy! Update the <VirtualHost>
  • 5. The awful truth •  Repetitive tasks are error-prone o  Script everything! •  Custom setups are error-prone o  Knowing where to differentiate is black magic •  Moving development→production is easy o  Having development+production is hard A production environment is a customized, repeat version of the development environment. I don't see how anything could possibly go wrong.
  • 6. PaaS 2000: Account creation •  Summer 1999: Apache mod_vhost_alias (Apache 1.3.7/1.3.9) o  Create a directory, boom, you're done! •  April 1999: proftpd mod_mysql ("experimental and utterly undocumented") o  INSERT a user, boom, you're done! •  Postfix virtual domains o  With all due respect, sendmail was creepy •  BIND generic zones (PowerDNS later) Bliss level: 9000!
  • 7. PaaS 2000: Go to production •  Move directories, rename users o  Error prone! •  Create a new, clean account; copy DB o  Different from the dev environment! Whatever you do: if you push the wrong code to the wrong place, something hits the fan.
  • 8. PaaS 2000: Musings with SQLite •  In May 2000, two great things happen: PHP4 and SQLite. •  Deployment of simple PHP apps is easy: Just upload the code. No DB creation. •  Migration of said PHP apps is easy: Just copy the code (and the .db file). •  As long as you have this non-standard PHP. •  And you don't mind blewing up the DB.
  • 11. PaaS 2000: It's Web Scale! •  No load balancer yet, DNS round robin o  Then HAProxy arrived, and Nginx, and F5... •  Files (PHP and static assets) over NFS o  Today, we could talk about GlusterFS, S3... •  User accounts shared with NIS o  LDAP is the new cool (... kind of) •  MySQL: no replication yet o  But if you like, we can talk about 3-way multi-master
  • 12. PaaS 2000: The Downfall "We need this Java thing" •  mod_jk, mod_jserv, mod_ajp, ... "And media streaming, too" •  realserver, ... Those things were changing quickly. We needed test environments. Virtualization wasn't there yet. ☹
  • 14. Let's talk about you! Please raise your hand if you... •  Write PHP code? •  Use (mainly) FTP to deploy? •  Use SCP/rsync/similar to deploy? •  Use capistrano/fabric/similar to deploy? •  Deploy to a PaaS? •  Deploy to something else? •  Always use a staging environment? •  Have a clean staging→production workflow?
  • 15. What I do today •  Server-whisperer for dotCloud o  ...Among other things •  Tackling the PaaS challenge again o  development→production workflow o  deployment should be as easy as "upload, done!" o  ... even when $language  !=  "php"   •  Trying to steal NetBSD's motto o  "Of course it runs on dotCloud"
  • 18. running appsbeefy servers A large Waitaminute... What's a PaaS? The Great Internet Load balancer Load balancer number of You Tools: CLI, API...
  • 19. PaaS: What's the point? (1/5) Deploying new environments ... •  It's fast! o  In minutes, you have your whole stack, complete with DB, memcached, bells & whistles o  Cool to test some now code o  Or to deploy older code to find regressions •  It's cheap! o  On most PaaS, development = free
  • 20. PaaS: What's the point? (2/5) Leverage git, hg, ... •  If you don't know git, I beg you to attend Mike Stowe's talk in Room 62 at 10:30am! •  Keep all versions of your code, ever; go back to any of them •  Redeploy the exact version which was online last week before that horrible bug happened •  Compare conversion rates on two variants of your site
  • 21. PaaS: What's the point? (3/5) Someone else takes care of ... •  Optimizing your stack (≠code) o  Crafting that crazy Nginx/PHP-FPM setup o  Lower memory footprint o  Better performance (APC...) •  Upgrading your stack o  Watch security disclosure mailing lists o  Roll out performance and security updates o  Give you new versions of PHP, MySQL, etc.
  • 22. PaaS: What's the point? (4/5) Comprehensive HTTP routing •  Attach/detach domains (virtualhosts) o  Easy transitions to new versions (And you keep the old version around) •  Get nice metrics o  Request rate, error rate, latency o  (See screenshots!) •  WebSocket support o  And other languages as well
  • 23.
  • 24.
  • 25. PaaS: What's the point? (5/5) Be Web Scale! •  Scale horizontally and vertically o  horizontally = more servers o  vertically = bigger servers •  Reliability o  horizontal scaling for web tier o  replication for database tier → Deploy to the Cloud
  • 26.
  • 27. PaaS: What's the point? (5/5) Be Web Scale! •  Scale horizontally and vertically o  horizontally = more servers o  vertically = bigger servers •  Reliability o  horizontal scaling for web tier o  replication for database tier → Deploy to the Cloud without the hassle
  • 28. How to deploy PHP to PaaS Note: my example will use dotCloud. But the principle is the same on any PAAS.
  • 29. Deployment example: Symfony2 "KnpIpsum" Original code:https://github.com/KnpLabs/KnpIpsum   dotCloudized version:https://github.com/jpetazzo/ KnpIpsum/tree/dotcloud   (Make sure you use the "dotcloud" branch)
  • 30. To the Cloud, and beyond! 0: setup environment •  Create (free) account on www.dotcloud.com •  Install Python (!) •  pip  install  dotcloud   •  dotcloud  setup(Asks for login+password) (Note: web-based push is →← that close)
  • 31. To the Cloud, and beyond! 1: dotcloud.yml   •  The app is described by a small YAML file www:      type:  php      approot:  web   mongodb:      type:  mongodb   mysql:      type:  mysql  
  • 32. To the Cloud, and beyond! 2: dotCloud+Symfony2 •  dotCloud has Symfony2 docs •  The docs tell us we need a nginx.conf file •  That's because most people deploy Symfony2 on Apache + mod_php •  Symfony2 apps typically ship .htaccess  file •  We need the equivalent of that file → Drop nginx.conf file in the web directory.
  • 33. To the Cloud, and beyond! 3: application specifics •  README says to run a few manual steps:bin/vendors  install   php  app/console  doctrine:database:create   php  app/console  doctrine:schema:create   •  We will put those steps in a postinstall script (that's just a shell script called "postinstall"), and the postinstall script will be executed automatically when we deploy
  • 34. To the Cloud, and beyond! 4: deploy application $  dotcloud  create  symfonipsum   [...]   $  dotcloud  push   ==>  Pushing  code  with  rsync  from  "./"  to  application  symfonipsum   building  file  list  ...  done   [...uploading...]   [...and  a  couple  of  minutes  later...]   14:38:10.312838:  -­‐-­‐>  Application  (symfonipsum)  fully  installed   ==>  Application  is  live  at  http://symfonipsum-­‐skaya.dotcloud.com   But of course, it doesn't work: we never configured the database host/port/etc.
  • 35. To the Cloud, and beyond! 5: configure database •  Find out database information: $  dotcloud  info  mysql   [...]   ports:      ssh:      ssh://mysql@symfonipsum-­‐skaya.azva.dotcloud.net:12345      mysql:  mysql://root:XXX@symfonipsum-­‐skaya.azva.dotcloud.net:23456   •  Edit app/config/config.yml, update host/port/login/password •  Push again
  • 36. Quick break: "The Twelve Factor App" •  http://www.12factor.net/ •  http://www.12factor.net/config •  "Store config in the environment" o  App config = everything that is likely to vary between deploys (staging, production, developer env., etc.) o  Includes: database/memcached access information, credentials to external services (Twitter, S3...) o  Storing config as constants in the code is wrong! Please don't do it! o  A good test: can you open source the code without compromising any credential?
  • 37. To the Cloud, and beyond! 5bis: configure database •  dotCloud will put all information in two files: o  ~/environment.json   o  ~/environment.yml   •  We do the following changes: o  Update postinstall to generate ~/symfony.yml (using the information in environment.json) o  Update app/config/config.yml to import ~/symfony.yml   •  Push again
  • 38. To the Cloud, and beyond! 6: Multiplicate the Loaves $  dotcloud  create  ipsumdev   $  dotcloud  push   [...]   $  dotcloud  create  symfonymongotest   $  dotcloud  push   [...]  
  • 39. To the Cloud, and beyond! 7: Go live! $  dotcloud  create  ipsumprod  -­‐f  live   $  dotcloud  push   $  dotcloud  scale  db:instances=2   $  dotcloud  scale  www:memory=800M   $  dotcloud  domain  add  www  www.loremipsum.com  
  • 40. Drawbacks of PaaS •  One-time initial investment (small) o  Get familiar with the CLI, tools... •  Per-app initial investment (variable) o  Inject configuration variables o  Rework your app "for the Cloud" (when needed) o  Meddle Not In The Affairs Of Wizards!
  • 41.
  • 42. Drawbacks of PaaS •  One-time initial investment (small) o  Get familiar with the CLI, tools... •  Per-app initial investment (variable) o  Inject configuration variables o  Rework your app "for the Cloud" (when needed) o  Meddle Not In The Affairs Of Wizards! •  Higher apparent cost o  PaaS hosting can be 4x-10x more expensive o  Comes with 24x7 ops team, scaling, support o  Current PaaS don't leverage cheap hosts yet
  • 43. One more (semi-) Drawback of PaaS •  "dotcloud  run" (SSH access) doesn't work on the WiFi access in this conference! •  But we're working on that... (WebSocket tunneling of SSH) •  And you can't access your server, neither. (Unless you have a cunning VPN; OpenVPN running on 443/tcp anyone?) •  Meawhile, you can still push to dotCloud! Yaaay!
  • 44. Future of PaaS •  PaaS on your servers / local machine •  PaaS on a wide range of platforms (from cheap entry-level to high-end SSD) •  Support for more languages & databases •  Support for more frameworks •  More integration with 3rd parties (e.g. github)
  • 45. Thank you! Questions? @jpetazzo jerome@dotcloud.com www.dotcloud.com Slides deck: http://goo.gl/jZwdC Feedback: http://joind.in/8217