forked from GeneBO98/tradetally
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdocker-compose.yaml
More file actions
132 lines (127 loc) · 4.81 KB
/
docker-compose.yaml
File metadata and controls
132 lines (127 loc) · 4.81 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
version: '3.8'
services:
# PostgreSQL Database
postgres:
image: postgres:16-alpine
container_name: tradetally-db
environment:
POSTGRES_USER: ${DB_USER:-trader}
POSTGRES_PASSWORD: ${DB_PASSWORD:-trader_password}
POSTGRES_DB: ${DB_NAME:-tradetally}
volumes:
- postgres_data:/var/lib/postgresql/data
ports:
- "5432:5432"
networks:
- trader-network
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${DB_USER:-trader} -d ${DB_NAME:-tradetally}"]
interval: 10s
timeout: 5s
retries: 5
# Application (Frontend + Backend)
# Build locally to ensure latest features including chart fixes
app:
image: potentialmidas/tradetally:latest
container_name: tradetally-app
depends_on:
postgres:
condition: service_healthy
environment:
# Backend environment variables
NODE_ENV: ${NODE_ENV:-production}
PORT: ${PORT:-3000}
DB_HOST: postgres
DB_PORT: 5432
DB_USER: ${DB_USER:-trader}
DB_PASSWORD: ${DB_PASSWORD:-trader_password}
DB_NAME: ${DB_NAME:-tradetally}
JWT_SECRET: ${JWT_SECRET:-your_jwt_secret_here}
JWT_EXPIRES_IN: ${JWT_EXPIRES_IN:-7d}
# Email configuration (optional)
EMAIL_HOST: ${EMAIL_HOST:-smtp.gmail.com}
EMAIL_PORT: ${EMAIL_PORT:-587}
EMAIL_USER: ${EMAIL_USER:-}
EMAIL_PASS: ${EMAIL_PASS:-}
EMAIL_FROM: ${EMAIL_FROM:-noreply@tradetally.io}
# Frontend API URL
VITE_API_URL: ${VITE_API_URL:-http://localhost/api}
# CORS Configuration for Mobile Apps
FRONTEND_URL: ${FRONTEND_URL:-http://localhost:5173}
CORS_ORIGINS: ${CORS_ORIGINS:-}
# Mobile Support Configuration
ACCESS_TOKEN_EXPIRE: ${ACCESS_TOKEN_EXPIRE:-15m}
REFRESH_TOKEN_EXPIRE: ${REFRESH_TOKEN_EXPIRE:-30d}
MAX_DEVICES_PER_USER: ${MAX_DEVICES_PER_USER:-10}
ENABLE_DEVICE_TRACKING: ${ENABLE_DEVICE_TRACKING:-true}
# Analytics Configuration (Optional - Plausible, Umami, etc.)
VITE_ANALYTICS_DOMAIN: ${VITE_ANALYTICS_DOMAIN:-}
VITE_ANALYTICS_SITE_ID: ${VITE_ANALYTICS_SITE_ID:-}
# Registration Control
REGISTRATION_MODE: ${REGISTRATION_MODE:-open}
# API Documentation
ENABLE_SWAGGER: ${ENABLE_SWAGGER:-true}
# External API Keys
FINNHUB_API_KEY: ${FINNHUB_API_KEY:-}
# Finnhub rate limits (Free: 60/min, 1/sec | Basic: 150/min, 30/sec | Pro: 300/min, 60/sec)
FINNHUB_RATE_LIMIT_PER_MINUTE: ${FINNHUB_RATE_LIMIT_PER_MINUTE:-60}
FINNHUB_RATE_LIMIT_PER_SECOND: ${FINNHUB_RATE_LIMIT_PER_SECOND:-1}
ALPHA_VANTAGE_API_KEY: ${ALPHA_VANTAGE_API_KEY:-}
GEMINI_API_KEY: ${GEMINI_API_KEY:-}
ENABLE_AI_CUSIP_RESOLUTION: ${ENABLE_AI_CUSIP_RESOLUTION:-false}
# Schwab OAuth Configuration
SCHWAB_CLIENT_ID: ${SCHWAB_CLIENT_ID:-}
SCHWAB_CLIENT_SECRET: ${SCHWAB_CLIENT_SECRET:-}
SCHWAB_REDIRECT_URI: ${SCHWAB_REDIRECT_URI:-}
# Broker token encryption key (generate with: openssl rand -hex 32)
BROKER_ENCRYPTION_KEY: ${BROKER_ENCRYPTION_KEY:-}
# Database Configuration
RUN_MIGRATIONS: ${RUN_MIGRATIONS:-true}
# Feature Toggles - Background Services
# Set to 'false' to disable and reduce resource usage
ENABLE_PRICE_MONITORING: ${ENABLE_PRICE_MONITORING:-true}
ENABLE_TRADE_ENRICHMENT: ${ENABLE_TRADE_ENRICHMENT:-true}
ENABLE_JOB_RECOVERY: ${ENABLE_JOB_RECOVERY:-true}
ENABLE_GAMIFICATION: ${ENABLE_GAMIFICATION:-true}
ENABLE_TRIAL_EMAILS: ${ENABLE_TRIAL_EMAILS:-true}
ENABLE_OPTIONS_SCHEDULER: ${ENABLE_OPTIONS_SCHEDULER:-true}
ENABLE_BACKUP_SCHEDULER: ${ENABLE_BACKUP_SCHEDULER:-true}
ENABLE_ENRICHMENT_CACHE_CLEANUP: ${ENABLE_ENRICHMENT_CACHE_CLEANUP:-true}
FEATURES_BEHAVIORAL_ANALYTICS_ENABLED: ${FEATURES_BEHAVIORAL_ANALYTICS_ENABLED:-true}
# Logging
LOG_LEVEL: ${LOG_LEVEL:-INFO}
# Timezone Configuration (affects admin metrics "today" calculations)
TZ: ${TZ:-UTC}
# Rate Limiting (set RATE_LIMIT_ENABLED=false to disable for self-hosted)
RATE_LIMIT_ENABLED: ${RATE_LIMIT_ENABLED:-true}
RATE_LIMIT_MAX: ${RATE_LIMIT_MAX:-1000}
RATE_LIMIT_WINDOW_MS: ${RATE_LIMIT_WINDOW_MS:-900000}
ports:
- "8080:80"
- "3001:3000"
volumes:
- ./backend/src/logs:/app/backend/src/logs
- ./backend/src/data:/app/backend/src/data
- ./backend/uploads:/app/backend/uploads
networks:
- trader-network
restart: unless-stopped
# Optional: Adminer for database management
adminer:
image: adminer:latest
container_name: tradetally-adminer
depends_on:
- postgres
ports:
- "8080:8080"
networks:
- trader-network
environment:
ADMINER_DEFAULT_SERVER: postgres
restart: unless-stopped
networks:
trader-network:
driver: bridge
volumes:
postgres_data:
driver: local