mirror of
https://github.com/KLogicHQ/nats-console.git
synced 2026-10-12 07:47:56 +00:00
183 lines
4.5 KiB
YAML
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
|