Skip to content
Academy
Tutorials

2 min readintermediate

Deploying a Node.js app on Edge Compute

Deploy a Node.js application on an Edge VM: create the server, install Node.js, run it with PM2, put Nginx and the CDN in front, then point your domain.

CoversComputeCDNDNS

Create VM form with configuration options

1. Create a VM#

Create a VM via the console or CLI. Choose ubuntu-24.04 and a plan with at least 2 vCPU / 4 GB RAM for Node.js production workloads. Smaller plans may run simple apps but can struggle under load.

Terminal
edge compute create --image ubuntu-24.04 --plan standard-2

Note the VM’s public IP. SSH in with the provided key.

2. Install Node.js#

Install Node.js via nvm (recommended for version management) or apt:

Terminal
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
source ~/.bashrc
nvm install 20
nvm use 20
Terminal
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt-get install -y nodejs

3. Clone your repo and install dependencies#

Clone your repository or upload your code (e.g. via scp), then install dependencies:

Terminal
git clone https://github.com/you/your-app.git
cd your-app
npm install --production

4. Set up PM2 for process management#

Install PM2 globally and start your app. PM2 keeps it running, restarts on crash, and handles logs.

Terminal
sudo npm install -g pm2
pm2 start server.js --name "my-app"

If your entry point is different (e.g. index.js or npm start), adjust accordingly. Enable startup on boot:

Terminal
pm2 startup
pm2 save

5. Configure Nginx as a reverse proxy#

Install Nginx and add a reverse proxy config. Your Node app likely runs on port 3000; Nginx listens on 80 and forwards:

Terminal
sudo apt install -y nginx
sudo nano /etc/nginx/sites-available/default

Replace the default server block with:

nginx
server {
    listen 80;
    server_name your-domain.com;
    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        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;
    }
}

Enable and reload Nginx:

Terminal
sudo ln -sf /etc/nginx/sites-available/default /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx

6. Set up Edge CDN and DNS#

Create an Edge CDN deployment with your VM’s IP as origin. Add your domain; Edge handles SSL. Point your domain via Edge DNS to the CDN endpoint. Users hit the CDN, which caches static assets and forwards dynamic requests to your VM.

7. Firewall and monitoring#

Firewall: Allow only ports 80 and 443 if traffic goes through the CDN, or restrict SSH to your IP. Edge VMs may include default firewall rules; verify in the console.

Monitoring: Use Edge metrics to watch VM CPU, memory, and network. Set up alerts for high utilisation. PM2 provides process-level monitoring: pm2 monit for a live dashboard.