Presentation is loading. Please wait.

Presentation is loading. Please wait.

PaaSing Your Code Around Oct 8 2013 ZendCon 2013 1.

Similar presentations

Presentation on theme: "PaaSing Your Code Around Oct 8 2013 ZendCon 2013 1."— Presentation transcript:

1 PaaSing Your Code Around Oct ZendCon

2 Who Am I? Chris Tankersley Been Doing PHP for 9+ Years Lots of projects no one uses, and a few that some do: tank tank ZendCon 2013 Oct

3 What is PaaS? Oct ZendCon

4 Software as a Service (SaaS) Software Package Platform as a Service Platform as a Service (PaaS) Server LanguageDeployment Scripts Infrastructure as a Service (IaaS) Server InfrastructureStorageNetwork Oct ZendCon

5 Why use a PaaS? Offload the work to someone else Possibly (maybe) more cost effective Small shops dont have to hire as many people Scalability, both up and down Oct ZendCon

6 PaaS Workflow Git repo Feature Branch Run Paas Deployment Your App Runs! Oct ZendCon

7 Basic Knowledge Just about all of them use git Just about all of them work best with a command line Your OS doesnt matter, they all pretty much support everything A server-side scripting language Bash, Ruby, Python Oct ZendCon

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? Oct ZendCon

9 Oct ZendCon

10 Lets set up a site on a PaaS your-code-around your-code-around Oct ZendCon

11 What I built Silex App that displayed user-supplied texts from drunk elephants Silex Symfony Forms Ruckusing Migrations Twig Oct ZendCon

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 Oct ZendCon

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 Oct ZendCon

14 Heroku Oct ZendCon

15 Heroku Heroku is a container-based PaaS Each container (dyno) is a little virtualized environment Supports PHP and Apache out of the box Has a command line interface for working with your apps Oct ZendCon

16 Heroku – Creating an Application Oct ZendCon

17 Heroku – Deploying an App Push your branch to Herokus master branch Oct ZendCon

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 youll 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 Oct ZendCon

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 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 Oct ZendCon

20 Engineyard Oct ZendCon

21 Engineyard Engineyard is an AWS-based PaaS You set up Environments, which are groups of EC2 instances Supports PHP 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 Oct ZendCon

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 Oct ZendCon

23 Engineyard – Deploying an App Give it a branch name and click Deploy Oct ZendCon

24 Engineyard – Getting it to Work Had to add a deploy/ script to get the database migrations to work Oct ZendCon

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 its booting an EC2 instance, its slow. Takes minutes to provision the environment (Deploys are much quicker) Natively supports Composer! Oct ZendCon

26 Redhat OpenShift Oct ZendCon

27 OpenShift OpenShift is a cartridge (container) PaaS Supports PHP 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 PaaSs Oct ZendCon

28 OpenShift – Creating an Application Oct ZendCon

29 OpenShift – Deploying an App Push your branch to OpenShifts master branch Oct ZendCon

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 Oct ZendCon

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 Oct ZendCon

32 AWS ElasticBeanstalk Oct ZendCon

33 ElasticBeanStalk Its a Rackspace-based PaaS! Oct ZendCon

34 ElasticBeanStalk Its a Rackspace-based PaaS! Its an AWS-based PaaS Supports PHP 5.4 out of the box, and Amazon RDS for DB Has a nice command line interface Oct ZendCon

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 Oct ZendCon

36 ElasticBeanstalk – Deploying an App Run eb branch to assign your branch to an environment Run git aws.push to deploy Oct ZendCon

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 Oct ZendCon

38 ElasticBeanstalk – General Notes Its AWS, so provisioning the servers can take minutes Supports Composer out of the box, which is nice Deploy hooks are done via their container_commands Oct ZendCon

39 So What did I Learn? Oct ZendCon

40 Deploy Scripts Are Your Friend While youve got shell access, you still dont want to do stuff manually Knowing Bash scripting was incredibly helpful Oct ZendCon

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 Oct ZendCon

42 Your Code Should Just Work A good PaaS wont need you to modify your code My code modifications were changing DB- backends or making assumptions I shouldnt have Most of the differences in the sample code are deploy scripts and the config file Thats ignoring storage issues, which you might need to work on Oct ZendCon

43 Questions? Oct ZendCon

44 Thank Oct ZendCon

Download ppt "PaaSing Your Code Around Oct 8 2013 ZendCon 2013 1."

Similar presentations

Ads by Google