SlideShare une entreprise Scribd logo
1  sur  47
Télécharger pour lire hors ligne
WALLABAG : COMMENT ON A MIGRÉ VERS
SYMFONY 3
Par Jérémy Benoist ( ) et Nicolas Lœuillet ( )@j0k @nicosomb
wallabag.org
wallabag : comment on a migré vers Symfony 3 — PHP Tour 2016 — @j0k & @nicosomb
NOUS DEUX
Jérémy Benoist
lead developer chez 20minutes
Nicolas Lœuillet
développeur chez Smile
PLAN
Historique
Etat des lieux
La migration
Les étapes en cours et à venir
FONCTIONNALITÉS ET HISTOIRE
CE QUE ÇA FAIT
HISTOIRE
POURQUOI ÇA N'ÉTAIT PAS MIEUX AVANT
PREMIÈRE VERSION DE "WALLABAG"
ENVIRONNEMENT PHP
PHP >= 5.3.3
Pas de framework
Des classes PHP de plusieurs centaines de lignes
LACUNES TECHNIQUES
Dépendances versionnées
Pas d'API
Pas de tests
Pas de PR par l'équipe
MAJ BDD manuelle
Déploiement manuel via Filezilla
Équipe de deux personnes
FRÉQUENCE DES MISES À JOUR
Pas de calendrier dé ni
10 versions mineures en deux ans
Pas de vrai respect de SEMVER
POURQUOI C'EST MIEUX MAINTENANT
DEUXIÈME VERSION DE WALLABAG
ENVIRONNEMENT PHP
PHP >= 5.5.9
Compatible PHP 7
Compatible HHVM (même si personne ne s'en sert)
Symfony 3
ON COMBLE LES LACUNES TECHNIQUES
Sorte de De nition of Done :
Documentation utilisateur
Tests unitaires et / ou fonctionnels
Review du code
Déploiement via Capistrano (sur v2.wallabag.org)
Migrations BDD
Le moins d'actions manuelles possible
Équipe plus conséquente : une core team, des traducteurs,
des développeurs
FRÉQUENCE DES MISES À JOUR
Roadmap établie
Respect de SEMVER
Une version mineure tous les 3 mois
API POUR LES APPLICATIONS EXTERNES
Facilite l'intégration avec des applications tierces
QUELQUES BENCHMARKS
ANALYSE DU CODE
v1 v2
Fichiers 396 129
Code 94.922 lignes
240 lignes / chier
8.822 lignes
68 lignes / chier
Commentaires 37.855 lignes 2.462 lignes
Sensio Insight 29/100
2 ans pour la
médaille Platinum
32/100
3 semaines pour la
médaille Platinum
Scrutinizer 4,95/10
(1 erreur critique,
+700 majeures)
9,39/10
(4 erreurs majeures)
CHARGEMENT DES PAGES
Analyses faites avec Black re sur PHP 7.0.6
v1 v2
Liste d'articles (460) 330ms
17 Mo
689ms
31 Mo
Un article 89ms
10 Mo
281ms
17 Mo
Liste des tags (20) 85ms
10 Mo
314ms
19 Mo
EN CONCLUSION ...
C'est pas très fameux pour la v2 tout ça !
Un framework, c'est lourd
Le plain PHP c'est forcément rapide
Pas trop focalisé sur la perf, pour le moment
Plusieurs pistes d'améliorations (Redis, APC, Black re, etc.)
Surtout un confort de développement pour les devs
EN ROUTE POUR LA V2 !
LE CHOIX DU FRAMEWORK
EXTRACTION DE CONTENU
LA principale fonctionnalité de wallabag
Assuré par , dans la v1
Pas vraiment open source ...
Et pas très pratique à utiliser ...
Full-Text RSS
// $ftr should be URL where you installed this application
$ftr = 'http://example.org/full-text-rss/';
$article = 'http://www.bbc.co.uk/news/world-europe-21936308';
$request = $ftr.'makefulltextfeed.php?format=json&url='.$article;
// Send HTTP request and get response
$result = @file_get_contents($request);
EXTRACTION DE CONTENU
MAIS, sa capacité d'extraction est ef cace !
Utilise le microformat
Utilise les données de
Basée sur php-readability
Et sur des site_con g (dans un repo séparé)
hNews
Schema.org
➜ Forker en gardant cette logique
EXTRACTION DE CONTENU
, un fork de Full-Text RSS v3.3graby
Mise en place de test fonctionnels sur l'existant
Ré-organisation / refonte
site_con g via Composer
Ajout de tests
Et c'est plus propre à utiliser ...
use GrabyGraby;
$article = 'http://www.bbc.co.uk/news/world-europe-21936308';
$graby = new Graby();
$result = $graby->fetchContent($article);
LA MIGRATION EN SOI
Par itération
Le socle Symfony
La connexion utilisateur
La con guration
La commande wallabag:install
L'ajout d'un lien
L'ajout de tags
Etc.
Globalement, tout a été réécrit, étape par étape
LA V2 N'EST PAS ISO AVEC LA V1
v2.0.0 ➜ focaliser sur le fonctionnement de base
v2.0.x ➜ focaliser sur la stabilité
v2.x ➜ amélioration des fonctionnalités (tag,
recherche, etc.)
LIBRAIRIES UTILISÉES POUR L'API
FOSRestBundle
NelmioCorsBundle
FOSOAuthServerBundle
BazingaHateoasBundle
NelmioApiDocBundle
Si seulement était sorti plus tôt :)API Platform 2.0
LISTING DES FEATURES PAR LIBRAIRIE
Utilisateur ➜ FosUserBundle
Filtres ➜ FormFilterBundle
Changement de thème ➜ LiipThemeBundle
Export ➜ phpepub, tcpdf, php-mobi
Règle de tagging ➜ RulerZ ( @KPhoen)
Maintenance ➜ MaintenanceBundle
Two factor authentication ➜ TwoFactorBundle
Annotations ➜ AnnotatorJS
LES DIFFICULTÉS
INSTALLATION DE L'APPLICATION
L'application doit être disponible pour tout le monde !
sur un serveur dédié
sur un serveur mutualisé
sur un ... raspberry (c'est pas gagné ...)
Et installable par tout le monde
"tout le monde" inclut des personnes novices
INSTALLATION DE L'APPLICATION
Deux solutions choisies :
Via une archive incluant les dépendances
Via Git & Composer
INSTALLATION DE L'APPLICATION
Plutôt basique pour la v1
wget http://wllbg.org/latest
unzip latest
+ quelques lignes de SQL
Dans l'ensemble aucun souci ✅
INSTALLATION DE L'APPLICATION
Tentative n°1
git clone https://github.com/wallabag/wallabag.git -b v2
cd wallabag
composer install
php app/console wallabag:install
Trop orienté dev
Installe toutes les deps "dev"
C'était bien au début ™
INSTALLATION DE L'APPLICATION
Tentative n°2
composer create-project wallabag/wallabag wallabag 2.0.0-alpha.1
cd wallabag
php app/console wallabag:install
Toujours trop orienté dev
Simple amélioration de la version précédente
INSTALLATION DE L'APPLICATION
Tentative n°3
SYMFONY_ENV=prod composer create-project wallabag/wallabag 
wallabag "2.0.*@alpha" --no-dev
cd wallabag
php app/console wallabag:install --env=prod
Uniquement les packages de prod
MAJ impossible à cause de create-project
INSTALLATION DE L'APPLICATION
Tentative n°4 (l'actuelle)
git clone git@github.com:wallabag/wallabag.git
cd wallabag
git checkout 2.0.4
SYMFONY_ENV=prod composer install --no-dev -o --prefer-dist
php app/console wallabag:install --env=prod
Toujours bien en version de prod
Facilite la mise à jour (par les tags)
Mais toujours des soucis de mémoire
AUTRES DIFFICULTÉS
Les migrations de données SQLite
Les demandes de site_con g
Les issues de personnes pas très techniques
LES ÉTAPES EN COURS
LES ÉTAPES EN COURS
RabbitMQ, pour les gros traitements
Elasticsearch ( @damienalexandre)
Dockerization par @JoliCode en salle C
Gérer les dépendances CSS et JS via
API : INTÉGRATIONS DÉJÀ RÉALISÉES
: clone libre de IFTTTTrigger-Happy.eu
github.com/foxmask/django-th
@TriggerHappyEu
API : INTÉGRATIONS DÉJÀ RÉALISÉES
Application Windows Phone (Android et iOS en cours de
réalisation)
Addon pour Firefox
: plugin pour ajouter dans wallabag
depuis Tiny Tiny RSS
Librairies , et
ttrss-to-wallabag-v2
Python Java .NET
API : INTÉGRATIONS SOUHAITÉES
Cozy Cloud
ownCloud
Fabricants de liseuses
Firefox, Gnome (pour remplacer Pocket)
LES ÉTAPES À VENIR
TO INFINITY... AND BEYOND
Un front en React
Une solution SaaS
Intégration dans des applis tierces
Reeder
IFTTT
Etc.
MERCI !
DES QUESTIONS ?

Contenu connexe

Tendances

Présentation de PHP 5.4 [FR]
Présentation de PHP 5.4 [FR]Présentation de PHP 5.4 [FR]
Présentation de PHP 5.4 [FR]Wixiweb
 
Introduction à Symfony2
Introduction à Symfony2Introduction à Symfony2
Introduction à Symfony2Hugo Hamon
 
Symfony 2 : chapitre 1 - Présentation Générale
Symfony 2 : chapitre 1 - Présentation GénéraleSymfony 2 : chapitre 1 - Présentation Générale
Symfony 2 : chapitre 1 - Présentation GénéraleAbdelkader Rhouati
 
Django pour les développeurs Symfony (et réciproquement)
Django pour les développeurs Symfony (et réciproquement)Django pour les développeurs Symfony (et réciproquement)
Django pour les développeurs Symfony (et réciproquement)Nicolas Perriault
 
Presentation Symfony2
Presentation Symfony2Presentation Symfony2
Presentation Symfony2Ahmed ABATAL
 
Presentation Symfony
Presentation SymfonyPresentation Symfony
Presentation SymfonyJeremy Gachet
 
Introduction à eZ Publish Platform 5.3
Introduction à eZ Publish Platform 5.3 Introduction à eZ Publish Platform 5.3
Introduction à eZ Publish Platform 5.3 Roland Benedetti
 
Symfony2: 30 astuces et bonnes pratiques
Symfony2: 30 astuces et bonnes pratiquesSymfony2: 30 astuces et bonnes pratiques
Symfony2: 30 astuces et bonnes pratiquesNoel GUILBERT
 
symfony : Un Framework Open-Source pour les Professionnels
symfony : Un Framework Open-Source pour les Professionnelssymfony : Un Framework Open-Source pour les Professionnels
symfony : Un Framework Open-Source pour les ProfessionnelsFabien Potencier
 
Utiliser le Zend Framework avec Symfony
Utiliser le Zend Framework avec SymfonyUtiliser le Zend Framework avec Symfony
Utiliser le Zend Framework avec SymfonyXavier Gorse
 
PHP Composer : Pourquoi ? Comment ? Et plus ...
PHP Composer : Pourquoi ? Comment ? Et plus ...PHP Composer : Pourquoi ? Comment ? Et plus ...
PHP Composer : Pourquoi ? Comment ? Et plus ...Romain Cambien
 
Laravel yet another framework
Laravel  yet another frameworkLaravel  yet another framework
Laravel yet another frameworkLAHAXE Arnaud
 
Atelier Symfony2- Introduction
Atelier Symfony2- IntroductionAtelier Symfony2- Introduction
Atelier Symfony2- IntroductionMarwa OUNALLI
 
Exposer des services web SOAP et REST avec symfony 1.4 et Zend Framework
Exposer des services web SOAP et REST avec symfony 1.4 et Zend FrameworkExposer des services web SOAP et REST avec symfony 1.4 et Zend Framework
Exposer des services web SOAP et REST avec symfony 1.4 et Zend FrameworkHugo Hamon
 
Intégration Continue PHP avec Jenkins CI
Intégration Continue PHP avec Jenkins CIIntégration Continue PHP avec Jenkins CI
Intégration Continue PHP avec Jenkins CIHugo Hamon
 
eZ Publish Platform 5.2 - Webinaire d'introduction
eZ Publish Platform 5.2 - Webinaire d'introductioneZ Publish Platform 5.2 - Webinaire d'introduction
eZ Publish Platform 5.2 - Webinaire d'introductionRoland Benedetti
 
Symfony 2 : chapitre 2 - Les vues en Twig
Symfony 2 : chapitre 2 - Les vues en TwigSymfony 2 : chapitre 2 - Les vues en Twig
Symfony 2 : chapitre 2 - Les vues en TwigAbdelkader Rhouati
 
symfony: Un Framework Open-Source pour les Entreprises (Solutions Linux 2008)
symfony: Un Framework Open-Source pour les Entreprises (Solutions Linux 2008)symfony: Un Framework Open-Source pour les Entreprises (Solutions Linux 2008)
symfony: Un Framework Open-Source pour les Entreprises (Solutions Linux 2008)Fabien Potencier
 
AFUP Aix/Marseille - 16 mai 2017 - Open API
AFUP Aix/Marseille - 16 mai 2017 - Open APIAFUP Aix/Marseille - 16 mai 2017 - Open API
AFUP Aix/Marseille - 16 mai 2017 - Open APIRomain Cambien
 

Tendances (20)

Présentation de PHP 5.4 [FR]
Présentation de PHP 5.4 [FR]Présentation de PHP 5.4 [FR]
Présentation de PHP 5.4 [FR]
 
Introduction à Symfony2
Introduction à Symfony2Introduction à Symfony2
Introduction à Symfony2
 
Symfony 2 : chapitre 1 - Présentation Générale
Symfony 2 : chapitre 1 - Présentation GénéraleSymfony 2 : chapitre 1 - Présentation Générale
Symfony 2 : chapitre 1 - Présentation Générale
 
Django pour les développeurs Symfony (et réciproquement)
Django pour les développeurs Symfony (et réciproquement)Django pour les développeurs Symfony (et réciproquement)
Django pour les développeurs Symfony (et réciproquement)
 
Presentation Symfony2
Presentation Symfony2Presentation Symfony2
Presentation Symfony2
 
Presentation Symfony
Presentation SymfonyPresentation Symfony
Presentation Symfony
 
Introduction à eZ Publish Platform 5.3
Introduction à eZ Publish Platform 5.3 Introduction à eZ Publish Platform 5.3
Introduction à eZ Publish Platform 5.3
 
Symfony2: 30 astuces et bonnes pratiques
Symfony2: 30 astuces et bonnes pratiquesSymfony2: 30 astuces et bonnes pratiques
Symfony2: 30 astuces et bonnes pratiques
 
symfony : Un Framework Open-Source pour les Professionnels
symfony : Un Framework Open-Source pour les Professionnelssymfony : Un Framework Open-Source pour les Professionnels
symfony : Un Framework Open-Source pour les Professionnels
 
Utiliser le Zend Framework avec Symfony
Utiliser le Zend Framework avec SymfonyUtiliser le Zend Framework avec Symfony
Utiliser le Zend Framework avec Symfony
 
PHP Composer : Pourquoi ? Comment ? Et plus ...
PHP Composer : Pourquoi ? Comment ? Et plus ...PHP Composer : Pourquoi ? Comment ? Et plus ...
PHP Composer : Pourquoi ? Comment ? Et plus ...
 
Laravel yet another framework
Laravel  yet another frameworkLaravel  yet another framework
Laravel yet another framework
 
Symfony 2 et le Web
Symfony 2 et le WebSymfony 2 et le Web
Symfony 2 et le Web
 
Atelier Symfony2- Introduction
Atelier Symfony2- IntroductionAtelier Symfony2- Introduction
Atelier Symfony2- Introduction
 
Exposer des services web SOAP et REST avec symfony 1.4 et Zend Framework
Exposer des services web SOAP et REST avec symfony 1.4 et Zend FrameworkExposer des services web SOAP et REST avec symfony 1.4 et Zend Framework
Exposer des services web SOAP et REST avec symfony 1.4 et Zend Framework
 
Intégration Continue PHP avec Jenkins CI
Intégration Continue PHP avec Jenkins CIIntégration Continue PHP avec Jenkins CI
Intégration Continue PHP avec Jenkins CI
 
eZ Publish Platform 5.2 - Webinaire d'introduction
eZ Publish Platform 5.2 - Webinaire d'introductioneZ Publish Platform 5.2 - Webinaire d'introduction
eZ Publish Platform 5.2 - Webinaire d'introduction
 
Symfony 2 : chapitre 2 - Les vues en Twig
Symfony 2 : chapitre 2 - Les vues en TwigSymfony 2 : chapitre 2 - Les vues en Twig
Symfony 2 : chapitre 2 - Les vues en Twig
 
symfony: Un Framework Open-Source pour les Entreprises (Solutions Linux 2008)
symfony: Un Framework Open-Source pour les Entreprises (Solutions Linux 2008)symfony: Un Framework Open-Source pour les Entreprises (Solutions Linux 2008)
symfony: Un Framework Open-Source pour les Entreprises (Solutions Linux 2008)
 
AFUP Aix/Marseille - 16 mai 2017 - Open API
AFUP Aix/Marseille - 16 mai 2017 - Open APIAFUP Aix/Marseille - 16 mai 2017 - Open API
AFUP Aix/Marseille - 16 mai 2017 - Open API
 

Similaire à wallabag, comment on a migré vers symfony3

VDLT - Retour DevFest 2023
VDLT - Retour DevFest 2023VDLT - Retour DevFest 2023
VDLT - Retour DevFest 2023SpikeeLabs
 
Symphonie pour PHP industrialisé en agilité majeure
Symphonie pour PHP industrialisé en agilité majeureSymphonie pour PHP industrialisé en agilité majeure
Symphonie pour PHP industrialisé en agilité majeureMarc Nazarian
 
Symphonie pour PHP industrialisé en agilité majeure
Symphonie pour PHP industrialisé en agilité majeureSymphonie pour PHP industrialisé en agilité majeure
Symphonie pour PHP industrialisé en agilité majeureJonathan Bonzy
 
Retour AFUP du forumphp 2017
Retour AFUP du forumphp 2017Retour AFUP du forumphp 2017
Retour AFUP du forumphp 2017AFUP_Limoges
 
Apéro techno node.js + AngularJS @Omnilog 2014
Apéro techno node.js + AngularJS @Omnilog 2014Apéro techno node.js + AngularJS @Omnilog 2014
Apéro techno node.js + AngularJS @Omnilog 2014Yves-Emmanuel Jutard
 
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
 
20081023 - Paris Vi Master STL TA - Initiation Maven
20081023 - Paris Vi Master STL TA - Initiation Maven20081023 - Paris Vi Master STL TA - Initiation Maven
20081023 - Paris Vi Master STL TA - Initiation MavenArnaud Héritier
 
20091020 - Normandy Jug - Builders Battle
20091020 - Normandy Jug - Builders Battle20091020 - Normandy Jug - Builders Battle
20091020 - Normandy Jug - Builders BattleArnaud Héritier
 
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
 
20081008 - Tours Jug - Apache Maven
20081008  - Tours Jug - Apache Maven20081008  - Tours Jug - Apache Maven
20081008 - Tours Jug - Apache MavenArnaud Héritier
 
Docker le buzz est il justifié ?
Docker le buzz est il justifié ? Docker le buzz est il justifié ?
Docker le buzz est il justifié ? Romain Chalumeau
 
Faire des applications web avec Delphi
Faire des applications web avec DelphiFaire des applications web avec Delphi
Faire des applications web avec Delphipprem
 
Javascript as a first programming language : votre IC prête pour la révolution !
Javascript as a first programming language : votre IC prête pour la révolution !Javascript as a first programming language : votre IC prête pour la révolution !
Javascript as a first programming language : votre IC prête pour la révolution !VISEO
 
Un site de collectivité sur WordPress ? Méthodes et retours d'XP
Un site de collectivité sur WordPress ? Méthodes et retours d'XPUn site de collectivité sur WordPress ? Méthodes et retours d'XP
Un site de collectivité sur WordPress ? Méthodes et retours d'XPatelier111
 
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
 
20090615 - Ch'ti JUG - Apache Maven
20090615 - Ch'ti JUG - Apache Maven20090615 - Ch'ti JUG - Apache Maven
20090615 - Ch'ti JUG - Apache MavenArnaud Héritier
 
Performance au quotidien dans un environnement symfony
Performance au quotidien dans un environnement symfonyPerformance au quotidien dans un environnement symfony
Performance au quotidien dans un environnement symfonyXavier Leune
 
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
 

Similaire à wallabag, comment on a migré vers symfony3 (20)

VDLT - Retour DevFest 2023
VDLT - Retour DevFest 2023VDLT - Retour DevFest 2023
VDLT - Retour DevFest 2023
 
Symphonie pour PHP industrialisé en agilité majeure
Symphonie pour PHP industrialisé en agilité majeureSymphonie pour PHP industrialisé en agilité majeure
Symphonie pour PHP industrialisé en agilité majeure
 
Symphonie pour PHP industrialisé en agilité majeure
Symphonie pour PHP industrialisé en agilité majeureSymphonie pour PHP industrialisé en agilité majeure
Symphonie pour PHP industrialisé en agilité majeure
 
Retour AFUP du forumphp 2017
Retour AFUP du forumphp 2017Retour AFUP du forumphp 2017
Retour AFUP du forumphp 2017
 
Apéro techno node.js + AngularJS @Omnilog 2014
Apéro techno node.js + AngularJS @Omnilog 2014Apéro techno node.js + AngularJS @Omnilog 2014
Apéro techno node.js + AngularJS @Omnilog 2014
 
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.
 
20081023 - Paris Vi Master STL TA - Initiation Maven
20081023 - Paris Vi Master STL TA - Initiation Maven20081023 - Paris Vi Master STL TA - Initiation Maven
20081023 - Paris Vi Master STL TA - Initiation Maven
 
20091020 - Normandy Jug - Builders Battle
20091020 - Normandy Jug - Builders Battle20091020 - Normandy Jug - Builders Battle
20091020 - Normandy Jug - Builders Battle
 
Cours cordova & REST
Cours cordova & RESTCours cordova & REST
Cours cordova & REST
 
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
 
20081008 - Tours Jug - Apache Maven
20081008  - Tours Jug - Apache Maven20081008  - Tours Jug - Apache Maven
20081008 - Tours Jug - Apache Maven
 
Docker le buzz est il justifié ?
Docker le buzz est il justifié ? Docker le buzz est il justifié ?
Docker le buzz est il justifié ?
 
Faire des applications web avec Delphi
Faire des applications web avec DelphiFaire des applications web avec Delphi
Faire des applications web avec Delphi
 
Javascript as a first programming language : votre IC prête pour la révolution !
Javascript as a first programming language : votre IC prête pour la révolution !Javascript as a first programming language : votre IC prête pour la révolution !
Javascript as a first programming language : votre IC prête pour la révolution !
 
Un site de collectivité sur WordPress ? Méthodes et retours d'XP
Un site de collectivité sur WordPress ? Méthodes et retours d'XPUn site de collectivité sur WordPress ? Méthodes et retours d'XP
Un site de collectivité sur WordPress ? Méthodes et retours d'XP
 
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...
 
20090615 - Ch'ti JUG - Apache Maven
20090615 - Ch'ti JUG - Apache Maven20090615 - Ch'ti JUG - Apache Maven
20090615 - Ch'ti JUG - Apache Maven
 
Performance au quotidien dans un environnement symfony
Performance au quotidien dans un environnement symfonyPerformance au quotidien dans un environnement symfony
Performance au quotidien dans un environnement symfony
 
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
 

wallabag, comment on a migré vers symfony3

  • 1. WALLABAG : COMMENT ON A MIGRÉ VERS SYMFONY 3 Par Jérémy Benoist ( ) et Nicolas Lœuillet ( )@j0k @nicosomb wallabag.org wallabag : comment on a migré vers Symfony 3 — PHP Tour 2016 — @j0k & @nicosomb
  • 2. NOUS DEUX Jérémy Benoist lead developer chez 20minutes Nicolas Lœuillet développeur chez Smile
  • 3. PLAN Historique Etat des lieux La migration Les étapes en cours et à venir
  • 5. CE QUE ÇA FAIT
  • 7. POURQUOI ÇA N'ÉTAIT PAS MIEUX AVANT
  • 8. PREMIÈRE VERSION DE "WALLABAG"
  • 9. ENVIRONNEMENT PHP PHP >= 5.3.3 Pas de framework Des classes PHP de plusieurs centaines de lignes
  • 10. LACUNES TECHNIQUES Dépendances versionnées Pas d'API Pas de tests Pas de PR par l'équipe MAJ BDD manuelle Déploiement manuel via Filezilla Équipe de deux personnes
  • 11. FRÉQUENCE DES MISES À JOUR Pas de calendrier dé ni 10 versions mineures en deux ans Pas de vrai respect de SEMVER
  • 12. POURQUOI C'EST MIEUX MAINTENANT
  • 14. ENVIRONNEMENT PHP PHP >= 5.5.9 Compatible PHP 7 Compatible HHVM (même si personne ne s'en sert) Symfony 3
  • 15. ON COMBLE LES LACUNES TECHNIQUES Sorte de De nition of Done : Documentation utilisateur Tests unitaires et / ou fonctionnels Review du code Déploiement via Capistrano (sur v2.wallabag.org) Migrations BDD Le moins d'actions manuelles possible Équipe plus conséquente : une core team, des traducteurs, des développeurs
  • 16. FRÉQUENCE DES MISES À JOUR Roadmap établie Respect de SEMVER Une version mineure tous les 3 mois
  • 17. API POUR LES APPLICATIONS EXTERNES Facilite l'intégration avec des applications tierces
  • 19. ANALYSE DU CODE v1 v2 Fichiers 396 129 Code 94.922 lignes 240 lignes / chier 8.822 lignes 68 lignes / chier Commentaires 37.855 lignes 2.462 lignes Sensio Insight 29/100 2 ans pour la médaille Platinum 32/100 3 semaines pour la médaille Platinum Scrutinizer 4,95/10 (1 erreur critique, +700 majeures) 9,39/10 (4 erreurs majeures)
  • 20. CHARGEMENT DES PAGES Analyses faites avec Black re sur PHP 7.0.6 v1 v2 Liste d'articles (460) 330ms 17 Mo 689ms 31 Mo Un article 89ms 10 Mo 281ms 17 Mo Liste des tags (20) 85ms 10 Mo 314ms 19 Mo
  • 21. EN CONCLUSION ... C'est pas très fameux pour la v2 tout ça ! Un framework, c'est lourd Le plain PHP c'est forcément rapide Pas trop focalisé sur la perf, pour le moment Plusieurs pistes d'améliorations (Redis, APC, Black re, etc.) Surtout un confort de développement pour les devs
  • 22. EN ROUTE POUR LA V2 !
  • 23. LE CHOIX DU FRAMEWORK
  • 24. EXTRACTION DE CONTENU LA principale fonctionnalité de wallabag Assuré par , dans la v1 Pas vraiment open source ... Et pas très pratique à utiliser ... Full-Text RSS // $ftr should be URL where you installed this application $ftr = 'http://example.org/full-text-rss/'; $article = 'http://www.bbc.co.uk/news/world-europe-21936308'; $request = $ftr.'makefulltextfeed.php?format=json&url='.$article; // Send HTTP request and get response $result = @file_get_contents($request);
  • 25. EXTRACTION DE CONTENU MAIS, sa capacité d'extraction est ef cace ! Utilise le microformat Utilise les données de Basée sur php-readability Et sur des site_con g (dans un repo séparé) hNews Schema.org ➜ Forker en gardant cette logique
  • 26. EXTRACTION DE CONTENU , un fork de Full-Text RSS v3.3graby Mise en place de test fonctionnels sur l'existant Ré-organisation / refonte site_con g via Composer Ajout de tests Et c'est plus propre à utiliser ... use GrabyGraby; $article = 'http://www.bbc.co.uk/news/world-europe-21936308'; $graby = new Graby(); $result = $graby->fetchContent($article);
  • 27. LA MIGRATION EN SOI Par itération Le socle Symfony La connexion utilisateur La con guration La commande wallabag:install L'ajout d'un lien L'ajout de tags Etc. Globalement, tout a été réécrit, étape par étape
  • 28. LA V2 N'EST PAS ISO AVEC LA V1 v2.0.0 ➜ focaliser sur le fonctionnement de base v2.0.x ➜ focaliser sur la stabilité v2.x ➜ amélioration des fonctionnalités (tag, recherche, etc.)
  • 29. LIBRAIRIES UTILISÉES POUR L'API FOSRestBundle NelmioCorsBundle FOSOAuthServerBundle BazingaHateoasBundle NelmioApiDocBundle Si seulement était sorti plus tôt :)API Platform 2.0
  • 30. LISTING DES FEATURES PAR LIBRAIRIE Utilisateur ➜ FosUserBundle Filtres ➜ FormFilterBundle Changement de thème ➜ LiipThemeBundle Export ➜ phpepub, tcpdf, php-mobi Règle de tagging ➜ RulerZ ( @KPhoen) Maintenance ➜ MaintenanceBundle Two factor authentication ➜ TwoFactorBundle Annotations ➜ AnnotatorJS
  • 32. INSTALLATION DE L'APPLICATION L'application doit être disponible pour tout le monde ! sur un serveur dédié sur un serveur mutualisé sur un ... raspberry (c'est pas gagné ...) Et installable par tout le monde "tout le monde" inclut des personnes novices
  • 33. INSTALLATION DE L'APPLICATION Deux solutions choisies : Via une archive incluant les dépendances Via Git & Composer
  • 34. INSTALLATION DE L'APPLICATION Plutôt basique pour la v1 wget http://wllbg.org/latest unzip latest + quelques lignes de SQL Dans l'ensemble aucun souci ✅
  • 35. INSTALLATION DE L'APPLICATION Tentative n°1 git clone https://github.com/wallabag/wallabag.git -b v2 cd wallabag composer install php app/console wallabag:install Trop orienté dev Installe toutes les deps "dev" C'était bien au début ™
  • 36. INSTALLATION DE L'APPLICATION Tentative n°2 composer create-project wallabag/wallabag wallabag 2.0.0-alpha.1 cd wallabag php app/console wallabag:install Toujours trop orienté dev Simple amélioration de la version précédente
  • 37. INSTALLATION DE L'APPLICATION Tentative n°3 SYMFONY_ENV=prod composer create-project wallabag/wallabag wallabag "2.0.*@alpha" --no-dev cd wallabag php app/console wallabag:install --env=prod Uniquement les packages de prod MAJ impossible à cause de create-project
  • 38. INSTALLATION DE L'APPLICATION Tentative n°4 (l'actuelle) git clone git@github.com:wallabag/wallabag.git cd wallabag git checkout 2.0.4 SYMFONY_ENV=prod composer install --no-dev -o --prefer-dist php app/console wallabag:install --env=prod Toujours bien en version de prod Facilite la mise à jour (par les tags) Mais toujours des soucis de mémoire
  • 39. AUTRES DIFFICULTÉS Les migrations de données SQLite Les demandes de site_con g Les issues de personnes pas très techniques
  • 40. LES ÉTAPES EN COURS
  • 41. LES ÉTAPES EN COURS RabbitMQ, pour les gros traitements Elasticsearch ( @damienalexandre) Dockerization par @JoliCode en salle C Gérer les dépendances CSS et JS via
  • 42. API : INTÉGRATIONS DÉJÀ RÉALISÉES : clone libre de IFTTTTrigger-Happy.eu github.com/foxmask/django-th @TriggerHappyEu
  • 43. API : INTÉGRATIONS DÉJÀ RÉALISÉES Application Windows Phone (Android et iOS en cours de réalisation) Addon pour Firefox : plugin pour ajouter dans wallabag depuis Tiny Tiny RSS Librairies , et ttrss-to-wallabag-v2 Python Java .NET
  • 44. API : INTÉGRATIONS SOUHAITÉES Cozy Cloud ownCloud Fabricants de liseuses Firefox, Gnome (pour remplacer Pocket)
  • 45. LES ÉTAPES À VENIR
  • 46. TO INFINITY... AND BEYOND Un front en React Une solution SaaS Intégration dans des applis tierces Reeder IFTTT Etc.