Using Supervisord and GitHub Actions to deploy a Node.js application to DigitalOcean with zero downtime
Tags: devops, cicd, node, cloud
Published: 2023-01-06 19:07:58

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:

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

```

**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:

```bash
mkdir /var/www/node-app
```
Next, create a configuration file for Supervisord in the /etc/supervisor/conf.d directory:

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

```
In the configuration file, add the following:

```bash
[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

```
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:

```yaml
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

```

**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.