Cách thiết lập ứng dụng Node.js để sản xuất trên Ubuntu 14.04
Node.js là một môi trường chạy Javascript open-souce để dễ dàng xây dựng các ứng dụng mạng và phía server . Nền tảng này chạy trên Linux, OS X, FreeBSD và Windows, và các ứng dụng của nó được viết bằng JavaScript. Các ứng dụng Node.js có thể chạy bằng dòng lệnh nhưng ta sẽ hướng dẫn bạn cách chạy chúng dưới dạng dịch vụ, vì vậy chúng sẽ tự động khởi động lại khi khởi động lại hoặc bị lỗi, vì vậy bạn có thể sử dụng chúng trong môi trường production .Trong hướng dẫn này, ta sẽ đề cập đến việc cài đặt môi trường Node.js sẵn sàng production bao gồm hai server Ubuntu 14.04; một server sẽ chạy các ứng dụng Node.js do PM2 quản lý, trong khi server kia sẽ cung cấp cho user quyền truy cập vào ứng dụng thông qua Reverse Proxy Nginx tới server ứng dụng.
Phiên bản CentOS của hướng dẫn này có thể được tìm thấy tại đây .
Yêu cầu
Hướng dẫn này sử dụng hai server Ubuntu 14.04 với mạng riêng (trong cùng một trung tâm dữ liệu). Ta sẽ gọi chúng bằng những cái tên sau:
- ứng dụng : Server nơi ta sẽ cài đặt node.js , ứng dụng Node.js của bạn và PM2
- web : Server nơi ta sẽ cài đặt web server Nginx, server này sẽ hoạt động như một Reverse Proxy cho ứng dụng của bạn. User sẽ truy cập địa chỉ IP công cộng của server này để truy cập ứng dụng Node.js của bạn.
 Có thể sử dụng một  server  duy nhất cho hướng dẫn này, nhưng bạn sẽ phải thực hiện một số thay đổi trong quá trình này. Chỉ cần sử dụng địa chỉ IP localhost, tức là 127.0.0.1 , bất cứ nơi nào địa chỉ IP riêng của  server  ứng dụng được sử dụng.
Dưới đây là sơ đồ cài đặt của bạn sẽ như thế nào sau khi làm theo hướng dẫn này:
 Trước khi bắt đầu hướng dẫn này, bạn nên có một  regular user , không phải root có  quyền  sudo  cấu hình  trên cả hai  server  của bạn – đây là  user  mà bạn nên đăng nhập vào  server   của bạn . Bạn có thể tìm hiểu cách  cấu hình  account   regular user   theo  các bước 1-4 trong hướng dẫn  cài đặt   server  ban đầu của  ta  cho Ubuntu 14.04 .
Nếu bạn muốn có thể truy cập server web của bạn thông qua một domain , thay vì địa chỉ IP công cộng của nó, hãy mua một domain rồi làm theo các hướng dẫn sau:
- Cách cài đặt tên server với DigitalOcean
- Cách trỏ đến server tên DigitalOcean từ các công ty đăng ký domain phổ biến
Hãy bắt đầu bằng cách cài đặt node.js trên server ứng dụng .
Cài đặt Node.js
Ta sẽ cài đặt version LTS mới nhất của Node.js, trên server ứng dụng .
Trên server ứng dụng , hãy cập nhật danh sách gói apt-get bằng lệnh này:
- sudo apt-get update 
Sau đó, sử dụng apt-get để cài đặt gói git , gói npm phụ thuộc vào:
- sudo apt-get install git 
Truy cập trang Download Node.js và tìm liên kết download Linux Binaries (.tar.xz) . Nhấp chuột phải vào nó và sao chép địa chỉ liên kết của nó vào clipboard của bạn. Tại thời điểm viết bài này, bản phát hành LTS mới nhất là 4.2.3 . Nếu bạn muốn cài đặt bản phát hành ổn định mới nhất của Node.js, hãy truy cập trang thích hợp và sao chép liên kết đó.
 Thay đổi folder  chính của bạn và  download  nguồn Node.js bằng wget . Dán liên kết  download  vào vị trí của phần được đánh dấu:
