SignalHubDocumentation
Browse documentation

Start here

Deploy

Run and secure

SignalHub 1.0 · Updated 2026-10-19 · Markdown source

Google Cloud: Cloud Run with Cloud SQL (or GKE)

All images are for reference only. Screens use synthetic Estora development data and do not describe real service availability.

On this page
  1. Cloud SQL
  2. Cloud Run
  3. GKE

Cloud SQL

  1. Create a Cloud SQL for PostgreSQL instance (16+) and a database and user signalhub.
  2. Grant the Cloud Run service account the Cloud SQL Client role.

Through the built-in Cloud SQL connector, the database is a Unix socket and needs no TLS settings:

DATABASE_URL=postgresql://signalhub:<password>@/signalhub?host=/cloudsql/<PROJECT>:<REGION>:<INSTANCE>

Cloud Run

The worker must keep running between requests, so CPU must stay allocated and one instance must always exist.

gcloud secrets create signalhub-database-url --data-file=- <<< 'postgresql://…'
gcloud secrets create signalhub-session-secret --data-file=- <<< "$(openssl rand -base64 48)"
gcloud secrets create signalhub-encryption-key --data-file=- <<< "$(openssl rand -base64 48)"
gcloud secrets create signalhub-admin-password --data-file=- <<< 'a-long-unique-password'

gcloud run deploy signalhub \
  --image ghcr.io/rameshbgm/signalhub:<version> \
  --port 3000 --memory 1Gi --cpu 1 \
  --no-cpu-throttling --min-instances 1 \
  --add-cloudsql-instances <PROJECT>:<REGION>:<INSTANCE> \
  --set-env-vars NEXT_PUBLIC_APP_URL=https://status.example.com \
  --set-secrets DATABASE_URL=signalhub-database-url:latest,SESSION_SECRET=signalhub-session-secret:latest,ENCRYPTION_KEY=signalhub-encryption-key:latest,STATUS_BOOTSTRAP_PASSWORD=signalhub-admin-password:latest \
  --allow-unauthenticated

Cloud Run deploys images from Artifact Registry or Docker Hub only. Create an Artifact Registry remote repository that proxies https://ghcr.io (or push the image into Artifact Registry) and use that image path in --image. Map your domain with Cloud Run domain mappings or a load balancer.

After deploy, open the service URL and sign in at /login as admin with the bootstrap password.

SignalHub sign-in page

After sign-in, open Platform administration → Configuration → Runtime to check database, migration, and worker health.

GKE

Use the Kubernetes manifests. For Cloud SQL, run the Cloud SQL Auth Proxy as a sidecar or use private IP with DATABASE_SSL_CA set to the instance's server CA.