Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Heroku und PHP

Heroku und PHP

Slides from my talk at the Developer Conference 2013 in Hamburg. Not affiliated with Heroku.

A74f50459192654b891771cc63e401b6?s=128

Christoph Hochstrasser

November 07, 2013
Tweet

Transcript

  1. Heroku & PHP

  2. Sponsored by Heroku Not.

  3. Christoph Hochstrasser @hochchristoph github.com/CHH Blog: christophh.net Full-Stack Web Developer –

    Funemployed Contributor zu Composer, StackPHP. Creator von php-build.
  4. Um was gehts? • Was ist Heroku? • Das Problem

    mit Heroku und PHP • Buildpacks & Open Source to the rescue! • Rezepte für PHP Apps auf Heroku
  5. Heroku? Wat?

  6. None
  7. her-OH-koo

  8. Platform as a Service

  9. Ruby, Python, Node.js, Java, Scala, Clojure, Go

  10. (PHP) dazu später mehr

  11. Dynos

  12. Addons addons.heroku.com

  13. „Buildpacks“

  14. 12factor.net

  15. PHP

  16. PHP Support auf Heroku ist „solala“

  17. Problem:

  18. PHP 5.3 + Apache Prefork MPM & mod_php + Dynos

    haben nur 512MB RAM
  19. Aber das können wir beheben. Let’s do it.

  20. Buildpack • Erlaubt die Verwendung eines eigenen Software Stacks auf

    Heroku • Pro App • Git Repository • Scripts (detect, compile, release) • Binaries von z.B. S3 • Mehr unter https://devcenter.heroku.com/articles/buildpack- api
  21. Buildpack git push heroku master detect compile release

  22. Darf ich vorstellen: github.com/CHH/heroku-buildpack-php

  23. Inspiriert vom Node.js Buildpack

  24. Moderner PHP Stack

  25. PHP-FPM & NGINX

  26. PHP 5.3, 5.4, 5.5 dynamisch konfigurierbar

  27. Zend Opcache

  28. mongo redis intl pgsql apcu + more to come

  29. <?php phpinfo(); ?> https://chh-php-test.herokuapp.com/info

  30. Composer

  31. Unterstützt Symfony 2, Silex & Slim Wordpress (mit Anpassungen) In

    Zukunft auch Zend Framework 1/2 & Laravel
  32. NewRelic Monitoring

  33. Konfiguration über composer.json

  34. { "require": { "php": ">=5.3.0", "silex/silex": "~1.0@dev", "ext-libevent": "*" },

    "extra": { "heroku": { "document-root": "web", "index-document": "index.php", "php-config": [ "short_open_tag=on", "date.timezone=Europe/Vienna", "newrelic.appname=php-test" ], "engines": { "php": "5.4.*", "nginx": "1.4.*" }, "compile": [ ] } } } Framework php.ini Einstellungen Stack Versionen Shell Befehle Häufige Settings
  35. „Zeroconf“ Symfony 2 Support

  36. $ php composer.phar create-project symfony/framework-standard-edition Symfony 2.3.0 $ cd Symfony

    $ heroku create —buildpack git://github.com/CHH/heroku-buildpack-php —region eu $ git push heroku master
  37. Help Wanted! ! github.com/CHH/heroku-buildpack-php/issues

  38. Rezepte

  39. Lokales Development

  40. php -S php app/console server:run

  41. Credentials

  42. Config Vars $ heroku config:set API_SECRET=mytotallysecretkey $_SERVER['API_SECRET']

  43. + änderbar ohne Code Push + nicht eingecheckt im Repository

  44. Kandidaten für Config Vars: • S3 Bucket • Amazon Access

    Key/Secret • Datenbank Host, Port, Username, Passwort, Datenbankname • Redis Host • Secrets aller Art (Facebook,…) • Application Environment
  45. Aber wie mach ich das lokal?

  46. .env github.com/vlucas/phpdotenv

  47. AWS_SECRET_KEY=foo AWS_ACCESS_KEY_ID=asd8asd8ausd MY_AWESOME_CONF_VAR=foobarbaz DATABASE_URL=mysql://root:pass@localhost:6657/dbname SERVICE_URL=localhost:5000 REDIS_URL=redis://localhost:6379 REDIS_PASS=s3cr3tp4ss SERVER_NAME=localhost:3000 APP_ENV=development

  48. Assets

  49. JS/CSS/Images → S3 → CDN

  50. Alternative php app/console assets:dump —env=prod

  51. { … "extra": { "heroku": { … "compile": [ "php

    app/console assets:dump —env=prod" ] } } }
  52. Sessions

  53. Redis $ heroku addons:add redistogo

  54. Datenbank

  55. Heroku Postgres heroku addons:add heroku-postgresql

  56. MySQL: Amazon RDS heroku addons:add amazon_rds

  57. MongoDB $ heroku addons:add mongohq

  58. Links • Heroku PHP Buildpack: github.com/CHH/heroku-buildpack-php • Heroku Buildpacks API:

    https://devcenter.heroku.com/articles/ buildpack-api • HHVM Buildpack: https://github.com/hhvm/heroku-buildpack-hhvm
  59. Danke!

  60. Alle Klarheiten beseitigt? Fragen?