🌐 How to Host Multiple Projects on One VPS Using Subdomains (Nginx + PM2)
Already running one app on your VPS and want to host another under a different subdomain like admin-abhinav.rohatech.site
? Whether it's a second Next.js project or any Node.js app, this guide will walk you through adding multiple subdomain apps on a single server using Nginx and PM2.
🔧 Step 1: Add DNS Record in GoDaddy
- Log in to GoDaddy.
- Go to the DNS settings for your domain rohatech.site.
- Click Add Record.
Add the following DNS record:
Type | Name | Value | TTL |
---|---|---|---|
A | admin-abhinav | Your VPS IP address | 1 Hour |
This connects admin-abhinav.rohatech.site
to your VPS.
📁 Step 2: Upload or Clone Your Second App
SSH into your VPS and place your second app in a new directory:
ssh root@your-vps-ip
cd /var/www
git clone https://github.com/your-second-app.git admin-app
cd admin-app
npm install
npm run build
Alternatively, upload the project using scp
or FTP if you're working locally.
⚙️ Step 3: Run the Second App on a Different Port
Use PORT=3002
to avoid conflict with other apps, and manage it using PM2:
PORT=3002 pm2 start npm --name "admin-app" -- start
pm2 save
This keeps the app running in the background and ensures it restarts on reboot.
🌐 Step 4: Configure Nginx for the New Subdomain
Create a new Nginx config file for admin-abhinav.rohatech.site
:
nano /etc/nginx/conf.d/admin-abhinav.rohatech.site.conf
Paste this:
server {
listen 80;
server_name admin-abhinav.rohatech.site;
location / {
proxy_pass http://localhost:3002;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
Save the file and restart Nginx:
nginx -t
systemctl reload nginx
🔒 Step 5: Add SSL with Certbot
Use Let’s Encrypt to secure the subdomain with HTTPS:
certbot --nginx -d admin-abhinav.rohatech.site
Certbot will configure your Nginx file automatically and apply SSL.
Optional: Force Redirect HTTP to HTTPS
Add this block in Nginx for auto-redirect:
server {
listen 80;
server_name admin-abhinav.rohatech.site;
return 301 https://$host$request_uri;
}
✅ Your Second App is Now Live!
You can now access your second app via:
https://admin-abhinav.rohatech.site
💡 Bonus Tips
- Use
pm2 list
to see all running apps. - Check logs with
pm2 logs admin-app
. - To remove an app:
pm2 delete admin-app
- Set all apps to run on boot:
pm2 startup
then follow the instructions
Now you can run multiple apps on different subdomains — clean, secure, and scalable! 🚀
Comments
Post a Comment