Node.js Application Deployment on EC2 with GitHub Actions

Node.js Application Deployment on EC2 with GitHub Actions

Efficiently deploying a Node.js application on Amazon EC2 can be a daunting task, involving numerous steps and potential pitfalls. However, with the power of GitHub Actions, the deployment process can be automated, streamlined, and error-free. In this article, we'll explore how to set up GitHub Actions for deploying a Node.js application on an EC2 instance.

Table of Contents:

  1. Understanding GitHub Actions

  2. Preparing Your Node.js Application

  3. Configuring the EC2 Instance

  4. Creating GitHub Actions Workflow

  5. Implementing Deployment Workflow Steps

  6. Testing and Troubleshooting

1. Understanding GitHub Actions: GitHub Actions is a powerful tool that automates workflows and tasks directly from your GitHub repository. It allows you to create custom workflows triggered by various events, such as code pushes or pull requests. By defining a workflow in a .github/workflows directory, you can automate tasks like building, testing, and deploying your applications.

2. Preparing Your Node.js Application: Before setting up deployment, ensure your Node.js application is production-ready. This involves proper testing, version control, and a well-defined directory structure. Make sure to create a .gitignore file to exclude unnecessary files from being pushed to your repository.

3. Configuring the EC2 Instance: Set up an Amazon EC2 instance that will host your Node.js application. Ensure it has the necessary permissions, security groups, and any required software installed. Note down the instance's public IP or DNS name as you'll need it for deployment.

4. Creating GitHub Actions Workflow: In your repository, navigate to .github/workflows and create a new YAML file, such as deploy.yml. This is where you'll define your deployment workflow. GitHub Actions uses YAML syntax to describe the steps of your workflow.

5. Implementing Deployment Workflow Steps: Define the deployment workflow steps in your deploy.yml file. These steps can include:

  • Checking Out the Code: Begin by checking out your repository's code using the actions/checkout action.

  • Installing Dependencies: Use the actions/setup-node action to set up the Node.js environment and install project dependencies.

  • Building the Application: Use the appropriate npm scripts to build your Node.js application.

  • Deploying to EC2: Use an SSH key to securely connect to your EC2 instance. You can use GitHub Secrets to store sensitive information like SSH keys. Use SSH commands to copy your built application to the EC2 instance.

  • Restarting the Application: If necessary, execute commands on the EC2 instance to restart your Node.js application.

name: Node.js App Deployment

on:
  push:
    branches:
      - main  # Adjust this to your main branch

jobs:
  deploy:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout Repository
        uses: actions/checkout@v2

      - name: Setup Node.js
        uses: actions/setup-node@v2
        with:
          node-version: 14  # Adjust this to your Node.js version

      - name: Install Dependencies
        run: npm install

      - name: Build Application
        run: npm run build

      - name: Deploy to EC2
        uses: appleboy/scp-action@master
        with:
          host: ${{ secrets.EC2_HOST }}  # EC2 instance IP or DNS
          username: ${{ secrets.SSH_USERNAME }}  # SSH username
          key: ${{ secrets.SSH_PRIVATE_KEY }}  # SSH private key
          source: "dist/"  # Adjust to your build output directory
          target: "/var/www/myapp"  # Adjust to your target directory on EC2

      - name: Restart Application on EC2
        run: ssh -o StrictHostKeyChecking=no ${{ secrets.SSH_USERNAME }}@${{ secrets.EC2_HOST }} "pm2 restart myapp"  # Adjust this to your application restart command

6. Testing and Troubleshooting: Before relying on the automated workflow, thoroughly test the deployment process. Monitor the workflow runs in the "Actions" tab of your repository to identify and troubleshoot any issues. Check logs and error messages to ensure a smooth deployment.

Conclusion

By setting up GitHub Actions for deploying your Node.js application on Amazon EC2, you've streamlined your deployment process, reduced the risk of errors, and saved time. With a well-structured workflow and proper testing, you can confidently push updates to your application while maintaining SEO-friendly practices. Embrace automation and watch your deployment process become a seamless part of your development pipeline.

Did you find this article valuable?

Support Aashish Chakravarty by becoming a sponsor. Any amount is appreciated!