<?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: Elder Fernandes</title>
    <description>The latest articles on DEV Community by Elder Fernandes (@enfernandes).</description>
    <link>https://dev.to/enfernandes</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4077759%2Fc40a93cd-86b8-4203-a43d-f0eca4a255cc.jpg</url>
      <title>DEV Community: Elder Fernandes</title>
      <link>https://dev.to/enfernandes</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/enfernandes"/>
    <language>en</language>
    <item>
      <title>Stop Paying Zapier: How to Self-Host n8n on Docker for Unlimited Automations</title>
      <dc:creator>Elder Fernandes</dc:creator>
      <pubDate>Fri, 14 Aug 2026 13:56:34 +0000</pubDate>
      <link>https://dev.to/enfernandes/stop-paying-zapier-how-to-self-host-n8n-on-docker-for-unlimited-automations-13ok</link>
      <guid>https://dev.to/enfernandes/stop-paying-zapier-how-to-self-host-n8n-on-docker-for-unlimited-automations-13ok</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://selfhoststack-8z4.pages.dev/alternatives/zapier" rel="noopener noreferrer"&gt;SelfHostStack&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Workflow automation is the lifeblood of modern online businesses. Whether you are synchronizing Stripe payments to Discord, parsing lead emails into Airtable, or orchestrating multi-step AI agents with OpenAI and Anthropic APIs, automation saves hundreds of manual hours.&lt;/p&gt;

&lt;p&gt;The problem? &lt;strong&gt;Zapier's pricing model actively penalizes you for growing.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;On Zapier, 50,000 tasks/month costs &lt;strong&gt;$299/month ($3,588/year)&lt;/strong&gt;. If you run a data enrichment loop or high-frequency webhook trigger, you will burn through your quota in days.&lt;/p&gt;

&lt;p&gt;Here is how you can self-host &lt;strong&gt;n8n&lt;/strong&gt; on Docker for unlimited runs at &lt;strong&gt;€3.79/month&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why n8n Outperforms Zapier for Developers &amp;amp; Power Users
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Zero Execution Metering:&lt;/strong&gt; Run 100 tasks or 1,000,000 tasks. The cost remains exactly the same: your VPS server price.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Native AI Agent Nodes:&lt;/strong&gt; n8n features first-class LangChain and AI Agent nodes. You can plug in OpenAI, Claude, or local Ollama LLMs, give them tools (search, database query, scrapers), and maintain conversational memory across sessions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Custom JavaScript and Python Execution:&lt;/strong&gt; Need complex data transformations? Write native JS or Python directly inside any workflow node.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Local Network Access:&lt;/strong&gt; Connect directly to internal PostgreSQL databases, Redis queues, and local microservices behind your private VPC firewall without exposing them to the public internet.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  The Production Docker Compose Setup for n8n
&lt;/h2&gt;

&lt;p&gt;Here is the exact production-tested &lt;code&gt;docker-compose.yml&lt;/code&gt; to spin up n8n with persistent storage:&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;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;docker.n8n.io/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;restart&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;always&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;environment&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_HOST=n8n.yourdomain.com&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;N8N_PORT=5678&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;N8N_PROTOCOL=https&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;NODE_ENV=production&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;WEBHOOK_URL=https://n8n.yourdomain.com/&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;GENERIC_TIMEZONE=UTC&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;volumes&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;h2&gt;
  
  
  Step-by-Step 5-Minute Deploy Guide
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Step 1: Spin Up a $4/mo VPS
&lt;/h3&gt;

&lt;p&gt;We recommend &lt;strong&gt;Hetzner Cloud CX22&lt;/strong&gt; (2 vCPUs, 4GB RAM, €3.79/mo) or a &lt;strong&gt;DigitalOcean Droplet&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2: Install Docker
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://get.docker.com | sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 3: Launch n8n
&lt;/h3&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 &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;cd&lt;/span&gt; ~/n8n
nano docker-compose.yml &lt;span class="c"&gt;# Paste the snippet above&lt;/span&gt;
docker compose up &lt;span class="nt"&gt;-d&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 4: Reverse Proxy with SSL (Caddy)
&lt;/h3&gt;

