tutorials

Self-Hosting for Small Businesses: Practical Guide for Solopreneurs

17 min read
BareStack Team

TL;DR: Get off bloated SaaS where it hurts your budget and privacy — this guide gives a minimal, low-cost self-hosting roadmap for solopreneurs and tiny teams: decide (score needs), deploy (small VPS or Pi + reverse proxy), secure (TLS, backups, least privilege), and maintain (monitor, update, test restores) — finish with a handy checklist.

Introduction Why this matters now: SaaS tools have ballooned into full-time admin jobs, nickel-and-diming you while hoovering up your data. For solopreneurs and small teams, that’s wasted cash, leaky privacy, and product bloat you’ll never use. Self-hosting isn’t about being an ops hero — it’s about owning the parts that matter: client data, invoices, and core workflows. You can stay small, fast, private, and predictable.

What you’ll learn: a no-fluff, practical roadmap for deciding whether to self-host, what a minimal stack looks like, how to deploy and secure it without losing weekends, cost and scaling rules of thumb, migration tips, and a 30-day action plan. This is BareStack-style: minimalism, honesty, and tools that do the job without sucking resources.

Why self-hosting for small businesses matters

Self-hosting isn’t an ideological flex — it’s practical. For small businesses, the benefits are concrete: control over data, fewer surprise fees, faster tooling tailored to your needs, and the ability to avoid vendor lock-in. Let’s unpack why these matter, and when the math doesn’t add up.

The control argument: own your data, not their roadmap

SaaS companies iterate on what makes them money or grows their metrics, not your workflow. When your invoices, client contacts, or sales pipeline live on someone else’s roadmap, you’re one UI change, price increase, or privacy policy update away from chaos. Self-hosting puts you in the driver’s seat: you choose backup cadence, retention policies, and who sees the data. For freelancers handling client info, that control equals trust — a tangible selling point.

If your business relies on client data or repeatable workflows, owning that data is insurance. No more “we’re sunsetting that feature” surprises.

The cost and performance case: predictable bills, less bloat

SaaS pricing often starts cheap and telescopes into dozens of dollars per seat plus hidden add-ons. For a solo freelancer, a $6–12/month VPS and a $3/month domain can replace a $30–60/month SaaS plan — and that’s conservative. Self-hosted services are typically lean: they do one thing and do it well. That reduces CPU/memory waste, lowers response times, and avoids paying for 80% of features you never use.

Concrete example: Host a minimal CRM and invoicing stack on a $6/month VPS (2GB RAM, 1 vCPU), run Caddy for TLS, and schedule nightly DB dumps to an offsite S3-compatible bucket — predictable, cheap, and fast.

