Développer et déployer une application php maintenable
-
Upload
letesteur -
Category
Technology
-
view
2.457 -
download
4
description
Transcript of Développer et déployer une application php maintenable
![Page 1: Développer et déployer une application php maintenable](https://reader035.fdocument.pub/reader035/viewer/2022062708/5589e4cbd8b42a8e558b46b1/html5/thumbnails/1.jpg)
Développer et déployer une appli
maintenableLucas BonnetPierre Couzy
![Page 2: Développer et déployer une application php maintenable](https://reader035.fdocument.pub/reader035/viewer/2022062708/5589e4cbd8b42a8e558b46b1/html5/thumbnails/2.jpg)
Qui on est
![Page 3: Développer et déployer une application php maintenable](https://reader035.fdocument.pub/reader035/viewer/2022062708/5589e4cbd8b42a8e558b46b1/html5/thumbnails/3.jpg)
◦ Dans le temps
◦ Dans l’environnement d’exécution
◦ Dans les évolutions
Maintenable..
![Page 4: Développer et déployer une application php maintenable](https://reader035.fdocument.pub/reader035/viewer/2022062708/5589e4cbd8b42a8e558b46b1/html5/thumbnails/4.jpg)
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
Par où commencer ?
![Page 5: Développer et déployer une application php maintenable](https://reader035.fdocument.pub/reader035/viewer/2022062708/5589e4cbd8b42a8e558b46b1/html5/thumbnails/5.jpg)
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 …
La version de PHP
![Page 6: Développer et déployer une application php maintenable](https://reader035.fdocument.pub/reader035/viewer/2022062708/5589e4cbd8b42a8e558b46b1/html5/thumbnails/6.jpg)
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.
Extensions
![Page 7: Développer et déployer une application php maintenable](https://reader035.fdocument.pub/reader035/viewer/2022062708/5589e4cbd8b42a8e558b46b1/html5/thumbnails/7.jpg)
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
Quelques goodies sur les extensions
![Page 8: Développer et déployer une application php maintenable](https://reader035.fdocument.pub/reader035/viewer/2022062708/5589e4cbd8b42a8e558b46b1/html5/thumbnails/8.jpg)
![Page 9: Développer et déployer une application php maintenable](https://reader035.fdocument.pub/reader035/viewer/2022062708/5589e4cbd8b42a8e558b46b1/html5/thumbnails/9.jpg)
À faire sur la bécane de dev et après chaque mise en prod et à garder dans les docs
phpinfo()
![Page 10: Développer et déployer une application php maintenable](https://reader035.fdocument.pub/reader035/viewer/2022062708/5589e4cbd8b42a8e558b46b1/html5/thumbnails/10.jpg)
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épendances applicatives ?
![Page 11: Développer et déployer une application php maintenable](https://reader035.fdocument.pub/reader035/viewer/2022062708/5589e4cbd8b42a8e558b46b1/html5/thumbnails/11.jpg)
Paramètres
![Page 12: Développer et déployer une application php maintenable](https://reader035.fdocument.pub/reader035/viewer/2022062708/5589e4cbd8b42a8e558b46b1/html5/thumbnails/12.jpg)
Regroupez les paramètres
![Page 13: Développer et déployer une application php maintenable](https://reader035.fdocument.pub/reader035/viewer/2022062708/5589e4cbd8b42a8e558b46b1/html5/thumbnails/13.jpg)
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
A retenir
![Page 14: Développer et déployer une application php maintenable](https://reader035.fdocument.pub/reader035/viewer/2022062708/5589e4cbd8b42a8e558b46b1/html5/thumbnails/14.jpg)
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
La base de données
![Page 15: Développer et déployer une application php maintenable](https://reader035.fdocument.pub/reader035/viewer/2022062708/5589e4cbd8b42a8e558b46b1/html5/thumbnails/15.jpg)
A votre avis ?
◦ Images uploadées◦ Sessions◦ Fichiers auto-générés◦ Logs◦ Code uploadé par un admin (depuis l’IHM Web)
Les autres données
![Page 16: Développer et déployer une application php maintenable](https://reader035.fdocument.pub/reader035/viewer/2022062708/5589e4cbd8b42a8e558b46b1/html5/thumbnails/16.jpg)
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
Ecritures explicites
![Page 17: Développer et déployer une application php maintenable](https://reader035.fdocument.pub/reader035/viewer/2022062708/5589e4cbd8b42a8e558b46b1/html5/thumbnails/17.jpg)
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
Ecritures automatiques
![Page 18: Développer et déployer une application php maintenable](https://reader035.fdocument.pub/reader035/viewer/2022062708/5589e4cbd8b42a8e558b46b1/html5/thumbnails/18.jpg)
Les 5 principales causes couvrent 86% des attaques recensées
Comment se couvrir ? Coverity Php lint
Une page de sécurité !
![Page 19: Développer et déployer une application php maintenable](https://reader035.fdocument.pub/reader035/viewer/2022062708/5589e4cbd8b42a8e558b46b1/html5/thumbnails/19.jpg)
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
Stratégie d’upgrade
![Page 20: Développer et déployer une application php maintenable](https://reader035.fdocument.pub/reader035/viewer/2022062708/5589e4cbd8b42a8e558b46b1/html5/thumbnails/20.jpg)
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
On a vu le runtime, la base, le filesystem, mais …
![Page 21: Développer et déployer une application php maintenable](https://reader035.fdocument.pub/reader035/viewer/2022062708/5589e4cbd8b42a8e558b46b1/html5/thumbnails/21.jpg)
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 ?
Montée en charge ?
![Page 22: Développer et déployer une application php maintenable](https://reader035.fdocument.pub/reader035/viewer/2022062708/5589e4cbd8b42a8e558b46b1/html5/thumbnails/22.jpg)
De CGI à FastCGICG
I Un process par requête
Avantage• Très stable
Inconvénient• *Très* lent sous
Windows (coût énorme de création d’un process)
ISAP
I & m
od-p
hp
Chargement de PHP in-process (surrogate IIS ou process Apache)
Avantage• Très performant
Inconvénients• Stabilité• Réentrance
Fast
CGI Gestion d’un pool
de process
Avantages• Plus rapide que CGI• Plus stable
qu’ISAPI/mod_php• Permet de
fonctionner sans réentrance
![Page 23: Développer et déployer une application php maintenable](https://reader035.fdocument.pub/reader035/viewer/2022062708/5589e4cbd8b42a8e558b46b1/html5/thumbnails/23.jpg)
.. Et ça marche ?
http://forge.bearstech.com/trac/wiki/DebianLampLenny
![Page 24: Développer et déployer une application php maintenable](https://reader035.fdocument.pub/reader035/viewer/2022062708/5589e4cbd8b42a8e558b46b1/html5/thumbnails/24.jpg)
Optimiser, c’est mal◦ En dev
Avant la mise en prod Par copier/coller de trucs sur internet
Optimisation
![Page 25: Développer et déployer une application php maintenable](https://reader035.fdocument.pub/reader035/viewer/2022062708/5589e4cbd8b42a8e558b46b1/html5/thumbnails/25.jpg)
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 ?)
Gestion de cache
![Page 26: Développer et déployer une application php maintenable](https://reader035.fdocument.pub/reader035/viewer/2022062708/5589e4cbd8b42a8e558b46b1/html5/thumbnails/26.jpg)
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
Base de données – bis ?
![Page 27: Développer et déployer une application php maintenable](https://reader035.fdocument.pub/reader035/viewer/2022062708/5589e4cbd8b42a8e558b46b1/html5/thumbnails/27.jpg)
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
En guise de conclusion
![Page 28: Développer et déployer une application php maintenable](https://reader035.fdocument.pub/reader035/viewer/2022062708/5589e4cbd8b42a8e558b46b1/html5/thumbnails/28.jpg)
Questions !