wallabag, comment on a migré vers symfony3
TRANSCRIPT
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
NOUS DEUX
Jérémy Benoist lead developer chez 20minutes
Nicolas Lœuillet développeur chez Smile
PLANHistoriqueEtat des lieuxLa migrationLes é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 PHPPHP >= 5.3.3Pas de frameworkDes classes PHP de plusieurs centaines de lignes
LACUNES TECHNIQUESDépendances versionnéesPas d'APIPas de testsPas de PR par l'équipeMAJ BDD manuelleDéploiement manuel via Filezilla �Équipe de deux personnes
FRÉQUENCE DES MISES À JOURPas de calendrier dé�ni10 versions mineures en deux ansPas de vrai respect de SEMVER
POURQUOI C'EST MIEUX MAINTENANT
DEUXIÈME VERSION DE WALLABAG
ENVIRONNEMENT PHPPHP >= 5.5.9Compatible PHP 7Compatible HHVM (même si personne ne s'en sert)Symfony 3
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
FRÉQUENCE DES MISES À JOURRoadmap établieRespect de SEMVERUne version mineure tous les 3 mois
API POUR LES APPLICATIONS EXTERNESFacilite l'intégration avec des applications tierces
QUELQUES BENCHMARKS
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)
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
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
EN ROUTE POUR LA V2 !
LE CHOIX DU FRAMEWORK
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);
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
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);
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
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.)
LIBRAIRIES UTILISÉES POUR L'APIFOSRestBundleNelmioCorsBundleFOSOAuthServerBundleBazingaHateoasBundleNelmioApiDocBundle
Si seulement était sorti plus tôt :)API Platform 2.0
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
LES DIFFICULTÉS
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
INSTALLATION DE L'APPLICATIONDeux solutions choisies :
Via une archive incluant les dépendancesVia Git & Composer
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 ✅
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 ™
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
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
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
AUTRES DIFFICULTÉSLes migrations de données SQLiteLes demandes de site_con�gLes issues de personnes pas très techniques �
LES ÉTAPES EN COURS
LES ÉTAPES EN COURSRabbitMQ, pour les gros traitementsElasticsearch (� @damienalexandre)Dockerization par @JoliCode en salle CGé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É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
API : INTÉGRATIONS SOUHAITÉESCozy CloudownCloudFabricants de liseusesFirefox, Gnome (pour remplacer Pocket)
LES ÉTAPES À VENIR
TO INFINITY... AND BEYONDUn front en ReactUne solution SaaSIntégration dans des applis tierces
ReederIFTTTEtc.
MERCI !DES QUESTIONS ? �