SlideShare une entreprise Scribd logo
Utiliser Symfony sur des environnementsUtiliser Symfony sur des environnements
Heroku-likeHeroku-like
Utiliser Symfony sur des environnementsUtiliser Symfony sur des environnements
Heroku-likeHeroku-like
Remerciements
Il était une fois
● Madame Michu est chocolatière.
● Elle vend sur Internet ses produits.
– Site en Symfony2, respectueux des pratiques.
– Une base de données.
– Des sessions stockées sur le système de fichiers.
– Un serveur de websockets pour un service assistance.
● Codé dans une commande : php app/console support:run
● Les affaires marchent très bien !
Quand tout à coup, les soldes !
BAOUM.
● Sous la charge, le site se met à « ramer ».
– Load average : 481,42
– Impossible de reprendre la main en SSH.
– Les pages s'affichent en 45 secondes.
● C'est dramatique, Madame Michu aurait pu
gagner beaucoup d'argent !
Solutions
● Ne rien faire.
+ Ne coûte pas plus cher.
+ La présentation est finie.
- Perte d'argent et de notoriété lors des soldes.
● Acheter un plus gros serveur.
+ Résout le problème des soldes.
- Coûte plus cher le reste de l'année.
Ou alors ...
● Adapter l'infrastructure au trafic.
● Ajouter de la puissance la veille des soldes.
● Et la retirer ensuite.
L'objectif
But du jeu
– Passer de gauche à droite.
– Pouvoir rajouter des instances à chaud en quelques
secondes.
The twelve-factor app
●
Une méthodologie pour fournir une application en tant que service.
– Automatisable
– Portable
– Adaptée au cloud
– Scalable
●
Écrit par Adam Wiggins.
– Cofondateur de Heroku.
●
Disponible sur http://12factor.net
I. Codebase
● « One codebase tracked in revision control,
many deploys »
– Toutes les versions de l'application sont sur un seul
repository.
– C'est une pratique courante dans la communauté
Symfony.
II. Dependencies
● « Explicitly declare and isolate dependencies »
– Grâce à Composer, c'est déjà le cas.
III. Config
● « Store config in the environment »
– Séparation du code et de la configuration.
– Au déploiement, la configuration n'est plus un
souci.
III. Config
III. Config
SYMFONY_ENV=prod
SYMFONY__DATABASE_USER=myuser
SYMFONY__DATABASE_NAME=myshop
IV. Backing Services
● « Treat backing services as attached
resources »
– La base de donnée est une ressource.
– Attention ! Les sessions aussi !
IV. Backing Services
● Pour doctrine, c'est natif.
– Tout est paramétrable via le parameters.yml.
– Et donc via l'environnement.
● Centralisons nos sessions dans Redis.
● Il y a un bundle pour ça.
– https://github.com/snc/SncRedisBundle
IV. Backing Services
● Dépendances
– snc/redis-bundle: ~1.1
– predis/predis: ~0.8
● Configuration
V. Build, release, run
● « Strictly separate build and run stages »
– Build
● Composer install
● Inclure tous les binaires (apache / nginx, php / hhvm).
– Run
● Démarrer apache / nginx.
V. Build, release, run
● Hein ?! Packager php avec le projet ?
● Avec un buildpack, c'est facile !
● git clone https://github.com/heroku/heroku-buildpack-php
● cd heroku-buildpack-php
● ./bin/compile /path/to/the/app /tmp/cache /path/to/env
● ./bin/release /path/to/the/app
● On zippe le résultat.
V. Build, release, run
VI. Processes
● « Execute the app as one or more stateless processes »
● Stateless
– Déjà fait !
● Backing Services
● Config via environnement
● One or more ?
– Le site = un process
– Le serveur de websockets = un process
VI. Processes
● Utiliser un Procfile.
web: bin/heroku-php-nginx -C conf/nginx.conf web/
support: php app/console support:run
VII. Port binding
● « Export services via port binding »
– Base de données : 192.168.1.12:5210
– Instance « web 1 » : 192.168.1.22:6597
– Instance « web 2 » : 192.168.1.25:7851
– …
● La configuration pour relier les services.
VIII. Concurrency
● « Scale out via the process model »
– Notre application est stateless.
– Alors on peut en avoir 1, 10 ou 1000 sans altérer
son fonctionnement.
IX. Disposability
● « Maximize robustness with fast startup and
graceful shutdown »
X. Dev/prod parity
● « Keep development, staging, and production
as similar as possible »
– Merci docker !
XI. Logs
● « Treat logs as event streams »
– Beaucoup de machines.
● Un même visiteur peut passer sur plusieurs serveurs.
● Il faut centraliser.
– Les applications sont stateless.
● On n'écrit pas de log sur la machine.
● Tout est redirigé vers stdout / stderr.
XI. Logs
● Heureusement, Monolog est là !
XII. Admin processes
● « Run admin/management tasks as one-off processes »
– Comment créer la base de données ?
– Certainement pas sur une instance existante
● On démarre une nouvelle instance en mode REPL
– REPL : read–eval–print loop
– En gros : SSH
– A la fin de l'opération : l'instance est détruite
XII. Admin processes
Mais qui s'occupe de collecter les logs, de
démarrer les machines avec les bonnes variables
d'environnement, d'automatiquement exposer les
services entre eux ?
SfPot Lille 07/2015 - Utiliser Symfony sur des environnements Heroku-like
Démo time !
● Amusons nous avec Flynn
– https://flynn.io/
– Gratuit, open source
– Facile à utiliser en local
Merci pour votre attention