When self-hosting is actually the smarter choice (and when it isn't)

Smart choice:

  • You handle sensitive client data and want privacy guarantees.
  • You can tolerate modest ops overhead.
  • You aim to minimize long-term recurring SaaS costs.
  • You need customization older SaaS won’t allow.

Not smart:

  • You need enterprise-level SLAs and 24/7 uptime with a human on-call.
  • You lack any tolerance for maintenance windows or basic sysadmin.
  • The app depends on a vast ecosystem that only SaaS offers (e.g., large marketing automation platforms).

If your business absolutely can’t handle downtime, a hybrid path (managed hosting or selective SaaS for critical services) is often the right move.

Definitions that actually help

If you’ve skimmed infra docs and come away dizzy, here’s a short glossary that actually helps with decisions.

What ‘self-hosting’ really means (servers, containers, and trade-offs)

Self-hosting: you run software on infrastructure you control (a physical machine, a VPS, or a cloud VM). Common patterns:

  • Single-binary or packaged app on a server: simplest, lowest overhead.
  • Containerized (Docker): portable, repeatable, slightly higher complexity.
  • Orchestration (Kubernetes): overkill for solos, high complexity.

Trade-offs: simpler deploys are easier to manage but may be less portable. Containers aid consistency but add an extra layer to understand.

Managed hosting vs VPS vs SaaS: what you’re signing up for

  • SaaS: Provider hosts, you log in. Low ops, high vendor control.
  • VPS (Virtual Private Server): You get a small VM — full control, moderate cost, you handle ops.
  • Managed hosting: Provider runs your app on your behalf (managed VPS, PaaS). Middle ground — you offload ops, but may pay more.

Key terms: uptime, backups, reverse proxy, TLS, container

  • Uptime: percentage of time service is running. 99.9% - ~43 min downtime/month.
  • Backups: copies of data; test restores matter more than frequency.
  • Reverse proxy: front-end server (Caddy/Nginx) handling TLS and routing to apps.
  • TLS: encryption for web traffic — non-negotiable.
  • Container: isolated package of an app + its deps (Docker is most common).

Self-hosting vs SaaS vs Managed hosting (quick comparison)

Here’s the quick table you can use when deciding:

OptionCost predictabilityControlMaintenance burdenIdeal for
SaaSLow ops, variable long-termLowMinimalNon-technical solopreneurs
Managed hostingMediumMediumModerate (provider helps)Small teams wanting convenience
Self-hosting (DIY)Low if optimizedHighHigh (you do it)Solopreneurs/freelancers who value control

Tip: Treat this as a sliding scale. As your need for control rises and tolerance for ops increases, move left-to-right from SaaS to self-hosting.

How to decide: checklist before you self-host

Self-hosting is a choice — do the math. Here’s a checklist split into business-fit, technical-fit, and risk-fit to make the decision rational, not emotional.

Business-fit questions (who benefits, ROI, compliance)

  • Who benefits directly from owning data? (You, clients, partners)
  • Can you quantify savings vs SaaS for 12–24 months?
  • Are there compliance or privacy requirements (GDPR, client NDAs)?
  • Is owning client data a competitive advantage / trust signal?
  • Does your product roadmap need features that SaaS vendors won’t prioritize?

If answers skew toward privacy, predictable costs, or necessary customization, self-hosting is a strong candidate.

Technical-fit questions (team skills, time, backups, monitoring)

  • Do you or someone on your team understand basic Linux, SSH, and backups?
  • How many hours/week can you allocate to maintenance?
  • Can you automate backups, updates, and monitoring alerts?
  • Is there someone who can test a restore when things go wrong?

If the answer is “no” to all, managed hosting is a better bridge than jumping straight to DIY.

Risk-fit questions (downtime tolerance, recovery plan, legal)

  • What downtime can you tolerate per month? (0–60+ minutes)
  • Do you have a documented recovery plan and test schedule?
  • What legal obligations do you have regarding client data? (contracts, retention)
  • Who bears the reputational cost if things break?

If downtime tolerance is near zero, consider hybrid or managed solutions. If you can tolerate short maintenance windows and have a tested restore process, DIY can save money.

Deep dive: minimal stack recommendations

Keep it tiny. The goal: minimal components that cover routing, compute, storage, TLS, and backups.

Networking basics: domain, DNS, reverse proxy (Caddy/Nginx), TLS

  • Domain: Buy a domain (~$10–15/yr) and use it for all services (crm.yourdomain.com).
  • DNS: Use a reputable DNS provider (Cloudflare, AWS Route 53). Cloudflare’s free tier is great for DNS and optional CDN.
  • Reverse proxy: Use Caddy or Nginx. Caddy is worth the praise — automatic TLS, simple config, and fewer gotchas.
  • TLS: TLS must be automatic — Let’s Encrypt via Caddy or Certbot. No excuses for HTTP-only.

Concrete config: Point DNS A record to VPS IP. Put Caddy on port 80/443, reverse proxy to app on internal port (e.g., 127.0.0.1:8000).

Compute options: Raspberry Pi, VPS (DigitalOcean), small cloud VM

  • Raspberry Pi: Good for experimentation, one-person offline setups. Pros: low cost, local control. Cons: unreliable for remote public services unless you handle static IP, power, and backups.
  • VPS: DigitalOcean, Linode, Hetzner. Smallest plans: $4–6/month for 1–2GB RAM, fine for 1–10 users for lightweight apps.
  • Small cloud VM: AWS Lightsail/GCP are options but can be pricier per spec.

Recommendation: Start on a $6–12/mo VPS with a monthly snapshot backup. Move to multi-node only when load or uptime demands grow.

Storage and backups: snapshot plan, offsite backups, simple retention

  • Snapshots: Daily or weekly VPS snapshots. Don’t rely solely on snapshots for long-term retention.
  • Offsite backups: Use S3-compatible storage (Backblaze B2, Wasabi, AWS S3) for DB dumps and attachments. Automate with rclone or built-in app exporters.
  • Retention: Keep 7 daily backups, 4 weekly, and 6 monthly snapshots. This gives a reasonable restore window without exploding costs.

Backup sanity rule: A backup that hasn’t been restored is not a backup. Test restores quarterly.

Deep dive: deploy and secure with minimal fuss

You don’t need Kubernetes to be secure. Use repeatable, simple deploy patterns and a tight security checklist.

Deploy patterns: container vs package vs single-binary (keep it simple)

  • Single-binary/package: Easiest for simple apps (just run the binary or distro package). Low overhead.
  • Docker container: Slightly more complex but gives consistent environments. Use docker-compose for small stacks.
  • Kubernetes: Don’t. Not for 1–10 users unless you already have cluster ops skills.

Deploy pattern recommendation: For most solopreneurs, docker-compose is the sweet spot. It lets you bring containers up and down reliably, keeps dependencies isolated, and is easy to migrate later.

Security checklist: TLS, fail2ban, least-privilege, automated updates

  • TLS: Enforce HTTPS, redirect HTTP to HTTPS, enable HSTS if you’re confident.
  • Firewall: Block unused ports. UFW on Ubuntu is fine.
  • Fail2ban: Protect SSH and web endpoints against brute force.
  • Least-privilege: Run services as dedicated users, restrict DB accounts to required privileges.
  • Automated updates: Enable unattended-upgrades for security patches or schedule weekly maintenance to apply updates.
  • Secrets: Don’t store secrets in plain text. Use environment variables and a secrets file with limited access, or a small secrets manager.

Security is boring but unforgiving. Small measures (TLS + firewall + backups) prevent 90% of common disasters.

Maintenance: monitoring, logging, patch routine, and rollback plan

  • Monitoring: Lightweight alerts — use UptimeRobot or Netlify for uptime checks and a simple alert channel (email/Slack).
  • Logging: Ship logs to files and rotate. For small setups, keep logs local and rotate with logrotate; for more, use a log-forwarder.
  • Patch routine: Weekly security updates; quarterly major upgrades. Document the process.
  • Rollback: Keep prior working image/snapshot. Before major upgrades, snapshot and test in a staging container.

Practical rule: Schedule a 1-hour weekly maintenance window. In practice, most weeks this is just review + small updates; every month it’s a simple yum/apt update and docker-compose pull + restart.

Cost, performance and scaling considerations

Money and performance are the real-world levers you’ll tweak as you grow. Here are numbers and when to scale.

Real-world cost estimates (monthly) for 1–10 users

Baseline (cheap):

  • VPS (2GB/1vCPU): $6–12/mo
  • Domain/SSL: $1–2/mo (domain amortized), TLS free via Let’s Encrypt
  • Offsite backups (Backblaze B2): $0.005/GB/month — expect $1–5/mo for small DBs/attachments
  • Monitoring (UptimeRobot): free plan available

Total: ~$8–20/mo for minimal stack serving 1–10 users for light usage.

Mid-tier (redundancy + more storage):

  • VPS with more RAM/CPU: $18–40/mo
  • Daily snapshots or managed DB service: $10–30/mo
  • Backups + monitoring + optional CDN: $10–30/mo

Total: $40–100/mo for higher reliability and decent headroom.

These are order-of-magnitude numbers. Compare to SaaS at $15–40/user/month and the savings add up fast for solopreneurs.

Performance tuning basics: CPU, RAM, database connections

  • CPU: Most web apps are I/O-bound — ensure at least 1 vCPU; bump to 2 vCPU if you see high CPU waits.
  • RAM: 2GB handles many small stacks. Watch swap; disk I/O kills performance.
  • DB connections: Limit max connections (Postgres: 50 is typical default; for small VMs aim for 20-30). Use connection pooling (PgBouncer) if needed.
  • Disk: Use SSD-backed disks; IOPS matter for DB-heavy apps.

Monitor: CPU spike patterns, memory usage, and 95th percentile response time. Those tell you what to scale first.

When to move from single server to managed or multi-node

Move when:

  • Uptime requirements exceed what a single VM can provide.
  • Resource saturation (CPU/RAM/disk) persists despite tuning.
  • You need separate DB hosting with managed backups and replication.
  • Your team size means someone needs an SLA or on-call support.

Typical trigger: consistent CPU/RAM >80% under normal load or expensive downtime after a growth spurt.

Integrations and data ownership

Your stack shouldn’t become a walled garden. Plan for integrations, exports, and graceful exits.

Sync vs import/export: keeping integrations simple

  • Syncs: Real-time syncs to SaaS can be handy (e.g., to send emails via Mailgun). But they can introduce coupling and complexity.
  • Import/export: Prefer robust export formats (CSV, JSON) and periodic imports for downstream systems. Simple is reliable.

Practical approach: Use API-first apps that give you an export endpoint. If you need email delivery, use an SMTP relay instead of a full SaaS ESP for small volumes.

API-first thinking: preserve portability and future-proofing

Choose self-hosted software with a public API and standard export formats. That makes migrations trivial and lets you hook into other tools without brittle scrapers. If a project is closed-source or hard to export, that adds future lock-in risk.

Build for exit: assume at some point you’ll want to move data. Make exports and migration part of onboarding.

Migration plan: export formats, contact and invoice data, timelines

  • Inventory: list data types (contacts, invoices, attachments, tasks).
  • Export formats: CSV for contacts/invoices, JSON for complex objects, SQL dumps for DB.
  • Timelines: test export + import on staging. Plan a slow migration window (non-critical hours) and a short final freeze to sync last changes.
  • Attachments: migrate via rsync/S3 copy; ensure URLs and permissions are fixed post-migration.

Practical trick: Run both systems in parallel for 2 weeks, sync new records nightly, then do final cutover during a low-traffic period.

Case studies (short and real)

Concrete stories make decisions easier.

1) Freelancer: solo web designer uses a $6/mo VPS to host invoicing and CRM — saves 30% and keeps client data private

