wallabag, comment on a migré vers symfony3

47
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

Upload: nicolas-loeuillet

Post on 14-Apr-2017

878 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: wallabag, comment on a migré vers symfony3

WALLABAG : COMMENT ON A MIGRÉ VERSSYMFONY 3

Par Jérémy Benoist ( ) et Nicolas Lœuillet ( ) @j0k @nicosombwallabag.org

wallabag : comment on a migré vers Symfony 3 — PHP Tour 2016 — @j0k & @nicosomb

Page 2: wallabag, comment on a migré vers symfony3

NOUS DEUX

Jérémy Benoist lead developer chez 20minutes

Nicolas Lœuillet développeur chez Smile

Page 3: wallabag, comment on a migré vers symfony3

PLANHistoriqueEtat des lieuxLa migrationLes étapes en cours et à venir

Page 4: wallabag, comment on a migré vers symfony3

FONCTIONNALITÉS ET HISTOIRE

Page 5: wallabag, comment on a migré vers symfony3

CE QUE ÇA FAIT

Page 6: wallabag, comment on a migré vers symfony3

HISTOIRE

Page 7: wallabag, comment on a migré vers symfony3

POURQUOI ÇA N'ÉTAIT PAS MIEUX AVANT

Page 8: wallabag, comment on a migré vers symfony3

PREMIÈRE VERSION DE "WALLABAG"

Page 9: wallabag, comment on a migré vers symfony3

ENVIRONNEMENT PHPPHP >= 5.3.3Pas de frameworkDes classes PHP de plusieurs centaines de lignes

Page 10: wallabag, comment on a migré vers symfony3

LACUNES TECHNIQUESDépendances versionnéesPas d'APIPas de testsPas de PR par l'équipeMAJ BDD manuelleDéploiement manuel via Filezilla �Équipe de deux personnes

Page 11: wallabag, comment on a migré vers symfony3

FRÉQUENCE DES MISES À JOURPas de calendrier dé�ni10 versions mineures en deux ansPas de vrai respect de SEMVER

Page 12: wallabag, comment on a migré vers symfony3

POURQUOI C'EST MIEUX MAINTENANT

Page 13: wallabag, comment on a migré vers symfony3

DEUXIÈME VERSION DE WALLABAG

Page 14: wallabag, comment on a migré vers symfony3

ENVIRONNEMENT PHPPHP >= 5.5.9Compatible PHP 7Compatible HHVM (même si personne ne s'en sert)Symfony 3

Page 15: wallabag, comment on a migré vers symfony3

ON COMBLE LES LACUNES TECHNIQUESSorte de De�nition of Done :

Documentation utilisateurTests unitaires et / ou fonctionnelsReview du code

Déploiement via Capistrano (sur v2.wallabag.org)Migrations BDDLe moins d'actions manuelles possibleÉquipe plus conséquente : une core team, des traducteurs,des développeurs

Page 16: wallabag, comment on a migré vers symfony3

FRÉQUENCE DES MISES À JOURRoadmap établieRespect de SEMVERUne version mineure tous les 3 mois

Page 17: wallabag, comment on a migré vers symfony3

API POUR LES APPLICATIONS EXTERNESFacilite l'intégration avec des applications tierces

Page 18: wallabag, comment on a migré vers symfony3

QUELQUES BENCHMARKS

Page 19: wallabag, comment on a migré vers symfony3

ANALYSE DU CODEv1 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 lamédaille Platinum

32/100 3 semaines pour lamédaille Platinum

Scrutinizer 4,95/10 (1 erreur critique,+700 majeures)

9,39/10 (4 erreurs majeures)

Page 20: wallabag, comment on a migré vers symfony3

CHARGEMENT DES PAGESAnalyses 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

Page 21: wallabag, comment on a migré vers symfony3

EN CONCLUSION ...C'est pas très fameux pour la v2 tout ça !

Un framework, c'est lourdLe plain PHP c'est forcément rapidePas trop focalisé sur la perf, pour le momentPlusieurs pistes d'améliorations (Redis, APC, Black�re, etc.)Surtout un confort de développement pour les devs

Page 22: wallabag, comment on a migré vers symfony3

EN ROUTE POUR LA V2 !

Page 23: wallabag, comment on a migré vers symfony3

LE CHOIX DU FRAMEWORK

Page 24: wallabag, comment on a migré vers symfony3

EXTRACTION DE CONTENULA principale fonctionnalité de wallabagAssuré par , dans la v1Pas 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);

Page 25: wallabag, comment on a migré vers symfony3

EXTRACTION DE CONTENUMAIS, sa capacité d'extraction est ef�cace !Utilise le microformat Utilise les données de Basée sur php-readabilityEt sur des site_con�g (dans un repo séparé)

hNewsSchema.org

➜ Forker en gardant cette logique

Page 26: wallabag, comment on a migré vers symfony3

EXTRACTION DE CONTENU, un fork de Full-Text RSS v3.3graby