Contenu connexe

PDF
Node.js et les nouvelles technologies javascript
ODP
Réu technodejs
PDF
Debian usage at BlaBlaCar - Debian Paris meetup
ODP
Utilisation de node.js avec mongoDB
 
PPTX
WebHookIt @parisjs #4
PDF
BlaBlaCar - Going Native !
KEY
Python et les bases de données non sql
PPTX
2014.12.11 - TECH CONF #3 - Présentation Node.js
Node.js et les nouvelles technologies javascript
Réu technodejs
Debian usage at BlaBlaCar - Debian Paris meetup
Utilisation de node.js avec mongoDB
 
WebHookIt @parisjs #4
BlaBlaCar - Going Native !
Python et les bases de données non sql
2014.12.11 - TECH CONF #3 - Présentation Node.js

Tendances (6)

PPTX
Présentation de Node.js
PDF
WordPress & le Multsite
PDF
Web server local
PPTX
Introduction à Node.js
PDF
WebExtensions - it's now / c'est maintenant
PDF
Introduction à WordPress sous Nginx
Présentation de Node.js
WordPress & le Multsite
Web server local
Introduction à Node.js
WebExtensions - it's now / c'est maintenant
Introduction à WordPress sous Nginx
Publicité

En vedette (20)

PDF
Mini guide 25 convention aeras
PPTX
10-Necesidades energeticas y minerales
PDF
27868226 no-es-posible-curarse-sin-aprender-a-vivir-undescrypt
PDF
E-reputation et communication : quels risques et opportunités pour mon établi...
PPTX
Webinar cloud hybrid toolbox
PPT
PDF
Cookandmix def
PPS
Trabajo de higiene postural de Eva, alumna de 5º B
PDF
Nissan part de marché en europe au niveau le plus élevé depuis 12 mois
PDF
Rap mediateur 2010 via http://www.bercy.gouv.fr/directions_services/mediateur...
PPTX
Test1
PPTX
Château d`almourol
PDF
Priorité pme ue small business act
ODP
Résultats premier tour présidentielles 2012
PPTX
Presentacion primavera
PPTX
Entrevue avec nos ancêtres
PDF
Programme électorale PDP
ODP
Stiforp : opportunité à saisir
PPS
Cartadeunbebe
Mini guide 25 convention aeras
10-Necesidades energeticas y minerales
27868226 no-es-posible-curarse-sin-aprender-a-vivir-undescrypt
E-reputation et communication : quels risques et opportunités pour mon établi...
Webinar cloud hybrid toolbox
Cookandmix def
Trabajo de higiene postural de Eva, alumna de 5º B
Nissan part de marché en europe au niveau le plus élevé depuis 12 mois
Rap mediateur 2010 via http://www.bercy.gouv.fr/directions_services/mediateur...
Test1
Château d`almourol
Priorité pme ue small business act
Résultats premier tour présidentielles 2012
Presentacion primavera
Entrevue avec nos ancêtres
Programme électorale PDP
Stiforp : opportunité à saisir
Cartadeunbebe
Publicité

