Kommer til å leve med knutepunkt

I min forrige artikkel snakket jeg om min glede for å oppdage Express-rammen. Express er det som får meg til å føle at jeg virkelig kan bygge noe med Node og ha det gøy å gjøre det. Og faktisk - det gjorde jeg! Jeg bygde noen eksempler på webapper og hadde mye moro. Men til slutt bestemte jeg meg for at det var på tide å spenne og bli seriøs. Jeg likte Node, jeg elsket Express, og hvis jeg virkelig skulle forplikte seg til å lære det, hvorfor ikke ta det siste skrittet og faktisk lage en ekte nettside ved hjelp av den.

En annen ting jeg lærte tidlig på under Node-utdanningen min (Nodacation?) Var at å måtte stoppe og starte en Node-app var en ekte smerte på baksiden. Jeg hadde stor suksess ved å bruke Nodemon av Remy Sharp. Det vil legge merke til oppdateringer til koden din og starte din Nod-app automatisk.

Dette høres trivielt ut, men for meg var hele min erfaring med Node på kommandolinjen. Jeg ville bare kjøre node app og test bort på port 3000. Jeg visste virkelig ikke hva det gjaldt for å få den samme applikasjonen oppe og går på en ekte server og svare på et domene. I denne artikkelen skal jeg beskrive to forskjellige forsøk som jeg gjorde for å flytte en knuteprogram til produksjon. Tydeligvis er det flere måter (og se etter flere artikler her på Nettuts +!) Så husk dette er det jeg prøvde og hadde suksess med.


Forsøk One: Apache FTW!

Min typiske prosess for å skape et nytt ColdFusion-nettsted var å bare skyve opp filene mine via FTP og redigere Apache manuelt httpd.conf fil for å legge til den nye virtuelle serveren.

En av tingene jeg nevnte i min forrige artikkel er at det meste av min erfaring med server-side utvikling innebærer Adobe ColdFusion. Hvis du aldri har brukt det, er en av kjernefunksjonene å integrere med webserveren din (mye som PHP). Hva det betyr er at jeg kan fortelle appserveren å la Apache (eller IIS, etc) vite at enhver forespørsel om en fil med en bestemt utvidelse skal leveres til ColdFusion-serveren.

Tydeligvis er Node litt annerledes - du tar i hovedsak en rolle som en webserver allerede. Så jeg hadde et tap på hvordan jeg skulle ta en Node-app og publisere den på min eksisterende produksjonsserver. Min typiske prosess for å skape et nytt ColdFusion-nettsted var å bare skyve opp filene mine via FTP og redigere Apache manuelt httpd.conf fil for å legge til den nye virtuelle serveren. (Hvis jeg brukte IIS, ville det være nesten det samme - bortsett fra at jeg ville bruke det grafiske verktøyet i stedet.)

