# GCP Architecture — Cloud Run + Cloud SQL

# GCP Architecture for Drop

**Dato:** 2026-02-18
**Region:** europe-north1 (Finland — nærmest Norge)
**Kontekst:** Migrering fra Fly.io shared-cpu-1x som takler ~25 samtidige brukere

---

## Nåværende Fly.io vs GCP — Sammenligning

### Tier 1: Minimum (Dev/Demo) — ~25 brukere

| Komponent | Fly.io (nå) | GCP ekvivalent | GCP kostnad |
|-----------|-------------|----------------|-------------|
| Compute | shared-cpu-1x (256MB) | Cloud Run: 1 vCPU, 512MB | ~$0 (free tier) |
| Database | SQLite på Fly Volume | Cloud SQL db-f1-micro (0.6GB, 10GB) | ~$9/mnd |
| Cache | Ingen | Ingen | $0 |
| **Totalt** | **~$5/mnd** | | **~$9/mnd** |
| **Kapasitet** | **~25 samtidige** | | **~25 samtidige** |

### Tier 2: Pilot (SpareBank 1 demo) — ~100 brukere

| Komponent | GCP tjeneste | Spesifikasjon | Kostnad |
|-----------|-------------|---------------|--------|
| Compute | Cloud Run | 2 vCPU, 1GB RAM, min 1 instans | ~$15/mnd |
| Database | Cloud SQL | db-g1-small (1.7GB, 20GB SSD) | ~$30/mnd |
| Cache | Memorystore Redis | Basic 1GB | ~$35/mnd |
| CDN | Cloud CDN | 10GB egress | ~$1/mnd |
| Secrets | Secret Manager | 10 secrets | ~$0 (free tier) |
| Monitoring | Cloud Monitoring | Basic | ~$0 (free tier) |
| **Totalt** | | | **~$81/mnd** |
| **Kapasitet** | | | **~100-150 samtidige** |

### Tier 3: Produksjon (Ekte brukere) — ~500+ brukere

| Komponent | GCP tjeneste | Spesifikasjon | Kostnad |
|-----------|-------------|---------------|--------|
| Compute | Cloud Run | 2 vCPU, 2GB RAM, min 2 instanser, auto-scale til 10 | ~$50/mnd |
| Database | Cloud SQL | Enterprise: 2 vCPU, 8GB RAM, 50GB SSD, HA | ~$150/mnd |
| Cache | Memorystore Redis | Standard 1GB (HA) | ~$70/mnd |
| CDN | Cloud CDN + Load Balancer | Global | ~$25/mnd |
| Secrets | Secret Manager | | ~$0 |
| Monitoring | Cloud Monitoring + Logging | | ~$10/mnd |
| Backup | Automated DB backup | | ~$5/mnd |
| **Totalt** | | | **~$310/mnd** |
| **Kapasitet** | | | **~500-1000 samtidige** |

---

## Cloud Run Pricing (Tier 1 region)

| Ressurs | Pris | Gratis tier |
|---------|------|------------|
| CPU | $0.000024/vCPU-sekund | 180,000 vCPU-sek/mnd |
| Minne | $0.0000025/GiB-sekund | 360,000 GiB-sek/mnd |
| Forespørsler | $0.40/million | 2 millioner/mnd |
| Egress | $0.12/GB (etter 1GB gratis) | 1 GB/mnd |

**Gratis tier dekker:** ~50 timer med 1 vCPU + 256MB — nok for dev/staging med lav trafikk.

**Viktig:** Gratis tier gjelder kun us-central1/us-east1/us-west1. I europe-north1 faktureres ALT fra første bruk — men dekkes av $300 free trial credits.

## Cloud SQL PostgreSQL Pricing

| Instanstype | vCPU | RAM | Pris (ca.) |
|-------------|------|-----|--------|
| db-f1-micro | Delt | 0.6 GB | ~$9/mnd |
| db-g1-small | Delt | 1.7 GB | ~$27/mnd |
| db-custom-2-8192 | 2 | 8 GB | ~$130/mnd |

**Lagring:** ~$0.17/GB/mnd (SSD)
**Backup:** ~$0.08/GB/mnd

---

## Deploy-arkitektur på GCP

