GKE Deployment
Quizzz runs on Google Kubernetes Engine (GKE) using ArgoCD for GitOps deployment.
Infrastructure
| Component | Dev | Prod |
|---|---|---|
| Web | dev-quizzz-web | prod-quizzz-web |
| Worker | dev-quizzz-worker | prod-quizzz-worker |
| PostgREST | dev-quizzz-postgrest | prod-quizzz-postgrest |
| Redis | redis-cluster-master.sandbox | redis-cluster-master.prod |
| PostgreSQL | postgresql-dev.storage-dev | postgresql-prod.storage-prod |
All components run in the quizzz namespace.
Docker Image
A single Docker image serves both web and worker:
dockerfile
# Web mode (default)
CMD ["pnpm", "start"]
# Worker mode
CMD ["node", "dist/worker/index.js"]The QUIZZZ_MODE=worker env var switches the runtime behavior.
CI/CD Pipeline
- Push to
maintriggers GitHub Actions - Verify: lint + type-check + unit tests
- Build: Docker image pushed to GAR with
sha-{hash}andlatesttags - Deploy dev:
kubectl set imageon dev deployment - E2E gate: Playwright tests against dev environment
- Deploy prod: Manual trigger or version tag
ArgoCD
The application repo manages all Kustomize configs:
application/
base/quizzz-web/ # Base deployment, service, ingress
base/quizzz-worker/ # Base worker deployment
dev/quizzz-web/ # Dev overlay (env, secrets, ingress)
dev/quizzz-worker/ # Dev worker overlay
prod/quizzz-web/ # Prod overlay
prod/quizzz-worker/ # Prod worker overlayArgoCD image updater watches the latest tag and auto-deploys on digest change.
Manual Deploy
bash
# Build and push via Cloud Build
gcloud builds submit \
--tag asia-east1-docker.pkg.dev/wise-sandbox-300013/gar/quizzz/web:latest \
--region asia-east1 \
--machine-type=e2-highcpu-8
# Update ArgoCD image
argocd app set quizzz-dev-web \
--kustomize-image "...=...@sha256:NEW_DIGEST"
argocd app sync quizzz-dev-web