Deploying Node.js Applications with PM2 on Vultr

1 week ago 42

Deploying Node.js applications efficiently requires a reliable infrastructure and robust management tools. PM2 is one of the most popular process managers for Node.js applications, providing features for monitoring, process management, and load balancing. Vultr is a cloud hosting provider known for its high-performance servers and simplicity. Combining PM2 with Vultr allows developers to deploy, manage, and scale their Node.js applications effectively. This guide will walk you through deploying a Node.js application with PM2 on Vultr, covering setup, configuration, and best practices.

Prerequisites

Before diving into the deployment process, ensure you have the following:

  1. A Vultr Account: Sign up for an account at Vultr.
  2. A Vultr Instance: Create a new server instance. A basic VPS with Ubuntu 20.04 is a good choice for most Node.js applications.
  3. Basic Linux Commands Knowledge: Familiarity with basic command-line operations.
  4. Node.js and NPM Installed Locally: Ensure Node.js and NPM are installed on your local machine for development purposes.

1. Setting Up Your Vultr Instance

  1. Create a New Instance:
    • Log in to your Vultr account.
    • Go to the “Compute” section and click on “Deploy New Instance.”
    • Select the desired location for your server.
    • Choose the Ubuntu 20.04 operating system.
    • Select an appropriate plan based on your application’s requirements (e.g., a basic plan for development or a more robust plan for production).
    • Add SSH keys for secure access or set up a password.
    • Click “Deploy Now” to create the instance.
  2. Access Your Instance:
    • Once the instance is deployed, note its public IP address.
    • Use an SSH client to connect to your instance: ssh root@your_vultr_ip_address.
  3. Update Your Server:

Run the following commands to update the package lists and upgrade existing packages:
sudo apt update

sudo apt upgrade

2. Installing Node.js and NPM

  1. Install Node.js:

Add the NodeSource repository to install the latest version of Node.js:
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -

sudo apt install -y nodejs

Verify the installation:
node -v

npm -v

  1. Install Build Tools:

Some Node.js packages may require build tools. Install them with:
sudo apt install -y build-essential

3. Installing PM2

  1. Install PM2 Globally:

PM2 can be installed globally using NPM:
sudo npm install -g pm2

  1. Verify PM2 Installation:

Check the version to ensure it’s installed correctly:
pm2 -v

4. Deploying Your Node.js Application

  1. Transfer Your Application:

Use SCP or an SFTP client to upload your Node.js application to the Vultr server. You can also clone it directly from a Git repository.
scp -r /path/to/your/app root@your_vultr_ip_address:/path/to/destination

Alternatively, clone from Git:
git clone https://github.com/your-repository.git

  1. Navigate to Your Application Directory:

Change to the directory where your application is located:
bash
cd /path/to/your/app

  1. Install Dependencies:

Run npm install to install all the required packages:
npm install

  1. Configure PM2:

Start your application with PM2:
pm2 start app.js --name "my-app"

  • Replace app.js with the entry point of your application and my-app with a name for your process.
  1. Save PM2 Process List:

Save the current process list so that PM2 can resurrect it after a reboot:
pm2 save

  1. Set Up PM2 to Start on Boot:

Generate and configure the startup script for PM2:
pm2 startup

  • Follow the instructions provided by PM2 to execute the generated command. This ensures PM2 will start automatically on server reboots.

5. Configuring Nginx as a Reverse Proxy

  1. Install Nginx:

Install Nginx with the following command:
sudo apt install -y nginx

  1. Configure Nginx:

Create a new Nginx configuration file for your application:
sudo nano /etc/nginx/sites-available/my-app

Add the following configuration:
nginx
server {

    listen 80;

    server_name your_domain_or_ip;

    location / {

        proxy_pass http://localhost:3000; # Replace with your app's port

        proxy_set_header Host $host;

        proxy_set_header X-Real-IP $remote_addr;

        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        proxy_set_header X-Forwarded-Proto $scheme;

    }

}

  • Save and exit the file.
  1. Enable the Configuration:

Create a symbolic link to enable the configuration:
sudo ln -s /etc/nginx/sites-available/my-app /etc/nginx/sites-enabled/

  1. Test Nginx Configuration:

Check the configuration for syntax errors:
sudo nginx -t

  1. Reload Nginx:

Apply the new configuration by reloading Nginx:

sudo systemctl reload nginx

6. Monitoring and Managing Your Application

  1. Monitor Your Application:

PM2 provides built-in monitoring tools. Check the status of your application with:
pm2 status

View logs with:
pm2 logs

  1. Manage Your Application:

To restart your application:
pm2 restart my-app

To stop your application:
bash
pm2 stop my-app

To delete your application from PM2:
pm2 delete my-app

