Steps to deploy Node.js to VPS using PM2 and Github Actions
git clone https://github.com/danielwetan/node1.git
location: 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 test
location: 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 node1
ssh-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 Key
cat 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:
@BobLamarley I wouldn't want to bore you with too much information, so I will assume that you have done all that is necessary such as generating the ssh key on your server and adding it to your GitHub account, etc...
The last step would be to run this command on your server and trigger another workflow/ deployment.
What this does is that it adds the SSH Keys you've created for specific users to the root user as well.
Let me know if it works!