<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Raizan</title>
    <description>The latest articles on DEV Community by Raizan (@chasebot).</description>
    <link>https://dev.to/chasebot</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3869200%2F83f3115f-a656-4200-8cea-d88dfde8350a.png</url>
      <title>DEV Community: Raizan</title>
      <link>https://dev.to/chasebot</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/chasebot"/>
    <language>en</language>
    <item>
      <title>Self-Hosted n8n vs n8n Cloud: Which Should You Choose in 2026</title>
      <dc:creator>Raizan</dc:creator>
      <pubDate>Thu, 09 Apr 2026 09:05:20 +0000</pubDate>
      <link>https://dev.to/chasebot/self-hosted-n8n-vs-n8n-cloud-which-should-you-choose-in-2026-5789</link>
      <guid>https://dev.to/chasebot/self-hosted-n8n-vs-n8n-cloud-which-should-you-choose-in-2026-5789</guid>
      <description>&lt;h2&gt;
  
  
  Table of Contents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;The Core Difference&lt;/li&gt;
&lt;li&gt;Self-Hosted n8n: Full Control, Full Responsibility&lt;/li&gt;
&lt;li&gt;n8n Cloud: Set It and Forget It&lt;/li&gt;
&lt;li&gt;Cost Breakdown: Where Your Money Goes&lt;/li&gt;
&lt;li&gt;Performance, Security, and Compliance&lt;/li&gt;
&lt;li&gt;Migration Paths and Lock-In&lt;/li&gt;
&lt;li&gt;Getting Started with Your Choice&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  The Core Difference
&lt;/h2&gt;

&lt;p&gt;I've been running automation workflows for years now, and the self-hosted versus cloud decision feels bigger in 2026 than ever. Here's the honest truth: there's no universal winner. Your choice depends on whether you value control or convenience more—and how much operational overhead you're willing to carry.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Self-hosted n8n&lt;/strong&gt; runs entirely on your own infrastructure. You manage the server, backups, updates, SSL certificates, and scaling.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;n8n Cloud&lt;/strong&gt; runs on n8n's infrastructure. You log in, build workflows, and n8n handles the rest.&lt;/p&gt;

&lt;p&gt;The gap between these options has actually narrowed since 2024. Cloud has become more flexible, and self-hosted has become simpler. But the trade-offs are still real, and I want to walk you through them honestly.&lt;/p&gt;




&lt;h2&gt;
  
  
  Self-Hosted n8n: Full Control, Full Responsibility
&lt;/h2&gt;

&lt;p&gt;I started self-hosting because I needed workflows that could run offline, required custom node integrations, and had compliance constraints. If any of those resonate with you, self-hosted might be your answer.&lt;/p&gt;

&lt;h3&gt;
  
  
  Setting Up Self-Hosted n8n
&lt;/h3&gt;

&lt;p&gt;Let's deploy this on a &lt;a href="https://chasebot.online/go/hetzner?utm_source=system3_hugo" rel="noopener noreferrer"&gt;Hetzner VPS&lt;/a&gt; or &lt;a href="https://chasebot.online/go/contabo?utm_source=system3_hugo" rel="noopener noreferrer"&gt;Contabo VPS&lt;/a&gt;. I'll use Docker Compose because it keeps dependencies isolated and makes updates painless.&lt;/p&gt;

&lt;p&gt;First, spin up a VPS with at least 2GB RAM and Ubuntu 22.04. SSH in and run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;apt update
apt upgrade &lt;span class="nt"&gt;-y&lt;/span&gt;
apt &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; docker.io docker-compose curl wget
systemctl start docker
systemctl &lt;span class="nb"&gt;enable &lt;/span&gt;docker
usermod &lt;span class="nt"&gt;-aG&lt;/span&gt; docker &lt;span class="nv"&gt;$USER&lt;/span&gt;
newgrp docker
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now create your n8n directory and Docker Compose file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; ~/n8n-deployment
&lt;span class="nb"&gt;cd&lt;/span&gt; ~/n8n-deployment
nano docker-compose.yml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Paste this configuration:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;3.8'&lt;/span&gt;