- cd ~ 
- wget https://nodejs.org/dist/v4.2.3/node-v4.2.3-linux-x64.tar.gz 
Bây giờ  extract  repository  tar bạn vừa  download  vào folder  node bằng các lệnh sau:
- mkdir node 
- tar xvf node-v*.tar.?z --strip-components=1 -C ./node 
Nếu bạn muốn xóa repository  Node.js mà bạn đã  download , vì  ta  không cần nó nữa, hãy thay đổi thành folder  chính của bạn và sử dụng lệnh rm này:
- cd ~ 
- rm -rf node-v* 
Tiếp theo,  ta  sẽ  cấu hình  prefix của npm , nơi npm sẽ tạo các  softlink  đến các gói Node đã cài đặt, đến một nơi nào đó mà nó nằm trong đường dẫn mặc định của bạn.  Ta  sẽ đặt nó thành /usr/local bằng lệnh này:
- mkdir node/etc 
- echo 'prefix=/usr/local' > node/etc/npmrc 
Bây giờ  ta  đã sẵn sàng để di chuyển các mã binary  node và npm đến vị trí cài đặt của  ta .  Ta  sẽ chuyển nó vào /opt/node bằng lệnh này:
- sudo mv node /opt/ 
 Đến đây,  bạn  có thể cần  đặt root làm chủ sở hữu của các file :
- sudo chown -R root: /opt/node 
Cuối cùng, hãy tạo các  softlink  của các file  binary  node và npm trong đường dẫn mặc định của bạn.  Ta  sẽ đặt các liên kết trong /usr/local/bin bằng các lệnh sau:
- sudo ln -s /opt/node/bin/node /usr/local/bin/node 
- sudo ln -s /opt/node/bin/npm /usr/local/bin/npm 
Xác minh Node đã được cài đặt bằng cách kiểm tra version của nó bằng lệnh này:
- node -v 
Node.js hiện đã được cài đặt và sẵn sàng chạy ứng dụng! Hãy viết một ứng dụng Node.js.
Tạo ứng dụng Node.js
Bây giờ ta sẽ tạo một ứng dụng Hello World mà chỉ cần trả về “Hello World” cho bất kỳ yêu cầu HTTP nào. Đây là một ứng dụng mẫu sẽ giúp bạn cài đặt Node.js của bạn , bạn có thể thay thế nó bằng ứng dụng của riêng mình – chỉ cần đảm bảo bạn sửa đổi ứng dụng của bạn để lắng nghe các địa chỉ IP và cổng thích hợp.
Bởi vì ta muốn ứng dụng Node.js của bạn phục vụ các yêu cầu đến từ web , server Reverse Proxy của ta , ta sẽ sử dụng network interface riêng của server ứng dụng để giao tiếp giữa các server . Tra cứu địa chỉ mạng riêng của server ứng dụng của bạn.
 Nếu bạn đang sử dụng  server  DigitalOcean làm  server   của bạn , bạn có thể tra cứu địa chỉ IP riêng của  server  thông qua dịch vụ Siêu dữ liệu . Trên  server  ứng dụng , sử dụng lệnh curl để truy xuất địa chỉ IP ngay bây giờ:
- curl -w "\n" http://169.254.169.254/metadata/v1/interfaces/private/0/ipv4/address  
Bạn cần sao chép kết quả (địa chỉ IP riêng), vì nó sẽ được sử dụng để cấu hình ứng dụng Node.js của ta .
Hello World Code
 Tiếp theo, tạo và mở ứng dụng Node.js của bạn để chỉnh sửa. Đối với hướng dẫn này,  ta  sẽ sử dụng vi để chỉnh sửa một ứng dụng mẫu có tên hello.js :
- cd ~ 
- vi hello.js 
Chèn mã sau vào file  và đảm bảo thay thế địa chỉ IP riêng của  server  ứng dụng cho cả hai mục APP_PRIVATE_IP_ADDRESS đánh dấu. Nếu muốn, bạn cũng có thể thay thế cổng được đánh dấu, 8080 , ở cả hai vị trí (hãy đảm bảo sử dụng cổng không phải  administrator , tức là 1024 trở lên):
var http = require('http'); http.createServer(function (req, res) {   res.writeHead(200, {'Content-Type': 'text/plain'});   res.end('Hello World\n'); }).listen(8080, 'APP_PRIVATE_IP_ADDRESS'); console.log('Server running at http://APP_PRIVATE_IP_ADDRESS:8080/'); Bây giờ lưu và thoát.
 Ứng dụng Node.js này chỉ cần lắng nghe địa chỉ IP và cổng được chỉ định và trả về “Hello World” với mã thành công 200 HTTP. Điều này  nghĩa là  ứng dụng chỉ có thể truy cập được từ các  server  trên cùng một mạng riêng, chẳng hạn như  server  web của  ta .
Ứng dụng thử nghiệm (Tùy chọn)
 Nếu bạn muốn kiểm tra xem ứng dụng  của bạn  có hoạt động hay không, hãy chạy lệnh node này trên  server  ứng dụng :
- node hello.js 
Lưu ý: Chạy ứng dụng Node.js theo cách này sẽ chặn các lệnh bổ sung cho đến khi ứng dụng bị tắt bằng cách nhấn CTRL+C
 Để kiểm tra ứng dụng, hãy mở một phiên  terminal  khác và kết nối với  server  web của bạn. Vì  web server  nằm trên cùng một mạng riêng, nên nó có thể truy cập địa chỉ IP riêng của  server  ứng dụng bằng curl . Đảm bảo thay thế bằng địa chỉ IP riêng của  server  ứng dụng cho APP_PRIVATE_IP_ADDRESS và cổng nếu bạn đã thay đổi:
- curl http://APP_PRIVATE_IP_ADDRESS:8080 
Nếu bạn thấy kết quả sau, ứng dụng đang hoạt động bình thường và đang nghe trên địa chỉ IP và cổng thích hợp:
Output:Hello World Nếu bạn không thấy kết quả phù hợp, hãy đảm bảo ứng dụng Node.js của bạn đang chạy và được cấu hình để lắng nghe trên địa chỉ IP và cổng thích hợp.
 Trên  server  ứng dụng , hãy đảm bảo tắt ứng dụng (nếu bạn chưa tắt) bằng cách nhấn CTRL+C
Cài đặt PM2
Bây giờ ta sẽ cài đặt PM2, là một trình quản lý tiến trình cho các ứng dụng Node.js. PM2 cung cấp một cách dễ dàng để quản lý và đa dạng hóa các ứng dụng (chạy chúng như một dịch vụ).
Ta sẽ sử dụng Node Packaged Modules (NPM), về cơ bản là trình quản lý gói cho các module Node cài đặt với Node.js, để cài đặt PM2 trên server ứng dụng của ta . Sử dụng lệnh này để cài đặt PM2:
- sudo npm install pm2 -g 
Quản lý ứng dụng với PM2
PM2 rất đơn giản và dễ sử dụng. Ta sẽ trình bày một vài cách sử dụng cơ bản của PM2.
Bắt đầu ứng dụng
 Điều đầu tiên  bạn cần  làm là sử dụng lệnh pm2 start để chạy ứng dụng của bạn, hello.js , trong nền:
- pm2 start hello.js 
Điều này cũng thêm ứng dụng của bạn vào danh sách tiến trình của PM2, được xuất ra mỗi khi bạn khởi động ứng dụng:
Output:┌──────────┬────┬──────┬──────┬────────┬───────────┬────────┬────────────┬──────────┐ │ App name │ id │ mode │ PID  │ status │ restarted │ uptime │     memory │ watching │ ├──────────┼────┼──────┼──────┼────────┼───────────┼────────┼────────────┼──────────┤ │ hello    │ 0  │ fork │ 5871 │ online │         0 │ 0s     │ 9.012 MB   │ disabled │ └──────────┴────┴──────┴──────┴────────┴───────────┴────────┴────────────┴──────────┘  Như bạn thấy , PM2 tự động gán tên Ứng dụng (dựa trên tên file , không có phần mở rộng .js ) và id PM2. PM2 cũng duy trì các thông tin khác, chẳng hạn như PID của quá trình, trạng thái hiện tại và mức sử dụng bộ nhớ.
 Các ứng dụng đang chạy dưới PM2 sẽ tự động khởi động lại nếu ứng dụng bị treo hoặc  bị dừng , nhưng cần thực hiện thêm một bước để ứng dụng  chạy  khi khởi động hệ thống (khởi động hoặc khởi động lại).  May mắn là  PM2 cung cấp một cách dễ dàng để thực hiện việc này, lệnh con startup .
 Lệnh con startup tạo và cấu hình tập lệnh khởi động để  chạy  PM2 và  các tiến trình được quản lý  của nó khi khởi động  server . Bạn cũng phải chỉ định nền tảng bạn đang chạy, đó là ubuntu , trong trường hợp của  ta :
