I have been running various services on my VPS for a while now. Some have been worth the effort, others were not. Here is where I have landed.

Worth self-hosting

Static sites and personal projects. This is the easiest category. A static site generator plus Nginx is trivial to maintain. No database, no runtime dependencies, minimal attack surface. Updates are a git pull and a rebuild. I cannot think of a reason to use a managed service for this.

Monitoring. I run a lightweight monitoring stack to keep tabs on my server. Uptime Kuma is a good example — a single Docker container that monitors HTTP endpoints, pings, and ports. It sends alerts via email or webhook when something goes down. Setup takes five minutes, and it has been completely reliable.

DNS (authoritative). Running your own authoritative DNS with something like Knot DNS or NSD is straightforward once configured. Zone file updates are predictable, and you have full control over TTLs and record types. I would not recommend running a recursive resolver though — that is a different level of complexity and exposure.

Git hosting. Gitea or Forgejo run well on modest hardware and provide a GitHub-like interface. Useful for private projects and mirrors. A Forgejo instance with SQLite uses about 100 MB of RAM.

Speed testing. Self-hosted speed test tools like LibreSpeed give you an independent way to measure connectivity to your server. I wrote more about this in a later post.

Not worth self-hosting (for me)

Email. The perennial answer. Running a mail server is not technically difficult — Postfix and Dovecot are well-documented. The problem is deliverability. Major providers are aggressive about filtering mail from small, unknown servers. You will spend more time managing SPF, DKIM, DMARC, reverse DNS, IP reputation, and delisting requests than you will spend actually using email. I use a paid email provider and do not miss running my own.

Database-backed web applications. Content management systems, project management tools, anything with a database and user accounts. The maintenance burden is real: backups, updates, security patches, dependency management. For personal use, managed services or SaaS tools are almost always less hassle.

Search engines. I experimented with self-hosted search (SearXNG). It works, but the instance needs regular attention as upstream sources change their APIs and rate limits. The maintenance-to-value ratio was not there for me.

The decision framework

When I evaluate whether to self-host something, I think about:

  1. Maintenance overhead. How often does it need attention? Static sites need almost none. Email needs constant vigilance.
  2. Failure impact. If the service goes down at 2 AM, does it matter? Monitoring and DNS matter. A personal Gitea instance can wait until morning.
  3. Data sensitivity. Hosting your own means you control the data. For some use cases this matters.
  4. Resource usage. On a small VPS, every service competes for RAM and CPU. A service that uses 500 MB at idle is expensive when you only have 2 GB total.

The practical middle ground

I have settled on a small set of services that run quietly and need minimal attention. The server runs Nginx for static sites, Uptime Kuma for monitoring, Forgejo for git, and a speed test instance. Total idle RAM usage is under 500 MB. Everything is backed up daily with a simple rsync script.

One thing I have learned is that Docker makes management significantly easier for most of these services. Each service gets its own container with pinned versions, isolated dependencies, and a simple update path. A docker-compose.yml file documents the entire stack in one place. Rollbacks are just a matter of changing a tag.

The key realization is that self-hosting is not all or nothing. Pick the services where the trade-off makes sense and use managed solutions for the rest.