The freelancer replaced a $25/mo SaaS combo with a $6 VPS, BareCRM, and Backblaze B2 backups. Time invested: ~6 hours initial setup + 30–60 minutes/month maintenance. Outcome: cheaper, faster, and client trust increased. Lesson: For lightweight workloads, a small VPS is sufficient.

2) Two-person agency: Bare minimum stack on a managed VPS, automated daily backups, 1-hour weekly maintenance window

Two partners used a managed VPS (DigitalOcean Managed DB + $12 droplet), automated daily DB dumps to B2, and an uptime monitor. They outsource major upgrades to a contractor for $50/month. Outcome: low ops burden, predictable costs, quick restores when needed. Lesson: Managed services can offload pain points without full SaaS lock-in.

3) Small product studio: starts on SaaS, then migrates to self-hosted invoicing + BareCRM when predictable growth hits

A studio used a SaaS CRM for MVP. At $200/mo and after 18 months with steady revenue, they migrated to self-hosted BareCRM on a $40/mo stack, saving $1.5k/year and regaining full control over client billing data. Lesson: Start with SaaS for speed, migrate when growth makes DIY economical.

Decision framework you can apply today

Make this decision practical and replicable. Score your needs, pick a path, then act.

Step 1: Score your needs (control, cost, time) — 1–5 each

  • Control (1 low — 5 high): How important is data ownership and customization?
  • Cost sensitivity (1 low — 5 high): Is predictable, low-cost hosting necessary?
  • Time/ops tolerance (1 low — 5 high): How much time can you spend on maintenance?

