captainVersion: 4 services: $$cap_appname-cache: caproverExtra: notExposeAsWebApp: 'true' image: redis:$$cap_REDIS_VERSION $$cap_appname-db: caproverExtra: notExposeAsWebApp: 'true' image: mongo:$$cap_MONGO_VERSION environment: PUID: $$cap_PUID PGID: $$cap_PGID volumes: - $$cap_appname-db:/data/db $$cap_appname-api: caproverExtra: containerHttpPort: $$cap_NOVU_API_PORT image: $$cap_NOVU_IMAGE_URL/api:$$cap_NOVU_IMAGE_VERSION environment: NODE_ENV: $$cap_ENVIRONMENT API_ROOT_URL: http://$$cap_appname-api.$$cap_root_domain DISABLE_USER_REGISTRATION: $$cap_NOVU_DISABLE_USER_REGISTRATION PORT: $$cap_NOVU_API_PORT FRONT_BASE_URL: http://$$cap_appname.$$cap_root_domain MONGO_URL: mongodb://srv-captain--$$cap_appname-db/$$cap_MONGO_DB REDIS_HOST: srv-captain--$$cap_appname-cache REDIS_PORT: $$cap_REDIS_PORT REDIS_DB_INDEX: $$cap_REDIS_DB_INDEX S3_LOCAL_STACK: $$cap_NOVU_S3_LOCAL_STACK S3_BUCKET_NAME: $$cap_NOVU_S3_BUCKET_NAME S3_REGION: $$cap_NOVU_S3_REGION AWS_ACCESS_KEY_ID: $$cap_NOVU_AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY: $$cap_NOVU_AWS_SECRET_ACCESS_KEY JWT_SECRET: $$cap_NOVU_JWT_SECRET STORE_ENCRYPTION_KEY: $$cap_NOVU_STORE_ENCRYPTION_KEY SENTRY_DSN: $$cap_NOVU_API_SENTRY_DSN depends_on: - $$cap_appname-db - $$cap_appname-cache $$cap_appname-ws: caproverExtra: containerHttpPort: $$cap_NOVU_PORT_WEBSOCKET image: $$cap_NOVU_IMAGE_URL/ws:$$cap_NOVU_IMAGE_VERSION environment: PORT: $$cap_NOVU_PORT_WEBSOCKET NODE_ENV: $$cap_ENVIRONMENT MONGO_URL: mongodb://srv-captain--$$cap_appname-db/$$cap_MONGO_DB REDIS_HOST: srv-captain--$$cap_appname-cache REDIS_PORT: $$cap_REDIS_PORT JWT_SECRET: $$cap_NOVU_JWT_SECRET depends_on: - $$cap_appname-db - $$cap_appname-cache $$cap_appname: caproverExtra: containerHttpPort: $$cap_NOVU_PORT_APPLICATION image: $$cap_NOVU_IMAGE_URL/web:$$cap_NOVU_IMAGE_VERSION environment: REACT_APP_API_URL: http://$$cap_appname-api.$$cap_root_domain REACT_APP_ENVIRONMENT: $$cap_ENVIRONMENT REACT_APP_WIDGET_EMBED_PATH: http://$$cap_appname-embed.$$cap_root_domain/embed.umd.min.js REACT_APP_DOCKER_HOSTED_ENV: $$cap_NOVU_DOCKER_HOSTED_ENVIRONMENT depends_on: - $$cap_appname-api $$cap_appname-widget: caproverExtra: containerHttpPort: $$cap_NOVU_PORT_WIDGET image: $$cap_NOVU_IMAGE_URL/widget:$$cap_NOVU_IMAGE_VERSION environment: REACT_APP_API_URL: http://$$cap_appname-api.$$cap_root_domain REACT_APP_WS_URL: http://$$cap_appname-ws.$$cap_root_domain REACT_APP_ENVIRONMENT: $$cap_ENVIRONMENT depends_on: - $$cap_appname-api - $$cap_appname $$cap_appname-embed: caproverExtra: containerHttpPort: $$cap_NOVU_PORT_EMBED image: $$cap_NOVU_IMAGE_URL/embed:$$cap_NOVU_IMAGE_VERSION environment: WIDGET_URL: http://$$cap_appname-widget.$$cap_root_domain depends_on: - $$cap_appname-widget caproverOneClickApp: displayName: Novu isOfficial: true description: Open Source Notification Infrastructure For Developers documentation: https://docs.novu.co instructions: start: |- Novu is a fully functional real-time notification center for your web and react apps. The only open-source notifications infrastructure that manages multi-channel content, scheduled notifications, digest engine, user preferences, and delivers Email, SMS, Push and Chat notifications using a single API. end: |- Novu has been successfully deployed! It might take few moments before it's fully started. You can access it at `http://$$cap_appname.$$cap_root_domain`. variables: - id: $$cap_NOVU_IMAGE_VERSION label: Application | Version description: Version tag of Novu's Docker images. Check out their valid tags at https://github.com/novuhq/novu/pkgs/container/novu%2Fapi defaultValue: '0.8.0' validRegex: /.{1,}/ - id: $$cap_NOVU_IMAGE_URL label: Application | Image URL description: URL to Novu's Docker images. defaultValue: ghcr.io/novuhq/novu validRegex: /.{1,}/ - id: $$cap_REDIS_VERSION label: Redis | Version description: Version tag of Redis' image. Check out their valid tags at https://hub.docker.com/_/redis/tags defaultValue: '7.0.5' validRegex: /.{1,}/ - id: $$cap_MONGO_VERSION label: MongoDB | Version description: Version tag of MongoDB's image. Check out their valid tags at https://hub.docker.com/_/mongo/tags defaultValue: '6.0.2' validRegex: /.{1,}/ - id: $$cap_ENVIRONMENT label: General | Environment description: Application environment (e.g `dev`, `test`, `prod`, `ci`, `local`). defaultValue: prod validRegex: /^(dev|test|prod|ci|local)$/ - id: $$cap_NOVU_DOCKER_HOSTED_ENVIRONMENT label: General | Docker-Hosted Environment description: Whether to the application is hosted in Docker. defaultValue: 'true' validRegex: /^(true|false)$/ - id: $$cap_PUID label: General | User ID description: User ID that the process uses, run `id $user` on your instance to see the ID. defaultValue: 1000 validRegex: /.{1,}/ - id: $$cap_PGID label: General | Group ID description: Group ID that the process uses, run `id $user` on your instance to see the ID. defaultValue: 1000 validRegex: /.{1,}/ - id: $$cap_NOVU_JWT_SECRET label: Security | JWT Secret description: Secret for JWT. defaultValue: $$cap_gen_random_hex(32) validRegex: /.{1,}/ - id: $$cap_NOVU_STORE_ENCRYPTION_KEY label: Security | Store Encryption Key description: Key for store encryption. defaultValue: $$cap_gen_random_hex(32) validRegex: /.{1,}/ - id: $$cap_NOVU_DISABLE_USER_REGISTRATION label: Privacy | Disable User Registration description: Whether to disable user registration. defaultValue: 'false' validRegex: /^(true|false)$/ - id: $$cap_NOVU_API_PORT label: API | Port description: Port of Novu's API. defaultValue: 3000 validRegex: /.{1,}/ - id: $$cap_NOVU_API_SENTRY_DSN label: API | Sentry DSN description: Sentry's DSN for error tracking. Leave empty to disable. - id: $$cap_REDIS_PORT label: Redis | Port description: Port of Redis' host. defaultValue: 6379 validRegex: /.{1,}/ - id: $$cap_REDIS_DB_INDEX label: Redis | Database Index description: Index of the database in Redis. defaultValue: 2 validRegex: /.{1,}/ - id: $$cap_MONGO_DB label: MongoDB | Database Name description: Name of the database in MongoDB. defaultValue: novu validRegex: /.{1,}/ - id: $$cap_NOVU_PORT_EMBED label: Networking | Embed Port description: Port of Novu's embed host. defaultValue: 4701 validRegex: /.{1,}/ - id: $$cap_NOVU_PORT_WIDGET label: Networking | Widget Port description: Port of Novu's widget host. defaultValue: 4500 validRegex: /.{1,}/ - id: $$cap_NOVU_PORT_APPLICATION label: Networking | Web Port description: Port of Novu's web host. defaultValue: 4200 validRegex: /.{1,}/ - id: $$cap_NOVU_PORT_WEBSOCKET label: Networking | WebSocket Port description: Port of Novu's WebSocket host. defaultValue: 3002 validRegex: /.{1,}/ - id: $$cap_NOVU_S3_LOCAL_STACK label: S3 | Local Stack URL description: URL to Localstack instance. Leave to `http://localhost:4566` to use local file storage. defaultValue: http://localhost:4566 validRegex: /.{1,}/ - id: $$cap_NOVU_S3_BUCKET_NAME label: S3 | Bucket Name description: Name of the bucket. Leave to `novu-local` to use local file storage. defaultValue: novu-local validRegex: /.{1,}/ - id: $$cap_NOVU_S3_REGION label: S3 | Region description: Region of the storage. Leave to `us-east-1` if using local file storage. defaultValue: us-east-1 validRegex: /.{1,}/ - id: $$cap_NOVU_AWS_ACCESS_KEY_ID label: S3 | AWS Access Key ID description: Access key ID for AWS. Leave to `test` to use local file storage. defaultValue: test validRegex: /.{1,}/ - id: $$cap_NOVU_AWS_SECRET_ACCESS_KEY label: S3 | AWS Secret Access Key description: Secret access key for AWS. Leave to `test` to use local file storage. defaultValue: test validRegex: /.{1,}/