forked from Yadav-Aayansh/WorkZone
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcompose.yaml
More file actions
121 lines (114 loc) · 3.15 KB
/
Copy pathcompose.yaml
File metadata and controls
121 lines (114 loc) · 3.15 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
services:
# ---------- database migrations (one-shot) ----------
# Applies platform (public) migrations, then tenant migrations across every
# tenant in public.clients. Runs on every `up`; a no-op once schemas are
# current. server/celery wait for this to finish successfully.
migrate:
build:
context: ./server
command: ["sh", "scripts/migrate.sh"]
env_file:
- ./infra/server.env
restart: "no"
# ---------- backend api ----------
server:
build:
context: ./server
env_file:
- ./infra/server.env
depends_on:
migrate:
condition: service_completed_successfully
chromadb:
condition: service_started
redis:
condition: service_healthy
restart: always
healthcheck:
# No dedicated /health route; openapi.json is a cheap, DB-free 200.
test: ["CMD", "curl", "-f", "http://localhost:8000/api/openapi.json"]
interval: 30s
timeout: 5s
retries: 3
start_period: 30s
expose:
- "8000"
# ---------- celery worker ----------
celery:
build:
context: ./server
command: celery -A src.core.celery worker --loglevel=info --concurrency=2
env_file:
- ./infra/server.env
depends_on:
migrate:
condition: service_completed_successfully
redis:
condition: service_healthy
restart: always
# ---------- redis (celery broker + result backend) ----------
redis:
image: redis:7-alpine
command: redis-server --appendonly yes
restart: always
volumes:
- redis_data:/data
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 3s
retries: 5
expose:
- "6379"
# ---------- frontend ----------
client:
build:
context: ./client
args:
# NEXT_PUBLIC_* must be set at BUILD time, not runtime.
# Interpolated from infra/client.env via `--env-file infra/client.env`.
NEXT_PUBLIC_BACKEND_URL: ${NEXT_PUBLIC_BACKEND_URL}
NEXT_PUBLIC_PLATFORM_URL: ${NEXT_PUBLIC_PLATFORM_URL}
NEXT_PUBLIC_DOMAIN_NAME: ${NEXT_PUBLIC_DOMAIN_NAME}
NEXT_PUBLIC_GCS_BUCKET_NAME: ${NEXT_PUBLIC_GCS_BUCKET_NAME}
NEXT_PUBLIC_RAZORPAY_KEY_ID: ${NEXT_PUBLIC_RAZORPAY_KEY_ID}
NEXT_PUBLIC_APP_URL: ${NEXT_PUBLIC_APP_URL}
NEXT_PUBLIC_DNS_A_RECORD_IP: ${NEXT_PUBLIC_DNS_A_RECORD_IP}
NEXT_PUBLIC_DNS_CNAME_TARGET: ${NEXT_PUBLIC_DNS_CNAME_TARGET}
restart: always
expose:
- "3000"
# ---------- vector db ----------
chromadb:
image: chromadb/chroma:1.5.3
restart: always
environment:
ANONYMIZED_TELEMETRY: "FALSE"
IS_PERSISTENT: "TRUE"
volumes:
- chroma_data:/data
expose:
- "8000"
# ---------- reverse proxy + tls ----------
caddy:
build:
context: ./infra/caddy
restart: always
ports:
- "80:80"
- "443:443"
- "443:443/udp"
env_file:
- ./infra/caddy.env
volumes:
- ./infra/caddy/Caddyfile:/etc/caddy/Caddyfile:ro
- caddy_data:/data
- caddy_config:/config
depends_on:
- server
- client
volumes:
chroma_data:
caddy_data:
caddy_config:
redis_data: