Cách thiết lập ứng dụng Node.js để sản xuất với pm2, nginx

Tram Ho

Mở đầu

Bài này mình viết với mục đích để tổng hợp lại kiến thức và bổ sung kĩ thuật liên quan đến server cho bản thân. Thực tế thì có rất nhiều cách để deploy ứng dụng nodejs (express framework), nhưng trong bày này mình sẽ lựa chọn stack capistrano + pm2 + nginx

Init project

Để cho nhanh mình sử dụng express-generator để init project như sau:

Tham khảo: https://expressjs.com/en/starter/generator.html .

Sau khi đã init và start ứng dụng thành công , bước tiếp theo là cài đặt capistrano cho việc tự động depoly code lên server

Capistrano (local side)

Prerequisite

Trước tiên các bạn cần phải cài đặt ruby (rbenv or rvm). Sau đó bạn có thể init Gemfile bằng câu lệnh bundle init

Edit Gemfile như dưới đây, sau đó chạy bundle install để cài đặt gem.

Generate file config với câu lệnh $ cap install. Trong Capfile bỏ comment dòng dưới đây

Việc tiếp theo là sửa file config/deploy.rb

Tuỳ thuộc vào môi trường ( trong trường hợp này là production). Mở file config/deploy/production.rb

EC2 (server side)

Prerequisite

Cần cài đặt các package sau

  • Nginx

  • Node (& yarn or npm)

Cài đặt nvm

Sửa file .bashrc như dưới, sau đó chạy lệnh source .bashrc

Cuối cùng

  • PM2

App preparation

Các bạn cần tạo thư mục có đường dẫn như sau /var/www/nodejs_skeleton. Cấp quyền cho thư mục:

Trong nodejs_skeleton directory tạo thư mục sau để chuẩn bị cho việc deploy bằng capistrano

Configuration

Nginx

Tạo file config như sau sudo vi /etc/nginx/conf.d/nodejs_skeleton.conf

Tiếp theo các bạn cần sửa file nginx.config sudo vi /etc/nginx/nginx.conf

Kiểm tra file nginx đã hoạt động chính xác chưa

Lệnh start/stop/restart service của nginx như sau

PM2

Tạo thư mục client_deploy rồi tạo file config cho PM2 như dưới (hoặc đặt trong thư mục shared) với cluster 2 instance

Init.d Script

  • Tạo 1 Script tên nodejs_skeleton như dưới trong /etc/init.d/nodejs_skeleton
  • Cấp quyền: sudo chmod 755 /etc/init.d/nodejs_skeleton

Commands

Cũng giống như các câu lệnh của webserver như nginx. Khi bị lỗi cũng có thể stop/start hoặc restart.

  • Start PM2

  • Stop PM2

  • Restart PM2

  • Check Status

Deploy

Chia sẻ bài viết ngay

Nguồn bài viết : Viblo