Self-Host n8n on Linode with Dokploy (2026 Guide)

Step-by-step guide to deploying self-hosted n8n on Linode using Dokploy. Docker, HTTPS, webhooks — everything covered.

Remember when Tony Stark built his own AI assistant instead of asking Alexa? That’s basically what we’re doing here — except instead of fighting aliens, we’re automating boring stuff like data syncing and notification workflows. And the best part? You don’t need an arc reactor.

Today, we’re diving into the world of self-hosted automation by setting up n8n (pronounced “n-eight-n,” because apparently vowels are overrated) on a Linode server using Dokploy. Think of it as building your own Zapier, but cooler, cheaper, and with that satisfying “I built this myself” energy.

Why Should You Care?

N8n is a fair-code workflow automation platform with over 400+ integrations, native AI capabilities, and a visual workflow builder that doesn’t make you feel like you need a PhD in computer science.

Dokploy is a free, self-hostable Platform-as-a-Service (PaaS) that makes deployment straightforward. It’s like having your own Vercel or Heroku, but without the monthly bills that make your accountant cry. With over 26,000 GitHub stars, this isn’t some sketchy project that’ll disappear tomorrow.

Linode (Akamai cloud) is a reliable VPS provider that won’t charge you an arm and a leg.

The trifecta of these tools means you get:

  • Unlimited workflows (no “you’ve hit your monthly limit” nonsense)
  • Complete data privacy (your automations stay yours)
  • Zero recurring subscription fees (after initial hosting costs)
  • Full customization (tweak literally anything you want)

Cost at a glance

PlanMonthly costWorkflow executionsData ownership
Zapier Starter$29.99750 tasksZapier’s servers
n8n Cloud Starter$242,500 executionsn8n’s servers
Self-hosted (this guide)~$24UnlimitedYours
Self-hosted (Linode $6 Nanode)~$6Unlimited (light load)Yours

The Linode Shared 4 GB plan ($24/month) gives you room to grow. If you’re just starting out, a $6 Nanode handles low-volume workflows fine; you can upgrade without downtime.

What You’ll Need

Before we start, make sure you’ve got:

  1. A Linode account (they offer $100 credit for new users, which covers your first few months)
  2. A domain name (or subdomain) pointing to your server
  3. Basic terminal knowledge (if you can copy-paste commands, you’re golden)
  4. About 30 minutes of your time
  5. Coffee (optional but highly recommended)

Server Requirements:

  • Minimum: 2GB RAM, 30GB disk space
  • Recommended: 4GB RAM for better performance
  • Operating System: Ubuntu 22.04 or Debian 11

Step 1: Set Up Your Linode Server

Create Your Linode Instance

  1. Log into your Linode account and click “Create Linode”
  2. Choose your distribution: Ubuntu 22.04 LTS (the tried-and-true choice)
  3. Select a region closest to you or your users
  4. Pick a plan: The Shared CPU 4GB plan ($24/month) is perfect for starting out
  5. Set a strong root password (and write it down somewhere secure)
  6. Add your SSH key (optional but recommended for security)
  7. Click “Create Linode” and wait for it to boot up

Once your server is running, you’ll see its IP address. Note it down; you’ll need it shortly.

Connect to Your Server

Open your terminal (or PuTTY on Windows) and SSH into your server:

ssh root@YOUR_LINODE_IP

You’ll get a security warning the first time. Type yes and press Enter.

Update Your System

Run system updates:

apt update && apt upgrade -y

This might take a few minutes. Perfect time to refill that coffee.

Step 2: Point Your Domain to Linode

While your system updates, configure DNS:

  1. Log into your domain registrar (Namecheap, Cloudflare, GoDaddy, etc.)
  2. Find the DNS management section
  3. Create an A record:
    • Name: @ (for root domain) or automation (for subdomain)
    • Value: Your Linode IP address
    • TTL: 300 (or automatic)
  4. If using a subdomain, create another A record for *.yourdomain.com pointing to the same IP

Pro tip: DNS changes can take up to 24 hours to propagate, but usually happen within 15 minutes.

Step 3: Install Dokploy

Dokploy has a one-line installer that feels like cheating (but in a good way). Run this command:

curl -sSL https://dokploy.com/install.sh | sh

The installer will:

  • Install Docker and Docker Compose
  • Set up Traefik (for automatic HTTPS and routing)
  • Configure the Dokploy dashboard
  • Make everything production-ready

This takes about 3-5 minutes. Watch the green text scroll by and feel like a hacker in a movie.

Access the Dokploy Dashboard

Once installation completes, open your browser and navigate to:

http://YOUR_LINODE_IP:3000

You’ll see the Dokploy setup wizard. Create your admin account:

  • Email: Your email address
  • Password: Something strong (not “password123”, please)
  • Organization: Give your organization a cool name

Click through the setup and you’re in.

Step 4: Deploy N8n Using Dokploy’s Template

