• Like
[Js hcm] Deploying node.js with Forever.js and nginx
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

[Js hcm] Deploying node.js with Forever.js and nginx

  • 3,738 views
Published

You have a project in Node.js and you wonder how to make it run on your server? A real "production" server? …

You have a project in Node.js and you wonder how to make it run on your server? A real "production" server?

You have some application and you want to ensure that it will run - without downtime, that you can easily update - without downtime, and that you can scale it over multiple webservices as a load Balancing?

We will cover that by using:
- Nginx
- Forever.js
- Node.js

Published in Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
3,738
On SlideShare
0
From Embeds
0
Number of Embeds
1

Actions

Shares
Downloads
36
Comments
0
Likes
9

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Deploying Node.js With Forever and Nginx “a no-downtime tale”
  • 2. Node.js •  Runs as a standalone server, listen its own •  •  port Just need to proxy the request to Node.js and relay the result back Installing is easy (let's try in MacOS/Ubuntu) o  sudo apt-get update sudo apt-get install python-software-properties python g++ make sudo add-apt-repository ppa:chris-lea/node.js sudo apt-get update sudo apt-get install nodejs
  • 3. Sample server with Compound.js •  sudo npm install compound -g •  compound init todo-list-app •  cd todo-list-app && npm install How to start the project: node . • 
  • 4. Making Node.js run "forever" •  Using Forever.js •  Forever.js is a "daemonized version" of your •  Node app. Will check if the app is killed and re-spawn it
  • 5. Forever.js setup and commands •  It's an npm package. o  sudo npm install forever -g o  o  o  o  start - Start SCRIPT as a daemon stop - Stop the daemon SCRIPT stopall - Stop all running forever scripts restart - Restart the daemon SCRIPT •  Main commands o  restartall - Restart all running forever scripts o  list - List all running forever script
  • 6. Let's try it! •  Identify the script to run o  o  Inspecting package.json is often a good idea Example with compound.js §  , "main": "server.js" o  Command: "node ." loads package.json, finds "main" script and executes it. •  Run on Forever: o  forever start /full-path-to-script/server.js
  • 7. Ok, a bit more of Forever.js (featuring up and inspecting) •  How to keep the log o  o  -l LOGFILE - Logs the forever output to LOGFILE -o OUTFILE - Logs stdout from child script to OUTFILE o  -e ERRFILE - Logs stderr from child script to ERRFILE o  -p PATH •  Some other useful commands §  o  - Base path for all forever related files (pid files, etc.) To make your line shorter -c COMMAND - COMMAND to execute (defaults to node) §  For when you have "more" than just "node" to run (server init params for example) •  List running processes o  forever list (easy, right?)
  • 8. Now, the cherry, "no downtime" •  forever restart /full-path-to-script/script •  If you're not sure about the script path, just do "forever list" and take it up from there
  • 9. Now we're all set, let's get serious •  Nginx o  Awesome Event-driven Asynchronous 10k-friendly o  sudo apt-get install nginx o  o  o  •  Not quite hard to setup (ubuntu)
  • 10. Configure Nginx •  Sites management o  o  o  o  o  Config files are best kept per-site 1 file per site in §  /etc/nginx/sites-available/ (standard) To activate a site, make a symbolic link to §  /etc/nginx/sites-enabled/ Restart gracefully §  sudo service nginx reload Done.
  • 11. Let's configure our proxy •  cd /etc/nginx/sites-available/ •  sudo view compoundapp.com o  (name it based on your FQDN as a best practice) •  Create a proxy block upstream node_boxes { server 127.0.0.1:3000; } Proxy Will be used as the relay o  • 
  • 12. Architecture •  •  •  Traffic Traffic goes through the load balancer nginx redirects to the "upstream" node_box Want to scale? Just add more boxes and update nginx config. nginx load balancer Node.js box Node.js box Node.js box Node.js box
  • 13. Configs: Load balancer server { # server_name yourdomain.com yourdomain; # set the domain name to bind to access_log /var/log/nginx/compountapp.com_access.log; error_log /var/log/nginx/ compountapp.com_error.log; # reroute all and pass the correct headers location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_set_header X-NginX-Proxy true; # then proxy the request proxy_pass http://node_boxes/; proxy_redirect off; } }
  • 14. Load balancing? o  o  upstream node_boxes { server 50.20.14.8:3000; server 50.20.14.9:3001; server 50.20.14.10:3002; server 50.20.14.11:3000; } sudo service nginx reload
  • 15. What's next? •  WebSockets •  Load balancing •  What about the Databases/services? •  Centralize your logs •  Performance analysis •  Cloud
  • 16. Resources •  http://stackoverflow.com/a/5015178/519649 o  •  •  Config node.js as a proxy https://github.com/nodejitsu/forever https://github.com/joyent/node/wiki/Installing-Node.js-via-package-manager o  Install Node.js via package manager
  • 17. About us Author: Nicolas Embleton Find me at: nicolas.embleton@gmail.com Presentation made for “Javascript Ho Chi Minh City” meetup group You can find us at: •  http://meetup.com/JavaScript-Ho-Chi-Minh-City/ •  https://www.facebook.com/JavaScriptHCMC •  https://plus.google.com/communities/116105314977285194967