Files
nats-console/docker-compose.prod.yml
T
2025-12-04 22:31:48 +05:30

183 lines
4.5 KiB
YAML

version: '3.8'
services:
# ==================== Application Services ====================
api:
build:
context: .
dockerfile: apps/api/Dockerfile
image: nats-console/api:latest
restart: unless-stopped
ports:
- "3001:3001"
environment:
- NODE_ENV=production
- PORT=3001
- DATABASE_URL=${DATABASE_URL}
- REDIS_URL=${REDIS_URL}
- CLICKHOUSE_URL=${CLICKHOUSE_URL}
- CLICKHOUSE_DATABASE=${CLICKHOUSE_DATABASE:-nats_console}
- NATS_URL=${NATS_URL}
- JWT_SECRET=${JWT_SECRET}
- JWT_EXPIRES_IN=${JWT_EXPIRES_IN:-15m}
- JWT_REFRESH_EXPIRES_IN=${JWT_REFRESH_EXPIRES_IN:-7d}
- LOG_LEVEL=${LOG_LEVEL:-info}
depends_on:
postgres:
condition: service_healthy
redis:
condition: service_healthy
clickhouse:
condition: service_healthy
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:3001/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
networks:
- nats-console
web:
build:
context: .
dockerfile: apps/web/Dockerfile
image: nats-console/web:latest
restart: unless-stopped
ports:
- "3000:3000"
environment:
- NODE_ENV=production
- NEXT_PUBLIC_API_URL=${API_URL:-http://api:3001/api/v1}
- NEXT_PUBLIC_WS_URL=${WS_URL:-ws://api:3001/ws}
depends_on:
- api
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:3000"]
interval: 30s
timeout: 10s
retries: 3
start_period: 30s
networks:
- nats-console
workers:
build:
context: .
dockerfile: apps/workers/Dockerfile
image: nats-console/workers:latest
restart: unless-stopped
environment:
- NODE_ENV=production
- DATABASE_URL=${DATABASE_URL}
- REDIS_URL=${REDIS_URL}
- CLICKHOUSE_URL=${CLICKHOUSE_URL}
- CLICKHOUSE_DATABASE=${CLICKHOUSE_DATABASE:-nats_console}
- NATS_URL=${NATS_URL}
- LOG_LEVEL=${LOG_LEVEL:-info}
depends_on:
- api
- postgres
- redis
- clickhouse
networks:
- nats-console
# ==================== Database Services ====================
postgres:
image: postgres:16-alpine
restart: unless-stopped
volumes:
- postgres_data:/var/lib/postgresql/data
environment:
- POSTGRES_USER=${POSTGRES_USER:-nats_console}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-nats_console}
- POSTGRES_DB=${POSTGRES_DB:-nats_console}
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-nats_console} -d ${POSTGRES_DB:-nats_console}"]
interval: 10s
timeout: 5s
retries: 5
networks:
- nats-console
redis:
image: redis:7-alpine
restart: unless-stopped
command: redis-server --appendonly yes --maxmemory 256mb --maxmemory-policy allkeys-lru
volumes:
- redis_data:/data
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 5s
retries: 5
networks:
- nats-console
clickhouse:
image: clickhouse/clickhouse-server:latest
restart: unless-stopped
volumes:
- clickhouse_data:/var/lib/clickhouse
- ./docker/clickhouse/init:/docker-entrypoint-initdb.d
environment:
- CLICKHOUSE_DB=${CLICKHOUSE_DATABASE:-nats_console}
- CLICKHOUSE_USER=${CLICKHOUSE_USER:-default}
- CLICKHOUSE_PASSWORD=${CLICKHOUSE_PASSWORD:-}
healthcheck:
test: ["CMD", "wget", "--spider", "-q", "http://localhost:8123/ping"]
interval: 10s
timeout: 5s
retries: 5
networks:
- nats-console
nats:
image: nats:2.10-alpine
restart: unless-stopped
command: ["-js", "-m", "8222", "--store_dir", "/data"]
ports:
- "4222:4222"
- "8222:8222"
volumes:
- nats_data:/data
healthcheck:
test: ["CMD", "wget", "--spider", "-q", "http://localhost:8222/healthz"]
interval: 10s
timeout: 5s
retries: 5
networks:
- nats-console
# ==================== Reverse Proxy (Optional) ====================
nginx:
image: nginx:alpine
restart: unless-stopped
ports:
- "80:80"
- "443:443"
volumes:
- ./docker/nginx/nginx.conf:/etc/nginx/nginx.conf:ro
- ./docker/nginx/ssl:/etc/nginx/ssl:ro
depends_on:
- web
- api
networks:
- nats-console
profiles:
- with-nginx
volumes:
postgres_data:
redis_data:
clickhouse_data:
nats_data:
networks:
nats-console:
driver: bridge