Mise en place de test fonctionnels sur l'existantRé-organisation / refontesite_con�g via ComposerAjout de testsEt c'est plus propre à utiliser ...

use Graby\Graby;

$article = 'http://www.bbc.co.uk/news/world-europe-21936308';

$graby = new Graby(); $result = $graby->fetchContent($article);

Page 27: wallabag, comment on a migré vers symfony3

LA MIGRATION EN SOIPar itération

Le socle SymfonyLa connexion utilisateurLa con�gurationLa commande wallabag:installL'ajout d'un lienL'ajout de tagsEtc.

Globalement, tout a été réécrit, étape par étape

Page 28: wallabag, comment on a migré vers symfony3

LA V2 N'EST PAS ISO AVEC LA V1v2.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.)

Page 29: wallabag, comment on a migré vers symfony3

LIBRAIRIES UTILISÉES POUR L'APIFOSRestBundleNelmioCorsBundleFOSOAuthServerBundleBazingaHateoasBundleNelmioApiDocBundle

Si seulement était sorti plus tôt :)API Platform 2.0

Page 30: wallabag, comment on a migré vers symfony3

LISTING DES FEATURES PAR LIBRAIRIEUtilisateur ➜ FosUserBundleFiltres ➜ FormFilterBundleChangement de thème ➜ LiipThemeBundleExport ➜ phpepub, tcpdf, php-mobiRègle de tagging ➜ RulerZ (� @KPhoen)Maintenance ➜ MaintenanceBundleTwo factor authentication ➜ TwoFactorBundleAnnotations ➜ AnnotatorJS

Page 31: wallabag, comment on a migré vers symfony3

LES DIFFICULTÉS

Page 32: wallabag, comment on a migré vers symfony3

INSTALLATION DE L'APPLICATIONL'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

Page 33: wallabag, comment on a migré vers symfony3

INSTALLATION DE L'APPLICATIONDeux solutions choisies :

Via une archive incluant les dépendancesVia Git & Composer

Page 34: wallabag, comment on a migré vers symfony3

INSTALLATION DE L'APPLICATIONPlutôt basique pour la v1

wget http://wllbg.org/latest unzip latest

+ quelques lignes de SQL

Dans l'ensemble aucun souci ✅

Page 35: wallabag, comment on a migré vers symfony3

INSTALLATION DE L'APPLICATIONTentative n°1

git clone https://github.com/wallabag/wallabag.git -b v2 cd wallabag composer installphp app/console wallabag:install

Trop orienté devInstalle toutes les deps "dev"C'était bien au début ™

Page 36: wallabag, comment on a migré vers symfony3

INSTALLATION DE L'APPLICATIONTentative n°2

composer create-project wallabag/wallabag wallabag 2.0.0-alpha.1 cd wallabag php app/console wallabag:install

Toujours trop orienté devSimple amélioration de la version précédente

Page 37: wallabag, comment on a migré vers symfony3

INSTALLATION DE L'APPLICATIONTentative 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 prodMAJ impossible à cause de create-project

Page 38: wallabag, comment on a migré vers symfony3

INSTALLATION DE L'APPLICATIONTentative n°4 (l'actuelle)

git clone [email protected]: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 prodFacilite la mise à jour (par les tags)Mais toujours des soucis de mémoire

Page 39: wallabag, comment on a migré vers symfony3

AUTRES DIFFICULTÉSLes migrations de données SQLiteLes demandes de site_con�gLes issues de personnes pas très techniques �

Page 40: wallabag, comment on a migré vers symfony3

LES ÉTAPES EN COURS

Page 41: wallabag, comment on a migré vers symfony3

LES ÉTAPES EN COURSRabbitMQ, pour les gros traitementsElasticsearch (� @damienalexandre)Dockerization par @JoliCode en salle CGérer les dépendances CSS et JS via

Page 42: wallabag, comment on a migré vers symfony3

API : INTÉGRATIONS DÉJÀ RÉALISÉES : clone libre de IFTTTTrigger-Happy.eu

github.com/foxmask/django-th@TriggerHappyEu

Page 43: wallabag, comment on a migré vers symfony3

API : INTÉGRATIONS DÉJÀ RÉALISÉESApplication Windows Phone (Android et iOS en cours deréalisation)Addon pour Firefox

: plugin pour ajouter dans wallabagdepuis Tiny Tiny RSSLibrairies , et

ttrss-to-wallabag-v2

Python Java .NET

Page 44: wallabag, comment on a migré vers symfony3

API : INTÉGRATIONS SOUHAITÉESCozy CloudownCloudFabricants de liseusesFirefox, Gnome (pour remplacer Pocket)

Page 45: wallabag, comment on a migré vers symfony3

LES ÉTAPES À VENIR

Page 46: wallabag, comment on a migré vers symfony3

TO INFINITY... AND BEYONDUn front en ReactUne solution SaaSIntégration dans des applis tierces

ReederIFTTTEtc.

Page 47: wallabag, comment on a migré vers symfony3

MERCI !DES QUESTIONS ? �