&lt;p&gt;Point your DNS A-record (e.g. &lt;code&gt;n8n.yourdomain.com&lt;/code&gt;) to your server IP, then set up Caddy:&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;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; caddy
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Edit &lt;code&gt;/etc/caddy/Caddyfile&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;n8n.yourdomain.com {
    reverse_proxy localhost:5678
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Reload Caddy: &lt;code&gt;sudo systemctl reload caddy&lt;/code&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Savings Breakdown
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Automation Volume&lt;/th&gt;
&lt;th&gt;Zapier Cloud&lt;/th&gt;
&lt;th&gt;Self-Hosted n8n (Hetzner)&lt;/th&gt;
&lt;th&gt;Your Savings&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;5,000 tasks/mo&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$49 / mo&lt;/td&gt;
&lt;td&gt;€3.79 / mo (~$4.10)&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$538 / year&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;50,000 tasks/mo&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$299 / mo&lt;/td&gt;
&lt;td&gt;€3.79 / mo (~$4.10)&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$3,190 / year&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;250,000 tasks/mo&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$899 / mo&lt;/td&gt;
&lt;td&gt;€7.14 / mo (~$7.70)&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$10,695 / year&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Automating your business should not come with a massive tax on every transaction. By running n8n on your own infrastructure, you unlock limitless workflows, full control over private data, and deep AI Agent orchestration.&lt;/p&gt;

&lt;p&gt;For more open-source software guides and production templates, visit &lt;a href="https://selfhoststack-8z4.pages.dev" rel="noopener noreferrer"&gt;SelfHostStack&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>selfhosted</category>
      <category>docker</category>
      <category>devops</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Why We Dumped Firebase for Supabase and PocketBase (And How to Self-Host Them)</title>
      <dc:creator>Elder Fernandes</dc:creator>
      <pubDate>Fri, 14 Aug 2026 13:49:12 +0000</pubDate>
      <link>https://dev.to/enfernandes/why-we-dumped-firebase-for-supabase-and-pocketbase-and-how-to-self-host-them-30cg</link>
      <guid>https://dev.to/enfernandes/why-we-dumped-firebase-for-supabase-and-pocketbase-and-how-to-self-host-them-30cg</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://selfhoststack-8z4.pages.dev/alternatives/firebase" rel="noopener noreferrer"&gt;SelfHostStack&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;For years, Firebase was the default backend-as-a-service (BaaS) for web and mobile startups. "Focus on your product, let Google manage the database."&lt;/p&gt;

&lt;p&gt;Until you wake up to a surprise invoice because an unindexed Firestore query ran in an infinite &lt;code&gt;useEffect&lt;/code&gt; loop.&lt;/p&gt;

&lt;p&gt;In this breakdown, we examine why modern developers are fleeing Firebase in favor of &lt;strong&gt;Supabase&lt;/strong&gt; (open-source PostgreSQL powerhouse) and &lt;strong&gt;PocketBase&lt;/strong&gt; (single-binary SQLite speed), complete with Docker Compose templates and production hardware recommendations.&lt;/p&gt;




&lt;h2&gt;
  
  
  The 3 Inherent Flaws of Firebase
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Vendor Lock-In:&lt;/strong&gt; Firestore's proprietary NoSQL document format makes complex relational queries painful and migrations nearly impossible without writing custom ETL pipelines.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Per-Read/Write Pricing Anxiety:&lt;/strong&gt; Every document read, write, and delete is metered. A simple dashboard refresh with nested collections can trigger thousands of billable operations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No Native Vector AI Support:&lt;/strong&gt; In the era of AI and LLM embeddings, Firestore lacks native vector indexing (like PostgreSQL's &lt;code&gt;pgvector&lt;/code&gt;).&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Option 1: Supabase — The Full PostgreSQL Powerhouse
&lt;/h2&gt;