- pm2 startup ubuntu 
Dòng cuối cùng của kết quả kết quả sẽ bao gồm một lệnh (phải được chạy với các quyền của user siêu cấp) mà bạn phải chạy:
Output:[PM2] You have to run this command as root [PM2] Execute the following command : [PM2] sudo su -c "env PATH=$PATH:/opt/node/bin pm2 startup ubuntu -u sammy --hp /home/sammy" Chạy lệnh đã được tạo (tương tự như kết quả được đánh dấu ở trên) để cài đặt PM2 khởi động khi server khởi động (sử dụng lệnh từ kết quả của bạn ):
-  sudo su -c "env PATH=$PATH:/opt/node/bin pm2 startup ubuntu -u sammy --hp /home/sammy" 
Sử dụng PM2 khác (Tùy chọn)
 PM2 cung cấp nhiều lệnh con cho phép bạn quản lý hoặc tra cứu thông tin về các ứng dụng  của bạn .  Lưu ý  việc chạy pm2 mà không có bất kỳ đối số nào sẽ hiển thị trang trợ giúp, bao gồm cả cách sử dụng ví dụ, trình bày cách sử dụng PM2 chi tiết hơn phần này của hướng dẫn.
 Dừng ứng dụng bằng lệnh này (chỉ định App name hoặc id App name PM2):
- pm2 stop example 
Khởi động lại ứng dụng bằng lệnh này (chỉ định App name hoặc id App name PM2):
- pm2 restart example 
Danh sách các ứng dụng hiện do PM2 quản lý cũng có thể được tra cứu bằng lệnh con list :
- pm2 list 
Có thể tìm thêm thông tin về một ứng dụng cụ thể bằng cách sử dụng lệnh con info (chỉ định tên hoặc id Ứng dụng PM2) ::
- pm2 info example 
Màn trình PM2 có thể được kéo lên với monit subcommand. Điều này hiển thị trạng thái ứng dụng, CPU và sử dụng bộ nhớ:
- pm2 monit 
Bây giờ ứng dụng Node.js của bạn đang chạy và được quản lý bởi PM2, hãy cài đặt Reverse Proxy .
Cài đặt server Reverse Proxy
 Bây giờ ứng dụng của bạn đang chạy và nghe trên một địa chỉ IP riêng, bạn cần  cài đặt  một cách để  user  của bạn truy cập vào nó.  Ta  sẽ  cài đặt   web server  Nginx làm Reverse Proxy  cho mục đích này. Hướng dẫn này sẽ  cài đặt  một  server  Nginx từ đầu. Nếu bạn đã có  cài đặt   server  Nginx, bạn chỉ có thể sao chép khối location vào khối  server  mà bạn chọn (đảm bảo vị trí không xung đột với bất kỳ nội dung hiện có nào trên  web server  của bạn).