```
┌─────────────────────────────────────────────┐
│                 Cloud CDN                    │
│          (statiske filer + caching)          │
└──────────────────┬──────────────────────────┘
                   │
┌──────────────────▼──────────────────────────┐
│            Cloud Run Service                 │
│     drop-web (Next.js standalone)            │
│     Region: europe-north1                    │
│     Auto-scale: 0-10 instanser               │
│     CPU: 1-2 vCPU, RAM: 512MB-2GB            │
└──────┬──────────────────┬───────────────────┘
       │                  │
┌──────▼──────┐    ┌──────▼──────┐
│  Cloud SQL  │    │ Memorystore │
│ PostgreSQL  │    │    Redis    │
│ europe-n1   │    │  (cache)    │
│ Private IP  │    │  Basic 1GB  │
└─────────────┘    └─────────────┘

Alt: Serverless VPC Connector for private nettverk
```

## Migreringssteg

### Steg 1: Containerisering (dag 1)
- Dockerfile allerede eksisterer (Node 22 Alpine)
- Bytt SQLite → PostgreSQL via DATABASE_URL env
- Drop har allerede PostgreSQL-adapter i koden

### Steg 2: GCP-oppsett (dag 1-2)
```bash
# Opprett prosjekt (allerede: project-72cd303f)
gcloud config set project project-72cd303f-66e5-46ee-a4c

# Aktiver APIer
gcloud services enable run.googleapis.com
gcloud services enable sqladmin.googleapis.com
gcloud services enable secretmanager.googleapis.com
gcloud services enable cloudbuild.googleapis.com

# Cloud SQL instans
gcloud sql instances create drop-db \
  --database-version=POSTGRES_15 \
  --tier=db-f1-micro \
  --region=europe-north1 \
  --storage-size=10GB \
  --storage-type=SSD

# Opprett database
gcloud sql databases create drop --instance=drop-db

# Opprett bruker
gcloud sql users create drop-user \
  --instance=drop-db \
  --password=<generert>
```

### Steg 3: Deploy til Cloud Run (dag 2)
```bash
# Build og push container
gcloud builds submit --tag gcr.io/PROJECT_ID/drop-web

# Deploy
gcloud run deploy drop-web \
  --image gcr.io/PROJECT_ID/drop-web \
  --platform managed \
  --region europe-north1 \
  --allow-unauthenticated \
  --memory 512Mi \
  --cpu 1 \
  --min-instances 0 \
  --max-instances 5 \
  --set-env-vars NODE_ENV=production \
  --set-cloudsql-instances PROJECT_ID:europe-north1:drop-db \
  --set-secrets DATABASE_URL=drop-db-url:latest
```

### Steg 4: DNS + SSL (dag 2)
```bash
# Custom domain
gcloud run domain-mappings create \
  --service drop-web \
  --domain drop-dev.alai.no \
  --region europe-north1
```

### Steg 5: CI/CD (dag 3)
- Cloud Build trigger fra GitHub push
- Automatisk deploy ved push til main/staging branch
- Build + deploy tar ~2-3 minutter

---

## Kostnadsdekning

| Kilde | Beløp | Dekker |
|-------|-------|--------|
| GCP Free Trial | $300 (kr 2,884) | Tier 1+2 i ~3 mnd |
| GCP Startups Program (søkt) | Inntil $100,000 | Alt i 1-2 år |
| Microsoft Founders Hub (søkt) | Inntil $150,000 Azure | Azure-migrering senere |

**Med free trial alene:** $300 / ~$9 per mnd (Tier 1) = ~33 måneder for dev. Med Tier 2 (~$81/mnd) = ~3.7 måneder.

---

## Alternativt: Billigere cache enn Memorystore

Memorystore Redis (1GB basic = ~$35/mnd) er dyrt for MVP. Alternativer:

| Alternativ | Pris | Fordel |
|-----------|------|--------|
| **Upstash Redis** (serverless) | Gratis opptil 10K kommandoer/dag | Null kostnad for dev |
| **In-memory cache i Cloud Run** | $0 | Forsvinner ved restart |
| **Cloud Run + node-cache** | $0 | Enkel, per-instans cache |

**Anbefaling:** Start uten Redis. Legg til Upstash eller in-memory cache først. Memorystore kun hvis vi trenger delt cache mellom instanser.

---

## Kapasitetsestimat per tier

| Tier | Samtidige brukere | Responstid (p95) | Kostnad |
|------|:-:|:-:|--------|
| Tier 1 (db-f1-micro, 1 vCPU) | ~25-30 | <200ms | ~$9/mnd |
| Tier 2 (db-g1-small, 2 instanser) | ~100-150 | <500ms | ~$80/mnd |
| Tier 3 (2 vCPU DB, auto-scale) | ~500-1000 | <300ms | ~$310/mnd |

*PostgreSQL alene gir ~2-3x bedre concurrent performance enn SQLite pga. connection pooling og parallelle skrivinger.*