Simple static asset gateway for my homelab

A look at Ibbani, a simple static asset gateway built with Nginx and Filebrowser for a homelab.

Published 25th Jan, 2026

Homelabs have a way of growing quietly. What starts as a few containers eventually turns into an ecosystem of services you rely on every day. Somewhere along that journey, I realized I needed a clean and centralized way to serve static assets, JavaScript files, stylesheets, images, and small binaries without overengineering the solution.

If you had a chance to inspect the references in the source code, you might come across a couple of subdomains. That’s where Ibbani.0x4e.cc comes in.

What is Ibbani?

Ibbani is a static asset gateway for my homelab. At its core, it’s an Nginx front end that serves files from disk and proxies specific requests to a Filebrowser container.

Nothing more. Nothing less.

  1. It’s not a CDN.
  2. It’s not distributed.
  3. It’s not trying to be clever.

It’s simply the origin where the static assets live.

Why i built this

As I started self-hosting more services my blog, analytics, and internal tooling. I noticed a recurring pattern: multiple services needed access to shared static assets. Keeping those assets bundled inside individual containers quickly became messy.

Duplicate files everywhere, inconsistent URLs and absolutely no centralized control over headers or caching. I wanted a single, predictable place where assets could live and be served cleanly.

The design philosophy

The design is intentionally boring, I would say. It doesn’t use an enterprise-grade framework or object storage spread across multiple hosts.

  1. Filebrowser manages files and directories
  2. Nginx serves static files and proxies specific paths
  3. Cloudflare sits in front, handling CORS, security headers

This keeps the system easy to understand and trivial to debug.

ibbani.webp

The Ibbani stack visualized

Assets are organized on disk, and Nginx either serves them directly or forwards specific paths to backend services when required. This keeps the system easy to understand and trivial to debug.

Why Nginx makes sense here

Nginx is fast, predictable, and well understood. It gives me full control over routing, caching behavior, and request handling without introducing unnecessary abstraction.

More importantly, when something breaks, I know exactly where to look. There’s no hidden magic or opaque behavior involved. Ibbani itself doesn’t deal with CORS or security headers directly. Since the service is fronted by Cloudflare, those concerns are handled at the edge. This means:

  1. CORS policies are enforced consistently
  2. Security headers are applied globally
  3. The origin stays simple and focused on serving files

It’s a clean split between edge concerns and origin behavior.

What Ibbani is and isn’t

Ibbani behaves a bit like a CDN in small setups because assets are centralized and cached by clients, but architecturally it’s not one. There’s no geographic distribution, no replication and no edge nodes. And that’s perfectly fine. For a homelab, this level of simplicity is a feature, not a limitation.

I could have used Amazon S3 compatible storage or something like MinIO, but that would have added complexity I don’t currently need. It just needs to reliably serve files rather than managing versioning, signed URLs, lifecycle policies and what not.

If I ever outgrow it, that’ll be the right time to move on to something more complex.

What’s in the name?

Well, that’s a little secret of mine that I’d very much like to preserve. Sometimes the best solutions are the ones you don’t have to think about.

I’ll see you in the next one.

Comments

Loading comments

You can write to me at [email protected]. Email services are insecure, consider encrypting emails with my PGP Key if you're sending me something sensitive.

Authored by a human. Build: 5a06cf15d2