Similaire à SfPot Lille 07/2015 - Utiliser Symfony sur des environnements Heroku-like (20)

PPTX
Presentation Symfony2
PPTX
Atelier Symfony2- Introduction
PDF
Symfony2: 30 astuces et bonnes pratiques
PDF
Symfony 4 2019
PDF
Docker en Production (Docker Paris)
ODP
Symfony Best Practices
PDF
Industrialisation des environnements de dev avec Puppet et Amazon (mais en fa...
PPTX
Symfony3 overview
ODP
Rex docker en production meeutp-docker-nantes
PPTX
Symfony 2 : chapitre 1 - Présentation Générale
PDF
Mieux Développer en PHP avec Symfony
PDF
Infrastructure as code drupal
PDF
Orchestrez vos projets Symfony sans fausses notes
KEY
Chef - Paris BlockCamp - Nov 09
PDF
Introduction à Symfony2
PDF
Spring Boot & Containers - Do's & Don'ts
PPTX
Introduction à Symfony
PDF
Je configure mes serveurs avec fabric et fabtools
PDF
Architecture microservices avec docker
PDF
12-Factor
Presentation Symfony2
Atelier Symfony2- Introduction
Symfony2: 30 astuces et bonnes pratiques
Symfony 4 2019
Docker en Production (Docker Paris)
Symfony Best Practices
Industrialisation des environnements de dev avec Puppet et Amazon (mais en fa...
Symfony3 overview
Rex docker en production meeutp-docker-nantes
Symfony 2 : chapitre 1 - Présentation Générale
Mieux Développer en PHP avec Symfony
Infrastructure as code drupal
Orchestrez vos projets Symfony sans fausses notes
Chef - Paris BlockCamp - Nov 09
Introduction à Symfony2
Spring Boot & Containers - Do's & Don'ts
Introduction à Symfony
Je configure mes serveurs avec fabric et fabtools
Architecture microservices avec docker
12-Factor

SfPot Lille 07/2015 - Utiliser Symfony sur des environnements Heroku-like

  • 1. Utiliser Symfony sur des environnementsUtiliser Symfony sur des environnements Heroku-likeHeroku-like Utiliser Symfony sur des environnementsUtiliser Symfony sur des environnements Heroku-likeHeroku-like
  • 3. Il était une fois ● Madame Michu est chocolatière. ● Elle vend sur Internet ses produits. – Site en Symfony2, respectueux des pratiques. – Une base de données. – Des sessions stockées sur le système de fichiers. – Un serveur de websockets pour un service assistance. ● Codé dans une commande : php app/console support:run ● Les affaires marchent très bien !
  • 4. Quand tout à coup, les soldes !
  • 5. BAOUM. ● Sous la charge, le site se met à « ramer ». – Load average : 481,42 – Impossible de reprendre la main en SSH. – Les pages s'affichent en 45 secondes. ● C'est dramatique, Madame Michu aurait pu gagner beaucoup d'argent !
  • 6. Solutions ● Ne rien faire. + Ne coûte pas plus cher. + La présentation est finie. - Perte d'argent et de notoriété lors des soldes. ● Acheter un plus gros serveur. + Résout le problème des soldes. - Coûte plus cher le reste de l'année.
  • 7. Ou alors ... ● Adapter l'infrastructure au trafic. ● Ajouter de la puissance la veille des soldes. ● Et la retirer ensuite.
  • 8. L'objectif But du jeu – Passer de gauche à droite. – Pouvoir rajouter des instances à chaud en quelques secondes.
  • 9. The twelve-factor app ● Une méthodologie pour fournir une application en tant que service. – Automatisable – Portable – Adaptée au cloud – Scalable ● Écrit par Adam Wiggins. – Cofondateur de Heroku. ● Disponible sur http://12factor.net
  • 10. I. Codebase ● « One codebase tracked in revision control, many deploys » – Toutes les versions de l'application sont sur un seul repository. – C'est une pratique courante dans la communauté Symfony.
  • 11. II. Dependencies ● « Explicitly declare and isolate dependencies » – Grâce à Composer, c'est déjà le cas.
  • 12. III. Config ● « Store config in the environment » – Séparation du code et de la configuration. – Au déploiement, la configuration n'est plus un souci.
  • 15. IV. Backing Services ● « Treat backing services as attached resources » – La base de donnée est une ressource. – Attention ! Les sessions aussi !
  • 16. IV. Backing Services ● Pour doctrine, c'est natif. – Tout est paramétrable via le parameters.yml. – Et donc via l'environnement. ● Centralisons nos sessions dans Redis. ● Il y a un bundle pour ça. – https://github.com/snc/SncRedisBundle
  • 17. IV. Backing Services ● Dépendances – snc/redis-bundle: ~1.1 – predis/predis: ~0.8 ● Configuration
  • 18. V. Build, release, run ● « Strictly separate build and run stages » – Build ● Composer install ● Inclure tous les binaires (apache / nginx, php / hhvm). – Run ● Démarrer apache / nginx.
  • 19. V. Build, release, run ● Hein ?! Packager php avec le projet ? ● Avec un buildpack, c'est facile ! ● git clone https://github.com/heroku/heroku-buildpack-php ● cd heroku-buildpack-php ● ./bin/compile /path/to/the/app /tmp/cache /path/to/env ● ./bin/release /path/to/the/app ● On zippe le résultat.
  • 21. VI. Processes ● « Execute the app as one or more stateless processes » ● Stateless – Déjà fait ! ● Backing Services ● Config via environnement ● One or more ? – Le site = un process – Le serveur de websockets = un process
  • 22. VI. Processes ● Utiliser un Procfile. web: bin/heroku-php-nginx -C conf/nginx.conf web/ support: php app/console support:run
  • 23. VII. Port binding ● « Export services via port binding » – Base de données : 192.168.1.12:5210 – Instance « web 1 » : 192.168.1.22:6597 – Instance « web 2 » : 192.168.1.25:7851 – … ● La configuration pour relier les services.
  • 24. VIII. Concurrency ● « Scale out via the process model » – Notre application est stateless. – Alors on peut en avoir 1, 10 ou 1000 sans altérer son fonctionnement.
  • 25. IX. Disposability ● « Maximize robustness with fast startup and graceful shutdown »
  • 26. X. Dev/prod parity ● « Keep development, staging, and production as similar as possible » – Merci docker !
  • 27. XI. Logs ● « Treat logs as event streams » – Beaucoup de machines. ● Un même visiteur peut passer sur plusieurs serveurs. ● Il faut centraliser. – Les applications sont stateless. ● On n'écrit pas de log sur la machine. ● Tout est redirigé vers stdout / stderr.
  • 28. XI. Logs ● Heureusement, Monolog est là !
  • 29. XII. Admin processes ● « Run admin/management tasks as one-off processes » – Comment créer la base de données ? – Certainement pas sur une instance existante ● On démarre une nouvelle instance en mode REPL – REPL : read–eval–print loop – En gros : SSH – A la fin de l'opération : l'instance est détruite
  • 31. Mais qui s'occupe de collecter les logs, de démarrer les machines avec les bonnes variables d'environnement, d'automatiquement exposer les services entre eux ?
  • 33. Démo time ! ● Amusons nous avec Flynn – https://flynn.io/ – Gratuit, open source – Facile à utiliser en local
  • 34. Merci pour votre attention