Jeg begynte med Googling på emnet og fant ganske mange svar. Den som virkelig hjalp mest, var en artikkel av Davy Brion, "Hosting et Node.js-nettsted gjennom Apache". (For en titt på hvordan dette kan gjøres med IIS, se Scott Hanselmans grundige artikkel.) Hans artikkel bryter den ned i to aspekter - slik at node-skriptet ditt løp når serveren starter opp og konfigurerer Apache. Jeg ignorert oppstartsprosessen for scriptet da hans løsning innebar Linux og min produksjonsserver brukte Windows. (Jeg er en stor OS X-fan, men av en eller annen grunn har jeg alltid følt seg mer komfortabel hosting på Windows. Vet ikke hvorfor, men det fungerer for meg. I hovedsak kommer hans løsning ned til å ha Apache-proxy-forespørsler (tilbake og fremover) mellom seg selv og din nodeprogram. Her er et eksempel jeg brukte til testing:

  Servernavn nodetest.dev ProxyRequests Off ProxyPass / http://127.0.0.1:3000/ ProxyPassReverse / http://127.0.0.1:3000/ 

Merk at dette er litt annerledes enn Davys eksempel. Du vil forsikre deg om at du har aktivert mod_proxy og mod_proxy_http som bør være så enkelt som å sikre at de ikke kommenteres i konf filen din. Endelig startet jeg på nytt Apache og la en oppføring til min lokale vertsfil for domenet jeg spesifiserte ovenfor. Og det virket!

Nå, mens dette fungerte, vil jeg påpeke at mange av resultatene du får fra Googling om dette emnet, vil diskutere hvordan folk ikke tror at dette er en svært effektiv løsning. For å være ærlig, ventet jeg å være vert for et nettsted som i beste fall vil få tusen eller så treff om dagen, så det gjorde egentlig ikke noe for meg. Det som bekymret meg var imidlertid å sette opp appen min, slik at den startet automatisk og startet på nytt på Windows. Jeg så noen løsninger, men før jeg dro pluggen og lanserte nettstedet mitt bestemte jeg meg for å grave rundt litt og se om et annet alternativ kan fungere bedre for meg.


Forsøk to: Oppdage AppFog


Jeg oppdaget AppFog etter å ha lest om det fra en kollega av meg. AppFog er en skybasert tjeneste (det er ikke i disse dager) som gjør det enkelt å være vert for applikasjoner ved hjelp av en rekke populære motorer. Fra PHP til Grails to Ruby og - selvfølgelig - Node. Sammen med støtte for ulike motorer, integrerer den også godt med ulike databaser og SCM-leverandører. Den har stor kommandolinjestøtte, men det som virkelig solgte meg var at du kunne teste det gratis. AppFog har en rekke servicenivåer, men du kan umiddelbart teste med en offentlig, noe stygg URL. La oss se på hvor raskt du kan gå live ved hjelp av AppFog.

Først - du vil registrere deg. Når du har fullført registreringen og bekreftelsen, dro du inn i AppFogs konsoll:


Det er mye her at vi ikke vil dekke i artikkelen, men for nå, bare klikk på Apps.


For din første app, bare slå den skinnende Ny app knapp. Nå har du en beslutning om å gjøre. Hvilken av de mange startprogrammene vil du se søknaden din med? Merk at for hver av startprogrammer kan du faktisk se hvilken kode som skal brukes til å initialisere applikasjonen din. For å være klar, hvis du har en eksisterende Node-app, som jeg gjorde, vil koden som brukes her ikke forstyrre. Du vil bare blåse den bort senere. Jeg valgte Node Express.


Deretter må du velge hvordan søknaden din er vert. Jeg vil være ærlig her og si når jeg først spilte med AppFog, visste jeg egentlig ikke hva jeg skulle velge her. Jeg gikk med AWS US East, da jeg var mer kjent med AWS enn HP eller Microsofts løsninger.


Endelig blir du bedt om å velge et domenenavn. Merk at du bare velger en del av domenenavnet. Når du har oppgradert til et betalt nivå, kan du legge til "ekte" domener i dine applikasjoner. Men for testing, er dette greit. Jeg gikk med nettutshelloworld.


Klikk på Opprett app knappen og stå tilbake når AppFog går til byen ...


Etter at alt er gjort, har du droppet inn i hovedadministrasjonskonsollen for søknaden din. Det er mange alternativer tilgjengelig her, inkludert muligheten til å legge til ting som databasestøtte og loggpakker. Du kan også starte, stoppe og starte programmet på nytt herfra.


Som et siste skritt, gå videre og klikk på Besøk Live Site knappen bare for å bekrefte det - ja - i løpet av omtrent et minutt har du distribuert en Node-app til nettet uten å svette:


Woot! Ok, så de harde delene ferdig. Hvordan får vi vår applikasjon på AppFog-plattformen? Du har kanskje lagt merke til en "Download Source Code" -knapp. Det gir deg en kopi av "Frø" Node Express-programmet, men vi ønsker å distribuere applikasjonen vår i stedet. Hvis du leser min forrige artikkel, husker du at vi endte opp med et enkelt bloggprogram. Den hadde to visninger (en liste over oppføringer og en bestemt oppføring) basert på en statisk liste over bloggdata. I zip-filen som du kan laste ned fra den artikkelen, er mappen "blog4" den jeg skal jobbe med.

For å distribuere kode til AppFog bruker du et enkelt kommandolinjeprogram, av. Dette verktøyet kan installeres på Windows, OS X og Linux. Installasjonsinstruksjoner er detaljert her (https://docs.appfog.com/getting-started/af-cli), men i det hele tatt koker det seg til:

 perle installasjon av

Når du er installert, kan du - for det meste - nesten glemme AppFog-konsollen. Absolutt må du gå tilbake dit til slutt, men for mitt produksjonssted har jeg brukt det sjelden. Av verktøyet støtter - så vidt jeg kan fortelle - alt konsollen støtter også. For å komme i gang må du først logge inn.


Denne innlogging ser ut til å vare lenge, men jeg logger meg først først når jeg begynner å jobbe med søknaden min. Nå skal jeg bytte til mappen som inneholder programmet mitt.


Nå for den kule delen. Å skyve koden til AppFog er like enkelt som å utstede en oppdateringskommando, slik som:


Skjermbildet ovenfor gir deg ikke en ide om hvor lenge prosessen tar. Hver av disse linjene ble spyttet ut som de skjedde. I testen tar denne prosessen ca 10 sekunder. Mine applikasjoner er små, slik at kjørelengde kan variere. Hvis du er nysgjerrig, ja, min søknad var nede i løpet av denne prosessen. I 10 sekunders oppdateringsprosess utgjorde nedetid ca 2 sekunder. Jeg tror det er greit, men hvis dette feiler deg, så er det en utmerket løsning som er beskrevet på AppFog-bloggen: Hvordan oppdaterer du AppFog-appen din med NULL nedetid.

Virket det? Se for deg selv. Åpne nettleseren din til http://nettutshelloworld.aws.af.cm/, og du bør se den fantastiske, hvis statisk, bloggen jeg bygget:



Er det virkelig det?

Første gang jeg gikk gjennom denne prosessen, ropte jeg nesten i glede. Jeg kunne ikke tro hvordan darn enkelt det var. For meg var dette virkelig den "endelige forbindelsen" mellom skrive Node-applikasjoner og faktisk dele dem med verden. Selvfølgelig var det noen advarsler jeg kjørte inn i. Det første var at mens applikasjonen min fungerte som på AppFog, er du ment å binde porten den lytter til via en miljøvariabel. Så måtte jeg endre denne linjen:

 app.listen (3000);

Til dette:

 app.listen (process.env.VCAP_APP_PORT || 3000);

Som jeg sa, jobbet min søknad som det er, men jeg antar at 3000 ikke alltid er tilgjengelig, så du vil sørge for at du gjør denne lille tweak. Hvis du bruker andre tjenester, som MySQL eller Mongo, må du gjøre tilsvarende endringer. (Selv om jeg i min produksjonsapplikasjon har ennå ikke oppdatert Mongo-tilkoblingen, og det har ikke vært et problem ennå. Men det er på min To Do-liste!)

Så hvordan har det virket for meg? For det meste - perfekt. Jeg har nå lansert to nettsteder på AppFog, JavaScript Cookbook og CajunIpsum. Hvis jeg måtte gjøre en kritikk, ville det være at første og eneste gang jeg måtte kontakte støtte, var jeg ikke fornøyd med hvor lang tid det tok å få svar. Jeg har bare hatt en støtteforespørsel så langt, så jeg er villig til å satse (eller håpe) at det var en uvanlig situasjon.

.