In mijn vorige artikel sprak ik over mijn vreugde om het Express-raamwerk te ontdekken. Express geeft mij het gevoel dat ik echt iets met Node kan bouwen en het leuk kan vinden om het te doen. En feitelijk - dat deed ik! Ik heb wat voorbeeldweb-apps gebouwd en veel plezier gehad. Maar uiteindelijk besloot ik dat het tijd was om te slopen en serieus te worden. Ik vond Knoop leuk, ik hield van Express, en als ik me echt zou gaan inzetten om het te leren, waarom dan niet de laatste stap zetten en eigenlijk een echt website die het gebruikt.
Iets anders dat ik al vroeg tijdens mijn Node-educatie (Nodacation?) Leerde, was dat het stoppen met en opnieuw starten van een Node-app een echte pijn in de rug was. Ik had veel succes met Nodemon van Remy Sharp. Het zal updates van uw code opmerken en uw Node-app automatisch opnieuw opstarten.
Dit klinkt misschien triviaal, maar voor mij was mijn hele ervaring met Node aan de commandoregel. Ik zou gewoon vluchten knooppunt app
en test weg op poort 3000. Ik wist echt niet wat het betekende om diezelfde applicatie op een echte server te laten draaien en op een domein te reageren. In dit artikel beschrijf ik twee verschillende pogingen die ik heb gedaan om een Node-app in productie te brengen. Uiteraard zijn er meer manieren (en kijk hier voor meer artikelen op Nettuts +!) Dus hou in gedachten dat dit is wat ik heb geprobeerd en succes had met.
Mijn typische proces om een nieuwe ColdFusion-site op te zetten, was om mijn bestanden eenvoudig via FTP op te pushen en mijn Apache handmatig te bewerken
httpd.conf
bestand om de nieuwe virtuele server toe te voegen.
Een van de dingen die ik in mijn vorige artikel noemde, is dat Adobe ColdFusion het grootste deel van mijn ervaring met server-side ontwikkeling omvat. Als je het nog nooit hebt gebruikt, is een van de belangrijkste functies om te integreren met je webserver (net als PHP). Wat dat betekent is dat ik de app-server kan vertellen dat Apache (of IIS, enz.) Weet dat elke aanvraag voor een bestand van een bepaalde extensie moet worden doorgegeven aan de ColdFusion-server.
Natuurlijk is Node een beetje anders - je neemt in feite de rol van een webserver al over. Dus ik wist niet hoe ik een Node-app zou nemen en deze op mijn bestaande productieserver zou publiceren. Mijn typische proces om een nieuwe ColdFusion-site op te zetten, was om mijn bestanden eenvoudig via FTP op te pushen en mijn Apache handmatig te bewerken httpd.conf
bestand om de nieuwe virtuele server toe te voegen. (Als ik IIS zou gebruiken zou het vrijwel hetzelfde zijn - behalve dat ik hun grafische tool zou gebruiken.)
Ik begon met Googelen over het onderwerp en vond nogal wat reacties. Degene die echt het meest heeft geholpen, was een artikel van Davy Brion, "Hosting a Node.js Site via Apache". (Zie voor een blik op hoe dit met IIS kan worden gedaan, het diepgaande artikel van Scott Hanselman.) Zijn artikel verdeelt het in twee aspecten - ervoor zorgen dat uw Node-script wordt uitgevoerd wanneer de server opstart en Apache configureert. Ik negeerde het opstarten van het script omdat zijn oplossing betrekking had op Linux en mijn productieserver op Windows. (Ik ben een grote OS X-fan, maar om een of andere reden voelde ik me altijd comfortabeler als host voor Windows. Ik weet niet waarom, maar het werkt voor mij. In wezen komt zijn oplossing neer op het hebben van Apache-proxy-verzoeken (terug en weer) tussen zichzelf en uw Node-toepassing. Hier is een voorbeeld dat ik gebruikte om te testen:
ServerName nodetest.dev ProxyRequests Off ProxyPass / http://127.0.0.1:3000/ ProxyPassReverse / http://127.0.0.1:3000/
Merk op dat dit iets anders is dan Davy's voorbeeld. U wilt ervoor zorgen dat u ingeschakeld bent mod_proxy
en mod_proxy_http
wat net zo eenvoudig moet zijn als ervoor zorgen dat ze niet worden becommentarieerd in uw conf file. Ten slotte heb ik Apache opnieuw gestart en een vermelding toegevoegd aan mijn lokale hosts-bestand voor het domein dat ik hierboven heb gespecificeerd. En het werkte!
Hoewel dit werkte, wil ik u erop wijzen dat veel van de resultaten die u van Googlen over dit onderwerp zult krijgen, zullen bespreken hoe mensen dit niet als een zeer performante oplossing beschouwen. Om eerlijk te zijn, verwachtte ik een site te hosten die - op zijn best - een duizendtal hits per dag zou krijgen, dus het interesseerde me niet echt. Wat me echter zorgen baarde, was het instellen van mijn app, zodat deze automatisch startte en herstartte onder Windows. Ik zag wel wat oplossingen, maar voordat ik de stekker uittrok en mijn site lanceerde, besloot ik wat rond te kijken en te kijken of een andere optie voor mij beter zou werken.
Ik ontdekte AppFog na het lezen ervan van een collega van mij. AppFog is een op de cloud gebaseerde service (wat tegenwoordig niet het geval is) waardoor het eenvoudig is om applicaties te hosten met behulp van een verscheidenheid aan populaire engines. Van PHP tot Grails tot Ruby en - natuurlijk - Node. Samen met ondersteuning voor verschillende engines, kan het ook goed worden geïntegreerd met verschillende databases en SCM-providers. Het heeft geweldige ondersteuning via de commandoregel, maar wat me echt verkocht, was dat je het gratis kon testen. AppFog heeft verschillende serviceniveaus, maar u kunt meteen gratis een openbare, enigszins lelijke URL testen. Laten we eens kijken hoe snel je live kunt gaan met AppFog.
Eerst - u wilt zich aanmelden. Nadat u de registratie en verificatie hebt voltooid, wordt u naar de console van AppFog gebracht:
Er is hier veel dat we niet in het artikel zullen behandelen, maar voor nu, klik gewoon op Apps.
Voor je eerste app, klik je gewoon op het glimmende Nieuwe app knop. Nu moet je beslissen. Met welke van de vele startersapps ziet u uw applicatie? Merk op dat u voor elk van de startersapps daadwerkelijk kunt bekijken welke code zal worden gebruikt om uw toepassing te initialiseren. Voor de duidelijkheid: als je een bestaande Node-app hebt, zoals ik deed, zal de hier gebruikte code niet interfereren. Je zult het later gewoon wegblazen. Ik heb Node Express geselecteerd.
Vervolgens moet je selecteren hoe je app wordt gehost. Ik zal hier eerlijk zijn en zeggen dat toen ik voor het eerst met AppFog speelde, ik echt niet wist wat ik hier moest selecteren. Ik ging met AWS US East, omdat ik meer bekend was met AWS dan met oplossingen van HP of Microsoft.
Ten slotte wordt u gevraagd om een domeinnaam te selecteren. Merk op dat u alleen een deel van de domeinnaam selecteert. Zodra u een upgrade uitvoert naar een betaald niveau, kunt u 'echte' domeinen toevoegen aan uw applicaties. Maar voor testen is dit prima. Ik ging met nettutshelloworld.
Klik op de Maak een app knop en ga terug als AppFog naar de stad gaat ...
Nadat alles is gedaan, wordt u naar de hoofdconsole van het beheer van uw toepassing verwezen. Er zijn nogal wat opties beschikbaar, waaronder de mogelijkheid om dingen toe te voegen, zoals databaseondersteuning en logboekregistratie. U kunt uw toepassing ook vanaf hier starten, stoppen en opnieuw starten.
Als laatste stap, ga je gang en klik je op de Bezoek Live Site knop alleen om te bevestigen dat - ja - in ongeveer een minuut tijd dat u een Node-app op het web hebt geïmplementeerd zonder zweten:
Woot! Ok, dus de harde delen gedaan. Hoe krijgen we onze applicatie op het AppFog-platform? U hebt misschien een knop "Download source code" opgemerkt. Dat geeft u een kopie van de "seed" Node Express-toepassing, maar we willen onze applicatie in plaats daarvan implementeren. Als je mijn vorige artikel leest, weet je nog dat we een eenvoudige blogtoepassing hebben gekregen. Er waren twee weergaven (een lijst met items en een bepaald item) op basis van een statische lijst met bloggegevens. In het zipbestand dat u uit dat artikel kunt downloaden, is de map "blog4" waarmee ik zal werken.
Als u code wilt toepassen op AppFog, maakt u gebruik van een eenvoudig opdrachtregelprogramma, af. Deze tool kan worden geïnstalleerd op Windows, OS X en Linux. Installatie-instructies worden hier gedetailleerd beschreven (https://docs.appfog.com/getting-started/af-cli) maar het komt in feite neer op:
gem install af
Als je eenmaal een installatie hebt gedaan, kun je - grotendeels - de AppFog-console bijna vergeten. Natuurlijk moet je daar uiteindelijk wel terugkomen, maar voor mijn productiesite heb ik het zelden gebruikt. De AF-tool ondersteunt - voor zover ik weet - alles wat de console ondersteunt. Om te beginnen, moet je eerst inloggen.
Deze login lijkt een tijdje aan te houden, maar over het algemeen log ik altijd eerst in als ik met mijn applicatie begin te werken. Nu ga ik overschakelen naar de map met mijn applicatie.
Nu voor het koele deel. Uw code naar AppFog verplaatsen is net zo eenvoudig als het geven van een update-opdracht, zoals:
Het screenshot hierboven geeft je niet echt een idee van hoe lang het proces duurt. Elk van die lijnen werd uitgespuugd toen ze gebeurden. In mijn testen duurt dit proces ongeveer 10 seconden. Mijn applicaties zijn klein, dus je kilometers kunnen variëren. In het geval je nieuwsgierig bent, ja, mijn applicatie was down tijdens dit proces. Tijdens het updateproces van 10 seconden bedroeg de downtime ongeveer 2 seconden. Ik denk dat dat goed is, maar als dit je frustreert, dan is er een uitstekende oplossing beschreven op de AppFog-blog: Hoe je AppFog-app bij te werken met ZERO-downtime.
Werkte het? Kijk zelf maar. Open uw browser voor http://nettutshelloworld.aws.af.cm/ en u zou de prachtige, als statische blog die ik gebouwd had moeten zien:
De eerste keer dat ik dit proces doormaakte, schreeuwde ik bijna van vreugde. Ik kon niet geloven hoe stom eenvoudig het was. Voor mij was dit echt de "laatste verbinding" tussen het schrijven van Node-applicaties en het daadwerkelijk delen ervan met de wereld. Natuurlijk waren er een paar waarschuwingen die ik tegenkwam. De eerste is dat terwijl mijn applicatie werkte zoals het is op AppFog, je verondersteld wordt de poort te binden waarnaar het luistert via een omgevingsvariabele. Dus ik moest deze regel wijzigen:
app.listen (3000);
Hiernaar:
app.listen (process.env.VCAP_APP_PORT || 3000);
Zoals ik al zei, mijn applicatie werkte zoals het was, maar ik vermoed dat 3000 misschien niet altijd beschikbaar zijn, dus je wilt ervoor zorgen dat je deze kleine aanpassing maakt. Als u gebruikmaakt van andere services, zoals MySQL of Mongo, moet u vergelijkbare wijzigingen aanbrengen. (Hoewel ik in mijn productieapplicatie de Mongo-verbinding nog moet bijwerken en dit nog geen probleem is geweest, staat het wel op mijn takenlijst!)
Dus hoe is het voor mij gewerkt? Grotendeels - perfect. Ik heb nu twee sites gelanceerd op AppFog, het JavaScript Cookbook en CajunIpsum. Als ik één kritiek zou moeten maken, zou het zijn dat de eerste - en enige - tijd dat ik contact moest opnemen met ondersteuning, ik niet blij was met hoe lang het duurde om een reactie te krijgen. Ik heb tot dusverre maar één ondersteuningsverzoek gehad, dus ik durf te wedden (of hoop) dat het een ongebruikelijke situatie was.
.