@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
JavaScript
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
;