Deploy on Google Cloud

Run Elixium on Google Cloud Platform using Cloud Run for containers, Cloud SQL for PostgreSQL, and Cloud Storage for objects. This guide covers a production-ready deployment using managed GCP services.

Prerequisites

  • GCP project with billing enabled
  • gcloud CLI configured (gcloud auth login)
  • Docker installed locally (for image pull/push)
  • Elixium enterprise license key

Architecture Overview

ComponentGCP ServiceNotes
Frontend + APICloud RunFully managed, scales to zero
DatabaseCloud SQL (PostgreSQL 16)Managed backups, HA optional
File StorageCloud Storage (GCS)S3-compatible interop API
AuthenticationCloud Run (Keycloak)Backed by Cloud SQL
AI InferenceGemini (default), OpenAI, Azure OpenAI, or Ollama (external GPU)Cloud AI provider or self-hosted Ollama
Container RegistryArtifact RegistryMirror images from GHCR

Step 1: Mirror Container Images

Pull the Elixium images from GHCR and push them to Artifact Registry:

# Create Artifact Registry repository
gcloud artifacts repositories create elixium \
  --repository-format=docker \
  --location=<region>

# Authenticate to GHCR and pull
docker login ghcr.io
docker pull ghcr.io/indirecttek/elixium-app:latest
docker pull ghcr.io/indirecttek/elixium-api:latest

# Tag and push to Artifact Registry
gcloud auth configure-docker <region>-docker.pkg.dev

docker tag ghcr.io/indirecttek/elixium-app:latest \
  <region>-docker.pkg.dev/<project>/elixium/elixium-app:latest
docker tag ghcr.io/indirecttek/elixium-api:latest \
  <region>-docker.pkg.dev/<project>/elixium/elixium-api:latest

docker push <region>-docker.pkg.dev/<project>/elixium/elixium-app:latest
docker push <region>-docker.pkg.dev/<project>/elixium/elixium-api:latest

Step 2: Provision Infrastructure

Cloud SQL (PostgreSQL)

gcloud sql instances create elixium-db \
  --database-version=POSTGRES_16 \
  --tier=db-custom-2-4096 \
  --region=<region> \
  --root-password=<your-secure-password>

gcloud sql databases create elixium --instance=elixium-db

gcloud sql users create elixium \
  --instance=elixium-db \
  --password=<your-secure-password>

Cloud Storage Bucket

gsutil mb -l <region> gs://elixium-uploads-<your-org>
# Create HMAC key for S3-compatible access
gsutil hmac create <service-account-email>

Step 3: Deploy Cloud Run Services

Deploy each service to Cloud Run. Cloud Run provides automatic TLS, scaling, and load balancing:

Keycloak

gcloud run deploy keycloak \
  --image=quay.io/keycloak/keycloak:23.0 \
  --port=8080 \
  --memory=2Gi --cpu=1 \
  --min-instances=1 \
  --set-env-vars="KC_DB=postgres,KC_HTTP_ENABLED=true,KC_HEALTH_ENABLED=true" \
  --set-env-vars="KC_HOSTNAME_STRICT=false" \
  --add-cloudsql-instances=<project>:<region>:elixium-db \
  --command="start","--import-realm","--health-enabled=true" \
  --region=<region> \
  --allow-unauthenticated

Elixium API

gcloud run deploy elixium-api \
  --image=<region>-docker.pkg.dev/<project>/elixium/elixium-api:latest \
  --port=3001 \
  --memory=2Gi --cpu=1 \
  --min-instances=1 \
  --set-env-vars="ELIXIUM_MODE=local,NODE_ENV=production" \
  --set-env-vars="KEYCLOAK_URL=<keycloak-cloud-run-url>" \
  --set-env-vars="KEYCLOAK_REALM=elixium" \
  --set-env-vars="AI_PROVIDER=gemini" \
  --set-env-vars="MINIO_ENDPOINT=storage.googleapis.com" \
  --set-secrets="DATABASE_URL=elixium-db-url:latest" \
  --set-secrets="ELIXIUM_LICENSE_KEY=elixium-license:latest" \
  --set-secrets="KEYCLOAK_CLIENT_SECRET=keycloak-secret:latest" \
  --add-cloudsql-instances=<project>:<region>:elixium-db \
  --region=<region> \
  --allow-unauthenticated

Elixium App (Frontend)

gcloud run deploy elixium-app \
  --image=<region>-docker.pkg.dev/<project>/elixium/elixium-app:latest \
  --port=3000 \
  --memory=1Gi --cpu=1 \
  --min-instances=1 \
  --set-env-vars="ELIXIUM_MODE=local,NODE_ENV=production" \
  --set-env-vars="NEXT_PUBLIC_ELIXIUM_MODE=local" \
  --set-env-vars="NEXT_PUBLIC_KEYCLOAK_URL=<keycloak-cloud-run-url>" \
  --region=<region> \
  --allow-unauthenticated

Step 4: Custom Domain & DNS

# Map custom domain to Cloud Run
gcloud run domain-mappings create \
  --service=elixium-app \
  --domain=elixium.yourcompany.com \
  --region=<region>

# Add the CNAME record shown in the output to your DNS provider

Estimated Monthly Cost

ServiceConfigurationEst. Cost
Cloud Run (3 services)App + API + Keycloak, min 1 instance~$70
Cloud SQLdb-custom-2-4096, 20GB SSD~$50
Cloud StorageStandard, minimal usage<$1
AI Provider (optional GPU)Gemini API or Ollama on GCE with T4$0–$300
Total (without GPU)~$150/mo

Budget Option: Single GCE Instance (~$30/mo)

For small teams (under 10 users), you can run all Elixium services on a single Compute Engine instance using the same Docker Compose setup from the self-hosted guide. This eliminates the cost of Cloud Run, Cloud SQL, and other managed services.

Terraform via Command Center (Coming Soon)

Terraform modules for GCP are on the roadmap. Once available, you'll be able to download a pre-configured deployment bundle from your Elixium Command Center (Settings → Deployment → Download Bundle) — the same workflow available today for AWS. In the meantime, use the manual setup below.

Manual Setup

Launch a GCE instance and follow the Self-Hosted (Docker) guide:

# 1. Create firewall rule
gcloud compute firewall-rules create allow-elixium \
  --allow=tcp:80,tcp:443,tcp:3000 \
  --target-tags=http-server

# 2. Launch the instance
gcloud compute instances create elixium \
  --machine-type=e2-medium \
  --zone=<zone> \
  --image-family=ubuntu-2204-lts \
  --image-project=ubuntu-os-cloud \
  --boot-disk-size=30GB \
  --tags=http-server,https-server

# 3. SSH in and install Docker
gcloud compute ssh elixium --zone=<zone>
sudo apt-get update && sudo apt-get install -y docker.io docker-compose-v2
sudo systemctl enable --now docker

# 4. Follow the Self-Hosted (Docker) guide from here
ServiceConfigurationEst. Cost
Compute Enginee2-medium (2 vCPU, 4GB RAM)~$25
Boot Disk30GB pd-balanced~$3
Static IPRegional external IP~$3
Total~$31/mo

Trade-offs: No auto-scaling, no managed database backups (set up pg_dump cron), and a single point of failure. Great for getting started — you can migrate to the managed architecture above as your team grows.

Need help with your GCP deployment? Contact [email protected] or back to self-hosted docs.