DEV Community

Chinonso Amadi
Chinonso Amadi

Posted on

Using Supervisord and GitHub Actions to deploy a Node.js application to DigitalOcean with zero downtime

In this tutorial, we will discuss how to use Supervisord and GitHub Actions to deploy a Node.js application to DigitalOcean with zero downtime. Supervisord is a process manager that can be used to manage multiple processes on a server, such as Node.js applications. GitHub Actions is a powerful tool that allows you to automate tasks, such as building, testing, and deploying code.

Prerequisites

Before you begin, you should have the following:

  • A Node.js application that you want to deploy to DigitalOcean
  • A DigitalOcean account and a Droplet (virtual server) set up
  • A GitHub repository for your Node.js application
  • Git installed on your local machine

Step 1: Install Supervisord on your Droplet

To install Supervisord, you will need to SSH into your Droplet. Once you are logged in, run the following command to install Supervisord:

sudo apt-get update && sudo apt-get install -y supervisor

Enter fullscreen mode Exit fullscreen mode

Step 2: Set up Supervisord to run your Node.js application

Next, you will need to create a configuration file for Supervisord that tells it how to run your Node.js application.

First, create a directory for your application:

mkdir /var/www/node-app
Enter fullscreen mode Exit fullscreen mode

Next, create a configuration file for Supervisord in the /etc/supervisor/conf.d directory:

sudo nano /etc/supervisor/conf.d/node-app.conf

Enter fullscreen mode Exit fullscreen mode

In the configuration file, add the following:

[program:node-app]
command=node /var/www/node-app/index.js
directory=/var/www/node-app
autostart=true
autorestart=true
stderr_logfile=/var/log/node-app/error.log
stdout_logfile=/var/log/node-app/output.log

Enter fullscreen mode Exit fullscreen mode

This configuration file tells Supervisord to run the index.js file in the /var/www/node-app directory and to log any errors or output to the specified log files.

Step 3: Set up GitHub Actions to deploy your Node.js application

Now that Supervisord is set up to run your Node.js application, you can use GitHub Actions to automate the deployment process.

First, create a new workflow file in your repository by creating a new file at .github/workflows/deploy.yml.

In the workflow file, add the following:

name: Deploy
on:
  push:
    branches:
      - master
jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Install dependencies
        run: npm install
      - name: Build
        run: npm run build
      - name: Deploy to DigitalOcean
        uses: appleboy/ssh-action@master
        with:
          host: my-node-app.com
          username: root
          password: ${{ secrets.DIGITALOCEAN_PASSWORD }}
          script: |
            cd /var/www/node-app
            git pull origin master
            supervisorctl

Enter fullscreen mode Exit fullscreen mode

Conclusion

In this tutorial, we discussed how to use Supervisord and GitHub Actions to deploy a Node.js application to DigitalOcean with zero downtime. We installed Supervisord on the Droplet, created a configuration file to run our Node.js application, and set up a GitHub Actions workflow to automate the deployment process. By using Supervisord to manage the processes on the server and GitHub Actions to automate the deployment process, you can ensure that your application is always running smoothly and is easy to update.

Top comments (0)