-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathrender.yaml
More file actions
176 lines (172 loc) · 5.65 KB
/
Copy pathrender.yaml
File metadata and controls
176 lines (172 loc) · 5.65 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
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
# Render Infrastructure-as-Code Blueprint
# Deploy: Connect repo to Render, it auto-detects this file
# Stack: Render (Backend) + Vercel (Frontend) + Supabase (PostgreSQL) + Render Redis
#
# IMPORTANT: JWT_SECRET and FERNET_KEY MUST be the SAME across all 3 backend services.
# Generate once:
# python -c "import secrets; print(secrets.token_hex(32))"
# python -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())"
# Then set the SAME value in the Render dashboard for minicode-api, minicode-worker, and minicode-beat.
services:
# ================================
# Redis Cache (Render Key Value)
# ================================
- type: keyvalue
name: minicode-redis
plan: free
region: oregon
ipAllowList: []
# ================================
# Backend API (FastAPI + Gunicorn)
# ================================
- type: web
name: minicode-api
runtime: docker
dockerfilePath: ./backend/Dockerfile
dockerContext: ./backend
dockerCommand: "gunicorn main:app --workers 4 --worker-class uvicorn.workers.UvicornWorker --bind 0.0.0.0:$PORT --timeout 120"
plan: starter
region: oregon
branch: main
preDeployCommand: "CREATE_TABLES=1 python main.py"
healthCheckPath: /health
envVars:
- key: DATABASE_URL
sync: false # Set to your Supabase PostgreSQL connection string
- key: REDIS_URL
fromService:
type: keyvalue
name: minicode-redis
property: connectionString
- key: CELERY_BROKER_URL
fromService:
type: keyvalue
name: minicode-redis
property: connectionString
- key: CELERY_RESULT_BACKEND
fromService:
type: keyvalue
name: minicode-redis
property: connectionString
- key: GITHUB_CLIENT_ID
sync: false # Set in Render dashboard
- key: GITHUB_CLIENT_SECRET
sync: false # Set in Render dashboard
- key: GEMINI_API_KEY
sync: false # Set in Render dashboard
- key: JWT_SECRET
sync: false # MUST be same across api, worker, beat — set manually in dashboard
- key: FERNET_KEY
sync: false # MUST be same across api, worker, beat — set manually in dashboard
- key: GOOGLE_CLIENT_ID
sync: false # Set in Render dashboard (optional)
- key: GOOGLE_CLIENT_SECRET
sync: false # Set in Render dashboard (optional)
- key: CORS_ORIGINS
sync: false # REQUIRED: Set to your Vercel frontend URL, e.g. https://minicode.vercel.app
- key: ENVIRONMENT
value: "production"
- key: WEB_CONCURRENCY
value: "4"
- key: RESEND_API_KEY
sync: false # Set in Render dashboard
- key: SMTP_EMAIL
sync: false # Set in Render dashboard (optional)
- key: SMTP_PASSWORD
sync: false # Set in Render dashboard (optional)
# ================================
# Celery Worker (Background Tasks)
# ================================
- type: worker
name: minicode-worker
runtime: docker
dockerfilePath: ./backend/Dockerfile
dockerContext: ./backend
dockerCommand: "celery -A worker.celery_app worker --loglevel=info"
plan: starter
region: oregon
branch: main
envVars:
- key: DATABASE_URL
sync: false # Set to your Supabase PostgreSQL connection string
- key: REDIS_URL
fromService:
type: keyvalue
name: minicode-redis
property: connectionString
- key: CELERY_BROKER_URL
fromService:
type: keyvalue
name: minicode-redis
property: connectionString
- key: CELERY_RESULT_BACKEND
fromService:
type: keyvalue
name: minicode-redis
property: connectionString
- key: GITHUB_CLIENT_ID
sync: false
- key: GITHUB_CLIENT_SECRET
sync: false
- key: GEMINI_API_KEY
sync: false
- key: JWT_SECRET
sync: false # MUST be same across api, worker, beat
- key: FERNET_KEY
sync: false # MUST be same across api, worker, beat
- key: RESEND_API_KEY
sync: false
- key: SMTP_EMAIL
sync: false
- key: SMTP_PASSWORD
sync: false
- key: ENVIRONMENT
value: "production"
# ================================
# Celery Beat (Scheduled Tasks)
# ================================
- type: worker
name: minicode-beat
runtime: docker
dockerfilePath: ./backend/Dockerfile
dockerContext: ./backend
dockerCommand: "celery -A worker.celery_app beat --loglevel=info"
plan: starter
region: oregon
branch: main
envVars:
- key: DATABASE_URL
sync: false # Set to your Supabase PostgreSQL connection string
- key: REDIS_URL
fromService:
type: keyvalue
name: minicode-redis
property: connectionString
- key: CELERY_BROKER_URL
fromService:
type: keyvalue
name: minicode-redis
property: connectionString
- key: CELERY_RESULT_BACKEND
fromService:
type: keyvalue
name: minicode-redis
property: connectionString
- key: GITHUB_CLIENT_ID
sync: false
- key: GITHUB_CLIENT_SECRET
sync: false
- key: GEMINI_API_KEY
sync: false
- key: JWT_SECRET
sync: false # MUST be same across api, worker, beat
- key: FERNET_KEY
sync: false # MUST be same across api, worker, beat
- key: RESEND_API_KEY
sync: false
- key: SMTP_EMAIL
sync: false
- key: SMTP_PASSWORD
sync: false
- key: ENVIRONMENT
value: "production"