version: '3.9'
services:
  api:
    image: 'ghcr.io/novuhq/novu/api:0.22.0'
    container_name: api
    restart: unless-stopped
    logging:
      driver: 'json-file'
      options:
        max-size: '50m'
        max-file: '5'
    environment:
      NODE_ENV: ${NODE_ENV}
      API_ROOT_URL: ${API_ROOT_URL}
      DISABLE_USER_REGISTRATION: ${DISABLE_USER_REGISTRATION}
      PORT: ${API_PORT}
      FRONT_BASE_URL: ${FRONT_BASE_URL}
      MONGO_URL: ${MONGO_URL}
      MONGO_MIN_POOL_SIZE: ${MONGO_MIN_POOL_SIZE}
      MONGO_MAX_POOL_SIZE: ${MONGO_MAX_POOL_SIZE}
      REDIS_HOST: ${REDIS_HOST}
      REDIS_PORT: ${REDIS_PORT}
      REDIS_PASSWORD: ${REDIS_PASSWORD}
      REDIS_DB_INDEX: ${REDIS_DB_INDEX}
      REDIS_CACHE_SERVICE_HOST: ${REDIS_CACHE_SERVICE_HOST}
      REDIS_CACHE_SERVICE_PORT: ${REDIS_CACHE_SERVICE_PORT}
      S3_LOCAL_STACK: ${S3_LOCAL_STACK}
      S3_BUCKET_NAME: ${S3_BUCKET_NAME}
      S3_REGION: ${S3_REGION}
      AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
      AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
      JWT_SECRET: ${JWT_SECRET}
      STORE_ENCRYPTION_KEY: ${STORE_ENCRYPTION_KEY}
      SENTRY_DSN: ${SENTRY_DSN}
      NEW_RELIC_APP_NAME: ${NEW_RELIC_APP_NAME}
      NEW_RELIC_LICENSE_KEY: ${NEW_RELIC_LICENSE_KEY}
      API_CONTEXT_PATH: ${API_CONTEXT_PATH}
    ports:
      - '3000:3000'
    networks:
      hostnet: {}
  worker:
    image: 'ghcr.io/novuhq/novu/worker:0.22.0'
    container_name: worker
    restart: unless-stopped
    logging:
      driver: 'json-file'
      options:
        max-size: '50m'
        max-file: '5'
    environment:
      NODE_ENV: ${NODE_ENV}
      MONGO_URL: ${MONGO_URL}
      MONGO_MAX_POOL_SIZE: ${MONGO_MAX_POOL_SIZE}
      REDIS_HOST: ${REDIS_HOST}
      REDIS_PORT: ${REDIS_PORT}
      REDIS_PASSWORD: ${REDIS_PASSWORD}
      REDIS_DB_INDEX: ${REDIS_DB_INDEX}
      REDIS_CACHE_SERVICE_HOST: ${REDIS_CACHE_SERVICE_HOST}
      REDIS_CACHE_SERVICE_PORT: ${REDIS_CACHE_SERVICE_PORT}
      S3_LOCAL_STACK: ${S3_LOCAL_STACK}
      S3_BUCKET_NAME: ${S3_BUCKET_NAME}
      S3_REGION: ${S3_REGION}
      AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
      AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
      STORE_ENCRYPTION_KEY: ${STORE_ENCRYPTION_KEY}
      SENTRY_DSN: ${SENTRY_DSN}
      NEW_RELIC_APP_NAME: ${NEW_RELIC_APP_NAME}
      NEW_RELIC_LICENSE_KEY: ${NEW_RELIC_LICENSE_KEY}
  ws:
    image: 'ghcr.io/novuhq/novu/ws:0.22.0'
    container_name: ws
    restart: unless-stopped
    logging:
      driver: 'json-file'
      options:
        max-size: '50m'
        max-file: '5'
    environment:
      PORT: ${WS_PORT}
      NODE_ENV: ${NODE_ENV}
      MONGO_URL: ${MONGO_URL}
      MONGO_MAX_POOL_SIZE: ${MONGO_MAX_POOL_SIZE}
      REDIS_HOST: ${REDIS_HOST}
      REDIS_PORT: ${REDIS_PORT}
      REDIS_PASSWORD: ${REDIS_PASSWORD}
      JWT_SECRET: ${JWT_SECRET}
      WS_CONTEXT_PATH: ${WS_CONTEXT_PATH}
    ports:
      - '3002:3002'
    networks:
      hostnet: {}      
  web:
    image: 'ghcr.io/novuhq/novu/web:0.22.0'
    depends_on:
      - api
      - worker
    container_name: web
    restart: unless-stopped
    logging:
      driver: 'json-file'
      options:
        max-size: '50m'
        max-file: '5'
    environment:
      REACT_APP_API_URL: ${API_ROOT_URL}
      REACT_APP_ENVIRONMENT: ${NODE_ENV}
      REACT_APP_WIDGET_EMBED_PATH: ${WIDGET_EMBED_PATH}
      REACT_APP_DOCKER_HOSTED_ENV: 'true'
      REACT_APP_WS_URL: ${REACT_APP_WS_URL}
    ports:
      - 4200:4200
    networks:
      hostnet: {}      
  widget:
    image: 'ghcr.io/novuhq/novu/widget:0.22.0'
    depends_on:
      - api
      - worker
      - web
    container_name: widget
    restart: unless-stopped
    logging:
      driver: 'json-file'
      options:
        max-size: '50m'
        max-file: '5'
    environment:
      REACT_APP_API_URL: ${API_ROOT_URL}
      REACT_APP_WS_URL: ${REACT_APP_WS_URL}
      REACT_APP_ENVIRONMENT: ${NODE_ENV}
      WIDGET_CONTEXT_PATH: ${WIDGET_CONTEXT_PATH}
    ports:
      - 4500:4500
    networks:
      hostnet: {}      
  embed:
    depends_on:
      - widget
    image: 'ghcr.io/novuhq/novu/embed:0.22.0'
    container_name: embed
    restart: unless-stopped
    logging:
      driver: 'json-file'
      options:
        max-size: '50m'
        max-file: '5'
    environment:
      WIDGET_URL: ${WIDGET_URL}
    ports:
      - 4701:4701
    networks:
      hostnet: {}
networks:
  hostnet:
    external: true
    name: host