Skip to content

CAPABILITY

Cloud & self-hosted

Run on a managed cloud, on your own servers, or on both. The same manifests, the same pipeline, a different target — and data in the jurisdiction you need.

All capabilitiesJOURNEY DEPLOYMENT

What we build

  • Pick the hosting model on cost and compliance, not on lock-in.
  • Move between a VPS, your own hardware and a managed cluster without a rewrite.
  • Data stays in the region and under the jurisdiction you need.
  • A monthly bill you can read line by line.

What you get

The same container images and manifests running wherever you need them: a single VPS to start, a Kubernetes cluster when the load justifies it.

How it works

One build, several targets. Configuration is environment, not code. Object storage speaks the S3 API whether it is MinIO on your hardware or a managed bucket.

What we measure

Cost per environment, egress after edge caching, and the time it takes to bring a fresh environment up from an empty machine.

Choosing where to run

Three things decide this, and none of them is which platform is fashionable.

Where the data has to live. Some contracts and some regulators name a country. That rules out a managed region elsewhere no matter what it costs, and it is the one constraint that is not negotiable later.

What the bill looks like at your actual load. Managed services are excellent value while usage is small and unpredictable, and they stop being excellent value at steady, heavy load — particularly egress, which is where a cloud bill usually surprises people. A content-heavy product serving large files is the clearest case for owning the hardware.

Who is on call. This is the one teams underestimate. Running your own cluster means patching hosts, rotating certificates, watching disks and answering the pager. If nobody is funded to do that, managed is cheaper than self-hosted even when the invoice says otherwise.

What self-hosting actually costs

The server is the small number. The real cost is the work around it: operating system updates, certificate renewal, backup verification, monitoring that someone reads, and a plan for the day the disk fills at two in the morning.

We are direct about this because the failure mode is predictable. A cluster set up well and then left alone for a year is not a cost saving; it is an unpatched machine with your customers' data on it.

Where self-hosting does make sense, we make the machine reproducible. The build that produced it is in the repository, so rebuilding it on new hardware is running a pipeline rather than remembering what was done.

Moving between them

The reason to keep both options open is negotiating room, and it is only real if you never depend on anything you cannot replace.

In practice that means the application talks to interfaces rather than vendors: the S3 API rather than one provider's SDK, Postgres rather than a proprietary dialect, OCI images rather than a platform's own build format. Configuration is environment, not code, so the same artefact runs in both places.

That discipline costs a little upfront and it is what makes a move a project of weeks rather than a rewrite.

WHAT WE BUILD TO
Targets
Kubernetes · Compose
Egress
cached at the edge
Restore drill
monthly

Architecture

The same diagram we draw on the first call, and the one we deploy against.

PRODUCTION PLATFORM

6 layers
Kubernetes / prod-01 · 12 nodeshealthy
version
1.31
pods
84 running
hpa
api 6 → 8
policy
default-deny

PRODUCTION PLATFORM — components and connections, in request order

  1. Edge, cloudflare, healthy. tls: 1.3 · HSTS preload. waf: bot + rate rules. Connects to Ingress.
  2. Ingress, nginx · tls, healthy. termination: TLS 1.3. routing: host + path. Connects to Kubernetes.
  3. Kubernetes, prod-01 · 12 nodes, healthy. version: 1.31. pods: 84 running. hpa: api 6 → 8. policy: default-deny. Connects to Services.
  4. Services, 24 deployments, deploying. images: non-root · read-only fs. rollout: canary 20% · auto rollback. Connects to Database.
  5. Database, pg · mongo · redis, healthy. backups: PITR + nightly snapshot. restore drill: monthly. Connects to Monitoring.
  6. Monitoring, prometheus · grafana, monitoring. targets: 142/142 up. SLO: 99.99% · burn 0.2x. alerts: 0 firing.

Stack

What we reach for by default. We change a choice when your constraints ask for it, not because a tool is new.

KubernetesDocker ComposeNginxMinIOCloudflareTerraform

Case studies are being prepared with our clients. Ask us for references in the meantime.

WEBSITE · APPLICATION · API · INFRASTRUCTURE · MONITORING

LET'S BUILDWHAT COMES NEXT.

From your first idea to production infrastructure, Geekholic Solutions engineers the complete digital system.