SlideShare une entreprise Scribd logo
Lucas Bonnet
 Pierre Couzy
Développer et déployer une application php maintenable
◦ Dans le temps

◦ Dans l’environnement d’exécution

◦ Dans les évolutions
   Les prérequis ?
    ◦ Le runtime PHP
    ◦ Les extensions
    ◦ Logging
   L’appli ?
    ◦ Paramétrage
    ◦ La base de données
    ◦ Les autres données
   La prod ?
    ◦ Le serveur
    ◦ Les caches
    ◦ Retour sur la base de données
   Le déploiement
Un premier impact sur les versions majeures
     Fonctions obsolètes
     Vieux workarounds qui cessent de fonctionner
     Nouveaux bugs

Mais aussi sur les versions mineures
     Corrections apportées suite à l’analyse par CoVerity
     Gestion d’erreur parfois subtilement différente
     Exemples : Eval, PDO

Et enfin selon l’OS
     Profil de perf TRES différent entre 5.2 et 5.3 sous Windows

Le choix du runtime va avoir de très grosses conséquences
     Soit on fige une version de PHP en prod
     Soit on sait recetter l’appli sur une nouvelle version de …
   Installez php sans extensions
   Activez le reporting
   Ajoutez le strict minimum
   Mettez php.ini au carré

   Ne jetez pas les extensions
    qui ne vous servent pas ?
    ◦ On est pas d’accord sur le sujet.
   Calendar : installé ou pas ?
   Mb_string : en mod_php sur 5.2 en mutu, si
    des sites activent mb_string les autres en
    “profitent”
   Au fait, quand on ajoute une
    extension à une install existante,
    on prend quelle version ?
   Un cauchemar particulier sous Windows
    ◦ Prenez les versions VC9 NTS pour IIS, et VC6 TS
      pour Apache
Développer et déployer une application php maintenable
   À faire sur la bécane de dev et après chaque
    mise en prod et à garder dans les docs
   Les composants tiers (FW, plugins, etc.)
   Les paramètres de déploiement
   Les paramètres de fonctionnement
   L’adhérence à la base de données
   Le filesystem
   Etc.
Développer et déployer une application php maintenable
Développer et déployer une application php maintenable
   Des paramètres regroupés
   Différenciés par
    environnement de
    déploiement
   Différenciés par nature
    ◦ appli/infra/opti/…
   Préférez des formats texte…
    ◦ Et documentés
   Le minimum syndical
    ◦ Une couche technique d’abstraction
    ◦ Un référentiel pour les requêtes custom

   PDO
    ◦ Pas complet, mais on a pas mieux.

   Une parenthèse sur les ORM
   A votre avis ?

    ◦   Images uploadées
    ◦   Sessions
    ◦   Fichiers auto-générés
    ◦   Logs
    ◦   Code uploadé par un admin (depuis l’IHM Web)
   Quelques questions simples
    ◦   Conventions ?
    ◦   Permissions ?
    ◦   Abstraction ? (wrappers etc)
    ◦   Limites à comprendre
         Nb de fichiers/folders par …
         Limites sur un nom de fichier ?
         Permissions sur répertoires : pas toujours dispo
   Fichiers auto-générés
   Vignettes
   Sessions
   Paramétrage des logs
    ◦ Log errors = on
    ◦ display_errors = off
        E_STRICT
        E_ALL
        E_DEPRECATED
        E_NOTICE
   Les 5 principales causes couvrent 86% des
    attaques recensées
   Comment se couvrir ?
   Coverity
   Php lint
   Séparez les données
    ◦ UGC
    ◦ Données de structure / modules / etc


   Exemple : Drupal, un nouveau module
    ◦   Le filesystem
    ◦   La base de données
    ◦   Même sans contenus utilisateur
    ◦   l’upgrade est faite par code
   C’est quoi l’adresse de ton SMTP ?
    ◦ Si c’est pour quelques mails l’hébergeur peut
      éventuellement le fournir
    ◦ Si c’est pour spammer on passe par un service
      dédié et externe (critsend, etc.)
   Tu peux m’ouvrir un accès FTP ?
    ◦ Pour de la mise en prod ?
    ◦ Pour de la mise à dispo d’exports divers et variés
    ◦ Pour du reparamétrage
   Profils de charge inattendus
    ◦ Un appel synchrone à FB oublié dans un coin sur la
      home
   La base s’éloigne
    ◦ Lag qui passe de 1 à 10 ms
   Saturations disque / RAM / réseau
   Oui, j’ai laissé l’historique dans la
    base, pourquoi tu demandes ça ?