Trên server web , hãy cập nhật danh sách gói apt-get bằng lệnh này:
- sudo apt-get update 
Sau đó cài đặt Nginx bằng apt-get:
- sudo apt-get install nginx 
Bây giờ hãy mở file cấu hình khối server mặc định để chỉnh sửa:
- sudo vi /etc/nginx/sites-available/default 
Xóa mọi thứ trong file  và chèn cấu hình sau. Đảm bảo thay thế domain   của bạn  cho chỉ thị server_name (hoặc địa chỉ IP nếu bạn chưa  cài đặt  domain ) và địa chỉ IP riêng của  server  ứng dụng cho APP_PRIVATE_IP_ADDRESS . Ngoài ra, hãy thay đổi cổng ( 8080 ) nếu ứng dụng của bạn được đặt để nghe trên một cổng khác:
server {     listen 80;      server_name example.com;      location / {         proxy_pass http://APP_PRIVATE_IP_ADDRESS:8080;         proxy_http_version 1.1;         proxy_set_header Upgrade $http_upgrade;         proxy_set_header Connection 'upgrade';         proxy_set_header Host $host;         proxy_cache_bypass $http_upgrade;     } } Điều này cấu hình  server  web để phản hồi các yêu cầu tại root  của nó. Giả sử  server  của  ta  có sẵn tại example.com , việc truy cập http://example.com/ thông qua trình duyệt web sẽ gửi yêu cầu đến địa chỉ IP riêng của  server  ứng dụng trên cổng 8080 , sẽ được Node.js nhận và trả lời. ứng dụng.
 Bạn có thể thêm các khối location bổ sung vào cùng một khối  server  để cung cấp quyền truy cập vào các ứng dụng khác trên cùng một  server  web . Ví dụ: nếu bạn cũng đang chạy một ứng dụng Node.js khác trên  server  ứng dụng trên cổng 8081 , bạn có thể thêm khối vị trí này để cho phép truy cập vào nó qua http://example.com/app2 :
    location /app2 {         proxy_pass http://APP_PRIVATE_IP_ADDRESS:8081;         proxy_http_version 1.1;         proxy_set_header Upgrade $http_upgrade;         proxy_set_header Connection 'upgrade';         proxy_set_header Host $host;         proxy_cache_bypass $http_upgrade;     } Khi bạn đã hoàn tất việc thêm các khối vị trí cho các ứng dụng của bạn , hãy lưu và thoát.
Trên server web , khởi động lại Nginx:
- sudo service nginx restart 
Giả sử rằng ứng dụng Node.js của bạn đang chạy và ứng dụng cũng như cấu hình Nginx của bạn chính xác, bạn có thể truy cập ứng dụng của bạn thông qua Reverse Proxy của server web . Hãy dùng thử bằng cách truy cập URL server web của bạn (địa chỉ IP hoặc domain công khai của nó).
Kết luận
Xin chúc mừng! Đến đây bạn có ứng dụng Node.js của bạn đang chạy sau Reverse Proxy Nginx trên server Ubuntu 14.04. Cài đặt Reverse Proxy này đủ linh hoạt để cung cấp cho user của bạn quyền truy cập vào các ứng dụng khác hoặc nội dung web tĩnh mà bạn muốn chia sẻ. Chúc may mắn với sự phát triển Node.js của bạn!
Ngoài ra, nếu bạn đang tìm cách mã hóa đường truyền giữa web server và user của bạn , đây là hướng dẫn sẽ giúp bạn cài đặt hỗ trợ HTTPS (TLS / SSL) .
Các tin liên quan
Cách cài đặt và cấu hình PowerDNS với MariaDB Backend trên Ubuntu 14.042014-12-02
Cách cài đặt và cấu hình Magento trên Ubuntu 14.04
2014-12-02
Cách cài đặt MEAN.JS Stack trên server Ubuntu 14.04
2014-11-26
Cách tăng tốc trang web Drupal 7 của bạn với Varnish 4 trên Ubuntu 14.04 và Debian 7
2014-11-17
Cách nâng cấp Ubuntu 12.04 LTS lên Ubuntu 14.04 LTS
2014-11-17
Các bước được đề xuất bổ sung cho server Ubuntu 14.04 mới
2014-11-04
Cơ bản về quản lý gói Ubuntu và Debian
2014-11-03
Cách quản lý cụm của bạn với Chef và Knife trên Ubuntu
2014-10-31
Cách cài đặt Zentyal trên Ubuntu 14.04
2014-10-29
Cách cài đặt và cấu hình VNC trên Ubuntu 14.04
2014-10-23
 

