@git.zone/cli 1.16.8 → 1.17.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist_ts/00_commitinfo_data.js +2 -2
- package/dist_ts/gitzone.cli.js +8 -1
- package/dist_ts/mod_format/classes.baseformatter.js +12 -2
- package/dist_ts/mod_format/format.gitignore.js +27 -7
- package/dist_ts/mod_format/format.packagejson.js +3 -3
- package/dist_ts/mod_format/formatters/prettier.formatter.js +61 -37
- package/dist_ts/mod_format/index.js +1 -1
- package/dist_ts/mod_services/classes.dockercontainer.d.ts +68 -0
- package/dist_ts/mod_services/classes.dockercontainer.js +194 -0
- package/dist_ts/mod_services/classes.serviceconfiguration.d.ts +69 -0
- package/dist_ts/mod_services/classes.serviceconfiguration.js +195 -0
- package/dist_ts/mod_services/classes.servicemanager.d.ts +49 -0
- package/dist_ts/mod_services/classes.servicemanager.js +363 -0
- package/dist_ts/mod_services/helpers.d.ts +24 -0
- package/dist_ts/mod_services/helpers.js +108 -0
- package/dist_ts/mod_services/index.d.ts +1 -0
- package/dist_ts/mod_services/index.js +184 -0
- package/dist_ts/mod_services/mod.plugins.d.ts +7 -0
- package/dist_ts/mod_services/mod.plugins.js +8 -0
- package/dist_ts/plugins.d.ts +6 -1
- package/dist_ts/plugins.js +7 -2
- package/npmextra.json +1 -1
- package/package.json +29 -24
- package/readme.hints.md +8 -3
- package/readme.md +151 -17
- package/readme.plan.md +119 -168
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/gitzone.cli.ts +8 -0
- package/ts/mod_format/classes.baseformatter.ts +13 -1
- package/ts/mod_format/format.gitignore.ts +31 -6
- package/ts/mod_format/format.packagejson.ts +2 -2
- package/ts/mod_format/formatters/prettier.formatter.ts +76 -43
- package/ts/mod_format/index.ts +4 -1
- package/ts/mod_services/classes.dockercontainer.ts +227 -0
- package/ts/mod_services/classes.serviceconfiguration.ts +246 -0
- package/ts/mod_services/classes.servicemanager.ts +423 -0
- package/ts/mod_services/helpers.ts +123 -0
- package/ts/mod_services/index.ts +219 -0
- package/ts/mod_services/mod.plugins.ts +9 -0
- package/ts/plugins.ts +10 -0
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
import * as plugins from './mod.plugins.js';
|
|
2
|
+
import * as helpers from './helpers.js';
|
|
3
|
+
import { logger } from '../gitzone.logging.js';
|
|
4
|
+
export class DockerContainer {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.smartshell = new plugins.smartshell.Smartshell({
|
|
7
|
+
executor: 'bash',
|
|
8
|
+
});
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Check if Docker is installed and available
|
|
12
|
+
*/
|
|
13
|
+
async checkDocker() {
|
|
14
|
+
try {
|
|
15
|
+
const result = await this.smartshell.exec('docker --version');
|
|
16
|
+
return result.exitCode === 0;
|
|
17
|
+
}
|
|
18
|
+
catch (error) {
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Get container status
|
|
24
|
+
*/
|
|
25
|
+
async getStatus(containerName) {
|
|
26
|
+
try {
|
|
27
|
+
// Check if running
|
|
28
|
+
const runningResult = await this.smartshell.exec(`docker ps --format '{{.Names}}' | grep -q "^${containerName}$"`);
|
|
29
|
+
if (runningResult.exitCode === 0) {
|
|
30
|
+
return 'running';
|
|
31
|
+
}
|
|
32
|
+
// Check if exists but stopped
|
|
33
|
+
const existsResult = await this.smartshell.exec(`docker ps -a --format '{{.Names}}' | grep -q "^${containerName}$"`);
|
|
34
|
+
if (existsResult.exitCode === 0) {
|
|
35
|
+
return 'stopped';
|
|
36
|
+
}
|
|
37
|
+
return 'not_exists';
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
return 'not_exists';
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Start a container
|
|
45
|
+
*/
|
|
46
|
+
async start(containerName) {
|
|
47
|
+
try {
|
|
48
|
+
const result = await this.smartshell.exec(`docker start ${containerName}`);
|
|
49
|
+
return result.exitCode === 0;
|
|
50
|
+
}
|
|
51
|
+
catch (error) {
|
|
52
|
+
return false;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Stop a container
|
|
57
|
+
*/
|
|
58
|
+
async stop(containerName) {
|
|
59
|
+
try {
|
|
60
|
+
const result = await this.smartshell.exec(`docker stop ${containerName}`);
|
|
61
|
+
return result.exitCode === 0;
|
|
62
|
+
}
|
|
63
|
+
catch (error) {
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Remove a container
|
|
69
|
+
*/
|
|
70
|
+
async remove(containerName, force = false) {
|
|
71
|
+
try {
|
|
72
|
+
const forceFlag = force ? '-f' : '';
|
|
73
|
+
const result = await this.smartshell.exec(`docker rm ${forceFlag} ${containerName}`);
|
|
74
|
+
return result.exitCode === 0;
|
|
75
|
+
}
|
|
76
|
+
catch (error) {
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Run a new container
|
|
82
|
+
*/
|
|
83
|
+
async run(options) {
|
|
84
|
+
let command = 'docker run -d';
|
|
85
|
+
// Add name
|
|
86
|
+
command += ` --name ${options.name}`;
|
|
87
|
+
// Add ports
|
|
88
|
+
if (options.ports) {
|
|
89
|
+
for (const [hostPort, containerPort] of Object.entries(options.ports)) {
|
|
90
|
+
command += ` -p ${hostPort}:${containerPort}`;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
// Add volumes
|
|
94
|
+
if (options.volumes) {
|
|
95
|
+
for (const [hostPath, containerPath] of Object.entries(options.volumes)) {
|
|
96
|
+
command += ` -v "${hostPath}:${containerPath}"`;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
// Add environment variables
|
|
100
|
+
if (options.environment) {
|
|
101
|
+
for (const [key, value] of Object.entries(options.environment)) {
|
|
102
|
+
command += ` -e ${key}="${value}"`;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
// Add restart policy
|
|
106
|
+
if (options.restart) {
|
|
107
|
+
command += ` --restart ${options.restart}`;
|
|
108
|
+
}
|
|
109
|
+
// Add image
|
|
110
|
+
command += ` ${options.image}`;
|
|
111
|
+
// Add command if provided
|
|
112
|
+
if (options.command) {
|
|
113
|
+
command += ` ${options.command}`;
|
|
114
|
+
}
|
|
115
|
+
try {
|
|
116
|
+
const result = await this.smartshell.exec(command);
|
|
117
|
+
return result.exitCode === 0;
|
|
118
|
+
}
|
|
119
|
+
catch (error) {
|
|
120
|
+
logger.log('error', `Failed to run container: ${error.message}`);
|
|
121
|
+
return false;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Execute a command in a running container
|
|
126
|
+
*/
|
|
127
|
+
async exec(containerName, command) {
|
|
128
|
+
try {
|
|
129
|
+
const result = await this.smartshell.exec(`docker exec ${containerName} ${command}`);
|
|
130
|
+
if (result.exitCode === 0) {
|
|
131
|
+
return result.stdout;
|
|
132
|
+
}
|
|
133
|
+
return '';
|
|
134
|
+
}
|
|
135
|
+
catch (error) {
|
|
136
|
+
return '';
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Get container logs
|
|
141
|
+
*/
|
|
142
|
+
async logs(containerName, lines) {
|
|
143
|
+
try {
|
|
144
|
+
const tailFlag = lines ? `--tail ${lines}` : '';
|
|
145
|
+
const result = await this.smartshell.exec(`docker logs ${tailFlag} ${containerName}`);
|
|
146
|
+
return result.stdout;
|
|
147
|
+
}
|
|
148
|
+
catch (error) {
|
|
149
|
+
return `Error getting logs: ${error.message}`;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Check if a container exists
|
|
154
|
+
*/
|
|
155
|
+
async exists(containerName) {
|
|
156
|
+
const status = await this.getStatus(containerName);
|
|
157
|
+
return status !== 'not_exists';
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Check if a container is running
|
|
161
|
+
*/
|
|
162
|
+
async isRunning(containerName) {
|
|
163
|
+
const status = await this.getStatus(containerName);
|
|
164
|
+
return status === 'running';
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Wait for a container to be ready
|
|
168
|
+
*/
|
|
169
|
+
async waitForReady(containerName, maxAttempts = 30) {
|
|
170
|
+
for (let i = 0; i < maxAttempts; i++) {
|
|
171
|
+
if (await this.isRunning(containerName)) {
|
|
172
|
+
return true;
|
|
173
|
+
}
|
|
174
|
+
await plugins.smartdelay.delayFor(1000);
|
|
175
|
+
}
|
|
176
|
+
return false;
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Get container information
|
|
180
|
+
*/
|
|
181
|
+
async inspect(containerName) {
|
|
182
|
+
try {
|
|
183
|
+
const result = await this.smartshell.exec(`docker inspect ${containerName}`);
|
|
184
|
+
if (result.exitCode === 0) {
|
|
185
|
+
return JSON.parse(result.stdout);
|
|
186
|
+
}
|
|
187
|
+
return null;
|
|
188
|
+
}
|
|
189
|
+
catch (error) {
|
|
190
|
+
return null;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5kb2NrZXJjb250YWluZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9tb2Rfc2VydmljZXMvY2xhc3Nlcy5kb2NrZXJjb250YWluZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxrQkFBa0IsQ0FBQztBQUM1QyxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUN4QyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFjL0MsTUFBTSxPQUFPLGVBQWU7SUFHMUI7UUFDRSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUM7WUFDbEQsUUFBUSxFQUFFLE1BQU07U0FDakIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSyxDQUFDLFdBQVc7UUFDdEIsSUFBSSxDQUFDO1lBQ0gsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBQzlELE9BQU8sTUFBTSxDQUFDLFFBQVEsS0FBSyxDQUFDLENBQUM7UUFDL0IsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxLQUFLLENBQUMsU0FBUyxDQUFDLGFBQXFCO1FBQzFDLElBQUksQ0FBQztZQUNILG1CQUFtQjtZQUNuQixNQUFNLGFBQWEsR0FBRyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUM5QywrQ0FBK0MsYUFBYSxJQUFJLENBQ2pFLENBQUM7WUFFRixJQUFJLGFBQWEsQ0FBQyxRQUFRLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ2pDLE9BQU8sU0FBUyxDQUFDO1lBQ25CLENBQUM7WUFFRCw4QkFBOEI7WUFDOUIsTUFBTSxZQUFZLEdB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
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
export interface IServiceConfig {
|
|
2
|
+
PROJECT_NAME: string;
|
|
3
|
+
MONGODB_HOST: string;
|
|
4
|
+
MONGODB_NAME: string;
|
|
5
|
+
MONGODB_PORT: string;
|
|
6
|
+
MONGODB_USER: string;
|
|
7
|
+
MONGODB_PASS: string;
|
|
8
|
+
S3_HOST: string;
|
|
9
|
+
S3_PORT: string;
|
|
10
|
+
S3_CONSOLE_PORT: string;
|
|
11
|
+
S3_USER: string;
|
|
12
|
+
S3_PASS: string;
|
|
13
|
+
S3_BUCKET: string;
|
|
14
|
+
}
|
|
15
|
+
export declare class ServiceConfiguration {
|
|
16
|
+
private configPath;
|
|
17
|
+
private config;
|
|
18
|
+
constructor();
|
|
19
|
+
/**
|
|
20
|
+
* Load or create the configuration
|
|
21
|
+
*/
|
|
22
|
+
loadOrCreate(): Promise<IServiceConfig>;
|
|
23
|
+
/**
|
|
24
|
+
* Get the current configuration
|
|
25
|
+
*/
|
|
26
|
+
getConfig(): IServiceConfig;
|
|
27
|
+
/**
|
|
28
|
+
* Save the configuration to file
|
|
29
|
+
*/
|
|
30
|
+
saveConfig(): Promise<void>;
|
|
31
|
+
/**
|
|
32
|
+
* Ensure .nogit directory exists
|
|
33
|
+
*/
|
|
34
|
+
private ensureNogitDirectory;
|
|
35
|
+
/**
|
|
36
|
+
* Check if configuration file exists
|
|
37
|
+
*/
|
|
38
|
+
private configExists;
|
|
39
|
+
/**
|
|
40
|
+
* Load configuration from file
|
|
41
|
+
*/
|
|
42
|
+
private loadConfig;
|
|
43
|
+
/**
|
|
44
|
+
* Create default configuration
|
|
45
|
+
*/
|
|
46
|
+
private createDefaultConfig;
|
|
47
|
+
/**
|
|
48
|
+
* Update missing fields in existing configuration
|
|
49
|
+
*/
|
|
50
|
+
private updateMissingFields;
|
|
51
|
+
/**
|
|
52
|
+
* Get MongoDB connection string
|
|
53
|
+
*/
|
|
54
|
+
getMongoConnectionString(useNetworkIp?: boolean): string;
|
|
55
|
+
/**
|
|
56
|
+
* Get container names
|
|
57
|
+
*/
|
|
58
|
+
getContainerNames(): {
|
|
59
|
+
mongo: string;
|
|
60
|
+
minio: string;
|
|
61
|
+
};
|
|
62
|
+
/**
|
|
63
|
+
* Get data directories
|
|
64
|
+
*/
|
|
65
|
+
getDataDirectories(): {
|
|
66
|
+
mongo: string;
|
|
67
|
+
minio: string;
|
|
68
|
+
};
|
|
69
|
+
}
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
import * as plugins from './mod.plugins.js';
|
|
2
|
+
import * as helpers from './helpers.js';
|
|
3
|
+
import { logger } from '../gitzone.logging.js';
|
|
4
|
+
export class ServiceConfiguration {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.configPath = plugins.path.join(process.cwd(), '.nogit', 'env.json');
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Load or create the configuration
|
|
10
|
+
*/
|
|
11
|
+
async loadOrCreate() {
|
|
12
|
+
await this.ensureNogitDirectory();
|
|
13
|
+
if (await this.configExists()) {
|
|
14
|
+
await this.loadConfig();
|
|
15
|
+
await this.updateMissingFields();
|
|
16
|
+
}
|
|
17
|
+
else {
|
|
18
|
+
await this.createDefaultConfig();
|
|
19
|
+
}
|
|
20
|
+
return this.config;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Get the current configuration
|
|
24
|
+
*/
|
|
25
|
+
getConfig() {
|
|
26
|
+
return this.config;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Save the configuration to file
|
|
30
|
+
*/
|
|
31
|
+
async saveConfig() {
|
|
32
|
+
await plugins.smartfile.memory.toFs(JSON.stringify(this.config, null, 2), this.configPath);
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Ensure .nogit directory exists
|
|
36
|
+
*/
|
|
37
|
+
async ensureNogitDirectory() {
|
|
38
|
+
const nogitPath = plugins.path.join(process.cwd(), '.nogit');
|
|
39
|
+
await plugins.smartfile.fs.ensureDir(nogitPath);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Check if configuration file exists
|
|
43
|
+
*/
|
|
44
|
+
async configExists() {
|
|
45
|
+
return plugins.smartfile.fs.fileExists(this.configPath);
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Load configuration from file
|
|
49
|
+
*/
|
|
50
|
+
async loadConfig() {
|
|
51
|
+
const configContent = await plugins.smartfile.fs.toStringSync(this.configPath);
|
|
52
|
+
this.config = JSON.parse(configContent);
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Create default configuration
|
|
56
|
+
*/
|
|
57
|
+
async createDefaultConfig() {
|
|
58
|
+
const projectName = helpers.getProjectName();
|
|
59
|
+
const mongoPort = await helpers.getRandomAvailablePort();
|
|
60
|
+
const s3Port = await helpers.getRandomAvailablePort();
|
|
61
|
+
let s3ConsolePort = s3Port + 1;
|
|
62
|
+
// Ensure console port is also available
|
|
63
|
+
while (!(await helpers.isPortAvailable(s3ConsolePort))) {
|
|
64
|
+
s3ConsolePort++;
|
|
65
|
+
}
|
|
66
|
+
this.config = {
|
|
67
|
+
PROJECT_NAME: projectName,
|
|
68
|
+
MONGODB_HOST: 'localhost',
|
|
69
|
+
MONGODB_NAME: projectName,
|
|
70
|
+
MONGODB_PORT: mongoPort.toString(),
|
|
71
|
+
MONGODB_USER: 'defaultadmin',
|
|
72
|
+
MONGODB_PASS: 'defaultpass',
|
|
73
|
+
S3_HOST: 'localhost',
|
|
74
|
+
S3_PORT: s3Port.toString(),
|
|
75
|
+
S3_CONSOLE_PORT: s3ConsolePort.toString(),
|
|
76
|
+
S3_USER: 'defaultadmin',
|
|
77
|
+
S3_PASS: 'defaultpass',
|
|
78
|
+
S3_BUCKET: `${projectName}-documents`
|
|
79
|
+
};
|
|
80
|
+
await this.saveConfig();
|
|
81
|
+
logger.log('ok', '✅ Created .nogit/env.json with project defaults');
|
|
82
|
+
logger.log('info', `📍 MongoDB port: ${mongoPort}`);
|
|
83
|
+
logger.log('info', `📍 S3 API port: ${s3Port}`);
|
|
84
|
+
logger.log('info', `📍 S3 Console port: ${s3ConsolePort}`);
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Update missing fields in existing configuration
|
|
88
|
+
*/
|
|
89
|
+
async updateMissingFields() {
|
|
90
|
+
const projectName = helpers.getProjectName();
|
|
91
|
+
let updated = false;
|
|
92
|
+
const fieldsAdded = [];
|
|
93
|
+
// Check and add missing fields
|
|
94
|
+
if (!this.config.PROJECT_NAME) {
|
|
95
|
+
this.config.PROJECT_NAME = projectName;
|
|
96
|
+
fieldsAdded.push('PROJECT_NAME');
|
|
97
|
+
updated = true;
|
|
98
|
+
}
|
|
99
|
+
if (!this.config.MONGODB_HOST) {
|
|
100
|
+
this.config.MONGODB_HOST = 'localhost';
|
|
101
|
+
fieldsAdded.push('MONGODB_HOST');
|
|
102
|
+
updated = true;
|
|
103
|
+
}
|
|
104
|
+
if (!this.config.MONGODB_NAME) {
|
|
105
|
+
this.config.MONGODB_NAME = projectName;
|
|
106
|
+
fieldsAdded.push('MONGODB_NAME');
|
|
107
|
+
updated = true;
|
|
108
|
+
}
|
|
109
|
+
if (!this.config.MONGODB_PORT) {
|
|
110
|
+
const port = await helpers.getRandomAvailablePort();
|
|
111
|
+
this.config.MONGODB_PORT = port.toString();
|
|
112
|
+
fieldsAdded.push(`MONGODB_PORT(${port})`);
|
|
113
|
+
updated = true;
|
|
114
|
+
}
|
|
115
|
+
if (!this.config.MONGODB_USER) {
|
|
116
|
+
this.config.MONGODB_USER = 'defaultadmin';
|
|
117
|
+
fieldsAdded.push('MONGODB_USER');
|
|
118
|
+
updated = true;
|
|
119
|
+
}
|
|
120
|
+
if (!this.config.MONGODB_PASS) {
|
|
121
|
+
this.config.MONGODB_PASS = 'defaultpass';
|
|
122
|
+
fieldsAdded.push('MONGODB_PASS');
|
|
123
|
+
updated = true;
|
|
124
|
+
}
|
|
125
|
+
if (!this.config.S3_HOST) {
|
|
126
|
+
this.config.S3_HOST = 'localhost';
|
|
127
|
+
fieldsAdded.push('S3_HOST');
|
|
128
|
+
updated = true;
|
|
129
|
+
}
|
|
130
|
+
if (!this.config.S3_PORT) {
|
|
131
|
+
const port = await helpers.getRandomAvailablePort();
|
|
132
|
+
this.config.S3_PORT = port.toString();
|
|
133
|
+
fieldsAdded.push(`S3_PORT(${port})`);
|
|
134
|
+
updated = true;
|
|
135
|
+
}
|
|
136
|
+
if (!this.config.S3_CONSOLE_PORT) {
|
|
137
|
+
const s3Port = parseInt(this.config.S3_PORT);
|
|
138
|
+
let consolePort = s3Port + 1;
|
|
139
|
+
while (!(await helpers.isPortAvailable(consolePort))) {
|
|
140
|
+
consolePort++;
|
|
141
|
+
}
|
|
142
|
+
this.config.S3_CONSOLE_PORT = consolePort.toString();
|
|
143
|
+
fieldsAdded.push(`S3_CONSOLE_PORT(${consolePort})`);
|
|
144
|
+
updated = true;
|
|
145
|
+
}
|
|
146
|
+
if (!this.config.S3_USER) {
|
|
147
|
+
this.config.S3_USER = 'defaultadmin';
|
|
148
|
+
fieldsAdded.push('S3_USER');
|
|
149
|
+
updated = true;
|
|
150
|
+
}
|
|
151
|
+
if (!this.config.S3_PASS) {
|
|
152
|
+
this.config.S3_PASS = 'defaultpass';
|
|
153
|
+
fieldsAdded.push('S3_PASS');
|
|
154
|
+
updated = true;
|
|
155
|
+
}
|
|
156
|
+
if (!this.config.S3_BUCKET) {
|
|
157
|
+
this.config.S3_BUCKET = `${projectName}-documents`;
|
|
158
|
+
fieldsAdded.push('S3_BUCKET');
|
|
159
|
+
updated = true;
|
|
160
|
+
}
|
|
161
|
+
if (updated) {
|
|
162
|
+
await this.saveConfig();
|
|
163
|
+
logger.log('ok', `✅ Added missing fields: ${fieldsAdded.join(', ')}`);
|
|
164
|
+
}
|
|
165
|
+
else {
|
|
166
|
+
logger.log('ok', '✅ Configuration complete');
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Get MongoDB connection string
|
|
171
|
+
*/
|
|
172
|
+
getMongoConnectionString(useNetworkIp = false) {
|
|
173
|
+
const host = useNetworkIp ? '${networkIp}' : this.config.MONGODB_HOST;
|
|
174
|
+
return `mongodb://${this.config.MONGODB_USER}:${this.config.MONGODB_PASS}@${host}:${this.config.MONGODB_PORT}/${this.config.MONGODB_NAME}?authSource=admin`;
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Get container names
|
|
178
|
+
*/
|
|
179
|
+
getContainerNames() {
|
|
180
|
+
return {
|
|
181
|
+
mongo: `${this.config.PROJECT_NAME}-mongodb`,
|
|
182
|
+
minio: `${this.config.PROJECT_NAME}-minio`
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Get data directories
|
|
187
|
+
*/
|
|
188
|
+
getDataDirectories() {
|
|
189
|
+
return {
|
|
190
|
+
mongo: plugins.path.join(process.cwd(), '.nogit', 'mongodata'),
|
|
191
|
+
minio: plugins.path.join(process.cwd(), '.nogit', 'miniodata')
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5zZXJ2aWNlY29uZmlndXJhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL21vZF9zZXJ2aWNlcy9jbGFzc2VzLnNlcnZpY2Vjb25maWd1cmF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sa0JBQWtCLENBQUM7QUFDNUMsT0FBTyxLQUFLLE9BQU8sTUFBTSxjQUFjLENBQUM7QUFDeEMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBaUIvQyxNQUFNLE9BQU8sb0JBQW9CO0lBSS9CO1FBQ0UsSUFBSSxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFFRDs7T0FFRztJQUNJLEtBQUssQ0FBQyxZQUFZO1FBQ3ZCLE1BQU0sSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFFbEMsSUFBSSxNQUFNLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDO1lBQzlCLE1BQU0sSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3hCLE1BQU0sSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDbkMsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQ25DLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztJQUVEOztPQUVHO0lBQ0ksU0FBUztRQUNkLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDO0lBRUQ7O09BRUc7SUFDSSxLQUFLLENBQUMsVUFBVTtRQUNyQixNQUFNLE9BQU8sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDakMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFB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
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
export declare class ServiceManager {
|
|
2
|
+
private config;
|
|
3
|
+
private docker;
|
|
4
|
+
constructor();
|
|
5
|
+
/**
|
|
6
|
+
* Initialize the service manager
|
|
7
|
+
*/
|
|
8
|
+
init(): Promise<void>;
|
|
9
|
+
/**
|
|
10
|
+
* Start MongoDB service
|
|
11
|
+
*/
|
|
12
|
+
startMongoDB(): Promise<void>;
|
|
13
|
+
/**
|
|
14
|
+
* Start MinIO service
|
|
15
|
+
*/
|
|
16
|
+
startMinIO(): Promise<void>;
|
|
17
|
+
/**
|
|
18
|
+
* Stop MongoDB service
|
|
19
|
+
*/
|
|
20
|
+
stopMongoDB(): Promise<void>;
|
|
21
|
+
/**
|
|
22
|
+
* Stop MinIO service
|
|
23
|
+
*/
|
|
24
|
+
stopMinIO(): Promise<void>;
|
|
25
|
+
/**
|
|
26
|
+
* Show service status
|
|
27
|
+
*/
|
|
28
|
+
showStatus(): Promise<void>;
|
|
29
|
+
/**
|
|
30
|
+
* Show configuration
|
|
31
|
+
*/
|
|
32
|
+
showConfig(): Promise<void>;
|
|
33
|
+
/**
|
|
34
|
+
* Show MongoDB Compass connection string
|
|
35
|
+
*/
|
|
36
|
+
showCompassConnection(): Promise<void>;
|
|
37
|
+
/**
|
|
38
|
+
* Show logs for a service
|
|
39
|
+
*/
|
|
40
|
+
showLogs(service: string, lines?: number): Promise<void>;
|
|
41
|
+
/**
|
|
42
|
+
* Remove containers
|
|
43
|
+
*/
|
|
44
|
+
removeContainers(): Promise<void>;
|
|
45
|
+
/**
|
|
46
|
+
* Clean data directories
|
|
47
|
+
*/
|
|
48
|
+
cleanData(): Promise<void>;
|
|
49
|
+
}
|