Deploy nodejs app - quan1997ap/Backend-app-note GitHub Wiki

Hướng dẫn : https://viblo.asia/p/su-dung-pm2-de-deploy-nodejs-application-6J3ZgxWqlmB

1. Cơ bản

1.1 Create demo app - Nodejs

   node app.js

1.2 Install PM2

   npm install pm2 -g

hoặc

   yarn global add pm2

1.3 Cd vào thư mục chứa app.js

   pm2 start app.js

Kết quả

image

2. Các lệnh cơ bản vs PM2

Dừng app

    pm2 stop app.js 

Logs app

   pm2 logs app-name

Monitoring app

   pm2 monit 

Sử dụng thêm htop theo dõi các process real-time

  sudo apt-get install htop
  htop

3. Deployment

Chúng ta cần một file cấu hình chứa các thông tin về các tùy chọn như name, environment, scripts file, logs, node instances... PM2 hỗ trợ chúng ta một file ecosystem.config.js để làm chứa các thông tin này. Chạy command:

  pm2 ecosystem

Kết quả

module.exports = {
    apps: [
        {
            name: 'app-name',
            script: './server/index.js',
            cwd: __dirname, // path-to-project
            instances: 2, // default 1
            autorestart: true,
            exec_mode: 'cluster', // allow scale up app
            env: {
                NODE_ENV: 'production',
            },
        },
    ],

    deploy: {
        production: {
            host: 'xx.yy.zz.vv',
            user: 'deploy',
            ssh_options: [
                'ForwardAgent=yes',
            ],
            ref: 'origin/master',
            repo: 'git@github:repo/repo.git',
            path: '/path/to/project',
            'post-deploy': 'cd /path/to/project && NODE_ENV=production yarn --production=false;yarn build;pm2 startOrReload ecosystem.config.js',
            env: {
                NODE_ENV: 'production',
            },
        },

        staging: {
            user: 'deploy',
            host: 'xx.yy.zz.vv',
            ref: 'origin/develop',
            repo: '[email protected]:repo/repo.git',
            path: '/path/to/project',
            ssh_options: ['PasswordAuthentication=no', 'StrictHostKeyChecking=no'],
            'post-deploy': 'cd /path/to/project && yarn --production=false;yarn build;pm2 startOrReload ecosystem.config.js',
            env: {
                NODE_ENV: 'production',
            },
        },
    },
};

Để start application thì bạn chạy:

   pm2 start ecosystem.config.js

Để deploy application thì lần đầu tiên bạn cần chạy

   pm2 deploy production setup
   // or staging
   pm2 deploy staging setup

Ở lần đầu thì nó sẽ kéo source code của bạn về và setup. Ở các lần tiếp theo thì bạn chỉ cần chạy:

   pm2 deploy production update
   // or
   pm2 deploy staging update