-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcloudbuild-deploy-mvp.yaml
More file actions
151 lines (136 loc) · 5.97 KB
/
Copy pathcloudbuild-deploy-mvp.yaml
File metadata and controls
151 lines (136 loc) · 5.97 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
# Cost-Efficient Cloud Build for MVP/Demo
# Uses Deep Infra API instead of local PyTorch models
# ~75% cost reduction, ~90% faster builds, ~93% faster cold starts
#
# Usage: gcloud builds submit --config=cloudbuild-deploy-mvp.yaml
steps:
# Build all images in parallel (no model fetch needed)
- name: 'gcr.io/cloud-builders/docker'
args:
- 'build'
- '-f'
- './services/rag/Dockerfile.deepinfra'
- '-t'
- 'gcr.io/$PROJECT_ID/rag-service:latest'
- './services/rag'
id: 'build-rag'
- name: 'gcr.io/cloud-builders/docker'
args: ['build', '-t', 'gcr.io/$PROJECT_ID/planner-service:latest', './services/planner']
id: 'build-planner'
- name: 'gcr.io/cloud-builders/docker'
args: ['build', '-t', 'gcr.io/$PROJECT_ID/quiz-service:latest', './services/quiz']
id: 'build-quiz'
- name: 'gcr.io/cloud-builders/docker'
args: ['build', '-t', 'gcr.io/$PROJECT_ID/gateway:latest', './gateway']
id: 'build-gateway'
# Push all images to GCR
- name: 'gcr.io/cloud-builders/docker'
args: ['push', 'gcr.io/$PROJECT_ID/rag-service:latest']
id: 'push-rag'
waitFor: ['build-rag']
- name: 'gcr.io/cloud-builders/docker'
args: ['push', 'gcr.io/$PROJECT_ID/planner-service:latest']
id: 'push-planner'
waitFor: ['build-planner']
- name: 'gcr.io/cloud-builders/docker'
args: ['push', 'gcr.io/$PROJECT_ID/quiz-service:latest']
id: 'push-quiz'
waitFor: ['build-quiz']
- name: 'gcr.io/cloud-builders/docker'
args: ['push', 'gcr.io/$PROJECT_ID/gateway:latest']
id: 'push-gateway'
waitFor: ['build-gateway']
# Deploy RAG Service (lightweight Deep Infra version)
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
args:
- 'gcloud'
- 'run'
- 'deploy'
- 'rag-service'
- '--image=gcr.io/$PROJECT_ID/rag-service:latest'
- '--region=${_REGION}'
- '--platform=managed'
- '--allow-unauthenticated'
- '--memory=512Mi'
- '--cpu=1'
- '--timeout=60'
- '--concurrency=20'
- '--min-instances=0'
- '--max-instances=5'
- '--set-secrets=DATABASE_URL=database-url:latest,QDRANT_URL=qdrant-url:latest,QDRANT_API_KEY=qdrant-api-key:latest,DEEPINFRA_API_KEY=deepinfra-api-key:latest,AWS_ACCESS_KEY_ID=aws-access-key-id:latest,AWS_SECRET_ACCESS_KEY=aws-secret-access-key:latest,AWS_REGION=aws-region:latest,S3_BUCKET_NAME=s3-bucket-name:latest'
- '--set-env-vars=USE_DEEPINFRA=true,DEEPINFRA_BASE_URL=https://api.deepinfra.com/v1,DEEPINFRA_EMBEDDING_MODEL=intfloat/e5-base-v2,DEEPINFRA_RERANKER_MODEL=Qwen/Qwen3-Reranker-0.6B,QDRANT_COLLECTION=resources,LOG_LEVEL=info'
id: 'deploy-rag'
waitFor: ['push-rag']
# Deploy Planner Service (reduced resources)
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
entrypoint: 'bash'
args:
- '-c'
- |
RAG_URL=$$(gcloud run services describe rag-service --region=${_REGION} --format="value(status.url)")
gcloud run deploy planner-service \
--image=gcr.io/$PROJECT_ID/planner-service:latest \
--region=${_REGION} \
--platform=managed \
--allow-unauthenticated \
--memory=512Mi \
--cpu=1 \
--timeout=300 \
--concurrency=20 \
--min-instances=0 \
--max-instances=5 \
--set-secrets=DATABASE_URL=database-url:latest,OPENROUTER_API_KEY=openrouter-api-key:latest \
--set-env-vars=RAG_SERVICE_URL=$$RAG_URL,LLM_MODEL=anthropic/claude-3.5-sonnet,LOG_LEVEL=info
id: 'deploy-planner'
waitFor: ['push-planner', 'deploy-rag']
# Deploy Quiz Service (reduced resources)
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
args:
- 'gcloud'
- 'run'
- 'deploy'
- 'quiz-service'
- '--image=gcr.io/$PROJECT_ID/quiz-service:latest'
- '--region=${_REGION}'
- '--platform=managed'
- '--allow-unauthenticated'
- '--memory=512Mi'
- '--cpu=1'
- '--timeout=300'
- '--concurrency=20'
- '--min-instances=0'
- '--max-instances=5'
- '--set-secrets=DATABASE_URL=database-url:latest,OPENROUTER_API_KEY=openrouter-api-key:latest,SUPABASE_URL=supabase-url:latest,SUPABASE_SERVICE_KEY=supabase-service-key:latest,AWS_ACCESS_KEY_ID=aws-access-key-id:latest,AWS_SECRET_ACCESS_KEY=aws-secret-access-key:latest,AWS_REGION=aws-region:latest,S3_BUCKET_NAME=s3-bucket-name:latest'
- '--set-env-vars=LLM_MODEL=anthropic/claude-3.5-sonnet,LOG_LEVEL=info'
id: 'deploy-quiz'
waitFor: ['push-quiz']
# Deploy Gateway
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
entrypoint: 'bash'
args:
- '-c'
- |
RAG_URL=$$(gcloud run services describe rag-service --region=${_REGION} --format="value(status.url)")
PLANNER_URL=$$(gcloud run services describe planner-service --region=${_REGION} --format="value(status.url)")
QUIZ_URL=$$(gcloud run services describe quiz-service --region=${_REGION} --format="value(status.url)")
gcloud run deploy gateway \
--image=gcr.io/$PROJECT_ID/gateway:latest \
--region=${_REGION} \
--platform=managed \
--allow-unauthenticated \
--memory=256Mi \
--cpu=1 \
--timeout=60 \
--concurrency=100 \
--min-instances=0 \
--max-instances=10 \
--set-secrets=SUPABASE_URL=supabase-url:latest,SUPABASE_ANON_KEY=supabase-anon-key:latest \
--set-env-vars="^##^RAG_SERVICE_URL=$$RAG_URL##PLANNER_SERVICE_URL=$$PLANNER_URL##QUIZ_SERVICE_URL=$$QUIZ_URL##JWT_PUBLIC_KEY_URL=https://hywmzhvyhiynewfsmqln.supabase.co/auth/v1/jwks##ALLOWED_ORIGINS=${_ALLOWED_ORIGINS}##RATE_LIMIT_REQUESTS=100##RATE_LIMIT_WINDOW=60##LOG_LEVEL=info"
id: 'deploy-gateway'
waitFor: ['push-gateway', 'deploy-rag', 'deploy-planner', 'deploy-quiz']
substitutions:
_REGION: 'europe-west1'
_ALLOWED_ORIGINS: 'https://your-app.vercel.app,http://localhost:3000'
options:
logging: CLOUD_LOGGING_ONLY
timeout: '1200s' # 20 minutes (down from 40)