&lt;p&gt;If your app requires relational data integrity, complex SQL aggregations, foreign keys, row-level security (RLS), and vector search for AI embeddings, &lt;strong&gt;Supabase&lt;/strong&gt; is the gold standard.&lt;/p&gt;

&lt;h3&gt;
  
  
  Supabase Highlights:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;True PostgreSQL:&lt;/strong&gt; Full access to standard SQL, extensions (&lt;code&gt;pgvector&lt;/code&gt;, &lt;code&gt;postgis&lt;/code&gt;, &lt;code&gt;pg_trgm&lt;/code&gt;), and standard database dumps.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Instant APIs:&lt;/strong&gt; Generates REST and GraphQL endpoints automatically based on table schemas.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Realtime WebSockets:&lt;/strong&gt; Listen to database INSERT/UPDATE/DELETE events in real time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;S3 Object Storage:&lt;/strong&gt; Built-in file upload buckets for images and documents.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Recommended Production Specs:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Hetzner CX32&lt;/strong&gt; (4 vCPU, 8GB RAM, 80GB NVMe) — €7.14/month.&lt;/li&gt;
&lt;li&gt;Effortlessly serves thousands of concurrent API requests.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Option 2: PocketBase — The 1-File Wonder for Indie Devs
&lt;/h2&gt;

&lt;p&gt;If Supabase feels too heavy for your lightweight MVP or side project, &lt;strong&gt;PocketBase&lt;/strong&gt; is a revelation.&lt;/p&gt;

&lt;p&gt;PocketBase is written in Go and packages an entire BaaS into a single standalone binary (&amp;lt;35MB):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Embedded &lt;strong&gt;SQLite with WAL mode&lt;/strong&gt; (Write-Ahead Logging) handling 10,000+ reads/sec.&lt;/li&gt;
&lt;li&gt;Real-time subscriptions over Server-Sent Events (SSE).&lt;/li&gt;
&lt;li&gt;Built-in user authentication (OAuth2: Google, GitHub, Apple).&lt;/li&gt;
&lt;li&gt;File storage and admin dashboard UI included out of the box.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;RAM usage: &amp;lt; 40 MB at idle.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  PocketBase Docker Compose:
&lt;/h3&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;pocketbase&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;ghcr.io/muchobien/pocketbase: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;pocketbase&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;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;8090:8090"&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;./pb_data:/pb_data&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"&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;wget"&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;--no-verbose"&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;--tries=1"&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;--spider"&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;http://localhost:8090/api/health"&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;3&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run &lt;code&gt;docker compose up -d&lt;/code&gt;, navigate to &lt;code&gt;http://your-server-ip:8090/_/&lt;/code&gt;, and your backend is live in under 60 seconds.&lt;/p&gt;




&lt;h2&gt;
  
  
  Cost Comparison: 1 Year Projection
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Firebase Cloud&lt;/th&gt;
&lt;th&gt;Self-Hosted Supabase (VPS)&lt;/th&gt;
&lt;th&gt;Self-Hosted PocketBase (VPS)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Database Engine&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Proprietary Firestore NoSQL&lt;/td&gt;
&lt;td&gt;Pure PostgreSQL 15&lt;/td&gt;
&lt;td&gt;Embedded SQLite WAL&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;10M DB Operations&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;~$18 - $45/mo&lt;/td&gt;
&lt;td&gt;$0 (included)&lt;/td&gt;
&lt;td&gt;$0 (included)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;File Storage (100GB)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$2.60/mo + Egress&lt;/td&gt;
&lt;td&gt;€3.81/mo (Hetzner Box)&lt;/td&gt;
&lt;td&gt;€3.81/mo (Hetzner Box)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Fixed Server Cost&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$0 base + variable&lt;/td&gt;
&lt;td&gt;€7.14/mo&lt;/td&gt;
&lt;td&gt;€3.79/mo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Total 1-Year Cost&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$600 - $2,500+&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;~€85.68 ($92)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;~€45.48 ($49)&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;You don't need to surrender your project's database to proprietary cloud silos. With Supabase and PocketBase, you get faster development speed, zero vendor lock-in, and a predictable monthly bill that never spikes.&lt;/p&gt;

