-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathdocker-compose.yml
More file actions
134 lines (127 loc) · 4.26 KB
/
docker-compose.yml
File metadata and controls
134 lines (127 loc) · 4.26 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
# LinkedIn Post Bot - Docker Compose
# Run: docker-compose up -d
version: '3.8'
services:
# ==========================================================================
# REDIS - Message Broker for Celery
# ==========================================================================
redis:
image: redis:7-alpine
ports:
- "6379:6379"
volumes:
- redis-data:/data
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 5s
retries: 5
restart: unless-stopped
# ==========================================================================
# BACKEND API - FastAPI Application
# ==========================================================================
backend:
build:
context: .
dockerfile: backend/Dockerfile
ports:
- "8000:8000"
environment:
- PORT=8000
- LINKEDIN_CLIENT_ID=${LINKEDIN_CLIENT_ID}
- LINKEDIN_CLIENT_SECRET=${LINKEDIN_CLIENT_SECRET}
- GROQ_API_KEY=${GROQ_API_KEY}
- MISTRAL_API_KEY=${MISTRAL_API_KEY}
- GITHUB_USERNAME=${GITHUB_USERNAME}
- GITHUB_TOKEN=${GITHUB_TOKEN}
- UNSPLASH_ACCESS_KEY=${UNSPLASH_ACCESS_KEY}
- CLERK_ISSUER=${CLERK_ISSUER}
- PAYSTACK_SECRET_KEY=${PAYSTACK_SECRET_KEY}
- PAYSTACK_PUBLIC_KEY=${PAYSTACK_PUBLIC_KEY}
- PAYSTACK_WEBHOOK_SECRET=${PAYSTACK_WEBHOOK_SECRET}
- PAYSTACK_PLAN_PRO_MONTHLY=${PAYSTACK_PLAN_PRO_MONTHLY}
- PAYSTACK_PLAN_PRO_YEARLY=${PAYSTACK_PLAN_PRO_YEARLY}
- PAYSTACK_SUCCESS_URL=${PAYSTACK_SUCCESS_URL}
- PAYSTACK_CANCEL_URL=${PAYSTACK_CANCEL_URL}
- DATABASE_URL=${DATABASE_URL}
- REDIS_URL=redis://redis:6379/0
- ENVIRONMENT=${ENVIRONMENT:-production}
- SSL_VERIFY=${SSL_VERIFY:-true}
volumes:
- backend-data:/data
depends_on:
redis:
condition: service_healthy
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8000/health"]
interval: 30s
timeout: 10s
retries: 3
restart: unless-stopped
# ==========================================================================
# CELERY WORKER - Background Task Processor
# ==========================================================================
worker:
build:
context: .
dockerfile: backend/Dockerfile
command: celery -A services.celery_app worker --loglevel=info --concurrency=2
environment:
- LINKEDIN_CLIENT_ID=${LINKEDIN_CLIENT_ID}
- LINKEDIN_CLIENT_SECRET=${LINKEDIN_CLIENT_SECRET}
- GROQ_API_KEY=${GROQ_API_KEY}
- MISTRAL_API_KEY=${MISTRAL_API_KEY}
- GITHUB_USERNAME=${GITHUB_USERNAME}
- GITHUB_TOKEN=${GITHUB_TOKEN}
- DATABASE_URL=${DATABASE_URL}
- REDIS_URL=redis://redis:6379/0
- ENVIRONMENT=${ENVIRONMENT:-production}
- SSL_VERIFY=${SSL_VERIFY:-true}
volumes:
- backend-data:/data
depends_on:
redis:
condition: service_healthy
backend:
condition: service_healthy
restart: unless-stopped
# ==========================================================================
# CELERY BEAT - Periodic Task Scheduler
# ==========================================================================
beat:
build:
context: .
dockerfile: backend/Dockerfile
command: celery -A services.celery_app beat --loglevel=info
environment:
- DATABASE_URL=${DATABASE_URL}
- REDIS_URL=redis://redis:6379/0
- ENVIRONMENT=${ENVIRONMENT:-production}
volumes:
- backend-data:/data
depends_on:
redis:
condition: service_healthy
worker:
condition: service_started
restart: unless-stopped
# ==========================================================================
# FRONTEND - Next.js Application
# ==========================================================================
frontend:
build:
context: ./web
dockerfile: Dockerfile
args:
- NEXT_PUBLIC_API_URL=${NEXT_PUBLIC_API_URL:-http://localhost:8000}
- NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=${NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY}
- NEXT_PUBLIC_REDIRECT_URI=${NEXT_PUBLIC_REDIRECT_URI}
ports:
- "3000:3000"
depends_on:
backend:
condition: service_healthy
restart: unless-stopped
volumes:
backend-data:
redis-data: