Antwa CodeAntwaCode Blog

Notes10 min read

Why I Choose Self-Hosting for Personal Projects

Reasons for choosing self-hosting for personal projects.

Read in Bahasa Indonesia

Why I Choose Self-Hosting for Personal Projects

Two years ago, I was a loyal managed-services user for everything. GitLab CI for pipelines, Notion for notes, Vercel for deployments, Google Drive for storage. If there was a cloud service that could handle it, I handed it over. Why? Because it's easy. Just use it — no infrastructure headaches.

But over time, something started bugging me.

I began asking myself: where exactly is all this data stored? Who has access to it? And most importantly — what happens if this service shuts down or raises its prices?

That's when I started slowly migrating to self-hosting. And honestly, it turned out to be one of the best decisions I've ever made for personal projects.

This article isn't meant to trash managed services — they serve a legitimate purpose. But I want to share a perspective that often gets overlooked: why self-hosting is worth considering, even if you're not a professional sysadmin.


What Is Self-Hosting, Really?

In simple terms, self-hosting means running software yourself, on a server you own or control. Not using the cloud version from a vendor, but the open-source or self-hosted variant that you deploy on your own.

Here are some concrete examples:

  • Notes → Use Joplin or Obsidian with self-sync instead of Notion
  • File sharing → Use Nextcloud instead of Google Drive
  • Web app deployment → Use a VPS with Coolify or Dokku instead of Vercel
  • Password manager → Use Vaultwarden instead of LastPass
  • Chat → Use Matrix/Element instead of Slack or Discord

Of course, the setup isn't as instant as clicking "Sign Up." But don't be mistaken — the barrier to entry is way lower than it was five years ago. Docker, management panels like Portainer or Coolify, and increasingly good documentation have made self-hosting far more approachable these days.


Reason #1: Privacy Isn't Paranoia

"You're so paranoid!" — that's a comment I often get when I mention I self-host.

But this isn't about paranoia. It's about a simple fact: if you're using free services from big tech companies, the product isn't the software — you are the product.

Google Drive? They have access to all your files. Notion? All your notes live in their database. Even "free" services have operating costs — and those costs are paid for with your data.

Self-hosting puts that control back in your hands. Your data lives on your server. No third party can scan, analyze, or (in theory) read the contents of your own server.

This isn't just theory. There have been cases where popular cloud services unilaterally changed their privacy policies. If you're already fully locked in, an abrupt migration is painful. Very painful.

With self-hosting, you set the privacy policy. Want end-to-end encryption? Go for it. Want to disable external access? You can do that too. You own the server, you set the rules.


Reason #2: Full Control (Including When Everything Goes Wrong)

Picture this: it's midnight, you're up against a deadline, and suddenly the cloud service hosting your app goes down. Their status page says "investigating." Two hours pass, no solution. All you can do is wait.

With self-hosting, this scenario can still happen — but at least you can do something about it. Restart the service, check logs, roll back to a previous version. You have access to the machine.

Full control isn't just about debugging, either. It also means:

  • Software versions: You choose when to update, not forced into it
  • Configuration: Customize to your needs, not stuck with vendor presets
  • Backups: Run your own backups to a destination you choose
  • Integrations: Connect with other tools you use without API restrictions

I once had an experience where a service I relied on simply turned off a feature I used daily — just like that, with no alternative. With self-hosting, that can't happen. If a feature gets removed in the latest version, I can just stay on the older version or fork it myself.


Reason #3: Cost Comparison — Cheaper Than You'd Think

This is the part that surprises people the most.

Let's do rough math. Using managed services for a personal project:

ServiceMonthly Cost
Notion Pro~$10/month
Vercel Pro~$20/month
Google One (200GB)~$3/month
Password manager~$3/month
Email hosting~$5/month
Total$41/month ($630k IDR)

Now, self-hosting:

ItemCost
VPS (4GB RAM, 2 core)~$5-10/month
Domain$12/year ($1/month)
Total$6-11/month ($90-170k IDR)

And on that VPS, you can run everything: Nextcloud, Vaultwarden, Joplin server, your blog, and even several other small apps.

Those numbers aren't fiction. I personally pay around $7/month for a VPS running more than 10 services. If you added up equivalent managed services, the cost would be 5-8 times higher.

Of course, there are hidden costs to consider: time. Self-hosting requires time for setup, maintenance, and troubleshooting. But if you're the type of person who enjoys that process — or at least wants to learn — then the cost-per-hour is absolutely worth it.


Reason #4: An Invaluable Learning Experience

This is the most personal reason for me.

Before self-hosting, I knew Docker "in theory." Now I can debug container networking while sipping coffee. Before self-hosting, I couldn't tell Nginx from Caddy. Now I can set up a reverse proxy in five minutes.

Self-hosting is learning by doing. Every time something breaks, you Google it, read the docs, experiment, break things, fix them, and eventually you understand. That's an experience you can't get from a course or tutorial alone.

Here's what I've learned from self-hosting:

  • Linux administration: Because most servers run Linux
  • Docker & containerization: From basics to multi-container Compose setups
  • Networking: Port forwarding, DNS, SSL/TLS, firewall rules
  • Security: Server hardening, setting up fail2ban, SSH keys
  • Backup & recovery: Backup strategies, testing the restore process
  • Monitoring: Setting up Grafana, Uptime Kuma, alerting

These skills directly benefit my career. Many companies are looking for people who understand infrastructure — and self-hosting serves as a very convincing living portfolio.

Imagine being asked in an interview: "Can you tell me about your experience managing infrastructure?" And you can answer: "I run 10+ services on my personal VPS, including..."

That hits different.


Reason #5: Dependencies You Can Actually Live With

Every time I use a managed service, one question always lingers: what happens if this service shuts down?

And this isn't a hypothetical question. Just look around:

  • Google kills off so many products every year
  • Some smaller services shut down with barely any warning
  • Pricing changes can turn "affordable" into "expensive" overnight
  • Terms of service can change unilaterally

With self-hosting, you're not locked into a single vendor. If Nextcloud doesn't work out, migrating to an alternative is relatively straightforward. If you want to switch VPS providers, just back up and restore. You control the data and the configuration.

This isn't about distrust — it's about resilience planning. Wise people anticipate change rather than waiting for it to arrive.


How to Get Started with Self-Hosting

If you're interested but not sure where to begin, here's the roadmap I recommend:

Step 1: Start with One Application

Don't try to migrate everything at once. Pick the one thing that bothers you most — whether it's a privacy concern or a cost issue — and start there.

I recommend starting with:

  • Vaultwarden (password manager) — biggest privacy win
  • Nextcloud (file sharing) — direct Google Drive replacement
  • Uptime Kuma (monitoring) — very easy to set up and incredibly satisfying

Step 2: Get an Affordable VPS

For personal projects, a $5-7/month VPS is more than enough. Providers I recommend:

  • Hetzner — best value for money, Europe-based
  • Vultr — many location options, including Asia-friendly ones
  • Oracle Cloud — a generous free tier (4 cores, 24GB RAM!)

If you want to explore further, you can also buy a used thin client or mini PC (Intel NUC) for a home lab. The upfront cost is higher, but monthly electricity is minimal.

Step 3: Install Docker + Docker Compose

Seriously, Docker changes everything for self-hosting. Almost every popular application has a ready-to-use Docker image. Docker Compose lets you run multiple services together with a single configuration file.

Basic Docker setup on Ubuntu:

curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
# log out and log back in

Example docker-compose.yml for Nextcloud:

version: '3'
services:
  db:
    image: mariadb:10
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: your_password
      MYSQL_DATABASE: nextcloud
      MYSQL_USER: nextcloud
      MYSQL_PASSWORD: your_password
    volumes:
      - db_data:/var/lib/mysql
 
  app:
    image: nextcloud
    restart: always
    ports:
      - "8080:80"
    environment:
      MYSQL_HOST: db
      MYSQL_DATABASE: nextcloud
      MYSQL_USER: nextcloud
      MYSQL_PASSWORD: your_password
    volumes:
      - nextcloud_data:/var/www/html
    depends_on:
      - db
 
volumes:
  db_data:
  nextcloud_data:

Step 4: Set Up a Reverse Proxy + SSL

Don't expose applications directly on a public port without SSL. Use Caddy or Nginx Proxy Manager as a reverse proxy:

Caddy (the simplest option):

nextcloud.domain.com {
    reverse_proxy localhost:8080
}

Caddy handles SSL certificates automatically for you. Seriously, it's that easy.

Step 5: Backup, Backup, Backup!

Self-hosting without backups is like swimming in the ocean without a life jacket. Set up automated backups to a separate location (another provider, a local machine, or S3-compatible storage).

A simple backup script:

#!/bin/bash
DATE=$(date +%Y%m%d_%H%M)
tar -czf /backups/nextcloud_$DATE.tar.gz /var/lib/docker/volumes/nextcloud_data
# upload to object storage
rclone copy /backups/nextcloud_$DATE.tar.gz remote:backups/

Run it via cron daily, and you'll sleep soundly.