&lt;span class="na"&gt;services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;postgres&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;postgres:15-alpine&lt;/span&gt;
    &lt;span class="na"&gt;environment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;POSTGRES_DB&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;n8n&lt;/span&gt;
      &lt;span class="na"&gt;POSTGRES_USER&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;n8n&lt;/span&gt;
      &lt;span class="na"&gt;POSTGRES_PASSWORD&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;your_secure_password_here&lt;/span&gt;
    &lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;postgres_data:/var/lib/postgresql/data&lt;/span&gt;
    &lt;span class="na"&gt;ports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;5432:5432"&lt;/span&gt;
    &lt;span class="na"&gt;healthcheck&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;test&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;CMD-SHELL"&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;pg_isready&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;-U&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;n8n"&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
      &lt;span class="na"&gt;interval&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;10s&lt;/span&gt;
      &lt;span class="na"&gt;timeout&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;5s&lt;/span&gt;
      &lt;span class="na"&gt;retries&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;5&lt;/span&gt;

  &lt;span class="na"&gt;n8n&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;n8nio/n8n:latest&lt;/span&gt;
    &lt;span class="na"&gt;container_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;n8n&lt;/span&gt;
    &lt;span class="na"&gt;environment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;DB_TYPE&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;postgresdb&lt;/span&gt;
      &lt;span class="na"&gt;DB_POSTGRESDB_HOST&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;postgres&lt;/span&gt;
      &lt;span class="na"&gt;DB_POSTGRESDB_USER&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;n8n&lt;/span&gt;
      &lt;span class="na"&gt;DB_POSTGRESDB_PASSWORD&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;your_secure_password_here&lt;/span&gt;
      &lt;span class="na"&gt;DB_POSTGRESDB_DATABASE&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;n8n&lt;/span&gt;
      &lt;span class="na"&gt;N8N_HOST&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;your_domain.com&lt;/span&gt;
      &lt;span class="na"&gt;N8N_PORT&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;5678&lt;/span&gt;
      &lt;span class="na"&gt;N8N_PROTOCOL&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;https&lt;/span&gt;
      &lt;span class="na"&gt;NODE_ENV&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;production&lt;/span&gt;
      &lt;span class="na"&gt;WEBHOOK_URL&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;https://your_domain.com/&lt;/span&gt;
      &lt;span class="na"&gt;GENERIC_TIMEZONE&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;UTC&lt;/span&gt;
    &lt;span class="na"&gt;ports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;5678:5678"&lt;/span&gt;
    &lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;n8n_data:/home/node/.n8n&lt;/span&gt;
    &lt;span class="na"&gt;depends_on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;postgres&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;condition&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;service_healthy&lt;/span&gt;
    &lt;span class="na"&gt;restart&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;unless-stopped&lt;/span&gt;

  &lt;span class="na"&gt;nginx&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;nginx:alpine&lt;/span&gt;
    &lt;span class="na"&gt;container_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;n8n_nginx&lt;/span&gt;
    &lt;span class="na"&gt;ports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;80:80"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;443:443"&lt;/span&gt;
    &lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;./nginx.conf:/etc/nginx/nginx.conf:ro&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;./ssl:/etc/nginx/ssl:ro&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;./certbot/conf:/etc/letsencrypt:ro&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;./certbot/www:/var/www/certbot:ro&lt;/span&gt;
    &lt;span class="na"&gt;depends_on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;n8n&lt;/span&gt;
    &lt;span class="na"&gt;restart&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;unless-stopped&lt;/span&gt;

&lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;postgres_data&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;n8n_data&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create your Nginx reverse proxy config:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nano nginx.conf
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nginx"&gt;&lt;code&gt;&lt;span class="k"&gt;events&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kn"&gt;worker_connections&lt;/span&gt; &lt;span class="mi"&gt;1024&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;http&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kn"&gt;upstream&lt;/span&gt; &lt;span class="s"&gt;n8n&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kn"&gt;server&lt;/span&gt; &lt;span class="nf"&gt;n8n&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;5678&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="kn"&gt;server&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kn"&gt;listen&lt;/span&gt; &lt;span class="mi"&gt;80&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;server_name&lt;/span&gt; &lt;span class="s"&gt;your_domain.com&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;301&lt;/span&gt; &lt;span class="s"&gt;https://&lt;/span&gt;&lt;span class="nv"&gt;$server_name$request_uri&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="kn"&gt;server&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kn"&gt;listen&lt;/span&gt; &lt;span class="mi"&gt;443&lt;/span&gt; &lt;span class="s"&gt;ssl&lt;/span&gt; &lt;span class="s"&gt;http2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;server_name&lt;/span&gt; &lt;span class="s"&gt;your_domain.com&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

        &lt;span class="kn"&gt;ssl_certificate&lt;/span&gt; &lt;span class="n"&gt;/etc/letsencrypt/live/your_domain.com/fullchain.pem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;ssl_certificate_key&lt;/span&gt; &lt;span class="n"&gt;/etc/letsencrypt/live/your_domain.com/privkey.pem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

        &lt;span class="kn"&gt;ssl_protocols&lt;/span&gt; &lt;span class="s"&gt;TLSv1.2&lt;/span&gt; &lt;span class="s"&gt;TLSv1.3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;ssl_ciphers&lt;/span&gt; &lt;span class="s"&gt;HIGH:!aNULL:!MD5&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;ssl_prefer_server_ciphers&lt;/span&gt; &lt;span class="no"&gt;on&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

        &lt;span class="kn"&gt;client_max_body_size&lt;/span&gt; &lt;span class="mi"&gt;50M&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

        &lt;span class="kn"&gt;location&lt;/span&gt; &lt;span class="n"&gt;/&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="kn"&gt;proxy_pass&lt;/span&gt; &lt;span class="s"&gt;http://n8n&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
            &lt;span class="kn"&gt;proxy_http_version&lt;/span&gt; &lt;span class="mf"&gt;1.1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
            &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;Upgrade&lt;/span&gt; &lt;span class="nv"&gt;$http_upgrade&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
            &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;Connection&lt;/span&gt; &lt;span class="s"&gt;"upgrade"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
            &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;Host&lt;/span&gt; &lt;span class="nv"&gt;$host&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
            &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;X-Real-IP&lt;/span&gt; &lt;span class="nv"&gt;$remote_addr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
            &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;X-Forwarded-For&lt;/span&gt; &lt;span class="nv"&gt;$proxy_add_x_forwarded_for&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
            &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;X-Forwarded-Proto&lt;/span&gt; &lt;span class="nv"&gt;$scheme&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
            &lt;span class="kn"&gt;proxy_read_timeout&lt;/span&gt; &lt;span class="s"&gt;3600s&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
            &lt;span class="kn"&gt;proxy_send_timeout&lt;/span&gt; &lt;span class="s"&gt;3600s&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For SSL certificates, I'll use Certbot with Let's Encrypt:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;apt &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; certbot python3-certbot-nginx
