DEV Community

Elder Fernandes
Elder Fernandes

Posted on Originally published at selfhoststack-8z4.pages.dev

The $5/mo Solo Founder Stack: Replacing Zapier, GA4, BetterStack, 1Password, and Dropbox with Docker Compose

Every modern indie hacker, startup, or freelance agency runs into the same early-stage bottleneck: The SaaS Tax.

When you spin up a new product or project, the recurring bills stack up quickly:

  • Zapier: $30 to $100/mo for automated webhooks & lead routing.
  • Google Analytics 4: Heavy tracking scripts, cookie consent banners, ad-blocker blind spots, and GDPR liabilities.
  • BetterStack / Pingdom: $25/mo for basic uptime monitoring and a public status page.
  • 1Password / Bitwarden Cloud: $5 to $20/mo per seat for team credential sharing.
  • Dropbox / Google Workspace: $12 to $30/mo for file sync and client asset sharing.

Before you make your first dollar of revenue, you are easily spending $1,500 to $3,000+ per year on infrastructure that can run comfortably on a single $5/month VPS (such as Hetzner Cloud CX22 or DigitalOcean Droplet).

In this article, we’ll walk through the architectural blueprint of the 5 Essential Self-Hosted Stacks, why standard online "quickstart" configs fail in production, and how you can deploy all five in under an hour.


The 5 Core Self-Hosted Pillars

Proprietary SaaS Open-Source Replacement Resource Footprint Annual Savings
Zapier / Make n8n (PostgreSQL backend) ~350MB RAM $360 – $1,200/yr
Google Analytics 4 Umami (PostgreSQL) ~150MB RAM $0 + GDPR Freedom
BetterStack / Pingdom Uptime Kuma (SQLite) ~120MB RAM $300 – $600/yr
1Password / Dashlane Vaultwarden (Rust) ~30MB RAM $120 – $480/yr
Dropbox / GDrive Nextcloud Hub (Redis + Postgres) ~600MB RAM $180 – $720/yr

Total RAM required: ~1.25 GB, fitting easily on any 2GB or 4GB RAM VPS.


1. Automated Workflows: n8n (Replacing Zapier)

Zapier bills by task executions and locks multi-step branches behind premium tiers. n8n is a visual workflow automation platform with 400+ native integrations (Stripe, GitHub, Discord, Telegram, OpenAI, Airtable, PostgreSQL).

Production Hardening Requirements:

  • Database: Use PostgreSQL 16 instead of the default SQLite file to prevent database locks under concurrent webhook hits.
  • Execution Pruning: Enable EXECUTIONS_DATA_PRUNE=true with a 7-day TTL (EXECUTIONS_DATA_MAX_AGE=168) to prevent Postgres from filling up the disk.
  • Encryption Key: Set a dedicated N8N_ENCRYPTION_KEY in your environment variables so credentials survive database migrations.

Core Docker Compose Snippet:

services:
  n8n-db:
    image: postgres:16-alpine
    restart: unless-stopped
    environment:
      POSTGRES_USER: ${N8N_DB_USER}
      POSTGRES_PASSWORD: ${N8N_DB_PASSWORD}
      POSTGRES_DB: n8n
    volumes:
      - n8n_db_data:/var/lib/postgresql/data
    networks:
      - internal_net
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U ${N8N_DB_USER} -d n8n"]
      interval: 5s
      timeout: 5s
      retries: 5

  n8n:
    image: docker.n8n.io/n8nio/n8n:latest
    restart: unless-stopped
    depends_on:
      n8n-db:
        condition: service_healthy
    environment:
      - DB_TYPE=postgresdb
      - DB_POSTGRESDB_HOST=n8n-db
      - DB_POSTGRESDB_DATABASE=n8n
      - DB_POSTGRESDB_USER=${N8N_DB_USER}
      - DB_POSTGRESDB_PASSWORD=${N8N_DB_PASSWORD}
      - N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY}
      - EXECUTIONS_DATA_PRUNE=true
      - EXECUTIONS_DATA_MAX_AGE=168
      - WEBHOOK_URL=https://n8n.yourdomain.com/
    networks:
      - internal_net
      - proxy_net
Enter fullscreen mode Exit fullscreen mode