Common Pitfalls to Watch Out For

Self-hosting isn't without its challenges. Here are some traps to be aware of:

1. Over-Engineering Obsession

It's tempting to set up Kubernetes, CI/CD pipelines, and comprehensive monitoring for a single personal blog. Don't do that. Start simple, and only upgrade when you actually need to.

2. Neglecting Security

If you expose services to the internet, you're responsible for security. At a minimum:

  • Use SSH keys, not passwords
  • Set up a firewall (ufw or iptables)
  • Use fail2ban
  • Update regularly
  • Use a reverse proxy with SSL

3. No Monitoring

If you don't know your server is down, who will? Set up the basics: Uptime Kuma for availability monitoring, and Grafana + Prometheus for more detailed metrics.

4. Untested Backups

A backup you've never tried to restore isn't a backup — it's a wish. Periodically test the restore process.

5. Being Too Ambitious at the Start

Migrating 15 services to self-hosting all at once is a recipe for frustration. Do it one at a time. Enjoy the process.


Alternatives Worth Considering

If self-hosting feels too daunting, there are some middle-ground options:

  • Coolify.io — An open-source Platform as a Service that bridges the gap between Vercel and self-hosting
  • Yacht — A simpler Docker management UI than Portainer
  • CasaOS — A very user-friendly home server OS
  • Tipi — An app store for self-hosted services, one-click install

These tools reduce the friction of self-hosting without sacrificing control.


Reflections: Two Years of Self-Hosting

After two years of self-hosting, here's what I've found:

What changed:

  • I have a much deeper understanding of how the internet works from the server side
  • I'm more conscious about my data privacy
  • I've saved a significant amount on cloud service costs
  • I have a setup I can customize to my exact needs
  • My technical portfolio is considerably stronger

What stayed the same:

  • I still use some managed services (because they genuinely work well for certain use cases)
  • Self-hosting still requires time for maintenance
  • I still occasionally get frustrated when debugging a particularly tricky issue

What I've learned:

  • Self-hosting is about balance — not replacing every managed service, but replacing the ones that make sense to
  • Infrastructure skills gained from self-hosting are like compound interest — they become more valuable over time
  • The self-hosting community is one of the most helpful I've ever encountered

Conclusion: Self-Hosting Is a Choice, Not a Requirement

I'm not going to tell everyone they should self-host. There are times when managed services are the better call — especially for team collaboration, features not available in open-source alternatives, or when you genuinely don't have time for maintenance.

But for personal projects — personal notes, blogs, photo storage, password managers, and the like — self-hosting offers a combination that's hard to beat: better privacy, full control, lower costs, and an incredibly valuable learning experience.

If you're considering getting started with self-hosting, here's my advice: start today, start small, and don't be afraid to break things. A server you can restore from backup is a server you can safely experiment with.

And who knows — maybe in a few months you'll be writing a blog post just like this one.

Happy self-hosting! 🐧


Thanks for reading all the way through. If you have any questions about self-hosting or setup recommendations, feel free to leave a comment or reach out to me directly. I always enjoy discussing this topic.


Appendix: Favorite Tools and Resources

Here's a list of tools I use daily in my self-hosting setup. All are open-source and can run on a minimal VPS:

CategoryToolNotes
Container ManagementDocker + Docker ComposeEssential for all setups
Panel ManagementCoolifyFor cleaner deployments
Reverse ProxyCaddyAuto SSL, simple config
MonitoringUptime KumaLightweight, great UI
BackupRestic + rcloneEncrypted, incremental backup
Password ManagerVaultwardenCompatible with Bitwarden apps
File SharingNextcloudComprehensive Google Drive alternative
NotesJoplin + Joplin ServerCross-device sync, end-to-end encryption
BlogGhost or HugoModern CMS without the bloat
VPNWireGuardEasy setup, high performance
Photo ManagementImmichA great Google Photos alternative
Media ServerJellyfinOpen-source Plex alternative

Every tool listed above has been personally tested by me, and I can confirm they all work well in a small production environment.

If you're just getting started, I recommend setting up monitoring first — because once you can see what's happening on your server, troubleshooting becomes far easier. Start with Uptime Kuma on port 3001, and add health checks for every service you run. From there, you can expand to Grafana and Prometheus for deeper observability.

And one final tip: document your setup. Write it down, take screenshots, keep all your configs in a private Git repository. Your future self will thank you when you need to rebuild a server from scratch — and trust me, that day will come. Being your own sysadmin means being a good notekeeper for yourself as well.

Self-hosting isn't a perfect journey, but it's one that's absolutely worth it. 🚀

More posts