-
Notifications
You must be signed in to change notification settings - Fork 4.1k
Open
Description
📜 Description
I'm experiencing this issue when I try to launch a project using Docker Compose on my Windows 10 machine. However, once it's running, it consumes significant resources, rendering the computer unusable.
When we tried it on a Linux server with the same configuration, it worked without issue.
My current system information:
13th Gen Intel(R) Core(TM) i5-13500H (12 Core / 16 Thread)
32 GB 3200MHz RAM
1 TB m.2 SSD
👟 Reproduction steps
- Download the images by creating a Docker compose file using Windows. (A sample Docker compose file is below.)
- Run the relevant command to start the project with the Docker compose file.
docker compose -f "docker-compose.yml" up -d --build "novu_redis" "novu_mongodb" "novu_api" "novu_worker" "novu_ws" "novu_dashboard"
- After running it, you will see that it is using a lot of system resources.
👍 Expected behavior
Works without consuming too much system resources
👎 Actual Behavior with Screenshots



Novu version
Novu OS v2.3.0 (Dockerize)
npm version
node version
📃 Provide any additional context for the Bug.
docker-compose.yml:
novu_redis:
image: 'redis:alpine'
container_name: novu_redis
restart: unless-stopped
logging:
driver: 'json-file' # Enabled json-file logging with limits for consistency
options:
max-size: '50m'
max-file: '5'
healthcheck:
test: ['CMD', 'redis-cli', 'ping']
interval: 10s
timeout: 5s
retries: 5
ports:
- ${NOVU_DOCKER_REDIS_SERVICE_PORT}:${NOVU_DOCKER_REDIS_SERVICE_PORT}
novu_mongodb:
image: mongo:8.0.3
container_name: novu_mongodb
restart: unless-stopped
logging:
driver: 'json-file'
options:
max-size: '50m'
max-file: '5'
environment:
- PUID=1000
- PGID=1000
- MONGO_INITDB_ROOT_USERNAME=${NOVU_MONGO_INITDB_ROOT_USERNAME}
- MONGO_INITDB_ROOT_PASSWORD=${NOVU_MONGO_INITDB_ROOT_PASSWORD}
volumes:
- novu_mongodb:/data/db
ports:
- 27017:27017
healthcheck:
test: ['CMD', 'mongo', '--eval', "db.adminCommand('ping')"]
interval: 10s
timeout: 5s
retries: 5
novu_api:
image: 'ghcr.io/novuhq/novu/api:2.3.0'
depends_on:
- novu_mongodb
- novu_redis
container_name: novu_api
restart: unless-stopped
logging:
driver: 'json-file'
options:
max-size: '50m'
max-file: '5'
environment:
NODE_ENV: ${NODE_ENV}
API_ROOT_URL: ${NOVU_API_ROOT_URL}
PORT: ${NOVU_API_PORT}
FRONT_BASE_URL: ${NOVU_FRONT_BASE_URL}
MONGO_URL: ${NOVU_MONGO_URL}
MONGO_MIN_POOL_SIZE: ${NOVU_MONGO_MIN_POOL_SIZE}
MONGO_MAX_POOL_SIZE: ${NOVU_MONGO_MAX_POOL_SIZE}
REDIS_HOST: ${NOVU_REDIS_HOST}
REDIS_PORT: ${NOVU_REDIS_PORT}
REDIS_PASSWORD: ${NOVU_REDIS_PASSWORD}
REDIS_DB_INDEX: 2
REDIS_CACHE_SERVICE_HOST: ${NOVU_REDIS_CACHE_SERVICE_HOST}
REDIS_CACHE_SERVICE_PORT: ${NOVU_REDIS_CACHE_SERVICE_PORT}
S3_LOCAL_STACK: ${NOVU_S3_LOCAL_STACK}
S3_BUCKET_NAME: ${NOVU_S3_BUCKET_NAME}
S3_REGION: ${NOVU_S3_REGION}
AWS_ACCESS_KEY_ID: ${NOVU_AWS_ACCESS_KEY_ID}
AWS_SECRET_ACCESS_KEY: ${NOVU_AWS_SECRET_ACCESS_KEY}
JWT_SECRET: ${NOVU_JWT_SECRET}
STORE_ENCRYPTION_KEY: ${NOVU_STORE_ENCRYPTION_KEY}
NOVU_SECRET_KEY: ${NOVU_SECRET_KEY}
SUBSCRIBER_WIDGET_JWT_EXPIRATION_TIME: ${NOVU_SUBSCRIBER_WIDGET_JWT_EXPIRATION_TIME}
SENTRY_DSN: ${NOVU_SENTRY_DSN}
NEW_RELIC_ENABLED: ${NOVU_NEW_RELIC_ENABLED}
NEW_RELIC_APP_NAME: ${NOVU_NEW_RELIC_APP_NAME}
NEW_RELIC_LICENSE_KEY: ${NOVU_NEW_RELIC_LICENSE_KEY}
API_CONTEXT_PATH: ${NOVU_API_CONTEXT_PATH}
MONGO_AUTO_CREATE_INDEXES: ${NOVU_MONGO_AUTO_CREATE_INDEXES}
IS_API_IDEMPOTENCY_ENABLED: ${NOVU_IS_API_IDEMPOTENCY_ENABLED}
IS_API_RATE_LIMITING_ENABLED: ${NOVU_IS_API_RATE_LIMITING_ENABLED}
IS_NEW_MESSAGES_API_RESPONSE_ENABLED: ${NOVU_IS_NEW_MESSAGES_API_RESPONSE_ENABLED}
IS_V2_ENABLED: ${NOVU_IS_V2_ENABLED}
ports:
- ${NOVU_API_PORT}:${NOVU_API_PORT}
novu_worker:
image: 'ghcr.io/novuhq/novu/worker:2.3.0'
depends_on:
- novu_mongodb
- novu_redis
container_name: novu_worker
restart: unless-stopped
logging:
driver: 'json-file'
options:
max-size: '50m'
max-file: '5'
environment:
NODE_ENV: ${NODE_ENV}
MONGO_URL: ${NOVU_MONGO_URL}
MONGO_MIN_POOL_SIZE: ${NOVU_MONGO_MIN_POOL_SIZE}
MONGO_MAX_POOL_SIZE: ${NOVU_MONGO_MAX_POOL_SIZE}
REDIS_HOST: ${NOVU_REDIS_HOST}
REDIS_PORT: ${NOVU_REDIS_PORT}
REDIS_PASSWORD: ${NOVU_REDIS_PASSWORD}
REDIS_DB_INDEX: 2
REDIS_CACHE_SERVICE_HOST: ${NOVU_REDIS_CACHE_SERVICE_HOST}
REDIS_CACHE_SERVICE_PORT: ${NOVU_REDIS_CACHE_SERVICE_PORT}
S3_LOCAL_STACK: ${NOVU_S3_LOCAL_STACK}
S3_BUCKET_NAME: ${NOVU_S3_BUCKET_NAME}
S3_REGION: ${NOVU_S3_REGION}
AWS_ACCESS_KEY_ID: ${NOVU_AWS_ACCESS_KEY_ID}
AWS_SECRET_ACCESS_KEY: ${NOVU_AWS_SECRET_ACCESS_KEY}
STORE_ENCRYPTION_KEY: ${NOVU_STORE_ENCRYPTION_KEY}
SUBSCRIBER_WIDGET_JWT_EXPIRATION_TIME: ${NOVU_SUBSCRIBER_WIDGET_JWT_EXPIRATION_TIME}
SENTRY_DSN: ${NOVU_SENTRY_DSN}
NEW_RELIC_ENABLED: ${NOVU_NEW_RELIC_ENABLED}
NEW_RELIC_APP_NAME: ${NOVU_NEW_RELIC_APP_NAME}
NEW_RELIC_LICENSE_KEY: ${NOVU_NEW_RELIC_LICENSE_KEY}
BROADCAST_QUEUE_CHUNK_SIZE: ${NOVU_BROADCAST_QUEUE_CHUNK_SIZE}
MULTICAST_QUEUE_CHUNK_SIZE: ${NOVU_MULTICAST_QUEUE_CHUNK_SIZE}
API_ROOT_URL: http://novu_api:${NOVU_API_PORT}
IS_EMAIL_INLINE_CSS_DISABLED: ${NOVU_IS_EMAIL_INLINE_CSS_DISABLED}
IS_USE_MERGED_DIGEST_ID_ENABLED: ${NOVU_IS_USE_MERGED_DIGEST_ID_ENABLED}
novu_ws:
image: 'ghcr.io/novuhq/novu/ws:2.3.0'
depends_on:
- novu_mongodb
- novu_redis
container_name: novu_ws
restart: unless-stopped
logging:
driver: 'json-file'
options:
max-size: '50m'
max-file: '5'
environment:
PORT: ${NOVU_WS_PORT}
NODE_ENV: ${NODE_ENV}
MONGO_URL: ${NOVU_MONGO_URL}
MONGO_MIN_POOL_SIZE: ${NOVU_MONGO_MIN_POOL_SIZE}
MONGO_MAX_POOL_SIZE: ${NOVU_MONGO_MAX_POOL_SIZE}
REDIS_HOST: ${NOVU_REDIS_HOST}
REDIS_PORT: ${NOVU_REDIS_PORT}
REDIS_PASSWORD: ${NOVU_REDIS_PASSWORD}
JWT_SECRET: ${NOVU_JWT_SECRET}
WS_CONTEXT_PATH: ${NOVU_WS_CONTEXT_PATH}
NEW_RELIC_ENABLED: ${NOVU_NEW_RELIC_ENABLED}
NEW_RELIC_APP_NAME: ${NOVU_NEW_RELIC_APP_NAME}
NEW_RELIC_LICENSE_KEY: ${NOVU_NEW_RELIC_LICENSE_KEY}
ports:
- ${NOVU_WS_PORT}:${NOVU_WS_PORT}
novu_dashboard:
image: 'ghcr.io/novuhq/novu/dashboard:2.3.0'
depends_on:
- novu_api
- novu_worker
container_name: novu_dashboard
restart: unless-stopped
logging:
driver: 'json-file'
options:
max-size: '50m'
max-file: '5'
environment:
VITE_API_HOSTNAME: ${NOVU_VITE_API_HOSTNAME}
VITE_SELF_HOSTED: true
VITE_WEBSOCKET_HOSTNAME: ${NOVU_VITE_WEBSOCKET_HOSTNAME}
VITE_LEGACY_DASHBOARD_URL: ${NOVU_VITE_LEGACY_DASHBOARD_URL}
ports:
- 2000:4000
.env
# Secrets
# YOU MUST CHANGE THESE BEFORE GOING INTO PRODUCTION
# used as a secret to verify the JWT token signature
NOVU_JWT_SECRET=your-secret
# expressed in seconds or a string describing a time span [zeit/ms](https://github.com/zeit/ms.js). Eg: 60, "2 days", "10h", "7d"
NOVU_SUBSCRIBER_WIDGET_JWT_EXPIRATION_TIME=15d
# used to encrypt/decrypt the provider credentials
NOVU_STORE_ENCRYPTION_KEY=<ENCRYPTION_KEY_MUST_BE_32_LONG>
# Random generated secret key.
NOVU_SECRET_KEY=<RANDOM_GENERATED_SECRET_KEY>
# Host
NOVU_HOST_NAME=http://localhost
# General
# available values 'dev', 'test', 'production', 'ci', 'local'
NODE_ENV=local
NOVU_MONGO_MAX_POOL_SIZE=10
NOVU_MONGO_MIN_POOL_SIZE=5
# MONGO USER
NOVU_MONGO_INITDB_ROOT_USERNAME=root
# MONGO PASSWORD
NOVU_MONGO_INITDB_ROOT_PASSWORD=secret
NOVU_MONGO_URL=mongodb://${NOVU_MONGO_INITDB_ROOT_USERNAME}:${NOVU_MONGO_INITDB_ROOT_PASSWORD}@novu_mongodb:27017/novu-db?authSource=admin
NOVU_MONGO_AUTO_CREATE_INDEXES=true
NOVU_REDIS_HOST=novu_redis
NOVU_DOCKER_REDIS_SERVICE_PORT=6379
NOVU_REDIS_PASSWORD=
NOVU_REDIS_CACHE_SERVICE_HOST=
# AWS
NOVU_S3_LOCAL_STACK=${NOVU_HOST_NAME}:4566
NOVU_S3_BUCKET_NAME=novu-local
NOVU_S3_REGION=us-east-1
NOVU_AWS_ACCESS_KEY_ID=test
NOVU_AWS_SECRET_ACCESS_KEY=test
# Ports
NOVU_API_PORT=3000
NOVU_REDIS_PORT=6379
NOVU_REDIS_CACHE_SERVICE_PORT=6379
NOVU_WS_PORT=3002
# Root URL
NOVU_VITE_API_HOSTNAME=${NOVU_HOST_NAME}:3000
NOVU_VITE_WEBSOCKET_HOSTNAME=${NOVU_HOST_NAME}:3002
# The VITE_LEGACY_DASHBOARD_URL must be set to the host and port of your web container.
NOVU_API_ROOT_URL=${NOVU_HOST_NAME}:3000
NOVU_FRONT_BASE_URL=${NOVU_HOST_NAME}:(4000|4200)
NOVU_IS_API_IDEMPOTENCY_ENABLED=false
NOVU_IS_API_RATE_LIMITING_ENABLED=false
NOVU_IS_NEW_MESSAGES_API_RESPONSE_ENABLED=true
NOVU_IS_V2_ENABLED=true
NOVU_IS_CONTROLS_AUTOCOMPLETE_ENABLED=false
NOVU_IS_WORKFLOW_NODE_PREVIEW_ENABLED=false
NOVU_IS_ENHANCED_DIGEST_ENABLED=-false
NOVU_IS_EMAIL_INLINE_CSS_DISABLED=false
NOVU_IS_USE_MERGED_DIGEST_ID_ENABLED=false
# Analytics
NOVU_SENTRY_DSN=
# update these values in case you are using New Relic, by default New Relic is disabled
NOVU_NEW_RELIC_ENABLED=false
NOVU_NEW_RELIC_APP_NAME="NEW_RELIC_APP_NAME"
NOVU_NEW_RELIC_LICENSE_KEY="NEW_RELIC_LICENSE_KEY"
NOVU_BROADCAST_QUEUE_CHUNK_SIZE=100
NOVU_MULTICAST_QUEUE_CHUNK_SIZE=100
👀 Have you spent some time to check if this bug has been raised before?
- I checked and didn't find a similar issue
🏢 Have you read the Contributing Guidelines?
- I have read the Contributing Guidelines
Are you willing to submit PR?
None