I min tidigare artikel pratade jag om min glädje att upptäcka Express-ramverket. Express är det som får mig att känna att jag verkligen kan bygga något med Node och ha kul att göra det. Och faktiskt - det gjorde jag! Jag byggde några webbappseksempel och hade mycket roligt. Men så småningom bestämde jag mig att det var dags att spänna ner och bli allvarlig. Jag tyckte om Node, jag älskade Express, och om jag verkligen skulle begå mig att lära mig det, varför inte ta det sista steget och faktiskt skapa en verklig webbplats använder den.
En annan sak som jag lärt mig tidigt under min Node Education (Nodacation?) Var att det var en verklig smärta bakom att behöva stoppa och starta om en Node-app. Jag hade stor framgång med hjälp av Nodemon av Remy Sharp. Det kommer att märka uppdateringar till din kod och starta om din nod-app automatiskt.
Det här låter trivialt men jag antar, men för mig var min hela erfarenhet av Node på kommandoraden. Jag skulle helt enkelt springa nod app
och testa bort på port 3000. Jag visste verkligen inte vad det var för att få samma applikation igång på en riktig server och svarade på en domän. I den här artikeln beskriver jag två olika försök som jag gjorde för att flytta en nod-app till produktion. Självklart finns det fler sätt (och leta efter fler artiklar här på Nettuts +!) Så kom ihåg det här är vad jag försökte och hade framgång med.
Min typiska process för att driva upp en ny ColdFusion-webbplats var att helt enkelt driva upp mina filer via FTP och manuellt redigera min Apache
httpd.conf
fil för att lägga till den nya virtuella servern.
En av de saker som jag nämnde i min tidigare artikel är att det mesta av min erfarenhet med utveckling av server-sida involverar Adobe ColdFusion. Om du aldrig har använt det, är en av dess kärnfunktioner att integrera med din webbserver (ungefär som PHP). Vad det betyder är att jag kan berätta för appservern att låta Apache (eller IIS, etc) veta att någon begäran om en fil med en viss tillägg ska överlämnas till ColdFusion-servern.
Självklart är noden lite annorlunda - du tar över huvud taget rollen som en webbserver redan. Så jag var förlorad om hur jag skulle ta en nod-app och publicera den på min befintliga produktionsserver. Min typiska process för att driva upp en ny ColdFusion-webbplats var att helt enkelt driva upp mina filer via FTP och manuellt redigera min Apache httpd.conf
fil för att lägga till den nya virtuella servern. (Om jag använde IIS skulle det vara nästan detsamma - förutom att jag skulle använda sitt grafiska verktyg istället.)
Jag började med Googling på ämnet och fann en hel del svar. Den som verkligen hjälpte mest var en artikel av Davy Brion, "Hosting a Node.js Site Through Apache". (För en titt på hur det här kan göras med IIS, se Scott Hanselmans fördjupade artikel.) Hans artikel bryter ner den till två aspekter: Se till att ditt Node-skript körs när servern stöter upp och konfigurerar Apache. Jag ignorerade script startup aspekt som hans lösning involverade Linux och min produktionsserver används Windows. (Jag är en stor OS X-fan men av någon anledning har jag alltid känt mig mer bekväm värd på Windows. Vet inte varför, men det fungerar för mig. I huvudsak kommer hans lösning att ha Apache-proxys begäran (tillbaka och framåt) mellan sig själv och din nodprogram. Här är ett exempel som jag använde för testning:
Servernamn nodetest.dev ProxyRequests Off ProxyPass / http://127.0.0.1:3000/ ProxyPassReverse / http://127.0.0.1:3000/
Observera att detta är något annorlunda än Davys exempel. Du vill se till att du har aktiverat mod_proxy
och mod_proxy_http
vilket borde vara så enkelt som att de inte kommenteras i din konf fil. Slutligen startade jag om Apache och lade till en post till min lokala värdfil för domänen jag angav ovan. Och det fungerade!
Nu, medan detta fungerade, ska jag påpeka att många av resultaten du kommer att få från Googling om detta ämne kommer att diskutera hur folk inte tycker att det här är en väldigt effektiv lösning. För att vara ärlig väntade jag mig att vara värd för en webbplats som i bästa fall skulle få tusen eller så träffar om dagen, så det handlade inte riktigt om mig. Vad gjorde mig om att installera min app så att den startade automatiskt och startades på nytt på Windows. Jag såg några lösningar, men innan jag drog pluggen och lanserade min sida bestämde jag mig för att gräva lite och se om ett annat alternativ kan fungera bättre för mig.
Jag upptäckte AppFog efter att ha läst om det från min kollega. AppFog är en molnbaserad tjänst (vad är inte dessa dagar) som gör det enkelt att vara värd för applikationer med olika populära motorer. Från PHP till Grails to Ruby och - naturligtvis - Node. Tillsammans med stöd för olika motorer integreras det också bra med olika databaser och SCM-leverantörer. Det har bra kommandoradsstöd, men det som verkligen sålde mig var att du kunde testa det gratis. AppFog har en mängd olika servicenivåer, men du kan omedelbart testa med en offentlig, litet fult webbadress. Låt oss ta en titt på hur snabbt du kan börja leva med AppFog.
Först - du vill anmäla dig. När du har slutfört registreringen och verifieringen har du tappat in i AppFogs konsol:
Det finns mycket här att vi inte kommer att täcka i artikeln, men för nu klickar du bara på Apps.
För din första app, slår du bara den glänsande Ny app knapp. Nu har du ett beslut att göra. Vilken av de många startprogrammen kommer du att se din ansökan med? Observera att för varje startprogram kan du faktiskt titta på vilken kod som ska användas för att initiera din applikation. För att vara klar, om du har en befintlig nod-app, som jag gjorde, kommer den kod som används här inte att störa. Du kommer helt enkelt att blåsa bort det senare. Jag har valt Node Express.
Därefter måste du välja hur din ansökan är värd. Jag kommer att vara ärlig här och säga när jag först spelade med AppFog visste jag verkligen inte vad jag skulle välja här. Jag gick med AWS US East eftersom jag var mer bekant med AWS än HP eller Microsofts lösningar.
Slutligen uppmanas du att välja ett domännamn. Observera att du bara väljer en del av domännamnet. När du har uppgraderat till en betald nivå kan du lägga till "riktiga" domäner till dina applikationer. Men för testning är det bra. Jag gick med nettutshelloworld.
Klicka på Skapa app knappen och stå tillbaka när AppFog går till stan ...
När allt är klart, har du tappat in i huvudadministrationskonsolen för din ansökan. Det finns många alternativ tillgängliga här, inklusive möjligheten att lägga till saker som databasstöd och loggningspaket. Du kan också starta, stoppa och starta om din ansökan härifrån.
Som ett sista steg, fortsätt och klicka på Besök Live Site knapp bara för att bekräfta det - ja - om ungefär en minut har du installerat en nod-app på webben utan att svettas:
Woot! Ok, så de hårda delarna gjort. Hur får vi vår applikation på AppFog-plattformen? Du kanske har märkt en "Download Source Code" -knapp. Det ger dig en kopia av "frö" Node Express-applikationen, men vi vill istället distribuera vår ansökan. Om du läser min tidigare artikel kommer du ihåg att vi slutade med en enkel bloggapplikation. Den hade två visningar (en lista över poster och en viss post) baserat på en statisk lista över bloggdata. I den zip-fil som du kan hämta från den artikeln är mappen "blog4" den jag ska jobba med.
För att distribuera kod till AppFog använder du ett enkelt kommandoradsprogram, af. Detta verktyg kan installeras på Windows, OS X och Linux. Installationsanvisningarna är detaljerad här (https://docs.appfog.com/getting-started/af-cli) men i huvudsak köljer den till:
gem installation av
När du har installerats kan du - för det mesta - nästan glömma AppFog-konsolen. Visst måste du gå tillbaka dit så småningom, men för min produktionsplats har jag använt det sällan. Af-verktyget stöder - så långt jag kan säga - allt konsolen stöder också. För att komma igång måste du först logga in.
Denna inloggning verkar fortsätta ett tag men i allmänhet loggar jag alltid in först när jag börjar jobba med min ansökan. Nu ska jag byta till mappen som innehåller min ansökan.
Nu för den snygga delen. Att kasta din kod till AppFog är lika enkelt som att utfärda ett uppdateringskommando, som så:
Skärmbilden ovan ger dig inte en uppfattning om hur lång tid processen tar. Var och en av de här linjerna spöts ut när de hände. I testningen tar denna process cirka 10 sekunder. Mina applikationer är små så din körsträcka kan variera. Om du är nyfiken, ja, min ansökan var nere under denna process. I den 10 sekundära uppdateringsprocessen uppgick nedetiden till cirka 2 sekunder. Jag tycker att det är bra, men om det här buggar dig, så finns det en utmärkt lösning som beskrivs på AppFog-bloggen: Hur uppdaterar du AppFog-appen med NUER nedetid.
Fungerade det? Se efter själv. Öppna din webbläsare till http://nettutshelloworld.aws.af.cm/ och du bör se den underbara, om den statiska bloggen jag byggde:
Första gången jag gick igenom denna process skrek jag nästan i glädje. Jag kunde inte tro hur darn enkelt det var. För mig var det verkligen den "slutliga anslutningen" mellan att skriva Node-applikationer och faktiskt dela dem med världen. Självklart fanns det några försiktighetsåtgärder som jag stötte på. Den första var att medan min ansökan fungerade som på AppFog, ska du binda porten den lyssnar till via en miljövariabel. Så jag var tvungen att ändra den här raden:
app.listen (3000);
Till detta:
app.listen (process.env.VCAP_APP_PORT || 3000);
Som jag sa, min ansökan fungerade som det är, men jag antar att 3000 kanske inte alltid är tillgänglig, så du vill se till att du gör den här lilla tweak. Om du använder andra tjänster, som MySQL eller Mongo, måste du göra liknande ändringar. (Även om jag i min produktionsapplikation har uppdaterat Mongo-anslutningen och det har inte varit något problem ännu, men det är på min lista!)
Så hur har det fungerat för mig? För det mesta - perfekt. Jag har nu lanserat två sidor på AppFog, JavaScript Cookbook och CajunIpsum. Om jag var tvungen att göra en kritik skulle det vara att den första och enda gången jag var tvungen att kontakta support var jag inte nöjd med hur lång tid det tog att få svar. Jag har bara haft en stödförfrågan hittills, så jag är villig att satsa (eller hoppas) att det var en ovanlig situation.
.