2. Privacy-Friendly Web Analytics: Umami (Replacing Google Analytics)

Google Analytics 4 is slow, heavily blocked by ad blockers (uBlock, Brave, Safari ITP), and legally hazardous in the EU due to US data transfers.

Umami is an ultra-lightweight (<2KB script), cookie-free analytics suite that records clean pageviews, referral sources, device types, and custom conversion events without triggering GDPR cookie banner mandates.

Production Hardening:

  • Share the isolated PostgreSQL instance with connection pooling.
  • Use a dedicated salt (APP_SECRET) for anonymized IP hashing.
  • Configure Caddy or Nginx reverse proxy with HTTP/2 and caching headers for /script.js.

3. Real-Time Status & Alerting: Uptime Kuma (Replacing BetterStack)

Uptime Kuma offers responsive HTTP/HTTPS, TCP, Ping, DNS, and Docker container health monitoring with out-of-the-box notifications to Telegram, Discord, Slack, PagerDuty, or Webhooks.

Production Hardening:

  • Mount a persistent Docker named volume for /app/data.
  • Restrict public access to the admin interface while exposing custom /status/public pages on your custom domain.
  • Enable automatic TLS through your reverse proxy.

4. Zero-Knowledge Password Vault: Vaultwarden (Replacing 1Password)

Vaultwarden is a lightweight, single-binary Rust implementation of the Bitwarden API. It is 100% compatible with the official Bitwarden iOS/Android apps, browser extensions, and CLI.

Production Hardening:

  • Disable Open Registrations: Once your admin account is created, immediately set SIGNUPS_ALLOWED=false.
  • WebSocket Notifications: Enable the WebSocket notifications container on port 3012 for instant cross-device synchronization.
  • SSL is Mandatory: WebCrypto APIs require HTTPS; browsers will block WebAuthn and passkey operations on plaintext HTTP.

5. Private Cloud Storage: Nextcloud Hub (Replacing Dropbox / Drive)

Nextcloud provides end-to-end file synchronization, document editing (via Collabora / OnlyOffice), automated phone camera roll backups, and secure file sharing links.

Production Hardening:

  • Pair with Redis for transactional file locking (MEMCACHE_LOCKING).
  • Set up a separate background cron.sh container running system cron every 5 minutes rather than using AJAX cron.
  • Enforce strict HSTS headers and DAV redirect rules on your reverse proxy.

Why Most "Quickstart" Setups Fail in Production

When beginners copy-paste snippets from scattered tutorials, they almost always hit these 4 landmines:

  1. Exposing Raw Database Ports: Binding 5432:5432 or 3306:3306 to 0.0.0.0 allows brute-force attacks across the public internet. All databases must live in internal Docker bridge networks.
  2. Missing Container Healthchecks: Services starting before PostgreSQL finishes initialization fail to boot and enter crash-restart loops.
  3. No Automated Backup Strategy: Storing state in Docker volumes without automated SQLite/Postgres dump scripts turns a corrupted disk into catastrophic data loss.
  4. Unmanaged SSL & Reverse Proxy Configs: Manual certbot certificates often break during renewals. Modern infrastructure should use Caddy or Nginx Proxy Manager with automatic Let's Encrypt / ZeroSSL renewal.

Test & Build Your Own Stack for Free

If you want to configure your custom setup and calculate your exact hardware needs and financial savings:


Want the Turnkey, Production-Ready Files?

If you prefer to skip 10+ hours of writing configuration files, testing healthchecks, and debugging reverse proxy rules:

We packaged all 5 complete stacks into the Self-Hosted Starter Stack Pack ($29):

  • 5 Battle-Tested docker-compose.yml files (n8n, Umami, Uptime Kuma, Vaultwarden, Nextcloud).
  • Hardened .env.example templates with pre-configured secure defaults.
  • Copy-paste Caddy & Nginx Reverse Proxy templates with automatic SSL.
  • Automated Backup & Restore Scripts (backup.sh with daily DB dumps and retention pruning).
  • Step-by-Step Deployment Guide (DEPLOY.md) and security hardening checklist.

Deploy once, own your data forever, and never pay the SaaS tax again.

👉 Get the Self-Hosted Starter Stack Pack on Gumroad ($29)

Top comments (0)