&lt;p&gt;Discover full deployment tutorials and 20+ other SaaS alternatives at &lt;a href="https://selfhoststack-8z4.pages.dev" rel="noopener noreferrer"&gt;SelfHostStack&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>selfhosted</category>
      <category>opensource</category>
      <category>webdev</category>
      <category>docker</category>
    </item>
    <item>
      <title>How I Replaced $450/mo in SaaS Subscriptions with a Single $4 Hetzner VPS (And Slept Better)</title>
      <dc:creator>Elder Fernandes</dc:creator>
      <pubDate>Fri, 14 Aug 2026 13:47:11 +0000</pubDate>
      <link>https://dev.to/enfernandes/how-i-replaced-450mo-in-saas-subscriptions-with-a-single-4-hetzner-vps-and-slept-better-1175</link>
      <guid>https://dev.to/enfernandes/how-i-replaced-450mo-in-saas-subscriptions-with-a-single-4-hetzner-vps-and-slept-better-1175</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://selfhoststack-8z4.pages.dev" rel="noopener noreferrer"&gt;SelfHostStack&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Every modern tech team hits the same inflection point. You start building your side project or startup with "generous free tiers":&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Google Analytics 4 for traffic&lt;/li&gt;
&lt;li&gt;Zapier for lead notifications&lt;/li&gt;
&lt;li&gt;Sentry for crash tracking&lt;/li&gt;
&lt;li&gt;1Password / Bitwarden cloud for shared team credentials&lt;/li&gt;
&lt;li&gt;Better Uptime for health pings&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For the first three months, everything looks free. Then you launch.&lt;/p&gt;

&lt;p&gt;Traffic picks up, your users trigger hundreds of webhook events, your frontend throws a minor React render loop that floods Sentry with 50,000 exceptions, and suddenly you get a $480 invoice notification from your credit card.&lt;/p&gt;

&lt;p&gt;Here is the exact setup I used to migrate 5 core SaaS tools to a single €3.79/mo Hetzner Cloud VPS (CX22 — 2 vCPUs, 4GB RAM) using Docker Compose, saving over $5,000/year while regaining 100% data privacy.&lt;/p&gt;




&lt;h2&gt;
  
  
  The SaaS vs. Self-Hosted Reality Check
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Proprietary SaaS&lt;/th&gt;
&lt;th&gt;Typical Monthly Cost&lt;/th&gt;
&lt;th&gt;Self-Hosted Replacement&lt;/th&gt;
&lt;th&gt;Resource Usage (RAM)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Google Analytics (GA4)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$0 (data harvesting) / $50k&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Umami Analytics&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;~120 MB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Zapier (Starter Plan)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$29.99 - $120/mo&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;n8n&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;~350 MB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Sentry (Team Plan)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$26 - $80/mo&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;GlitchTip&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;~280 MB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Better Uptime&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$30/mo&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Uptime Kuma&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;~90 MB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;1Password Teams (5 seats)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$39.95/mo&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Vaultwarden&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;~30 MB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Total&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;~$450/month&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Hetzner CX22 (€3.79/mo)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;~870 MB / 4000 MB&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Total RAM utilized: &lt;strong&gt;less than 1GB out of 4GB available&lt;/strong&gt;. The server runs cool at ~2% CPU utilization.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Web Analytics: Say Goodbye to Cookie Banners with Umami
&lt;/h2&gt;