certbot certonly &lt;span class="nt"&gt;--standalone&lt;/span&gt; &lt;span class="nt"&gt;-d&lt;/span&gt; your_domain.com &lt;span class="nt"&gt;--email&lt;/span&gt; your_email@example.com &lt;span class="nt"&gt;--agree-tos&lt;/span&gt; &lt;span class="nt"&gt;--non-interactive&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Update your domain DNS records to point to your VPS IP, then start the containers:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker-compose up &lt;span class="nt"&gt;-d&lt;/span&gt;
docker-compose logs &lt;span class="nt"&gt;-f&lt;/span&gt; n8n
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once you see "n8n ready on port 5678," you're up. Visit &lt;code&gt;https://your_domain.com&lt;/code&gt;, set your admin credentials, and you're in.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 &lt;strong&gt;Fast-Track Your Project:&lt;/strong&gt; Don't want to configure this yourself? &lt;a href="https://chasebot.online?utm_source=system3_hugo" rel="noopener noreferrer"&gt;I build custom n8n pipelines and bots. Message me with code SYS3-HUGO.&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Self-Hosted Wins
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Offline workflows&lt;/strong&gt;: Your automations don't depend on external uptime.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Custom nodes&lt;/strong&gt;: Build integrations for internal tools or legacy systems. Modify the n8n codebase if needed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Data residency&lt;/strong&gt;: All data stays on your server. Huge for GDPR, HIPAA, or SOC 2 compliance.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No execution limits&lt;/strong&gt;: Run as many parallel workflows as your hardware can handle. No throttling, no surprise bills when usage spikes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Unlimited storage&lt;/strong&gt;: Store execution history forever. I have years of logs that help me debug production issues.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cost at scale&lt;/strong&gt;: If you're running 100+ workflows daily, self-hosted becomes cheaper than cloud per-execution pricing.&lt;/p&gt;

&lt;h3&gt;
  
  
  Self-Hosted Costs
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;VPS&lt;/strong&gt;: $10–20/month for 2GB RAM (Hetzner, Contabo, DigitalOcean)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Domain&lt;/strong&gt;: ~$10/year via &lt;a href="https://chasebot.online/go/namecheap?utm_source=system3_hugo" rel="noopener noreferrer"&gt;Namecheap&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Time&lt;/strong&gt;: Setup is 30 minutes. Maintenance (updates, backups, monitoring) is 2–3 hours monthly&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Total&lt;/strong&gt;: ~$130–240/year in infrastructure + your labor&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Self-Hosted Responsibilities
&lt;/h3&gt;