Example scoring:

  • Control 4, Cost 4, Time 2 -> Managed hosting or minimal DIY with contractor help.
  • Control 2, Cost 1, Time 1 -> SaaS.

Step 2: Pick a path (SaaS / managed / DIY) based on score thresholds

  • If Control >-4 and Time >-3 -> DIY self-hosting (VPS + docker-compose).
  • If Control >-4 and Time <-2 -> Managed hosting or hire a contractor.
  • If Control <-2 and Time <-3 -> SaaS.

This is a guideline, not gospel. Adjust for compliance and uptime needs.

Step 3: Quick-start checklist (domain, VPS, TLS, backup, deploy app, test restore)

  • Buy/domain and set DNS records.
  • Provision $6–12/mo VPS.
  • Install Caddy and set up TLS.
  • Deploy app (docker-compose or package).
  • Configure automated DB dumps to B2 or S3.
  • Take snapshot and test a full restore.

Practical 30-day plan: week-by-week

  • Week 1: Score needs, pick stack, buy domain and VPS, install OS, set up firewall and SSH key auth.
  • Week 2: Install reverse proxy (Caddy), deploy app (docker-compose), configure TLS, initial data import.
  • Week 3: Set up backups, schedule snapshots, configure uptime checks, implement basic security (fail2ban, user perms).
  • Week 4: Test restore on a fresh VM, document processes, set weekly maintenance schedule.

