UNPKG

@nestjs-mod/docker-compose

Version:

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)

196 lines (190 loc) 10.9 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.DockerComposeMinio = void 0; const common_1 = require("@nestjs-mod/common"); const case_anything_1 = require("case-anything"); const docker_compose_module_1 = require("../../docker-compose.module"); const docker_compose_utils_1 = require("../../docker-compose.utils"); const docker_compose_nginx_module_1 = require("../docker-compose-nginx/docker-compose-nginx.module"); const docker_compose_minio_constants_1 = require("./docker-compose-minio.constants"); const docker_compose_minio_settings_1 = require("./docker-compose-minio.settings"); exports.DockerComposeMinio = (0, common_1.createNestModule)({ moduleName: docker_compose_minio_constants_1.DOCKER_COMPOSE_MINIO_MODULE_NAME, moduleDescription: '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)', globalEnvironmentsOptions: { skipValidation: true }, globalConfigurationOptions: { skipValidation: true }, staticConfigurationModel: docker_compose_minio_settings_1.DockerComposeMinioConfiguration, staticEnvironmentsModel: docker_compose_minio_settings_1.DockerComposeMinioEnvironments, wrapForRootAsync: (asyncModuleOptions) => { if (!asyncModuleOptions) { asyncModuleOptions = {}; } if (asyncModuleOptions.staticConfiguration?.featureName) { const FomatterClass = (0, common_1.getFeatureDotEnvPropertyNameFormatter)(asyncModuleOptions.staticConfiguration.featureName); Object.assign(asyncModuleOptions, { environmentsOptions: { propertyNameFormatters: [new FomatterClass()], name: asyncModuleOptions.staticConfiguration?.featureName, }, }); } return { asyncModuleOptions }; }, preWrapApplication: async ({ project, modules, current }) => { if (!modules[common_1.NestModuleCategory.infrastructure]) { modules[common_1.NestModuleCategory.infrastructure] = []; } const staticConfiguration = current.staticConfiguration; if (staticConfiguration?.nginxBucketsLocations && staticConfiguration.nginxPort) { const dockerComposeNginx = docker_compose_nginx_module_1.DockerComposeNginx.forRoot({ staticConfiguration: { ports: { [staticConfiguration.nginxPort]: staticConfiguration.nginxPort }, dependsOnServiceNames: { [docker_compose_utils_1.DockerComposeServiceType.Minio]: 'service_started' }, configFolder: staticConfiguration.nginxConfigFolder ? staticConfiguration.nginxConfigFolder : undefined, logsFolder: staticConfiguration.nginxLogsFolder ? staticConfiguration.nginxLogsFolder : undefined, configContent: ` map $sent_http_content_type $expires { "text/html" epoch; "text/html; charset=utf-8" epoch; default off; } map $http_upgrade $connection_upgrade { default upgrade; '' close; } server { listen ${staticConfiguration.nginxPort}; server_name localhost; gzip on; gzip_proxied any; gzip_types text/plain application/xml text/css application/javascript application/json; gzip_min_length 1000; gzip_vary on; gzip_disable "MSIE [1-6]\\.(?!.*SV1)"; client_max_body_size 50m; proxy_connect_timeout 3600s; proxy_read_timeout 3600s; proxy_send_timeout 3600s; send_timeout 3600s; proxy_max_temp_file_size 0; ${staticConfiguration.nginxBucketsLocations .map((nginxBucketsLocation) => ` location /${nginxBucketsLocation} { proxy_set_header Host localhost:9000; proxy_set_header Origin $http_origin; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; rewrite ^/${nginxBucketsLocation}/(.*)$ /$1 break; proxy_pass http://%${docker_compose_utils_1.DockerComposeServiceType.Minio}%:9000; proxy_http_version 1.1; proxy_set_header Accept-Language $http_accept_language; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; }`) .join('\n')} ${staticConfiguration.nginxConfigContent ? staticConfiguration.nginxConfigContent : ''} } `, }, }); modules[common_1.NestModuleCategory.infrastructure].push(dockerComposeNginx); } const dockerComposeMinioModule = (0, common_1.createNestModule)({ project, moduleName: docker_compose_minio_constants_1.DOCKER_COMPOSE_MINIO_MODULE_NAME, moduleDescription: '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)', moduleCategory: common_1.NestModuleCategory.infrastructure, globalEnvironmentsOptions: { name: project?.name, skipValidation: (0, common_1.isInfrastructureMode)() }, globalConfigurationOptions: { name: project?.name, skipValidation: (0, common_1.isInfrastructureMode)() }, staticConfigurationModel: docker_compose_minio_settings_1.DockerComposeMinioConfiguration, staticEnvironmentsModel: docker_compose_minio_settings_1.DockerComposeMinioEnvironments, wrapForRootAsync: (asyncModuleOptions) => { if (!asyncModuleOptions) { asyncModuleOptions = {}; } if (asyncModuleOptions.staticConfiguration?.featureName) { const FomatterClass = (0, common_1.getFeatureDotEnvPropertyNameFormatter)(asyncModuleOptions.staticConfiguration.featureName); Object.assign(asyncModuleOptions, { environmentsOptions: { propertyNameFormatters: [new FomatterClass()], name: asyncModuleOptions.staticConfiguration?.featureName, }, }); } return { asyncModuleOptions }; }, imports: ({ contextName, project, staticConfiguration, staticEnvironments }) => { const networks = (project?.name ? staticConfiguration?.networks?.map((n) => ({ ...n, name: (0, case_anything_1.kebabCase)([project?.name, n.name, 'network'].filter(Boolean).join('-')), })) ?? [{ name: (0, case_anything_1.kebabCase)(`${project?.name}-network`), driver: 'bridge' }] : staticConfiguration?.networks) ?? []; if (networks?.length === 0) { networks.push({ name: 'default-network', driver: 'bridge' }); } const networkNames = networks?.map((n) => n.name); const serviceName = (0, docker_compose_utils_1.getDockerComposeServiceName)(project?.name, docker_compose_utils_1.DockerComposeServiceType.Minio); return [ common_1.ProjectUtils.forFeature({ featureModuleName: docker_compose_minio_constants_1.DOCKER_COMPOSE_MINIO_MODULE_NAME, contextName, }), docker_compose_module_1.DockerCompose.forFeature({ contextName, featureModuleName: (0, case_anything_1.constantCase)(serviceName), featureConfiguration: { services: { [serviceName]: { image: staticConfiguration?.image, container_name: serviceName, volumes: [`${serviceName}-volume:/bitnami/minio/data`], ports: [ `${staticConfiguration?.externalPort}:9000`, `${staticConfiguration?.externalConsolePort}:9001`, ], networks: networkNames, environment: { ...(staticEnvironments?.minioRootUser ? { MINIO_ROOT_USER: staticEnvironments?.minioRootUser, } : {}), ...(staticEnvironments?.minioRootPassword ? { MINIO_ROOT_PASSWORD: staticEnvironments?.minioRootPassword, } : {}), }, 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.reduce((all, cur) => ({ ...all, [cur.name]: { driver: cur.driver } }), {}), volumes: { [`${serviceName}-volume`]: { name: `${serviceName}-volume` }, }, }, }), ]; }, }).DockerComposeMinio; modules[common_1.NestModuleCategory.infrastructure].push(dockerComposeMinioModule.forRootAsync(current.asyncModuleOptions)); }, }).DockerComposeMinio; //# sourceMappingURL=docker-compose-minio.module.js.map