-
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdocker-compose.yml
More file actions
120 lines (111 loc) · 4.3 KB
/
Copy pathdocker-compose.yml
File metadata and controls
120 lines (111 loc) · 4.3 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
services:
db:
image: postgres:15-alpine
restart: unless-stopped
environment:
POSTGRES_DB: ${DATABASE_NAME:-trackwatch}
POSTGRES_USER: ${DATABASE_USER:-trackwatch}
POSTGRES_PASSWORD: ${DATABASE_PASSWORD:?Database password required}
volumes:
- postgres_data:/var/lib/postgresql/data
healthcheck:
test:
[
"CMD-SHELL",
"pg_isready -U ${DATABASE_USER:-trackwatch} -d ${DATABASE_NAME:-trackwatch}",
]
interval: 10s
timeout: 5s
retries: 5
networks:
- trackwatch-network
backend:
image: ${BACKEND_IMAGE:-ghcr.io/emlopezr/trackwatch-backend:latest}
build:
context: ./backend
dockerfile: Dockerfile
target: backend
restart: unless-stopped
environment: &backend-env
# Django settings
SECRET_KEY: ${SECRET_KEY:?Django secret key required}
ADMIN_KEY: ${ADMIN_KEY:?Admin webhook key required}
DEBUG: ${DEBUG:-False}
ALLOWED_HOSTS: ${ALLOWED_HOSTS:-localhost,127.0.0.1,backend}
CORS_ALLOWED_ORIGINS: ${CORS_ALLOWED_ORIGINS:-http://localhost:5173,http://127.0.0.1:5173,https://trackwatch.emlopezr.com}
CSRF_TRUSTED_ORIGINS: ${CSRF_TRUSTED_ORIGINS:-http://localhost:5173,http://127.0.0.1:5173,https://trackwatch.emlopezr.com}
SECURE_SSL_REDIRECT: ${SECURE_SSL_REDIRECT:-False}
SECURE_HSTS_SECONDS: ${SECURE_HSTS_SECONDS:-0}
SECURE_HSTS_INCLUDE_SUBDOMAINS: ${SECURE_HSTS_INCLUDE_SUBDOMAINS:-False}
SECURE_HSTS_PRELOAD: ${SECURE_HSTS_PRELOAD:-False}
# Database
DATABASE_NAME: ${DATABASE_NAME:-trackwatch}
DATABASE_USER: ${DATABASE_USER:-trackwatch}
DATABASE_PASSWORD: ${DATABASE_PASSWORD:?Database password required}
DATABASE_HOST: db
DATABASE_PORT: 5432
# Spotify
SPOTIFY_CLIENT_ID: ${SPOTIFY_CLIENT_ID:?Spotify Client ID required}
SPOTIFY_CLIENT_SECRET: ${SPOTIFY_CLIENT_SECRET:?Spotify Client Secret required}
# Optional: Email service
RESEND_API_KEY: ${RESEND_API_KEY:-}
ADMIN_EMAIL: ${ADMIN_EMAIL:-}
EMAIL_DOMAIN: ${EMAIL_DOMAIN:-emlopezr.com}
FRONTEND_BASE_URL: ${FRONTEND_BASE_URL:-https://trackwatch.emlopezr.com}
# Gunicorn configuration
GUNICORN_WORKERS: ${GUNICORN_WORKERS:-2}
GUNICORN_THREADS: ${GUNICORN_THREADS:-4}
GUNICORN_TIMEOUT: ${GUNICORN_TIMEOUT:-120}
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8000/ping"]
interval: 10s
timeout: 5s
retries: 10
start_period: 30s
depends_on:
db:
condition: service_healthy
networks:
- trackwatch-network
scheduler:
image: ${SCHEDULER_IMAGE:-ghcr.io/emlopezr/trackwatch-scheduler:latest}
profiles:
- scheduler
build:
context: ./backend
dockerfile: Dockerfile
target: scheduler
restart: unless-stopped
environment:
<<: *backend-env
SCHEDULER_HOURS: ${SCHEDULER_HOURS:-7,14,21}
SCHEDULER_MINUTE: ${SCHEDULER_MINUTE:-0}
depends_on:
backend:
condition: service_healthy
networks:
- trackwatch-network
frontend:
image: ${FRONTEND_IMAGE:-ghcr.io/emlopezr/trackwatch-frontend:latest}
build:
context: ./frontend
dockerfile: Dockerfile
restart: unless-stopped
environment:
VITE_HIDE_PUBLIC_LOGIN: ${VITE_HIDE_PUBLIC_LOGIN:-false}
BACKEND_PROXY_PASS: ${BACKEND_PROXY_PASS:-http://backend:8000}
BACKEND_PROXY_HOST: ${BACKEND_PROXY_HOST:-backend}
NGINX_RESOLVER: ${NGINX_RESOLVER:-127.0.0.11}
ports:
- "${PORT:-80}:80"
depends_on:
- backend
networks:
- trackwatch-network
volumes:
postgres_data:
name: trackwatch_postgres_data
networks:
trackwatch-network:
name: trackwatch-network
driver: bridge