Finish with an intentional cutover and a plan to review after 30 days.

Frequently asked questions

Answer the common stuff so you don’t get tangled.

How much technical skill do I need to self-host?

Basic Linux comfort: SSH, editing files (vim/nano), reading logs. Docker knowledge helps but isn’t mandatory. If you can follow a step-by-step guide, you can self-host. If you’re allergic to CLI, hire budgeting help or use managed hosting.

What are the real ongoing costs of self-hosting?

Expect $8–20/mo for a minimal stack (VPS + backups + domain), $40–100/mo for more reliability. Plus your time: plan 30–90 minutes/week for maintenance initially.

Can I self-host and still use SaaS tools selectively?

Absolutely. Use SaaS where it’s the clear winner (email marketing, payments) and self-host core business data. Hybrid is practical and common.

How do I back up and restore if something breaks?

Automate DB dumps and push to offsite storage daily. Keep snapshots for quick rollbacks. Quarterly, test a full restore to a fresh VM. If you can’t restore, the backup didn’t count.

Is self-hosting secure enough for client data?

Yes — if you implement basic security: TLS, firewall, access control, backups, and updates. For high-risk data (health records, etc.), consult legal/compliance experts; managed hosting with audited controls might be required.

When should I hire help or move to managed hosting?

Hire help when ops are consuming more than 2–4 hours/week or when uptime and legal compliance exceed your in-house capability. Move to managed hosting when you need SLAs or don’t want to deal with DB ops.

How do I migrate from SaaS to self-hosted without downtime?

Run both in parallel for a transition period. Sync nightly, do a final freeze for a few hours, test thoroughly, then flip DNS. Use short TTL during the cutover to minimize propagation delays.

Internal links and further reading

  • BareStack manifesto: /manifesto
  • Home / product pages: /
  • More guides and posts: /blog
  • Help and answers: /faq
  • Compare BareStack / BareCRM vs alternatives: /compare

Want to dig deeper? Start with the manifesto to understand the philosophy, then try BareCRM for the pragmatic, minimal CRM experience.

Conclusion: Own the stack, keep it tiny

Key takeaway: If you’re a solopreneur or a tiny team that values control, simplicity, and predictable costs, self-hosting can be a smarter, cheaper, and cleaner choice than expensive, bloated SaaS. Start small: domain, $6–12 VPS, Caddy for TLS, daily DB backups to B2, and a tested restore procedure. Keep the stack minimal and automate the boring stuff.

Call to action: Try BareCRM on a low-cost VPS or test our hosted demo — no bloat, no lock-in. If you want a minimal CRM that plays nice with self-hosting, check out BareCRM and compare us to the alternatives: /compare. Start small, own your data, and ship better work without the noise.