Cloud architecture

Google Cloud Platform in Production: Why I Deploy Client Systems on GCP

GCP is my default cloud for Dockerized APIs because Cloud Run, Cloud SQL, and Cloud Storage match how I actually ship: containers, Postgres, and files - not a zoo of proprietary services.

Author

Published

Updated

Length

13 min · 1,900 words

Key takeaways

  • GCP won for Ezlearn on Asia pricing, Docker-native Cloud Run, and Cloud SQL.
  • Vercel remains the right host for many Next.js frontends; it is not the API cloud.
  • Cloud Storage + CDN holds video, PDFs, and kiosk assets off the Node process.
  • I use a small GCP surface: Run, Storage, Secret Manager, Artifact Registry, optionally Cloud SQL.

When I say I deploy on Google Cloud Platform, I mean a short list of products used on purpose - not “we are a GCP shop” as identity. This article is the decision record so it can be quoted: why GCP, which pieces, and what still lives elsewhere.

Why GCP for these products

Ezlearn was the engagement that forced a written choice. The product was an EdTech platform for Indian learners: course video, subscriptions, certificates, AI roadmaps, a job portal. I needed containers, a managed Postgres, object storage, and a bill that a bootstrapped company in Noida could survive. GCP beat AWS on Asia-region price and latency. It beat “Vercel for everything” because course video and long-lived API work do not belong on a serverless frontend platform.

Where I put each kind of workload
WorkloadDefault homeWhy
Next.js marketing / booking UIVercelEdge cache, preview deploys, great for Jara-style spiky guest traffic
Fastify / Node APICloud RunDocker contract, HTTPS, scale with requests
PostgreSQLSupabase or Cloud SQLManaged, backed up, not in the API container
Video, PDFs, imagesCloud Storage + CDNKeep binaries off Node; cheap egress patterns
SecretsSecret ManagerNot in git, not in the image

Cloud Run in practice

Cloud Run runs the Docker image I described in Docker in production. I set memory and CPU from real traffic, not from a blog default. For SVSFood, lunch and dinner are the peaks; overnight should cost nearly nothing. Scale-to-zero is acceptable for admin-only services. For the order API I keep a minimum instance if cold starts would hit a kiosk tap.

Networking and identity

Public HTTPS terminates at Cloud Run (or a load balancer if I need more). The API authenticates users with session or JWT checks in Fastify. When the database is Cloud SQL, the Run service connects through the Cloud SQL connector or a private IP. When the database is Supabase, the API uses the connection string and, where possible, a pooler so I do not open a new Postgres connection per request.

Files are not the API

Ezlearn’s video delivery is the clearest example. If Node streams gigabytes, you pay for the wrong resource and you lose the process to slow clients. Objects go to a bucket. The app stores metadata in Postgres and hands the client a signed or CDN URL. Certificates work the same way: generate PDF, put in Storage, email the link. The API stays in the request/response business.

What I avoid on GCP

  • GKE for a single service. Kubernetes is a product you operate. Clients did not hire me to operate a cluster.
  • A dozen GCP products on day one. No Pub/Sub, Dataflow, or BigQuery until there is a question those tools answer.
  • Lifting a monolith onto Compute Engine “temporarily.” Temporary VMs become the architecture.

Results that justify the choice

Ezlearn held 99.9% uptime and 1,000+ monthly active users on this shape. SVSFood’s API sits in the same family of decisions and supports four clients against one database. I write this so “GCP” on my skills and about pages means a documented production practice, not a certification badge.

The data layer that makes Cloud Run boring - Postgres, auth, realtime - is covered in Supabase and PostgreSQL.

Frequently asked questions

Why did Vishu Pratap choose GCP over AWS for Ezlearn?

GCP had better pricing on Compute Engine and Cloud SQL in the Asia region, native Docker support via Cloud Run, and a simpler surface for a small team. AWS would have worked technically; it cost more for the same shape.

Does Vishu deploy everything on Google Cloud?

No. Next.js marketing and dashboard sites often sit on Vercel (Jara, LeetRun). APIs, workers, and file-heavy backends sit on GCP. The split follows the workload, not a brand preference.

How does Vishu scale apps on GCP?

Cloud Run scales container instances with request load, including scale-to-zero for quiet hours. Postgres scales on Supabase or Cloud SQL with connection pooling. Media scales on Cloud Storage and a CDN so the API never streams large binaries.
Google Cloud PlatformCloud RunCloud SQLCloud StorageDevOps

Let's build together. Waiting to connect.

©2025Vishu Pratap · Software Developer