&lt;p&gt;Google Analytics 4 is a bloated tracking monster that triggers mandatory GDPR cookie consent banners in Europe and slows down site speed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Umami&lt;/strong&gt; is an open-source analytics engine with a script payload under 2KB (10x lighter than GA4). It collects zero personal identifiable information, requires no cookie banners, and when served through your own domain, bypasses 99% of browser ad-blockers.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Docker Compose Configuration:
&lt;/h3&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;umami&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;ghcr.io/umami-software/umami:postgresql-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;umami&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;always&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;3000:3000"&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;DATABASE_URL&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;postgresql://umami:securepassword123@db:5432/umami&lt;/span&gt;
      &lt;span class="na"&gt;DATABASE_TYPE&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;postgresql&lt;/span&gt;
      &lt;span class="na"&gt;APP_SECRET&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;your_random_32_byte_secret_here&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;db&lt;/span&gt;
  &lt;span class="na"&gt;db&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:16-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;umami-db&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;always&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;umami&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;umami&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;securepassword123&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;umami-db-data:/var/lib/postgresql/data&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;umami-db-data&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  2. Team Passwords &amp;amp; Secrets: Vaultwarden
&lt;/h2&gt;

&lt;p&gt;Centralized password databases make enticing breach targets. &lt;strong&gt;Vaultwarden&lt;/strong&gt; is a lightweight Bitwarden server written in Rust. It consumes less than 30MB of RAM and works seamlessly with official Bitwarden mobile apps, desktop clients, and browser extensions.&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;vaultwarden&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;vaultwarden/server: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;vaultwarden&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;always&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;WEBSOCKET_ENABLED&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;true"&lt;/span&gt;
      &lt;span class="na"&gt;SIGNUPS_ALLOWED&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;false"&lt;/span&gt; &lt;span class="c1"&gt;# Lock registration after creating admin&lt;/span&gt;
      &lt;span class="na"&gt;ADMIN_TOKEN&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;your_secure_admin_token"&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;vw-data:/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;8080:80"&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;vw-data&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  3. Workflow Automation: Unlimited Runs with n8n
&lt;/h2&gt;

&lt;p&gt;Zapier meters every single task execution. A multi-step workflow that triggers 1,000 times a day will easily run you into hundreds of dollars every billing cycle.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;n8n&lt;/strong&gt; gives you visual drag-and-drop nodes, AI agent connectors, and custom Python/Node.js script nodes with &lt;strong&gt;unlimited executions&lt;/strong&gt;.&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;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;docker.n8n.io/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;restart&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;always&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;environment&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_HOST=n8n.yourdomain.com&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;N8N_PORT=5678&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;N8N_PROTOCOL=https&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;NODE_ENV=production&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;WEBHOOK_URL=https://n8n.yourdomain.com/&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;volumes&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;h2&gt;
  
  
  How to Glue It Together: Caddy Reverse Proxy &amp;amp; Automatic SSL
&lt;/h2&gt;

&lt;p&gt;To expose each service securely under its own subdomain (e.g. &lt;code&gt;analytics.yourdomain.com&lt;/code&gt;, &lt;code&gt;vault.yourdomain.com&lt;/code&gt;, &lt;code&gt;n8n.yourdomain.com&lt;/code&gt;), use &lt;strong&gt;Caddy&lt;/strong&gt;. Caddy automatically provisions and auto-renews free Let's Encrypt TLS certificates.&lt;/p&gt;

&lt;h3&gt;
  
  
  Sample &lt;code&gt;Caddyfile&lt;/code&gt;:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;analytics.yourdomain.com {
    reverse_proxy localhost:3000
}

vault.yourdomain.com {
    reverse_proxy localhost:8080
}

n8n.yourdomain.com {
    reverse_proxy localhost:5678
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  The Verdict
&lt;/h2&gt;

&lt;p&gt;Self-hosting in 2026 is no longer about managing obscure Linux daemons. With Docker Compose and a reliable $4/mo VPS provider like Hetzner or DigitalOcean, you can run an entire enterprise stack with zero cloud lock-in.&lt;/p&gt;

&lt;p&gt;Looking for more copy-paste Docker Compose templates and hardware minimums? Check out the full interactive catalog at &lt;a href="https://selfhoststack-8z4.pages.dev" rel="noopener noreferrer"&gt;SelfHostStack&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>devops</category>
      <category>selfhosted</category>
      <category>docker</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