Un process par                           Chargement de                 Gestion d’un pool




                                                                   FastCGI
                             ISAPI & mod-php
CGI

      requête                                  PHP in-process                de process
                                               (surrogate IIS ou
                                               process Apache)

      Avantage                                 Avantage                      Avantages
      • Très stable                            • Très performant             • Plus rapide que CGI
                                                                             • Plus stable
      Inconvénient                             Inconvénients                   qu’ISAPI/mod_php
                                                                             • Permet de
      • *Très* lent sous                       • Stabilité                     fonctionner sans
        Windows (coût                          • Réentrance                    réentrance
        énorme de création
        d’un process)
http://forge.bearstech.com/trac/wiki/DebianLampLenny
   Optimiser, c’est mal
    ◦ En dev
      Avant la mise en prod
        Par copier/coller de trucs sur internet
   Sur la bécane
    ◦   Cache d’opcode
    ◦   Cache de résolution dns/filesystem
    ◦   User code ?
    ◦   Caches de rendu divers et variés
    ◦   Cache de bdd
   Entre bécanes
    ◦ Sessions dans memcache/redis/..
   Au cul des bécanes
    ◦ Varnish (cookie de session anyone ?)
   Tables à croissance infinie
   Requêtes non cachées
   Requêtes impliquant un table scan
   Select * from MyHugeNewsTable
    … Order by rand()
   Fonctionnellement, une jointure est équivalente à
    une boucle.
   Les BDD savent optimiser les requêtes identiques
    (par exemple les requêtes paramétrées)
    ◦ Il y toujours PDO::ATTR_EMULATE_PREPARES si vous en
      avez besoin
   Mon premier déploiement
    ◦ Coupez le réseau de la machine du développeur et
      filez-lui une clé USB.
   Pour les suivants, automatisez
    ◦ Aujourd’hui ce n’est pas la norme

    … Et on est polis

   Un contrôleur de source ça peut garder plein
    de trucs
    ◦ Y compris une appli qui n’est pas sous contrôle de
      source avant l’arrivée en prod
Développer et déployer une application php maintenable

Contenu connexe