&lt;p&gt;You own:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Server monitoring and uptime (I use Uptime Robot, but that's extra)&lt;/li&gt;
&lt;li&gt;SSL certificate renewal (I automate this with certbot)&lt;/li&gt;
&lt;li&gt;Database backups (you must do this; n8n doesn't auto-backup your data)&lt;/li&gt;
&lt;li&gt;Security patching (Docker images need updates)&lt;/li&gt;
&lt;li&gt;Scaling if load increases&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  n8n Cloud: Set It and Forget It
&lt;/h2&gt;

&lt;p&gt;I use &lt;a href="https://chasebot.online/go/n8n?utm_source=system3_hugo" rel="noopener noreferrer"&gt;n8n Cloud&lt;/a&gt; for clients, prototypes, and workflows that don't need self-hosted's features. The appeal is simple: I don't think about infrastructure.&lt;/p&gt;

&lt;h3&gt;
  
  
  Getting Started with n8n Cloud
&lt;/h3&gt;

&lt;p&gt;Sign up at &lt;a href="https://chasebot.online/go/n8n?utm_source=system3_hugo" rel="noopener noreferrer"&gt;n8n Cloud&lt;/a&gt;. The free tier includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Up to 10 active workflows&lt;/li&gt;
&lt;li&gt;400 executions/month&lt;/li&gt;
&lt;li&gt;30-day execution history&lt;/li&gt;
&lt;li&gt;One user account&lt;/li&gt;
&lt;li&gt;All node types and basic auth methods&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here's what you get out of the box:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"tier"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Free"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"workflows"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"monthly_executions"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;400&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"execution_history_days"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"users"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"support"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Community"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"uptime_sla"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"No SLA"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"backups"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Automatic (14 days)"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Paid plans start at $20/month (Professional) and scale to $490/month (Enterprise). Each tier includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;More workflows and executions&lt;/li&gt;
&lt;li&gt;Longer history retention&lt;/li&gt;
&lt;li&gt;Multiple users and teams&lt;/li&gt;
&lt;li&gt;Priority support&lt;/li&gt;
&lt;li&gt;Custom domain for webhooks&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  n8n Cloud Strengths
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Zero DevOps&lt;/strong&gt;: I literally log in and build. Updates happen automatically. Zero downtime.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Multi-user teams&lt;/strong&gt;: Invite colleagues, assign roles, collaborate on workflows.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Built-in monitoring&lt;/strong&gt;: Execution logs, error alerts, performance dashboards.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Managed backups&lt;/strong&gt;: n8n keeps 14 days of automatic backups. No manual work.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Webhook URLs out of the box&lt;/strong&gt;: When you create a webhook trigger, n8n gives you a URL like &lt;code&gt;https://n8n-instance.n8n.cloud/webhook/abc123&lt;/code&gt;. No custom domain setup needed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Global CDN&lt;/strong&gt;: Webhooks and API calls route through optimized infrastructure.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Compliance features&lt;/strong&gt;: SSO, audit logs, IP whitelisting on higher tiers.&lt;/p&gt;

&lt;p&gt;I also appreciate that &lt;a href="https://chasebot.online/go/n8n?utm_source=system3_hugo" rel="noopener noreferrer"&gt;n8n Cloud&lt;/a&gt; is great for building workflows that replace expensive SaaS—you can read my guide on &lt;a href="https://dev.to/blog/n8n-replace-saas-tools/"&gt;5 n8n workflows that replace $200/month in SaaS tools&lt;/a&gt; for practical examples.&lt;/p&gt;

&lt;h3&gt;
  
  
  n8n Cloud Trade-Offs
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Execution limits&lt;/strong&gt;: Free tier caps at 400/month. That's ~13 per day. If your workflow triggers once per minute, you'll hit this in hours.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Vendor lock-in&lt;/strong&gt;: Exporting workflows is straightforward (JSON), but if n8n changes pricing or shuts down (unlikely, but theoretically), you're dependent on them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Data residency&lt;/strong&gt;: Your data lives on n8n's servers (AWS). Not ideal for GDPR-strict compliance.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No offline mode&lt;/strong&gt;: If n8n Cloud is down, your webhooks won't process.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Shared infrastructure&lt;/strong&gt;: In theory, noisy neighbors could affect your performance (though n8n isolates resources well).&lt;/p&gt;




&lt;h2&gt;
  
  
  Cost Breakdown: Where Your
&lt;/h2&gt;

</description>
      <category>n8n</category>
      <category>selfhosted</category>
      <category>cloud</category>
      <category>automation</category>
    </item>
    <item>
      <title>5 n8n Workflows That Replace $200/Month in SaaS Tools</title>
      <dc:creator>Raizan</dc:creator>
      <pubDate>Thu, 09 Apr 2026 09:04:41 +0000</pubDate>
      <link>https://dev.to/chasebot/5-n8n-workflows-that-replace-200month-in-saas-tools-294l</link>
      <guid>https://dev.to/chasebot/5-n8n-workflows-that-replace-200month-in-saas-tools-294l</guid>
      <description></description>
      <category>n8n</category>
      <category>automation</category>
      <category>saas</category>
      <category>selfhosted</category>
    </item>
  </channel>
</rss>