Instead of writing Docker Compose from scratch, we use a pre-built template.

Create a New Project

  1. In the Dokploy dashboard, click “Projects” in the sidebar
  2. Click “Create Project”
  3. Give it a name: n8n-automation (or something equally creative)
  4. Add a description if you’re feeling fancy
  5. Click “Create”

Deploy N8n from Template

  1. Inside your new project, click “Create Service”
  2. Select the “Templates” tab
  3. Search for “n8n” in the template list
  4. Click on the n8n template

The template comes pre-configured with sensible defaults. You’ll see a Docker Compose configuration like this:

version: "3.8"
services:
  n8n:
    image: docker.n8n.io/n8nio/n8n:latest
    restart: always
    ports:
      - "5678:5678"
    environment:
      - N8N_HOST=${N8N_HOST}
      - N8N_PORT=5678
      - N8N_PROTOCOL=https
      - NODE_ENV=production
      - WEBHOOK_URL=https://${N8N_HOST}/
      - GENERIC_TIMEZONE=Europe/Berlin
    volumes:
      - n8n_data:/home/node/.n8n

Configure Environment Variables

Click on the “Environment” section and set these crucial variables:

  • N8N_HOST: automation.yourdomain.com (your domain/subdomain)
  • GENERIC_TIMEZONE: Your timezone (e.g., Asia/Kolkata, America/New_York)
  • N8N_ENCRYPTION_KEY: Generate a random string (run openssl rand -hex 32 in terminal)

Important: The encryption key encrypts all saved credentials. Lose it and you lose access to every connected account.

Configure Domain and SSL

  1. Go to the “Domains” tab in the service settings
  2. Click “Add Domain”
  3. Enter your domain: automation.yourdomain.com
  4. Enable “HTTPS” toggle (Dokploy uses Let’s Encrypt for free SSL)
  5. Enable “Generate SSL Certificate”

Dokploy’s Traefik integration automatically handles SSL certificate generation and renewal. It’s like having a DevOps engineer on autopilot.

Deploy!

Hit that beautiful blue “Deploy” button at the top right.

Watch the logs as Docker pulls the n8n image and starts the container. You’ll see output like:

Pulling image docker.n8n.io/n8nio/n8n:latest...
Starting container...
n8n ready on port 5678

After 2-3 minutes, your n8n instance is live!

Step 5: Set Up N8n

Navigate to your domain: https://automation.yourdomain.com

You should see the n8n welcome screen. If you see a certificate error, wait a few minutes. Let’s Encrypt is still issuing the SSL cert.

Create Your Owner Account

N8n will ask you to create the first user (the owner account):

  1. Email: Your email
  2. First Name and Last Name: For personalization
  3. Password: Strong and unique

Click “Continue” and you’re in! The n8n workflow canvas opens, ready for your automation dreams.

Step 6: Verify Everything Works

Create a quick test workflow to verify the install:

  1. Click “New Workflow”
  2. Add a “Manual Trigger” node (click the + button)
  3. Add a “Code” node
  4. In the Code node, write: return [{json: {message: "Hello from my self-hosted n8n!"}}];
  5. Click “Execute Workflow”

If you see the success message, congratulations! Your automation platform is fully operational.

Bonus: Scaling and Production Tips

Set Up Database Backups

Dokploy makes backups easy:

  1. Go to your n8n service in Dokploy
  2. Navigate to “Volume Backups” section
  3. Enable backups with your preferred schedule (daily recommended)
  4. Configure backup destination (S3-compatible storage works great)

N8n uses SQLite by default, which is fine for small-to-medium workloads. For production scale, migrate to PostgreSQL.

Migrate n8n from SQLite to PostgreSQL

  1. Add a PostgreSQL service in Dokploy. In your project, click “Create Service” → “Database” → “PostgreSQL”. Set a strong password and note the service name (e.g., postgres).

  2. Add PostgreSQL env vars to n8n. In the n8n service environment section, add:

    DB_TYPE=postgresdb
    DB_POSTGRESDB_HOST=postgres
    DB_POSTGRESDB_PORT=5432
    DB_POSTGRESDB_DATABASE=n8n
    DB_POSTGRESDB_USER=postgres
    DB_POSTGRESDB_PASSWORD=your_postgres_password
  3. Export your existing workflows. In n8n: Settings → Import/Export → Export all workflows as JSON. Download it before you switch databases.

  4. Redeploy n8n. Dokploy will restart with the new database config. n8n auto-creates the schema on first boot.

  5. Import your workflows. Settings → Import/Export → Import from file.

After the migration, keep your SQLite volume mounted (don’t delete it yet) for a few days as a fallback.

Monitor Resource Usage

Keep an eye on CPU and RAM usage in the Dokploy monitoring dashboard:

  • Normal usage: 200-500MB RAM
  • High load: 1-2GB RAM

If you’re hitting limits, upgrade your Linode plan with a single click.

