SlideShare une entreprise Scribd logo
1  sur  21
Télécharger pour lire hors ligne
Composer
Pourquoi ? Comment ? Et plus ...
@AFUP_Marseille - 2015-02-26
Romain Cambien
● Co-organisateur AFUP Marseille
● Développeur Symfony
● Administrateur système
● Co-fondateur et
directeur Technique chez Riverline
NOUS RECRUTONS ;)
@r_cambien
Gestion des dépendances :
● Manuelle :
Télécharger, décompresser, recommencer ...
● PEAR : http://pear.php.net/
● Pas de dépendances par projet
● Installation système
● Peu de paquets, ajout de paquets compliqués
PEAR : 600 vs Compser : > 50 000
Composer
● Créé fin 2011 par Nils Adermann et Jordi
Boggiano
● Deux parties :
○ Composer : le client en ligne de commande
○ Packagist : le dépôt de paquets par défaut
● Inspiré de NPM et Bundler
● Promotion du DRY
Le client en ligne de commande
● Installation :
$ curl -sS https://getcomposer.org/installer | php.
Astuce :
$ curl -sS http://getcomposer.org/installer | php -- --
install-dir=~/bin --filename=composer.
● Mise à jour
$ composer self-update.
● Installer les dépendances
$ composer install.
Création d’un projet
$ composer create-project [package] [path] [version]
● Copie le paquet dans le répertoire cible
● Installe les dépendances
Exemples avec des frameworks :
Zend :
$ composer create-project --stability="dev" 
zendframework/skeleton-application path/to/install
Laravel :
$ composer create-project --prefer-dist 
laravel/laravel path/to/install
Symfony :
$ composer create-project 
symfony/framework-standard-edition path/to/install
Le fichier composer.json
{
"name": "symfony/framework-standard-edition",
"license": "MIT",
"type": "project",
"description": "The "Symfony Standard Edition" distribution",
"autoload": {
"psr-0": { "": "src/" }
},
"require": {
"php": ">=5.3.3",
"symfony/symfony": "2.3.*",
"doctrine/orm": "~2.2,>=2.2.3,<2.5",
"doctrine/dbal": "<2.5",
"doctrine/doctrine-bundle": "~1.2",
"twig/extensions": "1.0.*",
"symfony/assetic-bundle": "~2.3",
"symfony/swiftmailer-bundle": "~2.3",
"symfony/monolog-bundle": "~2.4",
"sensio/distribution-bundle": "~2.3",
"sensio/framework-extra-bundle": "~3.0,>=3.0.2",
"sensio/generator-bundle": "~2.3",
"incenteev/composer-parameter-handler": "~2.0"
},
"scripts": {
"post-install-cmd": [ ... ],
"post-update-cmd": [ ... ]
},
"config": {
"bin-dir": "bin"
},
"minimum-stability": "stable",
“extra”: { ... }
}
Nom du projet
Configuration de l’autoloader
Dépendances
Stabilité par défaut
Supérieur à une version
N’importe quelle version 2.3
N'importe quelle version non
majeur ( entre 1.2 et 2 )
N’importe quelle version 3
mais supérieure à 3.0.2
Inférieur à une version
“test/test”: “dev-master”
Dernier commit
dans le dépôt DEV
Forcer la stabilité : “2.*@dev”
Où trouver les paquets ?
● Packagist.org : le dépôt par défaut
$ composer require "monolog/monolog: 1.12.*".
● Git / SVN / Mercurical :
{ .
"repositories": [ .
{ .
"type": "vcs", .
"url": "https://github.com/igorw/monolog" .
} .
], .
"require": { .
"monolog/monolog": "dev-bugfix" .
} .
} .
● Gestion des tags comme version du paquet
● Gestion des archives avec GitHub et BitBucket
Où trouver les paquets ?
● Paquet ne supportant pas Composer
{ .
"repositories": [ .
{ .
"type": "package", .
"package": { .
"name": "smarty/smarty", .
"version": "3.1.7", .
"dist": { .
"url": "http://www.smarty.net/files/Smarty-3.1.7.zip", .
"type": "zip" .
}, .
"autoload": { .
"classmap": ["libs/"] .
} .
} .
} .
], .
"require": { .
"smarty/smarty": "3.1.*" .
} .
} .
Même version
Où trouver les paquets ?
● PEAR
{ .
"repositories": [ .
{ .
"type": "pear", .
"url": "http://pear2.php.net" .
} .
], .
"require": { .
"pear-pear2.php.net/PEAR2_Text_Markdown": "*", .
"pear-pear2/PEAR2_HTTP_Request": "*" .
} .
} .
PEAR sans les inconvénients de PEAR !
Le fichier composer.lock
● Généré par composer update
● Lu par composer install
● Conserver les versions exactes des paquets
Également la référence du commit pour les “dev-master”
● Doit être inclus dans le projet
● Ne doit pas être modifié à la main
Autoloader Composer
● Généré lors d’un update ou install
● Disponible dans ./vendor/autoload.php
● Respecte les règles de chaque paquet
○ PSR-0 : TestSubTestTestClass => Test/SubTest/TestClass.php
○ PSR-4
○ ClassMap : Cherche les classes dans tous les fichiers
○ File : inclus un fichier
● Peut être régénéré par :
$ composer dump-autoload
Astuce : --optimize pour compiler tous les chemins d'accès aux
classes pour de meilleures performances en PROD
NE PAS UTILISER EN DEV !!
Composer global
● Permet d’installer des outils PHP
● S’utilise en rajoutant l’argument global
$ composer global require "squizlabs/php_codesniffer=2.*"
$ composer global update
$ composer global remove squizlabs/php_codesniffer
● Installe les paquets dans :
~/.composer/vendor/
● Rendre disponible les binaires en ajoutant
dans le ~/.profile :
PATH=~/.composer/vendor/bin:$PATH
$ phpcs --version
PHP_CodeSniffer version 2.2.0 (stable) by Squiz (http://www.squiz.net)
Création d’un dépôt privé
● Packagist : https://github.com/composer/packagist
○ Installation et configuration complexes
○ Trop de fonctionnalités ( gestion utilisateurs, etc … )
● Satis : https://github.com/composer/satis
○ Packagist allégé
○ Reste complexe à configurer et à maintenir
● Toran Proxy : https://toranproxy.com/
○ Produit commercial par le créateur de Composer
○ Permet de soutenir le développement de Composer
○ Installation rapide et peu de configuration
Gratuit pour les développements personnels
Installation de Toran
● Télécharger
● Décompresser
● Renommer et configurer
./app/config/parameters.yml.dist
en ./app/config/parameters.yml
● Configurer un vhost sur ./web/
Astuce : Tester avec PHP >= 5.4 :
./app/console server:run --env=prod
● Configurer une Crontab pour ./bin/cron
● Terminer … ça marche !
Toran Proxy
Packagist.orgProjet
Toran
{
"repositories": [
{"type": "composer", "url": "http://toran.example.com/repo/packagist/"},
{"packagist": false}
]
}
{
"repositories": [
{"type": "composer", "url": "http://toran.example.com/repo/private/"},
{"type": "composer", "url": "http://toran.example.com/repo/packagist/"},
{"packagist": false}
]
}
GIT / SVN / HG
Interface WEB
Configuration des dépôts privés
Liste des paquets Packagist
Configuration de Toran
Configurer un dépôt privé
Même fonctionnement que pour les dépôts privés dans le
composer.json !
Configuration de Toran
Activation du proxy Packagist
Configuration de la cache des archives :
● Lazy : Cache à la demande
● New tags : Cache toutes les versions plus récentes que
la plus vieille version en cache
● All : Cache toutes les versions
Questions ?
Merci !
Rejoignez l’AFUP Marseille !
Twitter : @AFUP_Marseille
Meetup : Marseille-PHP-User-Group

Contenu connexe

Tendances

Une application en deux heure - PHP Québec Janvier 2009
Une application en deux heure - PHP Québec Janvier 2009Une application en deux heure - PHP Québec Janvier 2009
Une application en deux heure - PHP Québec Janvier 2009Philippe Gamache
 
Déploiement PHP : de l'âge de pierre à nos jours.
Déploiement PHP : de l'âge de pierre à nos jours.Déploiement PHP : de l'âge de pierre à nos jours.
Déploiement PHP : de l'âge de pierre à nos jours.Amélie DUVERNET
 
Intégration continue & Qualité logicielle
Intégration continue & Qualité logicielleIntégration continue & Qualité logicielle
Intégration continue & Qualité logicielleDavid Buros
 
Intégration continue des projets PHP avec Jenkins
Intégration continue des projets PHP avec JenkinsIntégration continue des projets PHP avec Jenkins
Intégration continue des projets PHP avec JenkinsHugo Hamon
 
Orchestrez vos projets Symfony sans fausses notes
Orchestrez vos projets Symfony sans fausses notesOrchestrez vos projets Symfony sans fausses notes
Orchestrez vos projets Symfony sans fausses notesXavier Gorse
 
Utiliser le Zend Framework avec Symfony
Utiliser le Zend Framework avec SymfonyUtiliser le Zend Framework avec Symfony
Utiliser le Zend Framework avec SymfonyXavier Gorse
 
Symfony2: 30 astuces et bonnes pratiques
Symfony2: 30 astuces et bonnes pratiquesSymfony2: 30 astuces et bonnes pratiques
Symfony2: 30 astuces et bonnes pratiquesNoel GUILBERT
 
NodeJS for Mobile App
NodeJS for Mobile AppNodeJS for Mobile App
NodeJS for Mobile AppHabib MAALEM
 
Workshop mesos docker devoxx fr 2016
Workshop mesos docker devoxx fr 2016Workshop mesos docker devoxx fr 2016
Workshop mesos docker devoxx fr 2016Julia Mateo
 
Déploiement et gestion d'un site web avec Rancher
Déploiement et gestion d'un site web avec RancherDéploiement et gestion d'un site web avec Rancher
Déploiement et gestion d'un site web avec RancherAnthony Sigogne
 
BlaBlaCar - Going Native !
BlaBlaCar - Going Native ! BlaBlaCar - Going Native !
BlaBlaCar - Going Native ! Erwann Robin
 
Introduction à CakePHP
Introduction à CakePHPIntroduction à CakePHP
Introduction à CakePHPPierre MARTIN
 
CI, CD, pipelines, conteneurs : la cohabitation est elle possible ?
CI, CD, pipelines, conteneurs : la cohabitation est elle possible ?CI, CD, pipelines, conteneurs : la cohabitation est elle possible ?
CI, CD, pipelines, conteneurs : la cohabitation est elle possible ?Membré Guillaume
 
Meetup Drupal Lyon 2016 - Environnements de dév Drupal automatisés LXC et Ans...
Meetup Drupal Lyon 2016 - Environnements de dév Drupal automatisés LXC et Ans...Meetup Drupal Lyon 2016 - Environnements de dév Drupal automatisés LXC et Ans...
Meetup Drupal Lyon 2016 - Environnements de dév Drupal automatisés LXC et Ans...Aurelien Navarre
 
JENKINS_OWF11_OSDC_PARIS20110924
JENKINS_OWF11_OSDC_PARIS20110924JENKINS_OWF11_OSDC_PARIS20110924
JENKINS_OWF11_OSDC_PARIS20110924Gregory Boissinot
 
[French] Discover haxe
[French] Discover haxe[French] Discover haxe
[French] Discover haxeAxel Anceau
 
Mieux Développer en PHP avec Symfony
Mieux Développer en PHP avec SymfonyMieux Développer en PHP avec Symfony
Mieux Développer en PHP avec SymfonyHugo Hamon
 
Debian usage at BlaBlaCar - Debian Paris meetup
Debian usage at BlaBlaCar - Debian Paris meetupDebian usage at BlaBlaCar - Debian Paris meetup
Debian usage at BlaBlaCar - Debian Paris meetupJean Baptiste Favre
 
Configuration Management avec Drupal 8
Configuration Management avec Drupal 8Configuration Management avec Drupal 8
Configuration Management avec Drupal 8Aurelien Navarre
 
Présentation symfony epita
Présentation symfony epitaPrésentation symfony epita
Présentation symfony epitaNoel GUILBERT
 

Tendances (20)

Une application en deux heure - PHP Québec Janvier 2009
Une application en deux heure - PHP Québec Janvier 2009Une application en deux heure - PHP Québec Janvier 2009
Une application en deux heure - PHP Québec Janvier 2009
 
Déploiement PHP : de l'âge de pierre à nos jours.
Déploiement PHP : de l'âge de pierre à nos jours.Déploiement PHP : de l'âge de pierre à nos jours.
Déploiement PHP : de l'âge de pierre à nos jours.
 
Intégration continue & Qualité logicielle
Intégration continue & Qualité logicielleIntégration continue & Qualité logicielle
Intégration continue & Qualité logicielle
 
Intégration continue des projets PHP avec Jenkins
Intégration continue des projets PHP avec JenkinsIntégration continue des projets PHP avec Jenkins
Intégration continue des projets PHP avec Jenkins
 
Orchestrez vos projets Symfony sans fausses notes
Orchestrez vos projets Symfony sans fausses notesOrchestrez vos projets Symfony sans fausses notes
Orchestrez vos projets Symfony sans fausses notes
 
Utiliser le Zend Framework avec Symfony
Utiliser le Zend Framework avec SymfonyUtiliser le Zend Framework avec Symfony
Utiliser le Zend Framework avec Symfony
 
Symfony2: 30 astuces et bonnes pratiques
Symfony2: 30 astuces et bonnes pratiquesSymfony2: 30 astuces et bonnes pratiques
Symfony2: 30 astuces et bonnes pratiques
 
NodeJS for Mobile App
NodeJS for Mobile AppNodeJS for Mobile App
NodeJS for Mobile App
 
Workshop mesos docker devoxx fr 2016
Workshop mesos docker devoxx fr 2016Workshop mesos docker devoxx fr 2016
Workshop mesos docker devoxx fr 2016
 
Déploiement et gestion d'un site web avec Rancher
Déploiement et gestion d'un site web avec RancherDéploiement et gestion d'un site web avec Rancher
Déploiement et gestion d'un site web avec Rancher
 
BlaBlaCar - Going Native !
BlaBlaCar - Going Native ! BlaBlaCar - Going Native !
BlaBlaCar - Going Native !
 
Introduction à CakePHP
Introduction à CakePHPIntroduction à CakePHP
Introduction à CakePHP
 
CI, CD, pipelines, conteneurs : la cohabitation est elle possible ?
CI, CD, pipelines, conteneurs : la cohabitation est elle possible ?CI, CD, pipelines, conteneurs : la cohabitation est elle possible ?
CI, CD, pipelines, conteneurs : la cohabitation est elle possible ?
 
Meetup Drupal Lyon 2016 - Environnements de dév Drupal automatisés LXC et Ans...
Meetup Drupal Lyon 2016 - Environnements de dév Drupal automatisés LXC et Ans...Meetup Drupal Lyon 2016 - Environnements de dév Drupal automatisés LXC et Ans...
Meetup Drupal Lyon 2016 - Environnements de dév Drupal automatisés LXC et Ans...
 
JENKINS_OWF11_OSDC_PARIS20110924
JENKINS_OWF11_OSDC_PARIS20110924JENKINS_OWF11_OSDC_PARIS20110924
JENKINS_OWF11_OSDC_PARIS20110924
 
[French] Discover haxe
[French] Discover haxe[French] Discover haxe
[French] Discover haxe
 
Mieux Développer en PHP avec Symfony
Mieux Développer en PHP avec SymfonyMieux Développer en PHP avec Symfony
Mieux Développer en PHP avec Symfony
 
Debian usage at BlaBlaCar - Debian Paris meetup
Debian usage at BlaBlaCar - Debian Paris meetupDebian usage at BlaBlaCar - Debian Paris meetup
Debian usage at BlaBlaCar - Debian Paris meetup
 
Configuration Management avec Drupal 8
Configuration Management avec Drupal 8Configuration Management avec Drupal 8
Configuration Management avec Drupal 8
 
Présentation symfony epita
Présentation symfony epitaPrésentation symfony epita
Présentation symfony epita
 

En vedette

Memoire de fin d'études pour le diplome de Chef de Projet Informatique et Rés...
Memoire de fin d'études pour le diplome de Chef de Projet Informatique et Rés...Memoire de fin d'études pour le diplome de Chef de Projet Informatique et Rés...
Memoire de fin d'études pour le diplome de Chef de Projet Informatique et Rés...Arnold Stellio
 
Projet de Fin d’Études - Écoles d'ingénieur informatique - Place de marché d'...
Projet de Fin d’Études - Écoles d'ingénieur informatique - Place de marché d'...Projet de Fin d’Études - Écoles d'ingénieur informatique - Place de marché d'...
Projet de Fin d’Études - Écoles d'ingénieur informatique - Place de marché d'...Novius
 
Knowing Laravel 5 : The most popular PHP framework
Knowing Laravel 5 : The most popular PHP frameworkKnowing Laravel 5 : The most popular PHP framework
Knowing Laravel 5 : The most popular PHP frameworkBukhori Aqid
 
Laravel 5 In Depth
Laravel 5 In DepthLaravel 5 In Depth
Laravel 5 In DepthKirk Bushell
 
Intro to Laravel PHP Framework
Intro to Laravel PHP FrameworkIntro to Laravel PHP Framework
Intro to Laravel PHP FrameworkBill Condo
 
Conception et réalisation d’un Système d’information des étudiants du départe...
Conception et réalisation d’un Système d’information des étudiants du départe...Conception et réalisation d’un Système d’information des étudiants du départe...
Conception et réalisation d’un Système d’information des étudiants du départe...Ilyas CHAOUA
 
Introduction à Laravel 4 @Dogstudio
Introduction à Laravel 4 @DogstudioIntroduction à Laravel 4 @Dogstudio
Introduction à Laravel 4 @DogstudioNicolas Widart
 
Becoming a Better Developer #WCA2
Becoming a Better Developer #WCA2Becoming a Better Developer #WCA2
Becoming a Better Developer #WCA2Brian Richards
 
ADONIS Nearshore_Presentation Pole Etudes & Developpement
ADONIS Nearshore_Presentation Pole Etudes & DeveloppementADONIS Nearshore_Presentation Pole Etudes & Developpement
ADONIS Nearshore_Presentation Pole Etudes & DeveloppementADONIS Nearshore
 

En vedette (19)

Memoire de fin d'études pour le diplome de Chef de Projet Informatique et Rés...
Memoire de fin d'études pour le diplome de Chef de Projet Informatique et Rés...Memoire de fin d'études pour le diplome de Chef de Projet Informatique et Rés...
Memoire de fin d'études pour le diplome de Chef de Projet Informatique et Rés...
 
Projet de Fin d’Études - Écoles d'ingénieur informatique - Place de marché d'...
Projet de Fin d’Études - Écoles d'ingénieur informatique - Place de marché d'...Projet de Fin d’Études - Écoles d'ingénieur informatique - Place de marché d'...
Projet de Fin d’Études - Écoles d'ingénieur informatique - Place de marché d'...
 
Laravel 5
Laravel 5Laravel 5
Laravel 5
 
Etat de l'art BI Mobile
Etat de l'art BI MobileEtat de l'art BI Mobile
Etat de l'art BI Mobile
 
Laravel 5
Laravel 5Laravel 5
Laravel 5
 
Knowing Laravel 5 : The most popular PHP framework
Knowing Laravel 5 : The most popular PHP frameworkKnowing Laravel 5 : The most popular PHP framework
Knowing Laravel 5 : The most popular PHP framework
 
Laravel 5
Laravel 5Laravel 5
Laravel 5
 
A Alegria
A AlegriaA Alegria
A Alegria
 
e-barki@
e-barki@e-barki@
e-barki@
 
Laravel Introduction
Laravel IntroductionLaravel Introduction
Laravel Introduction
 
Laravel 5 In Depth
Laravel 5 In DepthLaravel 5 In Depth
Laravel 5 In Depth
 
Intro to Laravel PHP Framework
Intro to Laravel PHP FrameworkIntro to Laravel PHP Framework
Intro to Laravel PHP Framework
 
Conception et réalisation d’un Système d’information des étudiants du départe...
Conception et réalisation d’un Système d’information des étudiants du départe...Conception et réalisation d’un Système d’information des étudiants du départe...
Conception et réalisation d’un Système d’information des étudiants du départe...
 
Rich dad, poor dad
Rich dad, poor dadRich dad, poor dad
Rich dad, poor dad
 
Les Outils Du Web 2
Les  Outils Du  Web 2Les  Outils Du  Web 2
Les Outils Du Web 2
 
Introduction à Laravel 4 @Dogstudio
Introduction à Laravel 4 @DogstudioIntroduction à Laravel 4 @Dogstudio
Introduction à Laravel 4 @Dogstudio
 
Becoming a Better Developer #WCA2
Becoming a Better Developer #WCA2Becoming a Better Developer #WCA2
Becoming a Better Developer #WCA2
 
The Programmer
The ProgrammerThe Programmer
The Programmer
 
ADONIS Nearshore_Presentation Pole Etudes & Developpement
ADONIS Nearshore_Presentation Pole Etudes & DeveloppementADONIS Nearshore_Presentation Pole Etudes & Developpement
ADONIS Nearshore_Presentation Pole Etudes & Developpement
 

Similaire à PHP Composer : Pourquoi ? Comment ? Et plus ...

5390997 Support formation : Construire et administrer vos conteneurs avec Doc...
5390997 Support formation : Construire et administrer vos conteneurs avec Doc...5390997 Support formation : Construire et administrer vos conteneurs avec Doc...
5390997 Support formation : Construire et administrer vos conteneurs avec Doc...AbdellahELMAMOUN
 
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassinOxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassinLudovic Piot
 
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassinOxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassinOxalide
 
Gestion des dépendances dans un projet PHP - Forum PHP 2012
Gestion des dépendances dans un projet PHP - Forum PHP 2012Gestion des dépendances dans un projet PHP - Forum PHP 2012
Gestion des dépendances dans un projet PHP - Forum PHP 2012Jean-Marc Fontaine
 
Rapport openembedded
Rapport openembeddedRapport openembedded
Rapport openembeddedAyoub Rouzi
 
Spring Boot & Containers - Do's & Don'ts
Spring Boot & Containers - Do's & Don'tsSpring Boot & Containers - Do's & Don'ts
Spring Boot & Containers - Do's & Don'tsJulien Wittouck
 
découverte du langage python dans tous ses aspects
découverte du langage python dans tous ses aspectsdécouverte du langage python dans tous ses aspects
découverte du langage python dans tous ses aspectsThierry Gayet
 
Gestion des dépendances dans un projet PHP - RMLL 2012
Gestion des dépendances dans un projet PHP - RMLL 2012Gestion des dépendances dans un projet PHP - RMLL 2012
Gestion des dépendances dans un projet PHP - RMLL 2012Jean-Marc Fontaine
 
Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...
Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...
Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...XavierPestel
 
WordCamp Lyon 2015 - WordPress, Git et l'intégration continue
 WordCamp Lyon 2015 - WordPress, Git et l'intégration continue WordCamp Lyon 2015 - WordPress, Git et l'intégration continue
WordCamp Lyon 2015 - WordPress, Git et l'intégration continueStéphane HULARD
 
Déploiement et débogage à distance
Déploiement et débogage à distanceDéploiement et débogage à distance
Déploiement et débogage à distancepprem
 
Open Recipes - hubs : du packaging en solo à l'industrialisation du packaging
Open Recipes - hubs : du packaging en solo à l'industrialisation du packaging Open Recipes - hubs : du packaging en solo à l'industrialisation du packaging
Open Recipes - hubs : du packaging en solo à l'industrialisation du packaging Anne Nicolas
 
Installation et configuration d'openbravo
Installation et configuration d'openbravoInstallation et configuration d'openbravo
Installation et configuration d'openbravoSoumia Brabije
 
DRAFT - Vm Ware - Installation Nuxeo
DRAFT - Vm Ware - Installation NuxeoDRAFT - Vm Ware - Installation Nuxeo
DRAFT - Vm Ware - Installation NuxeoPASCAL Jean Marie
 
PostgreSQL sous linux
PostgreSQL sous linuxPostgreSQL sous linux
PostgreSQL sous linuxKhalid ALLILI
 
Installer et configurer NAGIOS sous linux
Installer et configurer NAGIOS sous linuxInstaller et configurer NAGIOS sous linux
Installer et configurer NAGIOS sous linuxZakariyaa AIT ELMOUDEN
 
PostgreSQL sous linux
PostgreSQL sous linuxPostgreSQL sous linux
PostgreSQL sous linuxKhalid ALLILI
 
Retour d'expérience technique Go, gRPC, Kubernetes
Retour d'expérience technique Go, gRPC, KubernetesRetour d'expérience technique Go, gRPC, Kubernetes
Retour d'expérience technique Go, gRPC, KubernetesVincent Composieux
 

Similaire à PHP Composer : Pourquoi ? Comment ? Et plus ... (20)

5390997 Support formation : Construire et administrer vos conteneurs avec Doc...
5390997 Support formation : Construire et administrer vos conteneurs avec Doc...5390997 Support formation : Construire et administrer vos conteneurs avec Doc...
5390997 Support formation : Construire et administrer vos conteneurs avec Doc...
 
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassinOxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
 
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassinOxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
 
Gestion des dépendances dans un projet PHP - Forum PHP 2012
Gestion des dépendances dans un projet PHP - Forum PHP 2012Gestion des dépendances dans un projet PHP - Forum PHP 2012
Gestion des dépendances dans un projet PHP - Forum PHP 2012
 
Rapport openembedded
Rapport openembeddedRapport openembedded
Rapport openembedded
 
Docker@linuq
Docker@linuqDocker@linuq
Docker@linuq
 
Spring Boot & Containers - Do's & Don'ts
Spring Boot & Containers - Do's & Don'tsSpring Boot & Containers - Do's & Don'ts
Spring Boot & Containers - Do's & Don'ts
 
découverte du langage python dans tous ses aspects
découverte du langage python dans tous ses aspectsdécouverte du langage python dans tous ses aspects
découverte du langage python dans tous ses aspects
 
Gestion des dépendances dans un projet PHP - RMLL 2012
Gestion des dépendances dans un projet PHP - RMLL 2012Gestion des dépendances dans un projet PHP - RMLL 2012
Gestion des dépendances dans un projet PHP - RMLL 2012
 
Vagrant - Concept
Vagrant - ConceptVagrant - Concept
Vagrant - Concept
 
Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...
Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...
Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...
 
WordCamp Lyon 2015 - WordPress, Git et l'intégration continue
 WordCamp Lyon 2015 - WordPress, Git et l'intégration continue WordCamp Lyon 2015 - WordPress, Git et l'intégration continue
WordCamp Lyon 2015 - WordPress, Git et l'intégration continue
 
Déploiement et débogage à distance
Déploiement et débogage à distanceDéploiement et débogage à distance
Déploiement et débogage à distance
 
Open Recipes - hubs : du packaging en solo à l'industrialisation du packaging
Open Recipes - hubs : du packaging en solo à l'industrialisation du packaging Open Recipes - hubs : du packaging en solo à l'industrialisation du packaging
Open Recipes - hubs : du packaging en solo à l'industrialisation du packaging
 
Installation et configuration d'openbravo
Installation et configuration d'openbravoInstallation et configuration d'openbravo
Installation et configuration d'openbravo
 
DRAFT - Vm Ware - Installation Nuxeo
DRAFT - Vm Ware - Installation NuxeoDRAFT - Vm Ware - Installation Nuxeo
DRAFT - Vm Ware - Installation Nuxeo
 
PostgreSQL sous linux
PostgreSQL sous linuxPostgreSQL sous linux
PostgreSQL sous linux
 
Installer et configurer NAGIOS sous linux
Installer et configurer NAGIOS sous linuxInstaller et configurer NAGIOS sous linux
Installer et configurer NAGIOS sous linux
 
PostgreSQL sous linux
PostgreSQL sous linuxPostgreSQL sous linux
PostgreSQL sous linux
 
Retour d'expérience technique Go, gRPC, Kubernetes
Retour d'expérience technique Go, gRPC, KubernetesRetour d'expérience technique Go, gRPC, Kubernetes
Retour d'expérience technique Go, gRPC, Kubernetes
 

PHP Composer : Pourquoi ? Comment ? Et plus ...

  • 1. Composer Pourquoi ? Comment ? Et plus ... @AFUP_Marseille - 2015-02-26
  • 2. Romain Cambien ● Co-organisateur AFUP Marseille ● Développeur Symfony ● Administrateur système ● Co-fondateur et directeur Technique chez Riverline NOUS RECRUTONS ;) @r_cambien
  • 3. Gestion des dépendances : ● Manuelle : Télécharger, décompresser, recommencer ... ● PEAR : http://pear.php.net/ ● Pas de dépendances par projet ● Installation système ● Peu de paquets, ajout de paquets compliqués PEAR : 600 vs Compser : > 50 000
  • 4. Composer ● Créé fin 2011 par Nils Adermann et Jordi Boggiano ● Deux parties : ○ Composer : le client en ligne de commande ○ Packagist : le dépôt de paquets par défaut ● Inspiré de NPM et Bundler ● Promotion du DRY
  • 5. Le client en ligne de commande ● Installation : $ curl -sS https://getcomposer.org/installer | php. Astuce : $ curl -sS http://getcomposer.org/installer | php -- -- install-dir=~/bin --filename=composer. ● Mise à jour $ composer self-update. ● Installer les dépendances $ composer install.
  • 6. Création d’un projet $ composer create-project [package] [path] [version] ● Copie le paquet dans le répertoire cible ● Installe les dépendances Exemples avec des frameworks : Zend : $ composer create-project --stability="dev" zendframework/skeleton-application path/to/install Laravel : $ composer create-project --prefer-dist laravel/laravel path/to/install Symfony : $ composer create-project symfony/framework-standard-edition path/to/install
  • 7. Le fichier composer.json { "name": "symfony/framework-standard-edition", "license": "MIT", "type": "project", "description": "The "Symfony Standard Edition" distribution", "autoload": { "psr-0": { "": "src/" } }, "require": { "php": ">=5.3.3", "symfony/symfony": "2.3.*", "doctrine/orm": "~2.2,>=2.2.3,<2.5", "doctrine/dbal": "<2.5", "doctrine/doctrine-bundle": "~1.2", "twig/extensions": "1.0.*", "symfony/assetic-bundle": "~2.3", "symfony/swiftmailer-bundle": "~2.3", "symfony/monolog-bundle": "~2.4", "sensio/distribution-bundle": "~2.3", "sensio/framework-extra-bundle": "~3.0,>=3.0.2", "sensio/generator-bundle": "~2.3", "incenteev/composer-parameter-handler": "~2.0" }, "scripts": { "post-install-cmd": [ ... ], "post-update-cmd": [ ... ] }, "config": { "bin-dir": "bin" }, "minimum-stability": "stable", “extra”: { ... } } Nom du projet Configuration de l’autoloader Dépendances Stabilité par défaut Supérieur à une version N’importe quelle version 2.3 N'importe quelle version non majeur ( entre 1.2 et 2 ) N’importe quelle version 3 mais supérieure à 3.0.2 Inférieur à une version “test/test”: “dev-master” Dernier commit dans le dépôt DEV Forcer la stabilité : “2.*@dev”
  • 8. Où trouver les paquets ? ● Packagist.org : le dépôt par défaut $ composer require "monolog/monolog: 1.12.*". ● Git / SVN / Mercurical : { . "repositories": [ . { . "type": "vcs", . "url": "https://github.com/igorw/monolog" . } . ], . "require": { . "monolog/monolog": "dev-bugfix" . } . } . ● Gestion des tags comme version du paquet ● Gestion des archives avec GitHub et BitBucket
  • 9. Où trouver les paquets ? ● Paquet ne supportant pas Composer { . "repositories": [ . { . "type": "package", . "package": { . "name": "smarty/smarty", . "version": "3.1.7", . "dist": { . "url": "http://www.smarty.net/files/Smarty-3.1.7.zip", . "type": "zip" . }, . "autoload": { . "classmap": ["libs/"] . } . } . } . ], . "require": { . "smarty/smarty": "3.1.*" . } . } . Même version
  • 10. Où trouver les paquets ? ● PEAR { . "repositories": [ . { . "type": "pear", . "url": "http://pear2.php.net" . } . ], . "require": { . "pear-pear2.php.net/PEAR2_Text_Markdown": "*", . "pear-pear2/PEAR2_HTTP_Request": "*" . } . } . PEAR sans les inconvénients de PEAR !
  • 11. Le fichier composer.lock ● Généré par composer update ● Lu par composer install ● Conserver les versions exactes des paquets Également la référence du commit pour les “dev-master” ● Doit être inclus dans le projet ● Ne doit pas être modifié à la main
  • 12. Autoloader Composer ● Généré lors d’un update ou install ● Disponible dans ./vendor/autoload.php ● Respecte les règles de chaque paquet ○ PSR-0 : TestSubTestTestClass => Test/SubTest/TestClass.php ○ PSR-4 ○ ClassMap : Cherche les classes dans tous les fichiers ○ File : inclus un fichier ● Peut être régénéré par : $ composer dump-autoload Astuce : --optimize pour compiler tous les chemins d'accès aux classes pour de meilleures performances en PROD NE PAS UTILISER EN DEV !!
  • 13. Composer global ● Permet d’installer des outils PHP ● S’utilise en rajoutant l’argument global $ composer global require "squizlabs/php_codesniffer=2.*" $ composer global update $ composer global remove squizlabs/php_codesniffer ● Installe les paquets dans : ~/.composer/vendor/ ● Rendre disponible les binaires en ajoutant dans le ~/.profile : PATH=~/.composer/vendor/bin:$PATH $ phpcs --version PHP_CodeSniffer version 2.2.0 (stable) by Squiz (http://www.squiz.net)
  • 14. Création d’un dépôt privé ● Packagist : https://github.com/composer/packagist ○ Installation et configuration complexes ○ Trop de fonctionnalités ( gestion utilisateurs, etc … ) ● Satis : https://github.com/composer/satis ○ Packagist allégé ○ Reste complexe à configurer et à maintenir ● Toran Proxy : https://toranproxy.com/ ○ Produit commercial par le créateur de Composer ○ Permet de soutenir le développement de Composer ○ Installation rapide et peu de configuration Gratuit pour les développements personnels
  • 15. Installation de Toran ● Télécharger ● Décompresser ● Renommer et configurer ./app/config/parameters.yml.dist en ./app/config/parameters.yml ● Configurer un vhost sur ./web/ Astuce : Tester avec PHP >= 5.4 : ./app/console server:run --env=prod ● Configurer une Crontab pour ./bin/cron ● Terminer … ça marche !
  • 16. Toran Proxy Packagist.orgProjet Toran { "repositories": [ {"type": "composer", "url": "http://toran.example.com/repo/packagist/"}, {"packagist": false} ] } { "repositories": [ {"type": "composer", "url": "http://toran.example.com/repo/private/"}, {"type": "composer", "url": "http://toran.example.com/repo/packagist/"}, {"packagist": false} ] } GIT / SVN / HG
  • 17. Interface WEB Configuration des dépôts privés Liste des paquets Packagist Configuration de Toran
  • 18. Configurer un dépôt privé Même fonctionnement que pour les dépôts privés dans le composer.json !
  • 19. Configuration de Toran Activation du proxy Packagist Configuration de la cache des archives : ● Lazy : Cache à la demande ● New tags : Cache toutes les versions plus récentes que la plus vieille version en cache ● All : Cache toutes les versions
  • 21. Merci ! Rejoignez l’AFUP Marseille ! Twitter : @AFUP_Marseille Meetup : Marseille-PHP-User-Group