PDF
Optimiser wordpress
PDF
Optimiser WordPress
PPTX
ça marchait pourtant en dev
PDF
Bien qu'en ligne votre site web n'est probablement pas en production
PDF
eZ Publish Platform 5.2 - Webinaire d'introduction
PDF
Deployment of a multi-site platform
PDF
Industrialisation des environnements de dev avec Puppet et Amazon (mais en fa...
PPTX
Développer et déployer WordPress en environnement microsoft
Optimiser wordpress
Optimiser WordPress
ça marchait pourtant en dev
Bien qu'en ligne votre site web n'est probablement pas en production
eZ Publish Platform 5.2 - Webinaire d'introduction
Deployment of a multi-site platform
Industrialisation des environnements de dev avec Puppet et Amazon (mais en fa...
Développer et déployer WordPress en environnement microsoft

Tendances (20)

PDF
Introduction à eZ Publish Platform 5.3
PPTX
Power shell saturday Paris 2017 Omiossec
PPTX
Préprocesseurs CSS et remote editing : Quelles solutions ? - Human talks Laval
PDF
Spring Batch - Julien Jakubowski - November 2010
ODP
Présentation de nodejs
 
PDF
DevOps avec Ansible et Docker
PDF
BBL - TDD pour les DevOps - Puppet
PDF
Industrialiser la gestion des fichiers multimedia #dcparis13
PDF
YLT paris js - mars 2015
PDF
Frameworks : A history of violence
PDF
Puppet, la philosophie DevOps
PDF
Presentation Zabbix en Français du 6 Juin 2013
PDF
Un site web rapide ?
PDF
MongoDB day Paris 2012
PDF
Livre blanc docker
ODP
Présentation de CakePHP, 22/04/2010
PPTX
Meetup WordPress Lyon #3 : Bien organiser son code dans WordPress.
PDF
wallabag, comment on a migré vers symfony3
PPTX
2014.12.11 - TECH CONF #3 - Présentation Node.js
PPTX
A la queue leu leu
Introduction à eZ Publish Platform 5.3
Power shell saturday Paris 2017 Omiossec
Préprocesseurs CSS et remote editing : Quelles solutions ? - Human talks Laval
Spring Batch - Julien Jakubowski - November 2010
Présentation de nodejs
 
DevOps avec Ansible et Docker
BBL - TDD pour les DevOps - Puppet
Industrialiser la gestion des fichiers multimedia #dcparis13
YLT paris js - mars 2015
Frameworks : A history of violence
Puppet, la philosophie DevOps
Presentation Zabbix en Français du 6 Juin 2013
Un site web rapide ?
MongoDB day Paris 2012
Livre blanc docker
Présentation de CakePHP, 22/04/2010
Meetup WordPress Lyon #3 : Bien organiser son code dans WordPress.
wallabag, comment on a migré vers symfony3
2014.12.11 - TECH CONF #3 - Présentation Node.js
A la queue leu leu
Publicité

En vedette (20)

PDF
BDD avec Behat, PhpSpec et Symfony2
PDF
Génération d'applications web avec Bonita
 
PDF
Contenido laboral del Reglamento de extranjería.
PDF
RevisionPerspectivas futuras en el tratamiento de la hepatitis crónica C
PPTX
A quoi va ressembler le projet spo tumblr
PPTX
Présentation Carrefour des Créateurs 1.11.11
PPT
Citizen act comment faire du buzz_2011_2012
PPTX
Categorias del concepto de personas
PPT
Mayores tic
PPT
Présentation pesée embarquée 2011
PDF
Atelier Vesuviani - Projet Combiniamoci - Intervention Virginia Scamardella
PPTX
15 conseils que j’aurais aimé avoir en début de carrière
PPT
Presentación del VI Encuentro Conecta Joven
PDF
Baobaz SES - La semaine sociale 281111
PPTX
Régimen de Autonomías, naturaleza y atribuciones
PPT
Citizen act fr_protocole_de_kyoto
PPTX
La comunicacion
PDF
DAHIR DROIT D'ASSOCIATION - Maroc
ODP
Los amigos
PPT
Ejemplo de fraccionarios
BDD avec Behat, PhpSpec et Symfony2
Génération d'applications web avec Bonita
 
Contenido laboral del Reglamento de extranjería.
RevisionPerspectivas futuras en el tratamiento de la hepatitis crónica C
A quoi va ressembler le projet spo tumblr
Présentation Carrefour des Créateurs 1.11.11
Citizen act comment faire du buzz_2011_2012
Categorias del concepto de personas
Mayores tic
Présentation pesée embarquée 2011
Atelier Vesuviani - Projet Combiniamoci - Intervention Virginia Scamardella
15 conseils que j’aurais aimé avoir en début de carrière
Presentación del VI Encuentro Conecta Joven
Baobaz SES - La semaine sociale 281111
Régimen de Autonomías, naturaleza y atribuciones
Citizen act fr_protocole_de_kyoto
La comunicacion
DAHIR DROIT D'ASSOCIATION - Maroc
Los amigos
Ejemplo de fraccionarios
Publicité

Similaire à Développer et déployer une application php maintenable (20)

PDF
Ecrire et déployer une appli PHP maintenable
PPTX
PHP : écrire et déployer des applications maintenables !
KEY
Conference Php Web Services
PDF
PHP/ExtJs experience feedback - IAV case - 1
PDF
Les performances sur des développements PhP
ODP
Présentation de PHP 5.4 [FR]
PPTX
Php sous Windows - webcamps Paris
PPTX
PDF
Configuration des services web sous centOS 5
PPT
Barcamp tunisie edition 2010 langage de programmation php
PDF
Apache for développeurs PHP
PPT
PPTX
PHP Forum 2010 : Php et microsoft
PPTX
Optimiser les performances dans Wordpress
ODP
Optimisation LAMP
PDF
Intellicore Tech Talk 10 - Apache Web Server Internals
PPT
Presentation d'une Formation du language avencer php.ppt
ODP
Presentation tz2018
PDF
Mieux Développer en PHP avec Symfony
PPTX
Performance et optimisation de PrestaShop
Ecrire et déployer une appli PHP maintenable
PHP : écrire et déployer des applications maintenables !
Conference Php Web Services
PHP/ExtJs experience feedback - IAV case - 1
Les performances sur des développements PhP
Présentation de PHP 5.4 [FR]
Php sous Windows - webcamps Paris
Configuration des services web sous centOS 5
Barcamp tunisie edition 2010 langage de programmation php
Apache for développeurs PHP
PHP Forum 2010 : Php et microsoft
Optimiser les performances dans Wordpress
Optimisation LAMP
Intellicore Tech Talk 10 - Apache Web Server Internals
Presentation d'une Formation du language avencer php.ppt
Presentation tz2018
Mieux Développer en PHP avec Symfony
Performance et optimisation de PrestaShop

Plus de LeTesteur (11)

PPTX
EventMachine
PPTX
RxJs - Reactive Extensions for JavaScript
PPT
Drupal en environnement microsoft
PPTX
Web dev open door
PPTX
Joomla Days 2011 Lyon
PPTX
Drupal in the cloud with Windows Azure
PPTX
Web Matrix (Microsoft WebCamps Paris)
PPTX
Eclipse day paris
PPTX
Reactive programming for javascript
PPTX
Comment approcherlecloud
PPTX
What linq is about
EventMachine
RxJs - Reactive Extensions for JavaScript
Drupal en environnement microsoft
Web dev open door
Joomla Days 2011 Lyon
Drupal in the cloud with Windows Azure
Web Matrix (Microsoft WebCamps Paris)
Eclipse day paris
Reactive programming for javascript
Comment approcherlecloud
What linq is about

Développer et déployer une application php maintenable

  • 3. ◦ Dans le temps ◦ Dans l’environnement d’exécution ◦ Dans les évolutions
  • 4. Les prérequis ? ◦ Le runtime PHP ◦ Les extensions ◦ Logging  L’appli ? ◦ Paramétrage ◦ La base de données ◦ Les autres données  La prod ? ◦ Le serveur ◦ Les caches ◦ Retour sur la base de données  Le déploiement
  • 5. Un premier impact sur les versions majeures  Fonctions obsolètes  Vieux workarounds qui cessent de fonctionner  Nouveaux bugs Mais aussi sur les versions mineures  Corrections apportées suite à l’analyse par CoVerity  Gestion d’erreur parfois subtilement différente  Exemples : Eval, PDO Et enfin selon l’OS  Profil de perf TRES différent entre 5.2 et 5.3 sous Windows Le choix du runtime va avoir de très grosses conséquences  Soit on fige une version de PHP en prod  Soit on sait recetter l’appli sur une nouvelle version de …
  • 6. Installez php sans extensions  Activez le reporting  Ajoutez le strict minimum  Mettez php.ini au carré  Ne jetez pas les extensions qui ne vous servent pas ? ◦ On est pas d’accord sur le sujet.
  • 7. Calendar : installé ou pas ?  Mb_string : en mod_php sur 5.2 en mutu, si des sites activent mb_string les autres en “profitent”  Au fait, quand on ajoute une extension à une install existante, on prend quelle version ?  Un cauchemar particulier sous Windows ◦ Prenez les versions VC9 NTS pour IIS, et VC6 TS pour Apache
  • 9. À faire sur la bécane de dev et après chaque mise en prod et à garder dans les docs
  • 10. Les composants tiers (FW, plugins, etc.)  Les paramètres de déploiement  Les paramètres de fonctionnement  L’adhérence à la base de données  Le filesystem  Etc.
  • 13. Des paramètres regroupés  Différenciés par environnement de déploiement  Différenciés par nature ◦ appli/infra/opti/…  Préférez des formats texte… ◦ Et documentés
  • 14. Le minimum syndical ◦ Une couche technique d’abstraction ◦ Un référentiel pour les requêtes custom  PDO ◦ Pas complet, mais on a pas mieux.  Une parenthèse sur les ORM
  • 15. A votre avis ? ◦ Images uploadées ◦ Sessions ◦ Fichiers auto-générés ◦ Logs ◦ Code uploadé par un admin (depuis l’IHM Web)
  • 16. Quelques questions simples ◦ Conventions ? ◦ Permissions ? ◦ Abstraction ? (wrappers etc) ◦ Limites à comprendre  Nb de fichiers/folders par …  Limites sur un nom de fichier ?  Permissions sur répertoires : pas toujours dispo
  • 17. Fichiers auto-générés  Vignettes  Sessions  Paramétrage des logs ◦ Log errors = on ◦ display_errors = off  E_STRICT  E_ALL  E_DEPRECATED  E_NOTICE
  • 18. Les 5 principales causes couvrent 86% des attaques recensées  Comment se couvrir ?  Coverity  Php lint
  • 19. Séparez les données ◦ UGC ◦ Données de structure / modules / etc  Exemple : Drupal, un nouveau module ◦ Le filesystem ◦ La base de données ◦ Même sans contenus utilisateur ◦ l’upgrade est faite par code
  • 20. C’est quoi l’adresse de ton SMTP ? ◦ Si c’est pour quelques mails l’hébergeur peut éventuellement le fournir ◦ Si c’est pour spammer on passe par un service dédié et externe (critsend, etc.)  Tu peux m’ouvrir un accès FTP ? ◦ Pour de la mise en prod ? ◦ Pour de la mise à dispo d’exports divers et variés ◦ Pour du reparamétrage
  • 21. Profils de charge inattendus ◦ Un appel synchrone à FB oublié dans un coin sur la home  La base s’éloigne ◦ Lag qui passe de 1 à 10 ms  Saturations disque / RAM / réseau  Oui, j’ai laissé l’historique dans la base, pourquoi tu demandes ça ?
  • 22. Un process par Chargement de Gestion d’un pool FastCGI ISAPI & mod-php CGI requête PHP in-process de process (surrogate IIS ou process Apache) Avantage Avantage Avantages • Très stable • Très performant • Plus rapide que CGI • Plus stable Inconvénient Inconvénients qu’ISAPI/mod_php • Permet de • *Très* lent sous • Stabilité fonctionner sans Windows (coût • Réentrance réentrance énorme de création d’un process)
  • 24. Optimiser, c’est mal ◦ En dev  Avant la mise en prod  Par copier/coller de trucs sur internet
  • 25. Sur la bécane ◦ Cache d’opcode ◦ Cache de résolution dns/filesystem ◦ User code ? ◦ Caches de rendu divers et variés ◦ Cache de bdd  Entre bécanes ◦ Sessions dans memcache/redis/..  Au cul des bécanes ◦ Varnish (cookie de session anyone ?)
  • 26. Tables à croissance infinie  Requêtes non cachées  Requêtes impliquant un table scan  Select * from MyHugeNewsTable … Order by rand()  Fonctionnellement, une jointure est équivalente à une boucle.  Les BDD savent optimiser les requêtes identiques (par exemple les requêtes paramétrées) ◦ Il y toujours PDO::ATTR_EMULATE_PREPARES si vous en avez besoin
  • 27. Mon premier déploiement ◦ Coupez le réseau de la machine du développeur et filez-lui une clé USB.  Pour les suivants, automatisez ◦ Aujourd’hui ce n’est pas la norme … Et on est polis  Un contrôleur de source ça peut garder plein de trucs ◦ Y compris une appli qui n’est pas sous contrôle de source avant l’arrivée en prod

Notes de l'éditeur

  • #29: Voir comment phpparse ses includes