npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@nestjs-mod/docker-compose

v1.16.1

Published

Docker Compose is a tool for defining and running multi-container applications. It is the key to unlocking a streamlined and efficient development and deployment experience. (Generator docker-compose.yml for https://docs.docker.com/compose)

Downloads

206

Readme

@nestjs-mod/docker-compose

Docker Compose is a tool for defining and running multi-container applications. It is the key to unlocking a streamlined and efficient development and deployment experience. (Generator docker-compose.yml for https://docs.docker.com/compose)

NPM version monthly downloads Telegram Discord

Installation

npm i --save @nestjs-mod/docker-compose

Modules

| Link | Category | Description | | ---- | -------- | ----------- | | DockerCompose | infrastructure | Docker Compose is a tool for defining and running multi-container applications. It is the key to unlocking a streamlined and efficient development and deployment experience. (Generator docker-compose.yml for https://docs.docker.com/compose) | | DockerComposeAuthorizer | infrastructure | Authorizer is an open-source authentication and authorization solution for your applications. Bring your database and have complete control over the user information. You can self-host authorizer instances and connect to supported databases. (Generator for https://authorizer.dev in docker-compose.yml for https://www.npmjs.com/package/@nestjs-mod/docker-compose) | | DockerComposeMinio | infrastructure | MinIO is a high-performance, S3 compatible object storage. (Generator for minio in docker-compose.yml for https://www.npmjs.com/package/@nestjs-mod/docker-compose) | | DockerComposeNats | infrastructure | NATS is an open source, lightweight and high-performance messaging system. It is ideal for distributed systems and supports modern cloud architectures and pub-sub, request-reply and queuing models. (Generator for nats in docker-compose.yml for https://www.npmjs.com/package/@nestjs-mod/docker-compose) | | DockerComposeNginx | infrastructure | Nginx is a web server that can also be used as a reverse proxy, load balancer, mail proxy and HTTP cache. (Generator for nginx in docker-compose.yml for https://www.npmjs.com/package/@nestjs-mod/docker-compose) | | DockerComposePostgreSQL | infrastructure | PostgreSQL (Postgres) is an open source object-relational database known for reliability and data integrity. ACID-compliant, it supports foreign keys, joins, views, triggers and stored procedures. (Generator for databases in docker-compose.yml for https://github.com/nestjs-mod/nestjs-mod-contrib/tree/master/libs/infrastructure/docker-compose) | | DockerComposeRedis | infrastructure | The open-source, in-memory data store used by millions of developers as a cache, vector database, document database, streaming engine, and message broker. (Generator for redis in docker-compose.yml for https://www.npmjs.com/package/@nestjs-mod/docker-compose) |

Modules descriptions

DockerCompose

Docker Compose is a tool for defining and running multi-container applications. It is the key to unlocking a streamlined and efficient development and deployment experience. (Generator docker-compose.yml for https://docs.docker.com/compose)

Use in NestJS-mod

An example you can see the full example here https://github.com/nestjs-mod/nestjs-mod-contrib/tree/master/apps/example-prisma-flyway or https://github.com/nestjs-mod/nestjs-mod-contrib/tree/master/apps/example-prisma.

import { PACKAGE_JSON_FILE, ProjectUtils, bootstrapNestApplication } from '@nestjs-mod/common';
import { DOCKER_COMPOSE_FILE, DockerCompose } from '@nestjs-mod/docker-compose';
import { join } from 'path';

export const flywayPrismaFeatureName = 'flyway-prisma';

const rootFolder = join(__dirname, '..', '..', '..');
const appFolder = join(rootFolder, 'apps', 'example-prisma-flyway');

bootstrapNestApplication({
  modules: {
    system: [
      ProjectUtils.forRoot({
        staticConfiguration: {
          applicationPackageJsonFile: join(
            appFolder
            PACKAGE_JSON_FILE
          ),
          packageJsonFile: join(rootFolder, PACKAGE_JSON_FILE),
          envFile: join(rootFolder, '.env'),
        },
      }),
    ],
    infrastructure: [
      DockerCompose.forRoot({
        configuration: {
          dockerComposeFileVersion: '3',
          dockerComposeFile: join(appFolder, DOCKER_COMPOSE_FILE),
        },
      }),
    ],
  },
});

After connecting the module to the application and npm run build and starting generation of documentation through npm run docs:infrastructure, you will have new files and scripts to run.

New scripts mostly package.json

{
  "scripts": {
    "_____docker-compose infra_____": "_____docker-compose infra_____",
    "docker-compose:start:example-prisma-flyway": "export COMPOSE_INTERACTIVE_NO_CLI=1 && docker-compose -f ./apps/example-prisma-flyway/docker-compose.yml --compatibility up -d",
    "docker-compose:stop:example-prisma-flyway": "export COMPOSE_INTERACTIVE_NO_CLI=1 && docker-compose -f ./apps/example-prisma-flyway/docker-compose.yml down"
  },
  "scriptsComments": {
    "docker-compose:start:example-prisma-flyway": [
      "Running the docker-compose infrastructure for example-prisma-flyway"
    ],
    "docker-compose:stop:example-prisma-flyway": [
      "Stopping the docker-compose infrastructure for example-prisma-flyway"
    ]
  }
}

Empty docker-compose file for application docker-compose.yml with real credenionals and add it to .gitignore file

# Do not modify this file, it is generated using the DockerCompose module included with NestJS-mod.
version: '3'

Empty docker-compose file for application docker-compose-example.yml with fake credenionals

# Do not modify this file, it is generated using the DockerCompose module included with NestJS-mod.
version: '3'

Shared providers

ManualDockerComposeFeatures

Configuration

| Key | Description | Constraints | Default | Value | | ------ | ----------- | ----------- | ------- | ----- | |dockerComposeFile|Main file for docker-compose, the Compose specification establishes a standard for the definition of multi-container platform-agnostic applications.|isNotEmpty (dockerComposeFile should not be empty)|-|-| |prodDockerComposeFile|Main file for prod docker-compose, the Compose specification establishes a standard for the definition of multi-container platform-agnostic applications.|optional|-|-| |exampleDockerComposeFile|Example file for docker-compose, the Compose specification establishes a standard for the definition of multi-container platform-agnostic applications.|optional|-|-| |prodDockerComposeEnvFile|Dotenv file for prod docker-compose file.|optional|-|-| |dockerComposeFileVersion|Docker-compose file version. @see https://docs.docker.com/compose/compose-file/compose-versioning|isNotEmpty (dockerComposeFileVersion should not be empty)|3|-| |beforeSaveExampleDockerComposeFile|Before save file for example docker-compose.|optional|-|-| |beforeSaveDockerComposeFile|Before save main file for docker-compose.|optional|-|-| |beforeSaveProdDockerComposeFile|Before save main file for prod docker-compose.|optional|-|-| |beforeSaveDockerComposeEnvFile|Method before save dotenv file for docker-compose file.|optional|-|-| |beforeSaveProdDockerComposeEnvFile|Method before save dotenv file for prod docker-compose file.|optional|-|-|

Feature configuration

| Key | Description | Constraints | Default | Value | | ------ | ----------- | ----------- | ------- | ----- | |version|The top-level version property is defined by the Compose Specification for backward compatibility. It is only informative. @see https://github.com/compose-spec/compose-spec/blob/master/04-version-and-name.md|optional|-|-| |services|A service is an abstract definition of a computing resource within an application which can be scaled or replaced independently from other components. @see https://github.com/compose-spec/compose-spec/blob/master/05-services.md|optional|-|-| |networks|Networks are the layer that allow services to communicate with each other. @see https://github.com/compose-spec/compose-spec/blob/master/06-networks.md|optional|-|-| |volumes|Volumes are persistent data stores implemented by the container engine. @see https://github.com/compose-spec/compose-spec/blob/master/07-volumes.md|optional|-|-| |secrets|Secrets are a flavor of Configs focusing on sensitive data, with specific constraint for this usage. @see https://github.com/compose-spec/compose-spec/blob/master/09-secrets.md|optional|-|-| |configs|Configs allow services to adapt their behaviour without the need to rebuild a Docker image. @see https://github.com/compose-spec/compose-spec/blob/master/08-configs.md|optional|-|-|

Modules that use feature configuration

Feature module name: AUTHORIZER

| Key | Description | Constraints | Default | Value | | ------ | ----------- | ----------- | ------- | ----- | |version|The top-level version property is defined by the Compose Specification for backward compatibility. It is only informative. @see https://github.com/compose-spec/compose-spec/blob/master/04-version-and-name.md|optional|-|-| |services|A service is an abstract definition of a computing resource within an application which can be scaled or replaced independently from other components. @see https://github.com/compose-spec/compose-spec/blob/master/05-services.md|optional|-|{"authorizer":{"image":"lakhansamani/authorizer:1.3.8","container_name":"authorizer","ports":["8080:8080"],"networks":["default-network"],"environment":{"DATABASE_NAME":"authorizer","PORT":8080,"COOKIE_NAME":"authorizer","DISABLE_PLAYGROUND":true,"ACCESS_TOKEN_EXPIRY_TIME":"30m","IMAGE":"lakhansamani/authorizer:1.3.8","EXTERNAL_CLIENT_PORT":8080,"ENV":"production","RESET_PASSWORD_URL":"/reset-password","ROLES":"user,admin","DEFAULT_ROLES":"user","JWT_ROLE_CLAIM":"role","ORGANIZATION_NAME":"Authorizer","ORGANIZATION_LOGO":"Authorizer Logo","COUCHBASE_BUCKET":"authorizer","COUCHBASE_BUCKET_RAM_QUOTA":1000,"COUCHBASE_SCOPE":"_default"},"keysOfEnvironmentsWithStaticValue":["featureName","image","networks","dependsOnServiceNames","env"],"tty":true,"restart":"always","depends_on":{}}}| |networks|Networks are the layer that allow services to communicate with each other. @see https://github.com/compose-spec/compose-spec/blob/master/06-networks.md|optional|-|{"default-network":{"driver":"bridge"}}| |volumes|Volumes are persistent data stores implemented by the container engine. @see https://github.com/compose-spec/compose-spec/blob/master/07-volumes.md|optional|-|-| |secrets|Secrets are a flavor of Configs focusing on sensitive data, with specific constraint for this usage. @see https://github.com/compose-spec/compose-spec/blob/master/09-secrets.md|optional|-|-| |configs|Configs allow services to adapt their behaviour without the need to rebuild a Docker image. @see https://github.com/compose-spec/compose-spec/blob/master/08-configs.md|optional|-|-|

Modules that use feature configuration

Feature module name: POSTGRE_SQL

| Key | Description | Constraints | Default | Value | | ------ | ----------- | ----------- | ------- | ----- | |version|The top-level version property is defined by the Compose Specification for backward compatibility. It is only informative. @see https://github.com/compose-spec/compose-spec/blob/master/04-version-and-name.md|optional|-|-| |services|A service is an abstract definition of a computing resource within an application which can be scaled or replaced independently from other components. @see https://github.com/compose-spec/compose-spec/blob/master/05-services.md|optional|-|{"postgre-sql":{"image":"bitnami/postgresql:15.5.0","container_name":"postgre-sql","volumes":["postgre-sql-volume:/bitnami/postgresql"],"ports":["5432:5432"],"networks":["default-network"],"healthcheck":{"test":["CMD-SHELL","pg_isready -U postgres"],"interval":"5s","timeout":"5s","retries":5},"tty":true,"restart":"always"}}| |networks|Networks are the layer that allow services to communicate with each other. @see https://github.com/compose-spec/compose-spec/blob/master/06-networks.md|optional|-|{"default-network":{"driver":"bridge"}}| |volumes|Volumes are persistent data stores implemented by the container engine. @see https://github.com/compose-spec/compose-spec/blob/master/07-volumes.md|optional|-|{"postgre-sql-volume":{"name":"postgre-sql-volume"}}| |secrets|Secrets are a flavor of Configs focusing on sensitive data, with specific constraint for this usage. @see https://github.com/compose-spec/compose-spec/blob/master/09-secrets.md|optional|-|-| |configs|Configs allow services to adapt their behaviour without the need to rebuild a Docker image. @see https://github.com/compose-spec/compose-spec/blob/master/08-configs.md|optional|-|-|

Modules that use feature configuration

Feature module name: MINIO

| Key | Description | Constraints | Default | Value | | ------ | ----------- | ----------- | ------- | ----- | |version|The top-level version property is defined by the Compose Specification for backward compatibility. It is only informative. @see https://github.com/compose-spec/compose-spec/blob/master/04-version-and-name.md|optional|-|-| |services|A service is an abstract definition of a computing resource within an application which can be scaled or replaced independently from other components. @see https://github.com/compose-spec/compose-spec/blob/master/05-services.md|optional|-|{"minio":{"image":"bitnami/minio:2024.2.9","container_name":"minio","volumes":["minio-volume:/bitnami/minio/data"],"ports":["9000:9000","9001:9001"],"networks":["default-network"],"environment":{},"keysOfEnvironmentsWithStaticValue":["featureName","image","networks","nginxBucketsLocations","nginxConfigContent","nginxConfigFolder","nginxLogsFolder"],"healthcheck":{"test":["CMD-SHELL","mc","ready","local"],"interval":"5s","timeout":"5s","retries":5},"tty":true,"restart":"always"}}| |networks|Networks are the layer that allow services to communicate with each other. @see https://github.com/compose-spec/compose-spec/blob/master/06-networks.md|optional|-|{"default-network":{"driver":"bridge"}}| |volumes|Volumes are persistent data stores implemented by the container engine. @see https://github.com/compose-spec/compose-spec/blob/master/07-volumes.md|optional|-|{"minio-volume":{"name":"minio-volume"}}| |secrets|Secrets are a flavor of Configs focusing on sensitive data, with specific constraint for this usage. @see https://github.com/compose-spec/compose-spec/blob/master/09-secrets.md|optional|-|-| |configs|Configs allow services to adapt their behaviour without the need to rebuild a Docker image. @see https://github.com/compose-spec/compose-spec/blob/master/08-configs.md|optional|-|-|

Back to Top


DockerComposeAuthorizer

Authorizer is an open-source authentication and authorization solution for your applications. Bring your database and have complete control over the user information. You can self-host authorizer instances and connect to supported databases. (Generator for https://authorizer.dev in docker-compose.yml for https://www.npmjs.com/package/@nestjs-mod/docker-compose)

Use in NestJS-mod

An approximate description of how to connect, an extended description with an example application will be next time (todo: right now I have a lot of work and don’t have time to arrange everything properly 😉)

bootstrapNestApplication({
  globalConfigurationOptions: { debug: true },
  globalEnvironmentsOptions: { debug: true },
  modules: {
    system: [
      ProjectUtils.forRoot({
        staticConfiguration: {
          applicationPackageJsonFile: join(appFolder, PACKAGE_JSON_FILE),
          packageJsonFile: join(rootFolder, PACKAGE_JSON_FILE),
          envFile: join(rootFolder, '.env'),
        },
      }),
      DefaultNestApplicationInitializer.forRoot(),
      DefaultNestApplicationListener.forRoot({
        staticConfiguration: {
          // When running in infrastructure mode, the backend server does not start.
          mode: isInfrastructureMode() ? 'silent' : 'listen',
        },
      }),
    ],
    infrastructure: [
      DockerCompose.forRoot({
        configuration: {
          dockerComposeFileVersion: '3',
          dockerComposeFile: join(appFolder, DOCKER_COMPOSE_FILE),
        },
      }),
      DockerComposePostgreSQL.forFeature({
        featureModuleName: authorizerFeatureName,
      }),
      DockerComposeRedis.forRoot(),
      DockerComposeAuthorizer.forRoot({
        staticEnvironments: {
          redisUrl: '%SERVER_AUTHORIZER_INTERNAL_REDIS_URL%',
          databaseUrl: '%SERVER_AUTHORIZER_INTERNAL_DATABASE_URL%',
        },
        staticConfiguration: {
          featureName: authorizerFeatureName,
          organizationName: 'OrganizationName',
          dependsOnServiceNames: {
            'postgre-sql-migrations': 'service_completed_successfully',
            redis: 'service_healthy',
          },
        },
      }),
    ],
  },
});

After connecting the module to the application and npm run build and starting generation of documentation through npm run docs:infrastructure, you will have new files and scripts to run.

New scripts mostly package.json

Add database options to docker-compose file for application docker-compose.yml with real credenionals and add it to .gitignore file

version: '3'
services:
  server-authorizer:
    image: "lakhansamani/authorizer:1.3.8"
    container_name: "server-authorizer"
    ports:
      - "8080:8080"
    networks:
      - "server-network"
    environment:
      REDIS_URL: "redis://:cgSOXCMczzNFkxAmDJAsoujJYpoMDuTT@server-redis:6379"
      DATABASE_URL: "postgres://Yk42KA4sOb:B7Ep2MwlRR6fAx0frXGWVTGP850qAxM6@server-postgre-sql:5432/authorizer"
      ADMIN_SECRET: "VfKSfPPljhHBXCEohnitursmgDxfAyiD"
      DATABASE_TYPE: "postgres"
      DATABASE_NAME: "authorizer"
      FEATURE_NAME: "authorizer"
      ORGANIZATION_NAME: "OrganizationName"
      DEPENDS_ON_SERVICE_NAMES: "[object Object]"
      IMAGE: "lakhansamani/authorizer:1.3.8"
      EXTERNAL_CLIENT_PORT: "8080"
      ENV: "production"
      PORT: "8080"
      COOKIE_NAME: "authorizer"
      RESET_PASSWORD_URL: "/reset-password"
      DISABLE_PLAYGROUND: "true"
      ROLES: "user,admin"
      DEFAULT_ROLES: "user"
      JWT_ROLE_CLAIM: "role"
      ORGANIZATION_LOGO: "Authorizer Logo"
      ACCESS_TOKEN_EXPIRY_TIME: "30m"
      COUCHBASE_BUCKET: "authorizer"
      COUCHBASE_BUCKET_RAM_QUOTA: "1000"
      COUCHBASE_SCOPE: "_default"
    tty: true
    restart: "always"
    depends_on:
      server-postgre-sql-migrations:
        condition: "service_completed_successfully"
      server-redis:
        condition: "service_healthy"
networks:
  server-network:
    driver: 'bridge'

New environment variable

SERVER_AUTHORIZER_DATABASE_URL=postgres://Yk42KA4sOb:B7Ep2MwlRR6fAx0frXGWVTGP850qAxM6@server-postgre-sql:5432/authorizer?schema=public
SERVER_AUTHORIZER_REDIS_URL=redis://:cgSOXCMczzNFkxAmDJAsoujJYpoMDuTT@server-redis:6379
SERVER_AUTHORIZER_INTERNAL_DATABASE_URL=postgres://Yk42KA4sOb:B7Ep2MwlRR6fAx0frXGWVTGP850qAxM6@server-postgre-sql:5432/authorizer
SERVER_AUTHORIZER_INTERNAL_REDIS_URL=redis://:cgSOXCMczzNFkxAmDJAsoujJYpoMDuTT@server-redis:6379
# server-authorizer (generated)
REDIS_URL=redis://:cgSOXCMczzNFkxAmDJAsoujJYpoMDuTT@server-redis:6379
DATABASE_URL=postgres://Yk42KA4sOb:B7Ep2MwlRR6fAx0frXGWVTGP850qAxM6@server-postgre-sql:5432/authorizer
ADMIN_SECRET=VfKSfPPljhHBXCEohnitursmgDxfAyiD
DATABASE_TYPE=postgres
DATABASE_NAME=authorizer
FEATURE_NAME=authorizer
ORGANIZATION_NAME='OrganizationName'
IMAGE=lakhansamani/authorizer:1.3.8
EXTERNAL_CLIENT_PORT=8080
ENV=production
PORT=8080
COOKIE_NAME=authorizer
RESET_PASSWORD_URL=/reset-password
DISABLE_PLAYGROUND=true
ROLES=user,admin
DEFAULT_ROLES=user
JWT_ROLE_CLAIM=role
ORGANIZATION_LOGO='Authorizer Logo'
ACCESS_TOKEN_EXPIRY_TIME=30m
COUCHBASE_BUCKET=authorizer
COUCHBASE_BUCKET_RAM_QUOTA=1000
COUCHBASE_SCOPE=_default

When launched in the infrastructure documentation generation mode, the module creates an .env file with a list of all required variables, as well as an example example.env, where you can enter example variable values.

Static environments

| Key | Description | Sources | Constraints | Default | Value | | ------ | ----------- | ------- | ----------- | ------- | ----- | |adminSecret|Super admin secret used to access the master data.|obj['adminSecret'], process.env['ADMIN_SECRET']|isNotEmpty (adminSecret should not be empty)|-|-| |databaseType|Which database you are using. Supported database types are postgres, mysql, planetscale, sqlite, sqlserver, mongodb, arangodb, yugabyte, mariadb, cassandradb, scylladb, couchbase, dynamodb.|obj['databaseType'], process.env['DATABASE_TYPE']|isNotEmpty (databaseType should not be empty)|-|-| |databaseUrl|Database connection string. In case of cluster url eg. for cassandra db, you can use comma separated IPs.|obj['databaseUrl'], process.env['DATABASE_URL']|isNotEmpty (databaseUrl should not be empty)|-|-| |databaseName|Name of database to connect to. This is useful in case of arangodb and mongodb. If not set, default value will be used.|obj['databaseName'], process.env['DATABASE_NAME']|optional|authorizer|authorizer| |redisUrl|Redis URL where sessions can be persisted false sessions will be stored in memory.|obj['redisUrl'], process.env['REDIS_URL']|optional|-|-| |databasePort|Port on which database connection should be made. This is used when DATABASE_URL is not mentioned. At the moment supported by cassandradb.|obj['databasePort'], process.env['DATABASE_PORT']|optional|-|-| |databaseHost|Host/IP on which database connection should be made. This is used when DATABASE_URL is not mentioned. At the moment supported by cassandradb type.|obj['databaseHost'], process.env['DATABASE_HOST']|optional|-|-| |databaseUsername|Username for the database access with permission to create tables and records. At the moment supported by cassandradb, scylladb type.|obj['databaseUsername'], process.env['DATABASE_USERNAME']|optional|-|-| |databasePassword|Password for the database access with permission to create tables and records. At the moment supported by cassandradb, scylladb type.|obj['databasePassword'], process.env['DATABASE_PASSWORD']|optional|-|-| |databaseCert|Base64 encoded certificate string used to make SSL connection. At the moment supported by cassandradb,scylladb type.|obj['databaseCert'], process.env['DATABASE_CERT']|optional|-|-| |databaseCertKey|Base64 encoded key string used to make SSL connection. At the moment supported by cassandradb,scylladb type|obj['databaseCertKey'], process.env['DATABASE_CERT_KEY']|optional|-|-| |databaseCaCert|Base64 encoded CA certificate string used to make SSL connection. At the moment supported by cassandradb, scylladb type.|obj['databaseCaCert'], process.env['DATABASE_CA_CERT']|optional|-|-| |port|Port on which server should be running.|obj['port'], process.env['PORT']|optional|8080|8080| |authorizerUrl|Domain name of the server, eg https://authorizer.herokuapp.com.|obj['authorizerUrl'], process.env['AUTHORIZER_URL']|optional|-|-| |cookieName|Name of cookie to be set by server.|obj['cookieName'], process.env['COOKIE_NAME']|optional|authorizer|authorizer| |smtpHost|SMTP host is used to send email verification emails and forgot password emails false If not set email sending can fail.|obj['smtpHost'], process.env['SMTP_HOST']|optional|-|-| |smtpPort|SMTP Port is used along with SMTP host.|obj['smtpPort'], process.env['SMTP_PORT']|optional|-|-| |smtpUsername|Username for your smtp provider.|obj['smtpUsername'], process.env['SMTP_USERNAME']|optional|-|-| |smtpPassword|Password for your smt provider|obj['smtpPassword'], process.env['SMTP_PASSWORD']|optional|-|-| |senderEmail|Email to be used in From section while sending emails.|obj['senderEmail'], process.env['SENDER_EMAIL']|optional|-|-| |senderName|Email sender name that is displayed in the inbox instead of just showing the email address.|obj['senderName'], process.env['SENDER_NAME']|optional|-|-| |disablePlayground|To disable playground|obj['disablePlayground'], process.env['DISABLE_PLAYGROUND']|optional|true|true| |accessTokenExpiryTime|Time interval for how long access token will be expired in 1h15m15s format.|obj['accessTokenExpiryTime'], process.env['ACCESS_TOKEN_EXPIRY_TIME']|optional|30m|30m| |awsAccessKeyId|AWS access key used for connecting to dynamodb. Make sure access credentials has rights for dynamodb. Used with DATABASE_TYPE=dynamodb.|obj['awsAccessKeyId'], process.env['AWS_ACCESS_KEY_ID']|optional|-|-| |awsSecretAccessKey|AWS secret access key used for connecting to dynamodb. Make sure access credentials has rights for dynamodb. Used with DATABASE_TYPE=dynamodb.|obj['awsSecretAccessKey'], process.env['AWS_SECRET_ACCESS_KEY']|optional|-|-| |googleClientId|OAuth Google login client id.|obj['googleClientId'], process.env['GOOGLE_CLIENT_ID']|optional|-|-| |googleClientSecret|OAuth Google login client secret.|obj['googleClientSecret'], process.env['GOOGLE_CLIENT_SECRET']|optional|-|-| |githubClientId|OAuth Github login client id.|obj['githubClientId'], process.env['GITHUB_CLIENT_ID']|optional|-|-| |githubClientSecret|OAuth Github login client secret.|obj['githubClientSecret'], process.env['GITHUB_CLIENT_SECRET']|optional|-|-| |facebookClientId|OAuth Facebook login client id.|obj['facebookClientId'], process.env['FACEBOOK_CLIENT_ID']|optional|-|-| |facebookClientSecret|OAuth Facebook login client secret.|obj['facebookClientSecret'], process.env['FACEBOOK_CLIENT_SECRET']|optional|-|-| |linkedinClientId|OAuth LinkedIn login client id.|obj['linkedinClientId'], process.env['LINKEDIN_CLIENT_ID']|optional|-|-| |linkedinClientSecret|OAuth LinkedIn login client secret.|obj['linkedinClientSecret'], process.env['LINKEDIN_CLIENT_SECRET']|optional|-|-| |appleClientId|OAuth Apple login client id.|obj['appleClientId'], process.env['APPLE_CLIENT_ID']|optional|-|-| |appleClientSecret|OAuth Apple login client secret.|obj['appleClientSecret'], process.env['APPLE_CLIENT_SECRET']|optional|-|-| |twitterClientId|OAuth Twitter login client id.|obj['twitterClientId'], process.env['TWITTER_CLIENT_ID']|optional|-|-| |twitterClientSecret|OAuth Twitter login client secret.|obj['twitterClientSecret'], process.env['TWITTER_CLIENT_SECRET']|optional|-|-| |microsoftClientId|OAuth Microsoft login client id.|obj['microsoftClientId'], process.env['MICROSOFT_CLIENT_ID']|optional|-|-| |microsoftClientSecret|OAuth Microsoft login client secret.|obj['microsoftClientSecret'], process.env['MICROSOFT_CLIENT_SECRET']|optional|-|-| |microsoftActiveDirectoryTenantId|Microsoft Active Directory Tenant ID obtained from azure portal.|obj['microsoftActiveDirectoryTenantId'], process.env['MICROSOFT_ACTIVE_DIRECTORY_TENANT_ID']|optional|-|-| |smtpLocalName|-|obj['smtpLocalName'], process.env['SMTP_LOCAL_NAME']|optional|-|-| |jwtSecret|-|obj['jwtSecret'], process.env['JWT_SECRET']|optional|-|-| |jwtPrivateKey|-|obj['jwtPrivateKey'], process.env['JWT_PRIVATE_KEY']|optional|-|-| |jwtPublicKey|-|obj['jwtPublicKey'], process.env['JWT_PUBLIC_KEY']|optional|-|-| |appUrl|-|obj['appUrl'], process.env['APP_URL']|optional|-|-| |discordClientId|-|obj['discordClientId'], process.env['DISCORD_CLIENT_ID']|optional|-|-| |discordClientSecret|-|obj['discordClientSecret'], process.env['DISCORD_CLIENT_SECRET']|optional|-|-| |twitchClientId|-|obj['twitchClientId'], process.env['TWITCH_CLIENT_ID']|optional|-|-| |twitchClientSecret|-|obj['twitchClientSecret'], process.env['TWITCH_CLIENT_SECRET']|optional|-|-| |clientId|-|obj['clientId'], process.env['CLIENT_ID']|optional|-|-| |clientSecret|-|obj['clientSecret'], process.env['CLIENT_SECRET']|optional|-|-| |encryptionKey|-|obj['encryptionKey'], process.env['ENCRYPTION_KEY']|optional|-|-| |isProd|-|obj['isProd'], process.env['IS_PROD']|optional|-|-| |allowedOrigins|-|obj['allowedOrigins'], process.env['ALLOWED_ORIGINS']|optional|-|-| |twilioApiKey|-|obj['twilioApiKey'], process.env['TWILIO_API_KEY']|optional|-|-| |twilioApiSecret|-|obj['twilioApiSecret'], process.env['TWILIO_API_SECRET']|optional|-|-| |twilioAccountSid|-|obj['twilioAccountSid'], process.env['TWILIO_ACCOUNT_SID']|optional|-|-| |twilioSender|-|obj['twilioSender'], process.env['TWILIO_SENDER']|optional|-|-|

Static configuration

| Key | Description | Constraints | Default | Value | | ------ | ----------- | ----------- | ------- | ----- | |image|Docker image name.|optional|lakhansamani/authorizer:1.3.8|-| |featureName|Feature name for generate prefix to environments keys.|optional|-|-| |networks|Network, if not set networkNames have project name and driver=bridge.|optional|-|-| |externalClientPort|External port for sharing container.|optional|8080|-| |dependsOnServiceNames|Depends on services|optional|-|-| |env|Which env you are running your server in. Supported envs production, development.|optional|production|-| |resetPasswordUrl|Reset password link, that can be used to send the correct forgot password link.|optional|/reset-password|-| |disableBasicAuthentication|Used to explicitly disable email and password based authentication.|optional|-|-| |disableEmailVerification|Used to disable the email verification while signing up.|optional|-|-| |disableMagicLinkLogin|Used to disable the password less login up.|optional|-|-| |disableLoginPage|Used to disable the default login page that comes with authorizer instance. This is helpful when user is building their custom login page.|optional|-|-| |disableSignUp|Used to disable the sign up feature. It is useful when you want to have beta release of your product and invite only limited users.|optional|-|-| |roles|Comma separated list of roles that your platform supports.|optional|user,admin|-| |defaultRoles|Comma separated list of roles that acts as Default roles which you would like to assign to users while they signup /login.|optional|user|-| |protectedRoles|Comma separated list of roles for which signup should be disabled. Example admin roles. This roles can only assigned manually via super admin like adminUpdateProfile.|optional|-|-| |jwtRoleClaim|Claim key that will be part of JWT token.|optional|role|-| |organizationName|Name of organization that you want on default login page.|optional|Authorizer|-| |organizationLogo|Logo of organization that you want on default login page.|optional|Authorizer Logo|-| |customAccessTokenScript|Javascript function to add extra keys to your JWT id token. This feature is developed using otto and only supports writing function in ES5. Check the sample here.|optional|-|-| |awsRegion|AWS, region id, where dynamod db tables are to be created. Used with DATABASE_TYPE=dynamodb.|optional|-|-| |couchbaseBucket|Bucket used for couchbase database. Used with DATABASE_TYPE=couchbase.|optional|authorizer|-| |couchbaseBucketRamQuota|RAM Quota for the bucket used for couchbase database. It has to be numeric value only. Used with DATABASE_TYPE=couchbase.|optional|1000|-| |couchbaseScope|Scope in which bucket is created. Used with DATABASE_TYPE=couchbase.|optional|_default|-| |test|-|optional|-|-| |envPath|-|optional|-|-| |isEmailServiceEnabled|-|optional|-|-| |isSmsServiceEnabled|-|optional|-|-| |appCookieSecure|-|optional|-|-| |adminCookieSecure|-|optional|-|-| |jwtType|-|optional|-|-| |jwk|-|optional|-|-| |disableMobileBasicAuthentication|-|optional|-|-| |disableRedisForEnv|-|optional|-|-| |disableStrongPassword|-|optional|-|-| |enforceMultiFactorAuthentication|-|optional|-|-| |disableMultiFactorAuthentication|-|optional|-|-| |disableTotpLogin|-|optional|-|-| |disableMailOtpLogin|-|optional|-|-| |disablePhoneVerification|-|optional|-|-| |defaultAuthorizeResponseType|-|optional|-|-| |defaultAuthorizeResponseMode|-|optional|-|-|

Back to Top


DockerComposeMinio

MinIO is a high-performance, S3 compatible object storage. (Generator for minio in docker-compose.yml for https://www.npmjs.com/package/@nestjs-mod/docker-compose)

Use in NestJS-mod

An example of using Minio, you can see the full example here https://github.com/nestjs-mod/nestjs-mod-contrib/tree/master/apps/example-minio and frontend on Angular here https://github.com/nestjs-mod/nestjs-mod-contrib/tree/master/apps/example-minio-angular.

import {
  DefaultNestApplicationInitializer,
  DefaultNestApplicationListener,
  InfrastructureMarkdownReportGenerator,
  PACKAGE_JSON_FILE,
  ProjectUtils,
  bootstrapNestApplication,
  isInfrastructureMode,
} from '@nestjs-mod/common';
import { join } from 'path';

import { DOCKER_COMPOSE_FILE, DockerCompose, DockerComposeMinio } from '@nestjs-mod/docker-compose';

const userFeatureName = 'minio-user';
const rootFolder = join(__dirname, '..', '..', '..');
const appFolder = join(rootFolder, 'apps', 'example-minio');

bootstrapNestApplication({
  globalConfigurationOptions: { debug: true },
  globalEnvironmentsOptions: { debug: true },
  modules: {
    system: [
      ProjectUtils.forRoot({
        staticConfiguration: {
          applicationPackageJsonFile: join(appFolder, PACKAGE_JSON_FILE),
          packageJsonFile: join(rootFolder, PACKAGE_JSON_FILE),
          envFile: join(rootFolder, '.env'),
        },
      }),
      DefaultNestApplicationInitializer.forRoot(),
      DefaultNestApplicationListener.forRoot({
        staticConfiguration: {
          // When running in infrastructure mode, the backend server does not start.
          mode: isInfrastructureMode() ? 'silent' : 'listen',
        },
      }),
    ],
    infrastructure: [
      InfrastructureMarkdownReportGenerator.forRoot({
        staticConfiguration: {
          markdownFile: join(appFolder, 'INFRASTRUCTURE.MD'),
          skipEmptySettings: true,
        },
      }),
      DockerCompose.forRoot({
        configuration: {
          dockerComposeFileVersion: '3',
          dockerComposeFile: join(appFolder, DOCKER_COMPOSE_FILE),
        },
      }),
      DockerComposeMinio.forRoot({
        staticConfiguration: {
          nginxPort: 1111,
          nginxFilesFolder: join(appFolder, 'ngnix'),
          featureName: userFeatureName,
        },
      }),
    ],
  },
});

After connecting the module to the application and npm run build and starting generation of documentation through npm run docs:infrastructure, you will have new files and scripts to run.

New scripts mostly package.json

Add database options to docker-compose file for application docker-compose.yml with real credenionals and add it to .gitignore file

version: '3'
services:
  example-minio-minio:
    image: 'bitnami/minio:2024.2.9'
    container_name: 'example-minio-minio'
    volumes:
      - 'example-minio-minio-volume:/bitnami/minio/data'
    ports:
      - '9000:9000'
      - '9001:9001'
    networks:
      - 'example-minio-network'
    environment:
      MINIO_ROOT_USER: 'minioadmin'
      MINIO_ROOT_PASSWORD: '6EcbcW66JsKvFrY2bZw6QGKjHhefca7Kgppq'
    healthcheck:
      test:
        - 'CMD-SHELL'
        - 'mc'
        - 'ready'
        - 'local'
      interval: '5s'
      timeout: '5s'
      retries: 5
    tty: true
    restart: 'always'
  example-minio-nginx:
    image: 'nginx:alpine'
    container_name: 'example-minio-nginx'
    volumes:
      - './ngnix/config:/etc/nginx/conf.d'
      - './ngnix/logs:/var/log/nginx/'
    ports:
      - '1111:1111'
    networks:
      - 'example-minio-network'
    tty: true
    restart: 'always'
    depends_on:
      example-minio-minio:
        condition: 'service_started'
networks:
  example-minio-network:
    driver: 'bridge'
volumes:
  example-minio-minio-volume:
    name: 'example-minio-minio-volume'

Add database options to docker-compose file for application docker-compose-example.yml with fake credenionals

# Do not modify this file, it is generated using the DockerCompose module included with NestJS-mod.
version: '3'
services:
  example-minio-minio:
    image: 'bitnami/minio:2024.2.9'
    container_name: 'example-minio-minio'
    volumes:
      - 'example-minio-minio-volume:/bitnami/minio/data'
    ports:
      - '9000:9000'
      - '9001:9001'
    networks:
      - 'example-minio-network'
    environment:
      MINIO_ROOT_USER: 'value_for_minio_root_user'
      MINIO_ROOT_PASSWORD: 'value_for_minio_root_password'
    healthcheck:
      test:
        - 'CMD-SHELL'
        - 'mc'
        - 'ready'
        - 'local'
      interval: '5s'
      timeout: '5s'
      retries: 5
    tty: true
    restart: 'always'
  example-minio-nginx:
    image: 'nginx:alpine'
    container_name: 'example-minio-nginx'
    volumes:
      - './ngnix/config:/etc/nginx/conf.d'
      - './ngnix/logs:/var/log/nginx/'
    ports:
      - '1111:1111'
    networks:
      - 'example-minio-network'
    tty: true
    restart: 'always'
    depends_on:
      example-minio-minio:
        condition: 'service_started'
networks:
  example-minio-network:
    driver: 'bridge'
volumes:
  example-minio-minio-volume:
    name: 'example-minio-minio-volume'

New environment variable

EXAMPLE_MINIO_MINIO_USER_MINIO_ROOT_USER=minioadmin
EXAMPLE_MINIO_MINIO_USER_MINIO_ROOT_PASSWORD=6EcbcW66JsKvFrY2bZw6QGKjHhefca7Kgppq

When launched in the infrastructure documentation generation mode, the module creates an .env file with a list of all required variables, as well as an example example.env, where you can enter example variable values.

Static environments

| Key | Description | Sources | Constraints | Default | Value | | ------ | ----------- | ------- | ----------- | ------- | ----- | |minioRootUser|Minio root user.|obj['minioRootUser'], process.env['MINIO_ROOT_USER']|isNotEmpty (minioRootUser should not be empty)|-|-| |minioRootPassword|Minio root password.|obj['minioRootPassword'], process.env['MINIO_ROOT_PASSWORD']|isNotEmpty (minioRootPassword should not be empty)|-|-|

Static configuration

| Key | Description | Constraints | Default | Value | | ------ | ----------- | ----------- | ------- | ----- | |image|Docker image name|optional|bitnami/minio:2024.2.9|-| |featureName|Feature name for generate prefix to environments keys|optional|-|-| |networks|Network, if not set networkNames have project name and driver=bridge.|optional|-|-| |externalPort|External port for S3 API operations on the default MinIO server port.|optional|9000|-| |externalConsolePort|External console for browser access on the MinIO Console port.|optional|9001|-| |nginxPort|External port for proxy access over nginx (infrastructure, need for disable CORS errors)|optional|-|-| |nginxConfigFolder|Folder for store nginx config (infrastructure)|optional|-|-| |nginxLogsFolder|Folder for store nginx logs (infrastructure)|optional|-|-| |nginxBucketsLocations|Locations for proxy to minio (infrastructure)|optional|[ files ]|-| |nginxConfigContent|Custom nginx config content (infrastructure)|optional|-|-|

Back to Top


DockerComposeNats

NATS is an open source, lightweight and high-performance messaging system. It is ideal for distributed systems and supports modern cloud architectures and pub-sub, request-reply and queuing models. (Generator for nats in docker-compose.yml for https://www.npmjs.com/package/@nestjs-mod/docker-compose)

Static environments

| Key | Description | Sources | Constraints | Default | Value | | ------ | ----------- | ------- | ----------- | ------- | ----- | |natsEnableAuth|Enable Authentication.|obj['natsEnableAuth'], process.env['NATS_ENABLE_AUTH']|optional|-|-| |natsUsername|Username credential for client connections.|obj['natsUsername'], process.env['NATS_USERNAME']|optional|-|-| |natsPassword|Password credential for client connections.|obj['natsPassword'], process.env['NATS_PASSWORD']|optional|-|-|

Static configuration

| Key | Description | Constraints | Default | Value | | ------ | ----------- | ----------- | ------- | ----- | |image|Docker image name.|optional|bitnami/nats:2.10.5|-| |featureName|Feature name for generate prefix to environments keys|optional|-|-| |networks|Network, if not set networkNames have project name and driver=bridge.|optional|-|-| |externalClientPort|External client port for sharing container.|optional|4222|-| |externalHttpPort|External http port for sharing container.|optional|8222|-| |extraArgs|Extra arguments.|optional|-js|-|

Back to Top


DockerComposeNginx

Nginx is a web server that can also be used as a reverse proxy, load balancer, mail proxy and HTTP cache. (Generator for nginx in docker-compose.yml for https://www.npmjs.com/package/@nestjs-mod/docker-compose)

Static configuration

| Key | Description | Constraints | Default | Value | | ------ | ----------- | ----------- | ------- | ----- | |image|Docker image name|optional|nginx:alpine|-| |configContent|Config content|isNotEmpty (configContent should not be empty)|-|-| |configFolder|Config folder for map volume to /etc/nginx/conf.d|isNotEmpty (configFolder should not be empty)|-|-| |logsFolder|Logs folder for map volume to /var/log/nginx/|optional|-|-| |dependsOnServiceNames|Depends on services|optional|-|-| |ports|Ports|optional|-|-| |networks|Network, if not set networkNames have project name and driver=bridge.|optional|-|-|

Back to Top


DockerComposePostgreSQL

PostgreSQL (Postgres) is an open source object-relational database known for reliability and data integrity. ACID-compliant, it supports foreign keys, joins, views, triggers and stored procedures. (Generator for databases in docker-compose.yml for https://github.com/nestjs-mod/nestjs-mod-contrib/tree/master/libs/infrastructure/docker-compose)

Use in NestJS-mod

An example you can see the full example here https://github.com/nestjs-mod/nestjs-mod-contrib/tree/master/apps/example-prisma-flyway or https://github.com/nestjs-mod/nestjs-mod-contrib/tree/master/apps/example-prisma.

import {
  DefaultNestApplicationInitializer,
  DefaultNestApplicationListener,
  PACKAGE_JSON_FILE,
  ProjectUtils,
  bootstrapNestApplication,
} from '@nestjs-mod/common';
import { DOCKER_COMPOSE_FILE, DockerCompose, DockerComposePostgreSQL } from '@nestjs-mod/docker-compose';
import { join } from 'path';

export const flywayPrismaFeatureName = 'flyway-prisma';

const rootFolder = join(__dirname, '..', '..', '..');
const appFolder = join(rootFolder, 'apps', 'example-prisma-flyway');

bootstrapNestApplication({
  modules: {
    system: [
      ProjectUtils.forRoot({
        staticConfiguration: {
          applicationPackageJsonFile: join(appFolder, PACKAGE_JSON_FILE),
          packageJsonFile: join(rootFolder, PACKAGE_JSON_FILE),
          envFile: join(rootFolder, '.env'),
        },
      }),
      DefaultNestApplicationInitializer.forRoot(),
      DefaultNestApplicationListener.forRoot({
        staticConfiguration: {
          // When running in infrastructure mode, the backend server does not start.
          mode: isInfrastructureMode() ? 'silent' : 'listen',
        },
      }),
    ],
    infrastructure: [
      DockerCompose.forRoot({
        configuration: {
          dockerComposeFileVersion: '3',
          dockerComposeFile: join(appFolder, DOCKER_COMPOSE_FILE),
        },
      }),
      DockerComposePostgreSQL.forRoot(),
      DockerComposePostgreSQL.forFeature({
        featureModuleName: flywayPrismaFeatureName,
      }),
    ],
  },
});

After connecting the module to the application and npm run build and starting generation of documentation through npm run docs:infrastructure, you will have new files and scripts to run.

New scripts mostly package.json

{
  "scripts": {
    "_____db_____": "_____db_____",
    "db:create": "./node_modules/.bin/nx run-many --exclude=@nestjs-mod/contrib -t=db-create"
  },
  "scriptsComments": {
    "db:create": ["Creation all databases of applications and modules"]
  }
}

Additional commands in the nx application project.json

{
  "targets": {
    "db-create": {
      "executor": "nx:run-commands",
      "options": {
        "commands": [
          "./node_modules/.bin/rucken postgres --force-change-username=true --force-change-password=true --root-database-url=${EXAMPLE_PRISMA_FLYWAY_ROOT_DATABASE_URL} --app-database-url=${EXAMPLE_PRISMA_FLYWAY_FLYWAY_PRISMA_DATABASE_URL}"
        ],
        "parallel": false,
        "envFile": "./.env",
        "color": true
      }
    }
  }
}

Add database options to docker-compose file for application docker-compose.yml with real credenionals and add it to .gitignore file

version: '3'
services:
  example-prisma-flyway-postgre-sql:
    image: bitnami/postgresql:15.5.0
    container_name: example-prisma-flyway-postgre-sql
    volumes:
      - example-prisma-flyway-postgre-sql-volume:/bitnami/postgresql
    ports:
      - 5432:5432
    networks:
      - example-prisma-flyway-network
    healthcheck:
      test:
        - CMD-SHELL
        - pg_isready -U postgres
      interval: 5s
      timeout: 5s
      retries: 5
    tty: true
    restart: always
    environment:
      POSTGRESQL_USERNAME: postgres
      POSTGRESQL_PASSWORD: postgres_password
      POSTGRESQL_DATABASE: postgres
networks:
  example-prisma-flyway-network:
    driver: bridge
volumes:
  example-prisma-flyway-postgre-sql-volume:
    name: example-prisma-flyway-postgre-sql-volume

Add database options to docker-compose file for application docker-compose-example.yml with fake credenionals

# Do not modify this file, it is generated using the DockerCompose module included with NestJS-mod.
version: '3'
services:
  example-prisma-flyway-postgre-sql:
    image: bitnami/postgresql:15.5.0
    container_name: example-prisma-flyway-postgre-sql
    volumes:
      - example-prisma-flyway-postgre-sql-volume:/bitnami/postgresql
    ports:
      - 5432:5432
    networks:
      - example-prisma-flyway-network
    healthcheck:
      test:
        - CMD-SHELL
        - pg_isready -U postgres
      interval: 5s
      timeout: 5s
      retries: 5
    tty: true
    restart: always
    environment:
      POSTGRESQL_USERNAME: value_for_postgresql_username
      POSTGRESQL_PASSWORD: value_for_postgresql_password
      POSTGRESQL_DATABASE: value_for_postgresql_database
networks:
  example-prisma-flyway-network:
    driver: bridge
volumes:
  example-prisma-flyway-postgre-sql-volume:
    name: example-prisma-flyway-postgre-sql-volume

Static environments

| Key | Description | Sources | Constraints | Default | Value | | ------ | ----------- | ------- | ----------- | ------- | ----- | |rootDatabaseUrl|Connection string for PostgreSQL with root credentials (example: postgres://postgres:postgres_password@localhost:5432/postgres?schema=public, username must be "postgres")|obj['rootDatabaseUrl'], process.env['ROOT_DATABASE_URL']|isNotEmpty (rootDatabaseUrl should not be empty)|-|-|

Static configuration

| Key | Description | Constraints | Default | Value | | ------ | ----------- | ----------- | ------- | ----- | |image|Docker image name|optional|bitnami/postgresql:15.5.0|-| |networks|Network, if not set networkNames have project name and driver=bridge.|optional|-|-| |externalPort|External port for sharing container.|optional|5432|-| |nxProjectJsonFile|Application or library project.json-file (nx)|optional|-|-|

Feature configuration

| Key | Description | Constraints | Default | Value | | ------ | ----------- | ----------- | ------- | ----- | |nxProjectJsonFile|Application or library project.json-file (nx)|optional|-|-|

Feature environments

| Key | Description | Sources | Constraints | Default | Value | | ------ | ----------- | ------- | ----------- | ------- | ----- | |databaseUrl|Connection string for PostgreSQL with module credentials (example: postgres://feat:feat_password@localhost:5432/feat?schema=public)|obj['databaseUrl'], process.env['DATABASE_URL']|isNotEmpty (databaseUrl should not be empty)|-|-|

Back to Top


DockerComposeRedis

The open-source, in-memory data store used by millions of developers as a cache, vector database, document database, streaming engine, and message broker. (Generator for redis in docker-compose.yml for https://www.npmjs.com/package/@nestjs-mod/docker-compose)

Use in NestJS-mod

An example you can see the full example here https://github.com/nestjs-mod/nestjs-mod-contrib/tree/master/apps/example-cache-manager.

import {
  DefaultNestApplicationInitializer,
  DefaultNestApplicationListener,
  InfrastructureMarkdownReportGenerator,
  PACKAGE_JSON_FILE,
  ProjectUtils,
  bootstrapNestApplication,
} from '@nestjs-mod/common';
import { DOCKER_COMPOSE_FILE, DockerCompose, DockerComposeRedis } from '@nestjs-mod/docker-compose';
import { join } from 'path';
import { userFeatureName } from './app/app.constants';

const rootFolder = join(__dirname, '..', '..', '..');
const appFolder = join(rootFolder, 'apps', 'example-cache-manager');

bootstrapNestApplication({
  globalConfigurationOptions: { debug: true },
  globalEnvironmentsOptions: { debug: true },
  modules: {
    system: [
      ProjectUtils.forRoot({
        staticConfiguration: {
          applicationPackageJsonFile: join(
            __dirname,
            '..',
            '..',
            '..',
            'apps/example-cache-manager',
            PACKAGE_JSON_FILE
          ),
          packageJsonFile: join(rootFolder, PACKAGE_JSON_FILE),
          envFile: join(rootFolder, '.env'),
        },
      }),
      DefaultNestApplicationInitializer.forRoot(),
      DefaultNestApplicationListener.forRoot({
        staticConfiguration: {
          // When running in infrastructure mode, the backend server does not start.
          mode: isInfrastructureMode() ? 'silent' : 'listen',
        },
      }),
    ],
    infrastructure: [
      InfrastructureMarkdownReportGenerator.forRoot({
        staticConfiguration: {
          markdownFile: join(appFolder, 'INFRASTRUCTURE.MD'),
          skipEmptySettings: true,
        },
      }),
      DockerCompose.forRoot({
        configuration: {
          dockerComposeFileVersion: '3',
          dockerComposeFile: join(appFolder, DOCKER_COMPOSE_FILE),
        },
      }),
      DockerComposeRedis.forRoot({ staticConfiguration: { featureName: userFeatureName } }),
    ],
  },
});

After connecting the module to the application and npm run build and starting generation of documentation through npm run docs:infrastructure, you will have new files and scripts to run.

New scripts mostly package.json

Add database options to docker-compose file for application docker-compose.yml with real credenionals and add it to .gitignore file

version: '3'
services:
  cache-manager-redis:
    image: 'bitnami/redis:7.2'
    container_name: 'cache-manager-redis'
    volumes:
      - 'cache-manager-redis-volume:/bitnami/redis/data'
    ports:
      - '6379:6379'
    networks:
      - 'cache-manager-network'
    environment:
      REDIS_DATABASE: '0'
      REDIS_PASSWORD: 'redis_password'
      REDIS_DISABLE_COMMANDS: 'FLUSHDB,FLUSHALL'
      REDIS_IO_THREADS: 2
      REDIS_IO_THREADS_DO_READS: 'yes'
    healthcheck:
      test:
        - 'CMD-SHELL'
        - 'redis-cli ping | grep PONG'
      interval: '5s'
      timeout: '5s'
      retries: 5
    tty: true
    restart: 'always'
networks:
  example-cache-manager-network:
    driver: bridge
volumes:
  example-cache-manager-volume:
    name: example-cache-manager-volume

Add database options to docker-compose file for application docker-compose-example.yml with fake credenionals

# Do not modify this file, it is generated using the DockerCompose module included with NestJS-mod.
version: '3'
services:
  cache-manager-redis:
    image: 'bitnami/redis:7.2'
    container_name: 'cache-manager-redis'
    volumes:
      - 'cache-manager-redis-volume:/bitnami/redis/data'
    ports:
      - '6379:6379'
    networks:
      - 'cache-manager-network'
    environment:
      REDIS_DATABASE: 'value_for_redis_database'
      REDIS_PASSWORD: 'value_for_redis_password'
      REDIS_DISABLE_COMMANDS: 'value_for_redis_disable_commands'
      REDIS_IO_THREADS: 'value_for_redis_io_threads'
      REDIS_IO_THREADS_DO_READS: 'value_for_redis_io_threads_do_reads'
    healthcheck:
      test:
        - 'CMD-SHELL'
        - 'redis-cli ping | grep PONG'
      interval: '5s'
      timeout: '5s'
      retries: 5
    tty: true
    restart: 'always'
networks:
  example-cache-manager-network:
    driver: bridge
volumes:
  example-cache-manager-volume:
    name: example-cache-manager-volume

New environment variable

EXAMPLE_CACHE_MANAGER_CACHE_MANAGER_USER_REDIS_URL=redis://:redis_password@localhost:6379

When launched in the infrastructure documentation generation mode, the module creates an .env file with a list of all required variables, as well as an example example.env, where you can enter example variable values.

Static environments

| Key | Description | Sources | Constraints | Default | Value | | ------ | ----------- | ------- | ----------- | ------- | ----- | |redisUrl|Connection string for Redis (example: redis://:redis_password@localhost:6379)|obj['redisUrl'], process.env['REDIS_URL']|isNotEmpty (redisUrl should not be empty)|-|-|

Static configuration

| Key | Description | Constraints | Default | Value | | ------ | ----------- | ----------- | ------- | ----- | |image|Docker image name|optional|bitnami/redis:7.2|-| |featureName|Feature name for generate prefix to environments keys|optional|-|-| |networks|Network, if not set networkNames have project name and driver=bridge.|optional|-|-| |externalPort|External port for sharing container.|optional|6379|-| |disableCommands|Redis disable commands.|optional|FLUSHDB,FLUSHALL|-| |ioThreads|Redis IO threads.|optional|2|-| |ioThreadsDoReads|Redis IO threads.|optional|yes|-|

Back to Top

Links

  • https://github.com/nestjs-mod/nestjs-mod - A collection of utilities for unifying NestJS applications and modules
  • https://github.com/nestjs-mod/nestjs-mod-contrib - Contrib repository for the NestJS-mod
  • https://github.com/nestjs-mod/nestjs-mod-example - Example application built with @nestjs-mod/schematics
  • https://github.com/nestjs-mod/nestjs-mod/blob/master/apps/example-basic/INFRASTRUCTURE.MD - A simple example of infrastructure documentation.
  • https://github.com/nestjs-mod/nestjs-mod-contrib/blob/master/apps/example-prisma/INFRASTRUCTURE.MD - An extended example of infrastructure documentation with a docker-compose file and a data base.
  • https://dev.to/endykaufman/collection-of-nestjs-mod-utilities-for-unifying-applications-and-modules-on-nestjs-5256 - Article about the project NestJS-mod
  • https://habr.com/ru/articles/788916 - Коллекция утилит NestJS-mod для унификации приложений и модулей на NestJS

License

MIT