Enable Queue Mode for Scale

For heavy workloads with many concurrent workflows, enable queue mode:

  1. Add Redis to your Dokploy project (use the Redis template)
  2. Add these environment variables to n8n:
    • EXECUTIONS_MODE=queue
    • QUEUE_BULL_REDIS_HOST=redis
    • QUEUE_BULL_REDIS_PASSWORD=your_redis_password

This separates the UI from workflow execution, allowing you to scale workers independently.

Keep N8n Updated

Dokploy makes updates painless:

  1. Check for new n8n releases on GitHub
  2. Update the image tag in your service: docker.n8n.io/n8nio/n8n:1.104 (or latest; see n8n releases)
  3. Click “Deploy”

Dokploy handles the rolling update automatically. Zero downtime, maximum swagger.

Troubleshooting Common Issues

522 / 524 timeout errors (Cloudflare users)

If your domain runs through Cloudflare and you see a 522 or 524 error, the proxy can’t reach your origin:

  1. Check that ports 80 and 443 are open on Linode’s firewall (Cloud Firewall in the Linode dashboard, or ufw status on the server).
  2. Temporarily set Cloudflare SSL mode to “Full” (not Full Strict) while Let’s Encrypt issues the cert. Switch back to Full Strict after.
  3. Disable Cloudflare proxy (orange → grey cloud) during initial setup. Re-enable after SSL is confirmed working.
  4. For long-running webhook calls that hit Cloudflare’s 100-second timeout, set EXECUTIONS_TIMEOUT=0 in n8n environment variables and configure your workflow’s timeout separately.

SSL certificate not generating

Traefik uses Let’s Encrypt to auto-issue certificates. If the cert never appears:

  • Make sure ports 80 and 443 are publicly reachable. Let’s Encrypt needs HTTP-01 challenge access.
  • Check Traefik logs in Dokploy: Domains → your domain → Logs. Look for acme errors.
  • If you see a rate-limit error, Let’s Encrypt limits failed attempts per domain. Wait an hour, then redeploy.
  • Confirm your domain’s A record has propagated: dig +short automation.yourdomain.com

n8n container keeps restarting / won’t start

Open Dokploy → your compose service → Logs. Common causes:

  • Missing N8N_ENCRYPTION_KEY: n8n exits immediately if this env var is absent. Generate one with openssl rand -hex 32 and add it.
  • Port conflict: If something else is on 5678, change the host port mapping in the compose file.
  • Volume permission error: The n8n_data volume must be writable by node user (uid 1000). On a fresh server this is automatic; on a reused volume it sometimes isn’t. Fix: docker exec -u root <container_id> chown -R node:node /home/node/.n8n

Webhooks not firing

n8n webhooks need to know their public URL:

  1. Make sure WEBHOOK_URL is set to https://automation.yourdomain.com/ (trailing slash matters).
  2. The N8N_HOST variable must match the domain in the WEBHOOK_URL.
  3. After changing env vars, always redeploy. n8n doesn’t hot-reload environment.
  4. Test directly: curl -X POST https://automation.yourdomain.com/webhook/test-path. A 404 means the workflow isn’t active; a connection error means the port isn’t reachable.

”Database is locked” error on startup

SQLite doesn’t handle concurrent writes well. This usually happens after an unclean shutdown:

# SSH into your server, then:
docker exec -it <n8n_container_name> sh
cd /home/node/.n8n
sqlite3 database.sqlite "PRAGMA integrity_check;"

If the check returns anything other than ok, restore from your last Dokploy volume backup. Going forward, this is the main reason to migrate to PostgreSQL for any production workload.

Can’t access n8n at domain (generic)

  • Verify DNS propagation: nslookup automation.yourdomain.com
  • Check Linode Cloud Firewall allows inbound on 80 and 443
  • Review Dokploy service logs for errors
  • Confirm the Traefik domain config matches your actual hostname exactly

High memory usage

  • Restart the n8n container from Dokploy
  • Enable queue mode (Redis) to offload execution (see the scaling section above)
  • Upgrade your Linode plan (one click, no data loss)

What’s Next?

Here’s what people actually build once n8n is running:

  • Data Sync Pipelines: Sync data between Google Sheets, Airtable, and your database
  • Social Media Automation: Auto-post to Twitter, LinkedIn, and Instagram
  • AI Workflows: Integrate OpenAI, Claude, or local LLMs for intelligent automation
  • DevOps Pipelines: Automate deployments, monitoring, and notifications
  • Business Process Automation: Invoice generation, customer onboarding, reporting

Final Thoughts

Self-hosted n8n with Dokploy means you own the whole stack: no arbitrary workflow limits, no surprise tier upgrades, no vendor lock-in. You pay $24/month for a server instead of $30-70/month for a SaaS seat with execution caps.

The skills transfer, too. Once Dokploy clicks, deploying anything else — databases, APIs, monitoring — follows the same pattern.


Quick Reference: