Steps to deploy Node.js to VPS using PM2 and Github Actions
git clone https://github.com/danielwetan/node1.gitlocation: node1/.github/workflows/ci.yml
example: https://github.com/danielwetan/node1/blob/master/.github/workflows/ci.yml
# This workflow will do a clean install of node dependencies, 
# build the source code and run tests across different versions of node
# For more information see: 
# https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions
name: Node.js CI
on:
  pull_request:
    branches: [ master ]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    - name: Use Node.js 12
      uses: actions/setup-node@v2
      with:
        node-version: 12.x
    - run: npm i
    - run: npm run build --if-present
    - run: npm testlocation: node1/.github/workflows/cd.yml
example: https://github.com/danielwetan/node1/blob/master/.github/workflows/cd.yml
# This is a basic workflow to help you get started with Actions
name: Node.js CD
# Controls when the action will run. 
on:
  # Triggers the workflow on push or pull request events but only for the master branch
  push:
    branches: [ master ]
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
  # This workflow contains a single job called "build"
  build:
    # The type of runner that the job will run on
    runs-on: ubuntu-latest
    # Steps represent a sequence of tasks that will be executed as part of the job
    steps:
    - name: Deploy using ssh
      uses: appleboy/ssh-action@master
      with:
        host: ${{ secrets.HOST }}
        username: ${{ secrets.USERNAME }}
        key: ${{ secrets.PRIVATE_KEY }}
        port: 22
        script: |
          cd ~/home/danielwetan/apps/node1
          git pull origin master
          git status
          npm install --only=prod
          pm2 restart node1ssh-keygen -t rsa -b 4096 -m PEM -C "github-actions-node1"
# view the key value
cat id_rsa-github-node1.pub # Public Key
cat id_rsa-github-node1 # Private Keycat id_rsa-github-node1.pub
# Copy the output to
vi ~/.ssh/authorized_keys# Type and copy the output
cat ~/.ssh/id_rsa# Github Secret location
Settings -> Secrets -> Actions -> New repository secret
PRIVATE_KEY = "Copy generated private key from vps to github secret"
HOST = "YOUR SERVER ADDRESS, example: 172.41.91.123" 
USERNAME = "YOUR SERVER USERNAME, example: daniel"Reference:

Using password seems deprecated
