-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdocker-compose.yml
More file actions
300 lines (270 loc) · 6.89 KB
/
docker-compose.yml
File metadata and controls
300 lines (270 loc) · 6.89 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
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
services:
# PostgreSQL Database
postgres:
image: postgres:15-alpine
container_name: losa_postgres
environment:
POSTGRES_DB: losa
POSTGRES_USER: losa_user
POSTGRES_PASSWORD: losa_password
POSTGRES_INITDB_ARGS: "--auth-host=scram-sha-256 --auth-local=scram-sha-256"
volumes:
- postgres_data:/var/lib/postgresql/data
- ./docker/postgres-init.sql:/docker-entrypoint-initdb.d/init.sql
ports:
- "5432:5432"
networks:
- losa_network
healthcheck:
test: ["CMD-SHELL", "pg_isready -U losa_user -d losa"]
interval: 10s
timeout: 5s
retries: 5
restart: unless-stopped
# Redis (for caching and session storage)
redis:
image: redis:7-alpine
container_name: losa_redis
command: redis-server --requirepass losa_redis_password
ports:
- "6379:6379"
volumes:
- redis_data:/data
networks:
- losa_network
healthcheck:
test: ["CMD", "redis-cli", "--raw", "incr", "ping"]
interval: 10s
timeout: 5s
retries: 3
restart: unless-stopped
# LOSA Application
losa:
build:
context: .
dockerfile: Dockerfile
target: production
container_name: losa_app
environment:
# Database Configuration
DB_HOST: postgres
DB_PORT: 5432
DB_NAME: losa
DB_USER: losa_user
DB_PASSWORD: losa_password
DB_SSL_MODE: disable
# Redis Configuration
REDIS_HOST: redis
REDIS_PORT: 6379
REDIS_PASSWORD: losa_redis_password
# Application Configuration
HOST: 0.0.0.0
PORT: 8000
DEBUG: false
RELOAD: false
ENVIRONMENT: production
# AI Configuration
OPENAI_API_KEY: ${OPENAI_API_KEY:-your_openai_api_key_here}
OPENAI_MODEL: gpt-4
OPENAI_TEMPERATURE: 0.1
# Security
JWT_SECRET_KEY: ${JWT_SECRET_KEY:-your_jwt_secret_key_change_in_production}
ENCRYPTION_KEY: ${ENCRYPTION_KEY:-your_32_character_encryption_key}
# File Upload
UPLOAD_DIRECTORY: /app/uploads
MAX_FILE_SIZE: 10485760
# Logging
LOG_LEVEL: INFO
LOG_FILE: /app/logs/losa.log
STRUCTURED_LOGGING: true
# Feature Flags
ENABLE_ASYNC_PROCESSING: true
ENABLE_DOCUMENT_ANALYSIS: true
ENABLE_AUTOMATED_DECISIONS: true
MOCK_CREDIT_BUREAU: true
MOCK_OCR_SERVICE: true
# CORS
ALLOWED_ORIGINS: "http://localhost:3000,http://localhost:8080"
TRUSTED_HOSTS: "localhost,127.0.0.1"
ports:
- "8000:8000"
volumes:
- uploads_data:/app/uploads
- logs_data:/app/logs
networks:
- losa_network
depends_on:
postgres:
condition: service_healthy
redis:
condition: service_healthy
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8000/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
restart: unless-stopped
# Development LOSA Application (with hot reload)
losa-dev:
build:
context: .
dockerfile: Dockerfile
target: builder
container_name: losa_app_dev
environment:
# Database Configuration
DB_HOST: postgres
DB_PORT: 5432
DB_NAME: losa
DB_USER: losa_user
DB_PASSWORD: losa_password
DB_SSL_MODE: disable
# Redis Configuration
REDIS_HOST: redis
REDIS_PORT: 6379
REDIS_PASSWORD: losa_redis_password
# Development Configuration
HOST: 0.0.0.0
PORT: 8000
DEBUG: true
RELOAD: true
ENVIRONMENT: development
# AI Configuration
OPENAI_API_KEY: ${OPENAI_API_KEY:-your_openai_api_key_here}
OPENAI_MODEL: gpt-4
OPENAI_TEMPERATURE: 0.1
# Development Features
MOCK_CREDIT_BUREAU: true
MOCK_OCR_SERVICE: true
MOCK_EMAIL_SERVICE: true
# Logging
LOG_LEVEL: DEBUG
LOG_FILE: /app/logs/losa_dev.log
# CORS (more permissive for development)
ALLOWED_ORIGINS: "*"
ports:
- "8001:8000"
volumes:
- ./src:/app/src
- ./examples:/app/examples
- ./tests:/app/tests
- uploads_data:/app/uploads
- logs_data:/app/logs
networks:
- losa_network
depends_on:
postgres:
condition: service_healthy
redis:
condition: service_healthy
command: ["python", "-m", "losa.main"]
profiles:
- dev
# Nginx Reverse Proxy (for production)
nginx:
image: nginx:alpine
container_name: losa_nginx
ports:
- "80:80"
- "443:443"
volumes:
- ./docker/nginx.conf:/etc/nginx/nginx.conf
- ./docker/ssl:/etc/nginx/ssl
- nginx_logs:/var/log/nginx
networks:
- losa_network
depends_on:
- losa
profiles:
- production
# Adminer (Database Administration)
adminer:
image: adminer:latest
container_name: losa_adminer
ports:
- "8080:8080"
environment:
ADMINER_DEFAULT_SERVER: postgres
ADMINER_DESIGN: pepa-linha
networks:
- losa_network
depends_on:
- postgres
profiles:
- tools
# Grafana (Monitoring Dashboard)
grafana:
image: grafana/grafana:latest
container_name: losa_grafana
ports:
- "3000:3000"
environment:
GF_SECURITY_ADMIN_PASSWORD: admin123
GF_INSTALL_PLUGINS: grafana-piechart-panel
volumes:
- grafana_data:/var/lib/grafana
- ./docker/grafana/dashboards:/etc/grafana/provisioning/dashboards
- ./docker/grafana/datasources:/etc/grafana/provisioning/datasources
networks:
- losa_network
profiles:
- monitoring
# Prometheus (Metrics Collection)
prometheus:
image: prom/prometheus:latest
container_name: losa_prometheus
ports:
- "9090:9090"
volumes:
- ./docker/prometheus.yml:/etc/prometheus/prometheus.yml
- prometheus_data:/prometheus
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--storage.tsdb.path=/prometheus'
- '--web.console.libraries=/etc/prometheus/console_libraries'
- '--web.console.templates=/etc/prometheus/consoles'
- '--web.enable-lifecycle'
networks:
- losa_network
profiles:
- monitoring
# Mail Server (for testing email functionality)
mailhog:
image: mailhog/mailhog:latest
container_name: losa_mailhog
ports:
- "1025:1025" # SMTP
- "8025:8025" # Web UI
networks:
- losa_network
profiles:
- dev
# Networks
networks:
losa_network:
driver: bridge
name: losa_network
# Volumes
volumes:
postgres_data:
driver: local
name: losa_postgres_data
redis_data:
driver: local
name: losa_redis_data
uploads_data:
driver: local
name: losa_uploads_data
logs_data:
driver: local
name: losa_logs_data
nginx_logs:
driver: local
name: losa_nginx_logs
grafana_data:
driver: local
name: losa_grafana_data
prometheus_data:
driver: local
name: losa_prometheus_data