
Which Framework Should You Use for Agentic AI? CrewAI vs LangChain vs LangGraph
April 19, 2025
Upgrading Self Hosted n8n
November 29, 2025This guide will walk you step-by-step through setting up n8n, a powerful workflow automation tool, on a budget-friendly DownDoggy.com VPS. You’ll secure it with your own domain and SSL, and be up and running in under 30 minutes!
✨ Who this is for: Anyone comfortable copying commands into a terminal, and who trusts their favorite LLM (like ChatGPT) when things get tricky.
What You’ll Need
- A DownDoggy.com VPS (Linux, 1 vCPU, 1 GB RAM) – Grab it here
- A registered domain (like
your-domain.com) pointed to your VPS Account - Ability to edit DNS records (via your DownDoggy.com domain control panel)
- In our example we’re using a subdomain automation.your-domain.com (we updated the A-Record)
- A terminal / SSH access (via PowerShell, CMD, etc.)
🛠️ Step 1: SSH into Your Server
Once you have your VPS Account setup, you’ll need to SSH into your VPS server.
ssh root@your-server-ipTip: You can find your IP from your DownDoggy Control Panel when you activated your VPS.
🔄 Step 2: Update Your Server
Keep things fresh and secure:
sudo apt update && sudo apt upgrade -y👤 Step 3: (Optional but Recommended) Create a Non-Root User
adduser n8nuser
usermod -aG sudo n8nuser
su - n8nuser🐳 Step 4: Install Docker and Docker Compose
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo apt install docker-compose-plugin -y
sudo usermod -aG docker $USER
newgrp docker # Apply group change immediately📁 Step 5: Set Up Your n8n Folder
mkdir ~/n8n && cd ~/n8n
mkdir n8n_data📝 Step 6: Create Your docker-compose.yml
nano docker-compose.ymlservices:
n8n:
image: n8nio/n8n
ports:
- "5678:5678"
volumes:
- ./n8n_data:/home/node/.n8n
environment:
- N8N_BASIC_AUTH_ACTIVE=true
- N8N_BASIC_AUTH_USER=admin
- N8N_BASIC_AUTH_PASSWORD=(YOUR STRONG PASSWORD)
- N8N_PAYLOAD_SIZE_MAX="64mb"
- TZ=America/Los_Angeles
- N8N_HOST=automation.your-domain.com
- N8N_PROTOCOL=https
- N8N_PORT=5678
- WEBHOOK_URL=https://automation.your-domain.com
- N8N_SECURE_COOKIE=false
- N8N_COMMUNITY_PACKAGES_ALLOW_TOOL_USAGE=true
restart: alwaysSave and exit (Ctrl+O, Enter,Ctrl+X).
▶️ Step 7: Launch n8n
docker compose up -dCheck it’s running:
docker psYou should see n8n running with port 5678 exposed.
🌐 Step 8: Point Your Domain to Your Server
Login to your domain registrar and create an A record:
- Host:
automation - Points to: Your VPS IP address
Wait ~5 minutes for DNS to propagate.
🌐 Step 9: Install NGINX to Reverse Proxy
sudo apt install nginx -y
Create the config:
sudo nano /etc/nginx/sites-available/n8n
Paste this (use your real domain!):
nginxCopyEditserver {
listen 80;
server_name automation.your-domain.com;
location / {
proxy_pass http://localhost:5678;
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:
sudo ln -s /etc/nginx/sites-available/n8n /etc/nginx/sites-enabled/
sudo rm /etc/nginx/sites-enabled/default
sudo nginx -t
sudo systemctl reload nginxCheck:
curl -I http://localhostShould return 200 OK.
🔒 Step 10: Secure with SSL via Let’s Encrypt
Install Certbot:
sudo apt install certbot python3-certbot-nginx -yRun:
sudo certbot --nginx -d automation.your-domain.comChoose Option 1: Reinstall if it finds an existing cert.
This will:
✅ Secure your site with HTTPS
✅ Automatically update your NGINX config
✅ Enable auto-renewals
Test it:
https://automation.your-domain.comYou should see the n8n login screen with a secure lock!
🧠 Troubleshooting Tips
| Error | Fix |
|---|---|
| 413 Payload Too Large | Make sure N8N_PAYLOAD_SIZE_MAX="64mb" in Docker and client_max_body_size 64M; in NGINX |
| Lost connection to server | Confirm WebSocket headers are set in NGINX config |
| AI Agent fails to call tool | Check your MCP tool exposes a valid JSON schema |
| n8n container restarts | Use docker logs n8n-n8n-1 to debug and watch memory via docker stats |
✅ Final Checks & Tips
- If you hit issues, try: bashCopyEdit
docker logs n8n-n8n-1 tail -n 50 /var/log/nginx/error.log - Use:
curl -I http://localhost curl -I http://automation.your-domain.com
- to troubleshoot responses
- Not sure why something isn’t working? Ask your favorite LLM! “Hey ChatGPT, n8n is up on port 5678 but NGINX is returning 502. What’s wrong?”
🎉 You’re Done!
You’ve now got:
- n8n installed and running on Docker
- Access via your custom domain
- HTTPS secured with Let’s Encrypt
- Basic authentication enabled
If you have any issues with this setup feel free to reach out to the community for help!