7. Security and Best Practices

  1. Set Up a Firewall:

Configure UFW (Uncomplicated Firewall) to allow only necessary traffic:
sudo ufw allow OpenSSH

sudo ufw allow 'Nginx Full'

sudo ufw enable

  1. Use Environment Variables:
    • Store sensitive information such as database credentials and API keys in environment variables rather than hardcoding them into your application.
  2. Regular Backups:
    • Regularly back up your application and database to avoid data loss. Consider using automated backup solutions.
  3. Keep Software Updated:
    • Regularly update Node.js, PM2, and your application dependencies to ensure security and performance.
  4. Monitor Server Performance:
    • Use tools like htop or top to monitor server resource usage and ensure your application performs optimally.

Deploying Node.js applications with PM2 on Vultr combines the power of a robust process manager with the flexibility and performance of a leading cloud hosting provider. By following this guide, you can set up, manage, and scale your Node.js applications efficiently, ensuring high availability and reliability. Whether you’re working on a personal project or a production-level application, PM2 and Vultr offer the tools and infrastructure needed to handle your deployment needs effectively.

FAQs

  1. What is PM2 and why should I use it for Node.js applications?

PM2 is a popular process manager for Node.js applications. It helps manage, monitor, and keep your applications alive and running smoothly. It offers features such as process monitoring, automatic restarts on failure, load balancing across multiple instances, and easy deployment. PM2 is essential for maintaining high availability and performance in production environments.

  1. What is Vultr and how does it benefit my Node.js deployment?

Vultr is a cloud hosting provider that offers high-performance and scalable server instances. It provides a range of virtual private servers (VPS) with various configurations to meet different application needs. Vultr benefits Node.js deployments by offering reliable infrastructure, quick server provisioning, and global data center locations to ensure low latency and high availability.

  1. Do I need a domain name to deploy my Node.js application on Vultr?

While a domain name is not required to deploy your application, it is highly recommended for a professional setup. A domain name makes it easier to access your application and improves user trust. If you don't have a domain, you can access your application using the IP address provided by Vultr.

  1. Can I deploy multiple Node.js applications on a single Vultr instance?

Yes, you can deploy multiple Node.js applications on a single Vultr instance. Each application can be managed separately using PM2, and you can configure Nginx to route traffic to different applications based on subdomains or paths.

  1. How do I manage environment variables in my Node.js application?

Environment variables can be managed using a .env file in your application directory or by setting them directly in your PM2 configuration. For a .env file, use a package like dotenv to load variables into your application. To set variables directly in PM2, use:

pm2 start app.js --name "my-app" --env production


  1. How can I ensure my Node.js application is secure on Vultr?

To secure your Node.js application on Vultr, follow these practices:

  • Use strong passwords and SSH keys for server access.
  • Set up a firewall (UFW) to allow only necessary traffic.
  • Regularly update your server and application dependencies.
  • Implement HTTPS with SSL certificates (you can use Let’s Encrypt for free certificates).
  • Store sensitive information in environment variables rather than hardcoding them.
  1. How do I configure PM2 to restart my application automatically after a server reboot?

PM2 can be configured to restart your application automatically after a server reboot by using the pm2 startup command. This command generates a startup script that ensures PM2 starts and restores your processes on reboot. Follow the instructions provided by the command to complete the setup.

  1. What should I do if my Node.js application crashes?

If your Node.js application crashes, PM2 will attempt to restart it automatically. You can check the status and logs using:

pm2 status

pm2 logs

Investigate the logs for any errors or issues in your application code. Ensure that your application is properly configured to handle errors and consider implementing additional monitoring and alerting for critical failures.

  1. How can I scale my Node.js application using PM2 on Vultr?

Scaling your Node.js application can be achieved by running multiple instances of your application across different servers or cores. With PM2, you can use the following command to start multiple instances:

pm2 start app.js -i max

The -i max flag tells PM2 to run as many instances as there are CPU cores. For horizontal scaling, deploy additional Vultr instances and use a load balancer to distribute traffic across multiple servers.

  1. What are the best practices for monitoring Node.js applications with PM2?

Best practices for monitoring Node.js applications with PM2 include:

  • Regularly check the PM2 dashboard and logs to monitor application health.
  • Set up alerts for critical issues or performance bottlenecks.
  • Use PM2’s built-in metrics to analyze resource usage and optimize performance.
  • Integrate PM2 with external monitoring tools for advanced analytics and alerting.

Get in Touch

Website – https://www.webinfomatrix.com
Mobile - +91 9212306116
Whatsapp – https://call.whatsapp.com/voice/9rqVJyqSNMhpdFkKPZGYKj
Skype – shalabh.mishra
Telegram – shalabhmishra
Email - info@webinfomatrix.com