Node.JSdansAzure
MatthieuBouilloux
BackendsNode.JSenPAASetenIAASdansAzure
PartieI
Définitionsetprincipes
Comparatif,investissementsetcompatibilité
PartieII
M...
PAASetenIAASdansAzure
PAAS:platform asaservice IAAS:infrastructureasaservice
L'entreprise
Microsoft
Azure
lemaintientdel'a...
Différencesd’investissements
IAAS PAAS
Les+:
-Plusbesoindegérerl’infrastructure
-Gaindetempsàlamiseenplace/déploiement
-Au...
Casconcrêts
EnIAAS,onpeutappelern'importequelprogrammeinstallésurlamachineavecNodeJS(spawn/exec).
Aveclescompétences,onpeu...
Casconcrêts
LeproblèmedesmodulesnatifsNode.JSenPAAS:
Lesmodulesnécessitentsouventl'installationsurunpostefixeavantdelesdép...
Casconcrêts
EnIAAS,lacréationd’unestructurescalableetàhautedisponibilitésurunebasededonnéesNoSQL,
(exemple:replica-setMong...
Casconcrêts
EnIAAS,onpeutdiviseruneapplicationenplusieursprocess,
lorsqu’unprocessredémarreouestinaccessible,
lerestedel’a...
Casconcrêts
LePAASnepermetpasdemonterdesstructuresatypiquestelquepourlewebscrapping,
avecl’installationdemultiplesproxy.
AppServiceVSVirtualMachines
DocumentDBVSDiskStorage
Node.JSenPAASavecAppServices& DocumentDB
Créationdel’App
Configurationdansleportail
SetupaccèsFTP/FTPS
Identifiantetdéploi...
Créationdel’application
Configurationdansleportail
WebSockets
ToujoursActif
SetupAccèsFTP/FTPS
Identifiantetdéploiement
Lenom d’utilisateurestceluispécifiédansl’interface,
ilpeutêtrelégèrementdifférentdeceluientréàl’é...
Configurationdel’app
Sivousnevoulez/pouvezpasenvoyerledossiernode_modules,
vouspouveztoujourslanceruneinstallationdanslaco...
Configurationdel’app-appartéExpress.JS
ParticularitéavecleFrameworkExpress.JS
I.
Ilfautcopieretrenomerlefichierdelancement...
Configurationdel’app-Lefichierweb.config
<?xmlversion="1.0"?>
<configuration>
<system.web>
<compilationbatch="false"/>
</s...
Créationdelabasededonnée
Effectivementplusrapidequedemonter
unreplica-setMongoDB
surtroisVM aprèssetup
Créationdelabasededonnée
Récupérationdesclésd’accès
endeuxclics!
Unsimple“npm installdocumentdb”
etvotrebasededonnéesestac...
DebugparlogviaFTP
Ilfautajouterunfichierdeconfiguration:
àlaracineduprojet“/wwwroot”
Ajoutezunfichier:“IISNode.yml”
Ayantp...
Nom dedomaineexterne
Particularité
Pourredirigerlenom dedomainesanssonsous-domaineex:http://gab2016.cloud
ilfautajouterunC...
EnvironnementdeproductionNode.JSenIAASavecUbuntu14.04LTS
CléSSH
SetupdelaVM
SSHtoVM
Node.js/Nginxsetup
Attacherundisque
In...
ViaPuttyGen
VM ClépubliqueSSH
Générer
Clépublique
Motdepasse
Nom d’utilisateur
Sauvegarderla
PrivateKey
ClépulibqueSSH
A1pourexemple
CréationdelaVM
AuthentificationsurlaVM
Cléprivée
Unefoisouvert,
ilsuffitderenseignerleuser/password
LeuserétantleKeyComment
Etlepasswordl...
curl-sLhttps://deb.nodesource.com/setup_4.x|sudo-Ebash-
sudoapt-getinstall-ynodejs
curl-sLhttps://deb.nodesource.com/setup...
Attacherundiskenoption
Initialiserledisque
sudofdisk/dev/sdc
n
p
1
“ENTER”
“ENTER”
pp
w
sudomkfs-text4/dev/sdc1
sudofdisk-l
sudomkdir/drive1
sudomount/dev/sdc1/drive1
sudo-iblkid
Récupérerl’uuidetinjecterledans/etc/fstab
sudonano/etc/fstab
Cas1:U...
Cas2:Undossierpourplusieursdisques
UtilisationdeMHDDFS
sudoapt-getinstallmhddfs
mkdir/virtual1
mhddfs/dev/sdc1,/mnt/sdd1,/...
Créerledossieretchangerlesdroitspourl’accèsSFTP
cd/drive1
sudomkdirwww
sudochown-Rusername:username./www
ConnexionenSFTPde...
RedémarrerNginx,lancerleprocessNodeetouvrirlesports80et443pourl’HTTPS
sudoservicenginxreload
cd/drive1/www
sudonpm install...
Lescriptencasderedémarrage,notammentlorsdemaintenance!
sudonano/etc/init.d/init
#!/bin/sh
/drive1/init.sh
sudochmodugo+x/e...
MongoDBenlocal-Ubuntu14.04LTS
sudoapt-keyadv--keyserverhkp://keyserver.ubuntu.com:80--recvEA312927
echo"debhttp://repo.mon...
L’unionfaitlaforce
LechoixduPAASouduIAASdépenddelaspécificitédechaqueprojet.
MicrosoftAzuremetàdispositiontouslesoutilsnéc...
Merci
Matthieu Bouilloux - NodeJS dans Azure -  - Global Azure Bootcamp 2016 Paris
Prochain SlideShare
Chargement dans…5
×

Matthieu Bouilloux - NodeJS dans Azure - - Global Azure Bootcamp 2016 Paris

85 vues

Publié le

Comparaison – avantages et inconvénients - de backends NodeJS en PAAS et IAAS Azure. Exemple d'un backend qui exploite les avantages de chaque infrastructure.

0 commentaire
0 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

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

Aucune remarque pour cette diapositive

Matthieu Bouilloux - NodeJS dans Azure - - Global Azure Bootcamp 2016 Paris

  1. 1. Node.JSdansAzure MatthieuBouilloux
  2. 2. BackendsNode.JSenPAASetenIAASdansAzure PartieI Définitionsetprincipes Comparatif,investissementsetcompatibilité PartieII Miseenplaced’uneWepAppenPAAS PartieIII Miseenplaced’unenvironnementdeproductionNode.JSenIAAS PartieIV Conclusion Q&A
  3. 3. PAASetenIAASdansAzure PAAS:platform asaservice IAAS:infrastructureasaservice L'entreprise Microsoft Azure lemaintientdel'applicatif laplate-formed'exécution desapplicatifs, leslogicielsdebaseetl'infrastructure lemiddlewaredesserveurs leslogicielsapplicatifs (exécutables,paramétrages, lesbasesdedonnées) lematérielserveur lessystèmesd'exploitation lescouchesdevirtualisation lestockage lesréseaux
  4. 4. Différencesd’investissements IAAS PAAS Les+: -Plusbesoindegérerl’infrastructure -Gaindetempsàlamiseenplace/déploiement -Automatiquementscalable -Lebesoinencompétencediminue -Lamaintenanceselimiteàl’applicatif Les-: -Desprixplusélevésetpouvantévoluer -Possèdedeslimitationstechniques -Problèmedecompatibilité(modulesnatifs) -Nepeutêtreappliquéàtouslesprojets (usageavancédeNode.JS) --Vousêtescomplétementdépendantduservice Les+: -Desprixplusfaiblesàserviceéquivalent -Baisseconstantedesprixdustorageetducompute -Plusdelibertésurlestechnologies;pasdelimitation (modulesnatifs) -Séparation/multipleprocessenNode.JS hébergerplusieursapp Eviterunredémarrageglobaldesservices -Architecture“déplaçable” Les-: -L’investissemententemps,notammentpour l’installationetlaconfigurationdel’environnement -Nécessiteplusdecompétenceseninterne -Certainaspectdelagestiondebasededonnées restenttrèscomplexe.
  5. 5. Casconcrêts EnIAAS,onpeutappelern'importequelprogrammeinstallésurlamachineavecNodeJS(spawn/exec). Aveclescompétences,onpeutrapidementmonterl'équivalentd'un"MediaService"avec, parexempledesutilitairestelqueffmpeg,sanscoûtàl’opérationmaisàceluidelamachinevirtuelle. Toutdépenddoncduvolumed’opérationàtraiter.
  6. 6. Casconcrêts LeproblèmedesmodulesnatifsNode.JSenPAAS: Lesmodulesnécessitentsouventl'installationsurunpostefixeavantdelesdéployersurl'infrastructure. Làencorelacompatibilitén'estpasforcementassurée. Alorsquelaquasitotalitédespackagess'intallesurdesmachinesvirtuelleslinuxsansdifficultée.
  7. 7. Casconcrêts EnIAAS,lacréationd’unestructurescalableetàhautedisponibilitésurunebasededonnéesNoSQL, (exemple:replica-setMongoDB)nécessiteuntempsdemiseenplace etuneacquisitiondecompétencesnonnégligeables.
  8. 8. Casconcrêts EnIAAS,onpeutdiviseruneapplicationenplusieursprocess, lorsqu’unprocessredémarreouestinaccessible, lerestedel’applicatifcontinuedefonctionnernormalement. Lelancementdeprocessusentâchedefondn’a pasdelimitated’utilisationetresterelativementfacileàmettreenplace.
  9. 9. Casconcrêts LePAASnepermetpasdemonterdesstructuresatypiquestelquepourlewebscrapping, avecl’installationdemultiplesproxy.
  10. 10. AppServiceVSVirtualMachines
  11. 11. DocumentDBVSDiskStorage
  12. 12. Node.JSenPAASavecAppServices& DocumentDB Créationdel’App Configurationdansleportail SetupaccèsFTP/FTPS Identifiantetdéploiement Configurationdel’app(web.config) CréationdelaBasededonnée RRécupérationdesidentifiantsdeDocumentDB DebugparlogviaFTP Configurerunnom dedomaineexterne
  13. 13. Créationdel’application
  14. 14. Configurationdansleportail WebSockets ToujoursActif
  15. 15. SetupAccèsFTP/FTPS
  16. 16. Identifiantetdéploiement Lenom d’utilisateurestceluispécifiédansl’interface, ilpeutêtrelégèrementdifférentdeceluientréàl’étapeprécédente. Lesnomsd’hôtesFTP/FTPSsontmentionnésau-dessous. DéploiementparFTP/FTPS,ledéploiementpargitétantlargementdocumentée
  17. 17. Configurationdel’app Sivousnevoulez/pouvezpasenvoyerledossiernode_modules, vouspouveztoujourslanceruneinstallationdanslaconsole, aprèsavoirdéployévotreapplicatif(incluantlepackage.json). Uneseulecommande:“npm install”
  18. 18. Configurationdel’app-appartéExpress.JS ParticularitéavecleFrameworkExpress.JS I. Ilfautcopieretrenomerlefichierdelancement, situéaprèsdéploiementdansledossier/wwwroot/bin/www enserver.jsdansledossier/wwwroot II. RRemplacertousles“../” Par“./”danslenouveaufichierserver.js
  19. 19. Configurationdel’app-Lefichierweb.config <?xmlversion="1.0"?> <configuration> <system.web> <compilationbatch="false"/> </system.web> <system.webServer> <httpP<httpProtocolallowKeepAlive="true"/> <webSocketenabled="false"/> <handlers> <addname="iisnode"path="server.js"verb="*"modules="iisnode"/> </handlers> <rewrite> <rules> <!--Donotin<!--Donotinterferewithrequestsfornode-inspectordebugging--> <rulename="NodeInspector"patternSyntax="ECMAScript"stopProcessing="true"> <matchurl="^server.js/debug[/]?"/> </rule> <!--FirstweconsiderwhethertheincomingURLmatchesaphysicalfileinthe/publicfolder--> <rulename="StaticContent"> <actiontype="Rewrite"url="public{REQUEST_URI}"/> </</rule> <!--AllotherURLsaremappedtothenode.jswebappentrypoint--> <rulename="DynamicContent"> <conditions> <addinput="{REQUEST_FILENAME}"matchType="IsFile"negate="True"/> </conditions> <actiontype="Rewrite"url="server.js"/> </</rule> </rules> </rewrite> </system.webServer> </configuration> Particularités I. GarderlesWebSocketsActive: httpProtocolallowKeepAlive=”true” II. DésactiverlesWebSocketsdeIISpourutilisersocket.IO wwebSocketenabled=”false” Attentiontoutefoisàlesactiverdansl’interfaceAzure
  20. 20. Créationdelabasededonnée Effectivementplusrapidequedemonter unreplica-setMongoDB surtroisVM aprèssetup
  21. 21. Créationdelabasededonnée Récupérationdesclésd’accès endeuxclics! Unsimple“npm installdocumentdb” etvotrebasededonnéesestaccessible TutorielsDocumentDB SurGitHub https://github.com/Azure/azure-documentdb-node SurMicrosoft.com https://azure.microsoft.com/fr-fr/documentation /articles/documentdb-nodejs-application/
  22. 22. DebugparlogviaFTP Ilfautajouterunfichierdeconfiguration: àlaracineduprojet“/wwwroot” Ajoutezunfichier:“IISNode.yml” Ayantpourcontenu: loggingEnabled:true Ilnevousresteplusqu’àvousconnnecter auauFTPetdenaviguerdansleslogs!
  23. 23. Nom dedomaineexterne Particularité Pourredirigerlenom dedomainesanssonsous-domaineex:http://gab2016.cloud ilfautajouterunCNAMEawverify awverifyCNAMEawverify.APP_NAME.azurewebsites.net. Pourlesous-domaine:http://www.gab2016.cloud unCNAMEverslawebappsuffit www CNAMEawwww CNAMEawverify.APP_NAME.azurewebsites.net. Accessibledepuisl’interfaceazuredanslespanneauxdelawebapp. Aucunedifficultémaisuneparticularité!
  24. 24. EnvironnementdeproductionNode.JSenIAASavecUbuntu14.04LTS CléSSH SetupdelaVM SSHtoVM Node.js/Nginxsetup Attacherundisque Initialiserledisquepourlinux MonMonterledisquedemanièrepermanente Utiliserplusieursdisquespourunseulespacedestockage GestiondesdroitspourleSFTP Ajoutdespointsdeterminaisons/LancementdeprocessusNode.JS LancementpermanentdeprocessusNode.JS(ex:reboot) ConfigurerMongoDBenlocal
  25. 25. ViaPuttyGen VM ClépubliqueSSH Générer Clépublique Motdepasse Nom d’utilisateur Sauvegarderla PrivateKey
  26. 26. ClépulibqueSSH A1pourexemple CréationdelaVM
  27. 27. AuthentificationsurlaVM Cléprivée Unefoisouvert, ilsuffitderenseignerleuser/password LeuserétantleKeyComment EtlepasswordleKeyPassphrase domain.cloudapp.net Connexion/SSH/AUTH
  28. 28. curl-sLhttps://deb.nodesource.com/setup_4.x|sudo-Ebash- sudoapt-getinstall-ynodejs curl-sLhttps://deb.nodesource.com/setup_5.x|sudo-Ebash- sudoapt-getinstall-ynodejs Node.JSv.4 Node.JSv.5 BuildTools sudoapt-getinstall-ybuild-essential ProcessManager2 sudonpm installpm2-g Node.JSv.4ouv.5auchoix Installationdebase:Node.js/PM2/NginxsurUbuntu14.04LTS Nginx sudoadd-apt-repositoryppa:nginx/stable sudoapt-getupdate sudoapt-getinstallnginx
  29. 29. Attacherundiskenoption
  30. 30. Initialiserledisque sudofdisk/dev/sdc n p 1 “ENTER” “ENTER” pp w sudomkfs-text4/dev/sdc1 sudofdisk-l
  31. 31. sudomkdir/drive1 sudomount/dev/sdc1/drive1 sudo-iblkid Récupérerl’uuidetinjecterledans/etc/fstab sudonano/etc/fstab Cas1:Undossierpardisque Monterledisquesurundossier(ycomprislorsd’unreboot) Pourtester: sudoumount/drive1 sudomount/drive1 df-h “CTRL+O”:enregistrer “CTRL+X”:quitter RajouteraprèslapremièreligneUUID: UUID=cdda2a63-a89f-4b98-874d-c69b26c9907a /drive1 ext4 defaults 12
  32. 32. Cas2:Undossierpourplusieursdisques UtilisationdeMHDDFS sudoapt-getinstallmhddfs mkdir/virtual1 mhddfs/dev/sdc1,/mnt/sdd1,/virtual1-oallow_other MHDDFSaudémarrage sudonano/etc/fstab Rajouteràlafindufichierfstab: mhddfs#/dev/sdc1,/mnt/sdd1,/virtual1-fuseallow_other00
  33. 33. Créerledossieretchangerlesdroitspourl’accèsSFTP cd/drive1 sudomkdirwww sudochown-Rusername:username./www ConnexionenSFTPdelamêmemanièrequesurPutty Ledossierestaccessibleenécrituresur/drive1/www pourl’utilisateurusername ConfigurerNginxcommeProxypourvosprocessNode.JS sudorm /etc/nginx/sites-enabled/default sudonano/etc/nginx/sites-available/mon_site server{ server_namedomain.cloudapp.net; listen80; location/{ proxy_set_headerX-Real-IP$remote_addr; proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for; pproxy_set_headerHost$http_host; proxy_set_headerX-NginX-Proxytrue; proxy_passhttp://127.0.0.1:3000; proxy_redirectoff; } } sudoln-s/etc/nginx/sites-available/mon_site/etc/nginx/sites-enabled
  34. 34. RedémarrerNginx,lancerleprocessNodeetouvrirlesports80et443pourl’HTTPS sudoservicenginxreload cd/drive1/www sudonpm install sudopm2startbin/www--nameapp1 “npm install”unefoisvotreapplicationdeployée surledossierwww viagit,sftpouautre Où“bin/www”correspondauprocessnode, iciceluiduframeworkExpress.jsenversion4
  35. 35. Lescriptencasderedémarrage,notammentlorsdemaintenance! sudonano/etc/init.d/init #!/bin/sh /drive1/init.sh sudochmodugo+x/etc/init.d/init sudoupdate-rc.dinitdefaults sudonano/drive1/init.sh #!/bin/bash sudo-uusernamesudopm2start/drive1/www/bin/www--nameapp1 sudochmoda+x/drive1/init.sh Sanscetteopération,vousdevrezredémmarervosprocessmanuellementsurchaquemachine, lorsd’uncrashmachineoulorsd’unemaintenanceAzure! Sansle-uusernameun“sudosu”serarequispouraccéder àPM2(ProcessManager2)
  36. 36. MongoDBenlocal-Ubuntu14.04LTS sudoapt-keyadv--keyserverhkp://keyserver.ubuntu.com:80--recvEA312927 echo"debhttp://repo.mongodb.org/apt/ubuntutrusty/mongodb-org/3.2multiverse"|sudotee/etc/apt/sources.list.d/mongodb-org-3.2.list sudoapt-getupdate sudoapt-getinstall-ymongodb-org ConfigurerMongoDBsurledisqueattaché! cd/drive1 sudomkdirdb sudomkdir./db/data sudomkdir./db/log sudochown-Rmongodb:mongodb./db sudonano/etc/mongod.conf RemplacerdbPathdansstorage: RemplacerpathdanssystemLog: /drive1/db/data /drive1/db/log/mongod.log Puisredémarrermongodb: sudoservicemongodrestart Sitoutestok,vousverrezapparaître lefichiermongod.logdansdb/log
  37. 37. L’unionfaitlaforce LechoixduPAASouduIAASdépenddelaspécificitédechaqueprojet. MicrosoftAzuremetàdispositiontouslesoutilsnécessairespourcréer unéquilibreentrelesdeux. Àvousdejouer! Conclusion
  38. 38. Merci

×