În articolul meu precedent am vorbit despre bucuria mea de a descoperi cadrul Express. Express este ceea ce mă face să simt că aș putea să construiesc ceva cu Node și să mă distrez să o fac. Și de fapt - am făcut asta! Am construit câteva exemple de aplicații web și am avut multă distracție. Dar în cele din urmă am hotărât că a venit timpul să se răstoarne și să devină serios. Mi-a plăcut Nodul, mi-a plăcut Express și, dacă m-aș angaja cu adevărat să o învăț, atunci de ce să nu luați ultimul pas și să creați de fapt real site-ul web care îl folosește.
Un alt lucru pe care l-am învățat devreme în timpul educației mele Nodacation (Nodacation?) A fost că trebuie să opresc și să repornesc o aplicație Nod a fost o adevărată durere în spate. Am avut un mare succes folosind Nodemon de Remy Sharp. Acesta va observa actualizări ale codului și va reporni automat aplicația Nod.
Sună puțin banal, dar pentru mine întreaga mea experiență cu Node era la linia de comandă. Pur și simplu aș fugi aplicație nod
și testați-l pe portul 3000. Chiar nu știam ce implica să obțineți aceași aplicație în sus și să rulați pe un server real și să răspundeți unui domeniu. În acest articol voi descrie două încercări diferite pe care le-am făcut pentru a muta o aplicație Nod în producție. Evident, există mai multe căi (și căutați mai multe articole aici la Nettuts +!), Așa că țineți cont de asta am încercat și am avut succes.
Procesul meu tipic pentru împingerea unui nou site ColdFusion a fost acela de a-mi împinge fișierele prin FTP și de a-mi edita manual Apache
httpd.conf
fișier pentru a adăuga noul server virtual.
Unul dintre lucrurile pe care le-am menționat în articolul meu anterioară este că cea mai mare parte a experienței mele legate de dezvoltarea de servere implică Adobe ColdFusion. Dacă nu ați folosit-o niciodată, una dintre caracteristicile sale principale este să vă integrați cu serverul dvs. web (la fel ca PHP). Ceea ce înseamnă asta este că pot să spun serverului de aplicații ca Apache (sau IIS, etc) să știe că orice cerere pentru un fișier cu o anumită extensie ar trebui să fie înmânată serverului ColdFusion.
Obișnuit Nodul este un pic diferit - în esență, preluați deja rolul unui server web. Așadar, am fost în pierdere în ceea ce privește modul în care aș lua o aplicație Nod și le-aș publica pe serverul meu de producție existent. Procesul meu tipic pentru împingerea unui nou site ColdFusion a fost acela de a-mi împinge fișierele prin FTP și de a-mi edita manual Apache httpd.conf
fișier pentru a adăuga noul server virtual. (Dacă aș fi folosit IIS, ar fi practic același lucru - cu excepția faptului că aș folosi în schimb instrumentul grafic.)
Am început prin Googling pe această temă și am găsit câteva răspunsuri. Cel care a ajutat cu adevărat cel mai mult a fost un articol al lui Davy Brion, "Gazduire site Node.js prin Apache". (Pentru o privire asupra modului în care se poate face acest lucru cu IIS, consultați articolul aprofundat al lui Scott Hanselman.) Articolul său îl împarte în două aspecte - asigurându-vă că scriptul de nod este rulat atunci când serverul pornește și configurează Apache. Am ignorat aspectul de pornire a scriptului, deoarece soluția sa implică Linux și serverul meu de producție a folosit Windows. (Eu sunt un fan imens OS X, dar din anumite motive am simțit întotdeauna mult mai confortabil de găzduire pe Windows.Nu știu de ce, dar funcționează pentru mine.În esență, soluția lui se reduce la Apache proxy cererile (înapoi și inainte) intre ea si aplicatia dvs. Nod.Aici este un exemplu pe care l-am folosit pentru testare:
ServerName nodetest.dev ProxyRequests Dezactivat ProxyPass / http://127.0.0.1:3000/ ProxyPassReverse / http://127.0.0.1:3000/
Rețineți că acest lucru este puțin diferit de exemplul lui Davy. Vrei să te asigură că ai activat mod_proxy
și mod_proxy_http
care ar trebui să fie la fel de simplu ca asigurându-vă că nu sunt comentate în fișierul conf. În cele din urmă, am reînceput Apache și am adăugat o intrare la fișierul gazdă local pentru domeniul pe care l-am specificat mai sus. Și a funcționat!
Acum, în timp ce acest lucru a funcționat, am să subliniez că multe dintre rezultatele pe care le veți obține de la Googling despre acest subiect vor discuta modul în care oamenii nu cred că aceasta este o soluție foarte performantă. Pentru a fi sincer, mă așteptam să găzduiesc un site care să obțină - în cel mai bun caz - o mie de hit-uri pe zi, așa că nu mă interesa cu adevărat. Ceea ce ma interesat, totuși, a fost instalarea aplicației mele, astfel încât aceasta să pornească automat și să fie reluată pe Windows. Am vazut cateva solutii, dar inainte de a trage plugul si a lansat site-ul meu, am decis sa sapat un pic si sa vad daca o alta optiune ar putea sa mearga mai bine pentru mine.
Am descoperit AppFog după ce am citit despre asta de la un coleg al meu. AppFog este un serviciu bazat pe cloud (ceea ce nu este în aceste zile), care ușurează găzduirea aplicațiilor utilizând o varietate de motoare populare. De la PHP la Grails la Ruby și - desigur - Nod. Împreună cu suport pentru diverse motoare, se integrează bine și cu diverse baze de date și furnizori SCM. Dispune de o linie de comandă excelentă, dar ceea ce mi-a vândut cu adevărat era că îl puteți testa gratuit. AppFog are o varietate de niveluri de servicii, dar puteți testa cu o adresă publică urâtă, gratuit, imediat. Să aruncăm o privire la cât de repede puteți ajunge live folosind AppFog.
În primul rând, veți dori să vă înscrieți. Odată ce ați terminat înregistrarea și verificarea, sunteți scos în consola AppFog:
Sunt multe pe care nu le vom acoperi în articol, dar deocamdată, faceți clic pe Aplicații.
Pentru prima aplicație, trebuie doar să apăsați pe strălucitoare Noua aplicație buton. Acum aveți o decizie de făcut. Care dintre cele mai multe aplicații de pornire cu care vă veți vedea aplicația? Rețineți că pentru fiecare dintre aplicațiile de pornire puteți să aruncați o privire la codul care va fi utilizat pentru inițializarea aplicației. Pentru a fi clar, dacă aveți o aplicație Nod existentă, așa cum am făcut, codul utilizat aici nu va interfera. Pur și simplu o veți arunca mai târziu. Am selectat Node Express.
Apoi, va trebui să selectați modul în care este găzduită aplicația dvs. Vreau sa fiu cinstita aici si sa spun cand am jucat pentru prima oara cu AppFog Eu chiar nu stiam ce sa selectez aici. Am mers cu AWS US East ca fiind mai familiarizat cu AWS decât cu soluțiile HP sau Microsoft.
În cele din urmă, vi se solicită să selectați un nume de domeniu. Rețineți că selectați numai o parte din numele domeniului. După ce faceți upgrade la un nivel plătit, puteți adăuga domenii "reale" la aplicațiile dvs. Dar pentru testare, este bine. M-am dus cu nettutshelloworld.
Apasă pe Creați aplicația butonul și sta înapoi ca AppFog merge în oraș ...
După ce ați terminat totul, sunteți în consola de administrare principală pentru aplicația dvs. Există destul de multe opțiuni disponibile aici, inclusiv capacitatea de a adăuga elemente cum ar fi suportul bazei de date și pachetele de logare. De asemenea, puteți porni, opri și reporni aplicația de aici.
Ca ultim pas, mergeți mai departe și faceți clic pe Vizitați site-ul Live butonul doar pentru a confirma că - da - în aproximativ un minut ați instalat o aplicație Nod pe web fără a sparge o sudoare:
Woot! Ok, deci părțile grele au fost făcute. Cum obținem aplicația noastră pe platforma AppFog? S-ar putea să fi observat un buton "Download Source Code". Asta vă oferă o copie a aplicației "semințe" Node Express, dar dorim să implementăm aplicația noastră. Dacă ați citit articolul meu anterior, vă veți aminti că am ajuns la o aplicație de blog simplu. Avea două vizualizări (o listă de intrări și o anumită intrare) pe baza unei liste statice a datelor de blog. În fișierul zip pe care îl puteți descărca din acel articol, directorul "blog4" este cel cu care voi lucra.
Pentru a implementa codul AppFog, folosiți un program simplu de comandă, af. Acest instrument poate fi instalat pe Windows, OS X și Linux. Instrucțiunile de instalare sunt detaliate aici (https://docs.appfog.com/getting-started/af-cli), dar în esență se reduce la:
gem install af
Odată ce ați instalat, puteți, în cea mai mare parte, aproape să uitați de consola AppFog. Desigur, va trebui să vă întoarceți acolo în cele din urmă, dar pentru site-ul meu de producție l-am folosit rar. Instrumentul af sprijină - în măsura în care vă pot spune - tot ceea ce susține și consola. Pentru a începe, mai întâi trebuie să vă conectați.
Această conectare pare să persiste pentru un timp, dar, în general, întotdeauna mă conectez întotdeauna când încep să lucrez cu aplicația mea. Acum voi trece la dosarul care conține aplicația mea.
Acum, pentru partea răcoroasă. Apăsarea codului la AppFog este la fel de simplă ca și emiterea unei comenzi de actualizare, cum ar fi:
Imaginea de mai sus nu vă oferă o idee despre durata procesului. Fiecare dintre aceste linii au fost scuipate în timp ce s-au întâmplat. În timpul testelor mele, acest proces durează aproximativ 10 secunde. Aplicațiile mele sunt mici, astfel încât kilometrajul dvs. poate varia. În cazul în care sunteți curios, da, cererea mea a fost în jos în timpul acestui proces. În procesul de actualizare de 10 secunde, perioada de downtime a fost de aproximativ 2 secunde. Cred că este bine, dar dacă vă deranjează acest lucru, atunci există o soluție excelentă descrisă pe blogul AppFog: Cum să vă actualizați aplicația AppFog cu timpi de întrerupere ZERO.
A funcționat? Convinge-te singur. Deschideți browserul dvs. la http://nettutshelloworld.aws.af.cm/ și ar trebui să vedeți blogul minunat, dacă static, pe care l-am construit:
Prima dată când am trecut prin acest proces, aproape că am strigat cu bucurie. Nu puteam să cred cât de prost a fost. Pentru mine, aceasta a fost cu adevărat "conexiunea finală" între scrierea aplicațiilor nodului și împărtășirea acestora cu lumea. Desigur, au existat câteva avertismente pe care le-am întâlnit. Primul fiind că, în timp ce aplicația mea a funcționat așa cum este pe AppFog, trebuie să legați portul pe care îl ascultă printr-o variabilă de mediu. A trebuit să schimb această linie:
app.listen (3000);
La acest:
app.listen (process.env.VCAP_APP_PORT || 3000);
Așa cum am spus, aplicația mea a funcționat așa cum este, dar cred că 3000 nu poate fi întotdeauna disponibilă, așa că vrei să te asigură că faci acest lucru minuțios. Dacă utilizați alte servicii, cum ar fi MySQL sau Mongo, atunci va trebui să faceți modificări similare. (Deși în aplicația mea de producție, am încă să actualizez conexiunea Mongo și nu a fost încă o problemă, dar este pe lista mea de a face!)
Deci cum a funcționat pentru mine? În cea mai mare parte - perfectă. Am lansat acum două site-uri pe AppFog, cartea de bucate JavaScript și CajunIpsum. Dacă ar fi trebuit să fac o critică, ar fi fost primul și singurul moment în care trebuia să contactez sprijinul, nu eram mulțumit de cât timp a durat un răspuns. Doar am primit o cerere de asistență până acum, așa că sunt dispus să pariez (sau să sperăm) că a fost o situație neobișnuită.
.