WALLABAG : COMMENT ON A MIGRÉ VERS
SYMFONY 3
Par Jérémy Benoist ( ) et Nicolas Lœuillet ( )@j0k @nicosomb
wallabag.org
wal...
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 manu...
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 fonctionne...
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 3...
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 a...
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...
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...
EXTRACTION DE CONTENU
MAIS, sa capacité d'extraction est ef cace !
Utilise le microformat
Utilise les données de
Basée sur...
EXTRACTION DE CONTENU
, un fork de Full-Text RSS v3.3graby
Mise en place de test fonctionnels sur l'existant
Ré-organisati...
LA MIGRATION EN SOI
Par itération
Le socle Symfony
La connexion utilisateur
La con guration
La commande wallabag:install
L...
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 ➜...
LIBRAIRIES UTILISÉES POUR L'API
FOSRestBundle
NelmioCorsBundle
FOSOAuthServerBundle
BazingaHateoasBundle
NelmioApiDocBundl...
LISTING DES FEATURES PAR LIBRAIRIE
Utilisateur ➜ FosUserBundle
Filtres ➜ FormFilterBundle
Changement de thème ➜ LiipThemeB...
LES DIFFICULTÉS
INSTALLATION DE L'APPLICATION
L'application doit être disponible pour tout le monde !
sur un serveur dédié
sur un serveur ...
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...
INSTALLATION DE L'APPLICATION
Tentative n°1
git clone https://github.com/wallabag/wallabag.git -b v2
cd wallabag
composer ...
INSTALLATION DE L'APPLICATION
Tentative n°2
composer create-project wallabag/wallabag wallabag 2.0.0-alpha.1
cd wallabag
p...
INSTALLATION DE L'APPLICATION
Tentative n°3
SYMFONY_ENV=prod composer create-project wallabag/wallabag 
wallabag "2.0.*@al...
INSTALLATION DE L'APPLICATION
Tentative n°4 (l'actuelle)
git clone git@github.com:wallabag/wallabag.git
cd wallabag
git ch...
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 s...
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
: ...
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 ?
Prochain SlideShare
Chargement dans…5
×

wallabag, comment on a migré vers symfony3

716 vues

Publié le

wallabag est une application opensource de lecture différée : elle vous permet de mettre de côté la version épurée d'un article pour la consulter plus tard où que vous soyez. Créée il y a 3 ans à base de fichiers PHP comme on faisait en 2005, nous avons décidé il y a maintenant un peu plus d'un an de migrer le projet à Symfony. Au cours de ce talk, nous présenterons donc le projet wallabag et tout son écosystème : son concept, son socle technique (API REST, tests unitaires, Rulerz, RabbitMQ, Capistrano), les difficultés rencontrées, la communauté et les projets qui tournent autour, la roadmap pour les semaines à venir.

Publié dans : Technologie
0 commentaire
4 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

Aucun téléchargement
Vues
Nombre de vues
716
Sur SlideShare
0
Issues des intégrations
0
Intégrations
18
Actions
Partages
0
Téléchargements
24
Commentaires
0
J’aime
4
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

wallabag, comment on a migré vers symfony3

  1. 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. 2. NOUS DEUX Jérémy Benoist lead developer chez 20minutes Nicolas Lœuillet développeur chez Smile
  3. 3. PLAN Historique Etat des lieux La migration Les étapes en cours et à venir
  4. 4. FONCTIONNALITÉS ET HISTOIRE
  5. 5. CE QUE ÇA FAIT
  6. 6. HISTOIRE
  7. 7. POURQUOI ÇA N'ÉTAIT PAS MIEUX AVANT
  8. 8. PREMIÈRE VERSION DE "WALLABAG"
  9. 9. ENVIRONNEMENT PHP PHP >= 5.3.3 Pas de framework Des classes PHP de plusieurs centaines de lignes
  10. 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. 11. FRÉQUENCE DES MISES À JOUR Pas de calendrier dé ni 10 versions mineures en deux ans Pas de vrai respect de SEMVER
  12. 12. POURQUOI C'EST MIEUX MAINTENANT
  13. 13. DEUXIÈME VERSION DE WALLABAG
  14. 14. ENVIRONNEMENT PHP PHP >= 5.5.9 Compatible PHP 7 Compatible HHVM (même si personne ne s'en sert) Symfony 3
  15. 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. 16. FRÉQUENCE DES MISES À JOUR Roadmap établie Respect de SEMVER Une version mineure tous les 3 mois
  17. 17. API POUR LES APPLICATIONS EXTERNES Facilite l'intégration avec des applications tierces
  18. 18. QUELQUES BENCHMARKS
  19. 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. 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. 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. 22. EN ROUTE POUR LA V2 !
  23. 23. LE CHOIX DU FRAMEWORK
  24. 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. 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. 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. 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. 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. 29. LIBRAIRIES UTILISÉES POUR L'API FOSRestBundle NelmioCorsBundle FOSOAuthServerBundle BazingaHateoasBundle NelmioApiDocBundle Si seulement était sorti plus tôt :)API Platform 2.0
  30. 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
  31. 31. LES DIFFICULTÉS
  32. 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. 33. INSTALLATION DE L'APPLICATION Deux solutions choisies : Via une archive incluant les dépendances Via Git & Composer
  34. 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. 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. 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. 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. 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. 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. 40. LES ÉTAPES EN COURS
  41. 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. 42. API : INTÉGRATIONS DÉJÀ RÉALISÉES : clone libre de IFTTTTrigger-Happy.eu github.com/foxmask/django-th @TriggerHappyEu
  43. 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. 44. API : INTÉGRATIONS SOUHAITÉES Cozy Cloud ownCloud Fabricants de liseuses Firefox, Gnome (pour remplacer Pocket)
  45. 45. LES ÉTAPES À VENIR
  46. 46. TO INFINITY... AND BEYOND Un front en React Une solution SaaS Intégration dans des applis tierces Reeder IFTTT Etc.
  47. 47. MERCI ! DES QUESTIONS ?

×