@underpostnet/underpost 2.8.0 → 2.8.4
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/.dockerignore +1 -0
- package/.github/workflows/ghpkg.yml +14 -11
- package/.github/workflows/pwa-microservices-template.page.yml +10 -3
- package/.vscode/extensions.json +17 -71
- package/.vscode/settings.json +12 -5
- package/AUTHORS.md +16 -5
- package/CHANGELOG.md +63 -3
- package/Dockerfile +41 -62
- package/README.md +1 -28
- package/bin/build.js +278 -0
- package/bin/db.js +2 -24
- package/bin/deploy.js +107 -71
- package/bin/file.js +33 -4
- package/bin/index.js +35 -54
- package/bin/ssl.js +19 -11
- package/bin/util.js +27 -89
- package/bin/vs.js +25 -2
- package/conf.js +32 -132
- package/docker-compose.yml +1 -1
- package/manifests/core/kustomization.yaml +11 -0
- package/manifests/core/underpost-engine-backup-access.yaml +16 -0
- package/manifests/core/underpost-engine-backup-pv-pvc.yaml +22 -0
- package/manifests/core/underpost-engine-headless-service.yaml +10 -0
- package/manifests/core/underpost-engine-mongodb-backup-cronjob.yaml +40 -0
- package/manifests/core/underpost-engine-mongodb-configmap.yaml +26 -0
- package/manifests/core/underpost-engine-pv-pvc.yaml +23 -0
- package/manifests/core/underpost-engine-statefulset.yaml +91 -0
- package/manifests/deployment/mongo-express.yaml +60 -0
- package/manifests/deployment/phpmyadmin.yaml +54 -0
- package/manifests/kind-config.yaml +12 -0
- package/manifests/letsencrypt-prod.yaml +15 -0
- package/manifests/mariadb/config.yaml +10 -0
- package/manifests/mariadb/kustomization.yaml +9 -0
- package/manifests/mariadb/pv.yaml +12 -0
- package/manifests/mariadb/pvc.yaml +10 -0
- package/manifests/mariadb/secret.yaml +8 -0
- package/manifests/mariadb/service.yaml +10 -0
- package/manifests/mariadb/statefulset.yaml +55 -0
- package/manifests/valkey/kustomization.yaml +7 -0
- package/manifests/valkey/underpost-engine-valkey-service.yaml +17 -0
- package/manifests/valkey/underpost-engine-valkey-statefulset.yaml +39 -0
- package/package.json +16 -35
- package/src/api/user/user.model.js +16 -3
- package/src/api/user/user.service.js +1 -1
- package/src/client/components/core/Account.js +4 -2
- package/src/client/components/core/Auth.js +2 -2
- package/src/client/components/core/CalendarCore.js +115 -49
- package/src/client/components/core/CommonJs.js +150 -19
- package/src/client/components/core/Css.js +1 -1
- package/src/client/components/core/CssCore.js +6 -0
- package/src/client/components/core/Docs.js +2 -1
- package/src/client/components/core/DropDown.js +5 -1
- package/src/client/components/core/Input.js +17 -3
- package/src/client/components/core/JoyStick.js +8 -5
- package/src/client/components/core/Modal.js +17 -11
- package/src/client/components/core/Panel.js +85 -25
- package/src/client/components/core/PanelForm.js +11 -19
- package/src/client/components/core/SignUp.js +4 -1
- package/src/client/components/core/Translate.js +57 -9
- package/src/client/components/core/Validator.js +9 -1
- package/src/client/public/default/plantuml/client-conf.svg +1 -1
- package/src/client/public/default/plantuml/server-conf.svg +1 -1
- package/src/client/public/default/plantuml/server-schema.svg +1 -1
- package/src/client/public/default/plantuml/ssr-conf.svg +1 -1
- package/src/client/public/default/plantuml/ssr-schema.svg +1 -1
- package/src/client/services/core/core.service.js +2 -0
- package/src/client/services/default/default.management.js +4 -2
- package/src/client/ssr/body/CacheControl.js +2 -1
- package/src/client/ssr/body/DefaultSplashScreen.js +3 -3
- package/src/client/ssr/offline/Maintenance.js +63 -0
- package/src/client/sw/default.sw.js +23 -3
- package/src/db/mongo/MongooseDB.js +13 -1
- package/src/index.js +15 -0
- package/src/runtime/lampp/Lampp.js +1 -13
- package/src/runtime/xampp/Xampp.js +0 -13
- package/src/server/auth.js +3 -3
- package/src/server/client-build.js +8 -17
- package/src/server/client-icons.js +1 -1
- package/src/server/conf.js +299 -32
- package/src/server/dns.js +2 -3
- package/src/server/logger.js +18 -11
- package/src/server/network.js +0 -36
- package/src/server/process.js +25 -2
- package/src/server/project.js +39 -0
- package/src/server/proxy.js +4 -26
- package/src/server/runtime.js +6 -7
- package/src/server/ssl.js +1 -1
- package/src/server/valkey.js +3 -0
- package/startup.cjs +12 -0
- package/src/server/prompt-optimizer.js +0 -28
- package/startup.js +0 -11
package/bin/index.js
CHANGED
|
@@ -2,75 +2,54 @@
|
|
|
2
2
|
|
|
3
3
|
import dotenv from 'dotenv';
|
|
4
4
|
import { shellCd, shellExec } from '../src/server/process.js';
|
|
5
|
-
import fs from 'fs-extra';
|
|
6
5
|
import { Command } from 'commander';
|
|
7
|
-
import {
|
|
8
|
-
import
|
|
6
|
+
import { actionInitLog, loggerFactory } from '../src/server/logger.js';
|
|
7
|
+
import Underpost from '../src/index.js';
|
|
9
8
|
|
|
10
9
|
dotenv.config();
|
|
11
10
|
|
|
12
11
|
const logger = loggerFactory(import.meta);
|
|
13
12
|
|
|
14
|
-
const globalBinFolder = `${shellExec(`npm root -g`, {
|
|
15
|
-
stdout: true,
|
|
16
|
-
silent: true,
|
|
17
|
-
disableLog: true,
|
|
18
|
-
}).trim()}/underpost`;
|
|
19
|
-
|
|
20
13
|
const program = new Command();
|
|
21
14
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
program.name('underpost').description(`underpost.net ci/cd cli ${version}`).version(version);
|
|
15
|
+
program.name('underpost').description(`underpost.net ci/cd cli ${Underpost.version}`).version(Underpost.version);
|
|
25
16
|
|
|
26
17
|
program
|
|
27
18
|
.command('new <app-name>')
|
|
28
19
|
.description('Create a new project')
|
|
29
|
-
.action(
|
|
30
|
-
console.log(
|
|
31
|
-
underpostASCI() +
|
|
32
|
-
`
|
|
33
|
-
v${version} https://www.nexodev.org/docs
|
|
34
|
-
`,
|
|
35
|
-
);
|
|
36
|
-
await logger.setUpInfo();
|
|
37
|
-
const destFolder = `${process.cwd()}/${appName}`;
|
|
38
|
-
logger.info('Note: This process may take several minutes to complete');
|
|
39
|
-
logger.info('build app', { destFolder });
|
|
40
|
-
fs.mkdirSync(destFolder, { recursive: true });
|
|
41
|
-
fs.copySync(globalBinFolder, destFolder);
|
|
42
|
-
fs.writeFileSync(`${destFolder}/.gitignore`, fs.readFileSync(`${globalBinFolder}/.dockerignore`, 'utf8'), 'utf8');
|
|
43
|
-
shellCd(`${destFolder}`);
|
|
44
|
-
shellExec(`git init && git add . && git commit -m "Base template implementation"`);
|
|
45
|
-
shellExec(`npm run install-template`);
|
|
46
|
-
switch (process.platform) {
|
|
47
|
-
case 'linux':
|
|
48
|
-
try {
|
|
49
|
-
await MongooseDB.server();
|
|
50
|
-
} catch (error) {
|
|
51
|
-
logger.error(error, 'failed to start mongodb server');
|
|
52
|
-
}
|
|
53
|
-
break;
|
|
20
|
+
.action((...args) => ((args[1] = Underpost.version), new Underpost.project(...args)));
|
|
54
21
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
});
|
|
22
|
+
program
|
|
23
|
+
.command('clone <uri>')
|
|
24
|
+
.description('Clone github repository, if your GITHUB_TOKEN environment exists, it will be used')
|
|
25
|
+
.action(Underpost.project.clone);
|
|
60
26
|
|
|
61
27
|
program
|
|
62
|
-
.command('
|
|
63
|
-
.description('
|
|
64
|
-
.action(
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
28
|
+
.command('pull <path> <uri>')
|
|
29
|
+
.description('Pull github repository, if your GITHUB_TOKEN environment exists, it will be used')
|
|
30
|
+
.action(Underpost.project.pull);
|
|
31
|
+
|
|
32
|
+
program
|
|
33
|
+
.option('--copy')
|
|
34
|
+
.option('--info')
|
|
35
|
+
.option('--empty')
|
|
36
|
+
.command('cmt <path> [commit-type] [sub-module] [message]')
|
|
37
|
+
.description(
|
|
38
|
+
'Commit github repository, if your GITHUB_TOKEN environment exists, it will be used, use --copy will copy to clipboard message, use --info will see info commit types, use --empty will allow empty files',
|
|
39
|
+
)
|
|
40
|
+
.action((...args) => ((args[4] = options), Underpost.project.commit(...args)));
|
|
41
|
+
|
|
42
|
+
program
|
|
43
|
+
.command('push <path> <uri>')
|
|
44
|
+
.description('Push github repository, if your GITHUB_TOKEN environment exists, it will be used')
|
|
45
|
+
.action(Underpost.project.push);
|
|
46
|
+
|
|
47
|
+
program
|
|
48
|
+
.command('env <deploy-id> [env]')
|
|
49
|
+
.description('Set environment variables files and conf related to <deploy-id>')
|
|
50
|
+
.action(Underpost.project.useEnv);
|
|
51
|
+
|
|
52
|
+
program.command('test').description('Run tests').action(Underpost.runTest);
|
|
74
53
|
|
|
75
54
|
program
|
|
76
55
|
.command('help')
|
|
@@ -79,4 +58,6 @@ program
|
|
|
79
58
|
program.outputHelp();
|
|
80
59
|
});
|
|
81
60
|
|
|
61
|
+
const options = program.opts();
|
|
62
|
+
|
|
82
63
|
program.parse();
|
package/bin/ssl.js
CHANGED
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
import fs from 'fs';
|
|
2
2
|
import read from 'read';
|
|
3
|
-
import ncp from 'copy-paste';
|
|
4
3
|
import dotenv from 'dotenv';
|
|
5
|
-
|
|
6
|
-
import { getRootDirectory, shellExec } from '../src/server/process.js';
|
|
4
|
+
import { getRootDirectory, pbcopy, shellExec } from '../src/server/process.js';
|
|
7
5
|
import { loggerFactory } from '../src/server/logger.js';
|
|
8
6
|
import { Cmd, loadConf } from '../src/server/conf.js';
|
|
9
7
|
import { buildSSL } from '../src/server/ssl.js';
|
|
@@ -24,9 +22,9 @@ try {
|
|
|
24
22
|
for (const host of hosts.split(',')) {
|
|
25
23
|
if (host in confServer) {
|
|
26
24
|
const directory = confServer[host]['/']?.['directory'] ? confServer[host]['/']['directory'] : undefined;
|
|
27
|
-
cmd = `certbot certonly --webroot --webroot-path ${
|
|
25
|
+
cmd = `sudo certbot certonly --webroot --webroot-path ${
|
|
28
26
|
directory ? directory : `${getRootDirectory()}/public/${host}`
|
|
29
|
-
} -d ${host}`;
|
|
27
|
+
} --cert-name ${host} -d ${host}`;
|
|
30
28
|
// directory ? directory : `${getRootDirectory()}/public/${host}`
|
|
31
29
|
// directory ? directory : `${getRootDirectory()}/public/www.${host.split('.').slice(-2).join('.')}`
|
|
32
30
|
|
|
@@ -38,16 +36,26 @@ try {
|
|
|
38
36
|
// certbot delete --cert-name <domain>
|
|
39
37
|
|
|
40
38
|
logger.info(`Run the following command`, cmd);
|
|
41
|
-
|
|
42
|
-
|
|
39
|
+
try {
|
|
40
|
+
await pbcopy(cmd);
|
|
41
|
+
await read({ prompt: 'Command copy to clipboard, press enter to continue.\n' });
|
|
42
|
+
} catch (error) {
|
|
43
|
+
logger.error(error);
|
|
44
|
+
}
|
|
43
45
|
// Certificate
|
|
44
|
-
await buildSSL(host);
|
|
46
|
+
if (process.argv.includes('build')) await buildSSL(host);
|
|
45
47
|
logger.info('Certificate saved', host);
|
|
46
48
|
} else throw new Error(`host not found: ${host}`);
|
|
47
49
|
}
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
50
|
+
// check for renewal conf:
|
|
51
|
+
// /etc/letsencrypt/renewal
|
|
52
|
+
// /etc/letsencrypt/live
|
|
53
|
+
cmd = `sudo certbot renew --dry-run`;
|
|
54
|
+
try {
|
|
55
|
+
await pbcopy(cmd);
|
|
56
|
+
} catch (error) {
|
|
57
|
+
logger.error(error);
|
|
58
|
+
}
|
|
51
59
|
logger.info(`run the following command for renewal. Command copy to clipboard`, cmd);
|
|
52
60
|
logger.info(`success install SLL`, hosts);
|
|
53
61
|
} catch (error) {
|
package/bin/util.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import fs from 'fs-extra';
|
|
2
|
-
import merge from 'deepmerge';
|
|
3
2
|
import si from 'systeminformation';
|
|
4
3
|
import * as dir from 'path';
|
|
5
4
|
import { svg } from 'font-awesome-assets';
|
|
@@ -7,12 +6,11 @@ import axios from 'axios';
|
|
|
7
6
|
import https from 'https';
|
|
8
7
|
|
|
9
8
|
import { loggerFactory } from '../src/server/logger.js';
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import { network } from '../src/server/network.js';
|
|
13
|
-
import { Config } from '../src/server/conf.js';
|
|
9
|
+
import { pbcopy, shellExec } from '../src/server/process.js';
|
|
10
|
+
import { buildKindPorts } from '../src/server/conf.js';
|
|
14
11
|
import { FileFactory } from '../src/api/file/file.service.js';
|
|
15
|
-
import {
|
|
12
|
+
import { faBase64Png, getBufferPngText } from '../src/server/client-icons.js';
|
|
13
|
+
import keyword_extractor from 'keyword-extractor';
|
|
16
14
|
|
|
17
15
|
const httpsAgent = new https.Agent({
|
|
18
16
|
rejectUnauthorized: false,
|
|
@@ -28,35 +26,10 @@ const operator = process.argv[2];
|
|
|
28
26
|
try {
|
|
29
27
|
// let cmd;
|
|
30
28
|
switch (operator) {
|
|
31
|
-
case 'cls':
|
|
32
|
-
fs.removeSync('./public');
|
|
33
|
-
fs.removeSync('./logs');
|
|
34
|
-
fs.removeSync('./conf');
|
|
35
|
-
// fs.removeSync('./engine-private');
|
|
36
|
-
// fs.removeSync('./node_modules');
|
|
37
|
-
break;
|
|
38
29
|
case 'log':
|
|
39
|
-
(()
|
|
40
|
-
const logPath = `./logs/${process.argv[3]}/${process.argv[4]}.log`;
|
|
41
|
-
logger.info('Read', logPath);
|
|
42
|
-
console.log(fs.readFileSync(logPath, 'utf8'));
|
|
43
|
-
})();
|
|
44
|
-
break;
|
|
45
|
-
case 'kill-ports':
|
|
46
|
-
if (!process.argv[3]) process.argv[3] = '22,80,443,3000-3020';
|
|
47
|
-
for (const port of process.argv[3].split(',')) {
|
|
48
|
-
const rangePort = port.split('-');
|
|
49
|
-
if (rangePort[1])
|
|
50
|
-
for (const port of range(parseInt(rangePort[0]), parseInt(rangePort[1]))) {
|
|
51
|
-
logger.info('clean port', port);
|
|
52
|
-
await network.port.portClean(port);
|
|
53
|
-
}
|
|
54
|
-
else {
|
|
55
|
-
logger.info('clean port', parseInt(port));
|
|
56
|
-
await network.port.portClean(port);
|
|
57
|
-
}
|
|
58
|
-
}
|
|
30
|
+
console.log(fs.readFileSync(process.argv[3], 'utf8'));
|
|
59
31
|
break;
|
|
32
|
+
|
|
60
33
|
case 'system-info':
|
|
61
34
|
await (async () => {
|
|
62
35
|
for (const infoKey of Object.keys(si)) {
|
|
@@ -73,56 +46,6 @@ try {
|
|
|
73
46
|
}
|
|
74
47
|
})();
|
|
75
48
|
break;
|
|
76
|
-
case 'export-git-changes':
|
|
77
|
-
{
|
|
78
|
-
const baseFrom = process.argv[3];
|
|
79
|
-
const baseTo = process.argv[4];
|
|
80
|
-
// if (fs.existsSync(baseTo)) fs.removeSync(baseTo);
|
|
81
|
-
shellCd(baseFrom);
|
|
82
|
-
{
|
|
83
|
-
try {
|
|
84
|
-
let output = shellExec('git status', { silent: true, stdout: true });
|
|
85
|
-
console.log('output:', output);
|
|
86
|
-
output = output
|
|
87
|
-
.split(`to discard changes in working directory)`)[1]
|
|
88
|
-
.split(`Untracked files:`)[0]
|
|
89
|
-
.split('modified:')
|
|
90
|
-
.map((c) => c.trim().replaceAll(`\n`, ''));
|
|
91
|
-
output[output.length - 1] = output[output.length - 1].split('no changes added to commit')[0];
|
|
92
|
-
output.shift();
|
|
93
|
-
for (const fromPath of output) {
|
|
94
|
-
const from = `${baseFrom}/${fromPath}`;
|
|
95
|
-
const to = `${baseTo}/${fromPath}`;
|
|
96
|
-
logger.info('Copy path', { from, to });
|
|
97
|
-
fs.copySync(from, to);
|
|
98
|
-
}
|
|
99
|
-
} catch (error) {
|
|
100
|
-
logger.error(error);
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
{
|
|
104
|
-
try {
|
|
105
|
-
let output = shellExec('git status', { silent: true, stdout: true });
|
|
106
|
-
console.log('output:', output);
|
|
107
|
-
output = output
|
|
108
|
-
.split(`to include in what will be committed)`)[1]
|
|
109
|
-
.split(`no changes added to commit`)[0]
|
|
110
|
-
.split(`\n`)
|
|
111
|
-
.map((l) => l.trim())
|
|
112
|
-
.filter((l) => l);
|
|
113
|
-
|
|
114
|
-
for (const fromPath of output) {
|
|
115
|
-
const from = `${baseFrom}/${fromPath}`;
|
|
116
|
-
const to = `${baseTo}/${fromPath}`;
|
|
117
|
-
logger.info('Copy path', { from, to });
|
|
118
|
-
fs.copySync(from, to);
|
|
119
|
-
}
|
|
120
|
-
} catch (error) {
|
|
121
|
-
logger.error(error);
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
break;
|
|
126
49
|
case 'delete-empty-folder':
|
|
127
50
|
function cleanEmptyFoldersRecursively(folder) {
|
|
128
51
|
if (!fs.existsSync(folder)) {
|
|
@@ -189,12 +112,6 @@ try {
|
|
|
189
112
|
fs.writeFileSync('b64-image', `data:image/jpg;base64,${fs.readFileSync(process.argv[3]).toString('base64')}`);
|
|
190
113
|
break;
|
|
191
114
|
|
|
192
|
-
case 'get-ip': {
|
|
193
|
-
const response = await axios.get(process.argv[3]);
|
|
194
|
-
logger.info(process.argv[3] + ' IP', response.request.socket.remoteAddress);
|
|
195
|
-
break;
|
|
196
|
-
}
|
|
197
|
-
|
|
198
115
|
case 'clean-env': {
|
|
199
116
|
shellExec(`git checkout package.json`);
|
|
200
117
|
shellExec(`git checkout .env.production`);
|
|
@@ -203,7 +120,28 @@ try {
|
|
|
203
120
|
shellExec(`git checkout jsdoc.json`);
|
|
204
121
|
break;
|
|
205
122
|
}
|
|
123
|
+
case 'get-keys': {
|
|
124
|
+
const sentence = fs.existsSync('./_')
|
|
125
|
+
? fs.readFileSync('./_', 'utf8')
|
|
126
|
+
: process.argv[3]
|
|
127
|
+
? process.argv[3]
|
|
128
|
+
: 'President Obama woke up Monday facing a Congressional defeat that many in both parties believed could hobble his presidency.';
|
|
129
|
+
|
|
130
|
+
// Extract the keywords
|
|
131
|
+
const extraction_result = keyword_extractor.extract(sentence, {
|
|
132
|
+
language: 'english',
|
|
133
|
+
remove_digits: true,
|
|
134
|
+
// return_changed_case: true,
|
|
135
|
+
// remove_duplicates: false,
|
|
136
|
+
});
|
|
206
137
|
|
|
138
|
+
console.log(extraction_result.join(', '));
|
|
139
|
+
break;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
case 'build-ports': {
|
|
143
|
+
pbcopy(buildKindPorts(process.argv[3], process.argv[4]));
|
|
144
|
+
}
|
|
207
145
|
default:
|
|
208
146
|
break;
|
|
209
147
|
}
|
package/bin/vs.js
CHANGED
|
@@ -1,18 +1,40 @@
|
|
|
1
1
|
import fs from 'fs-extra';
|
|
2
2
|
import { shellExec } from '../src/server/process.js';
|
|
3
|
+
import { loggerFactory } from '../src/server/logger.js';
|
|
4
|
+
|
|
5
|
+
const logger = loggerFactory(import.meta);
|
|
3
6
|
|
|
4
7
|
switch (process.argv[2]) {
|
|
8
|
+
case 'info': {
|
|
9
|
+
logger.info('Formatted', 'Ctrl shift I');
|
|
10
|
+
logger.info('Command', 'Ctrl shift P');
|
|
11
|
+
logger.info('Search', 'Ctrl shift F');
|
|
12
|
+
logger.info('Debug', 'Ctrl shift D');
|
|
13
|
+
logger.info('New File', 'Ctrl N');
|
|
14
|
+
logger.info('Change tab', 'Ctrl Tab');
|
|
15
|
+
logger.info('Fold All', 'Ctrl K + Ctrl 0');
|
|
16
|
+
logger.info('Unfold All', 'Ctrl K + Ctrl J');
|
|
17
|
+
logger.info('Close All tabs', 'Ctrl K + W');
|
|
18
|
+
logger.info('Go to line number', 'Ctrl G');
|
|
19
|
+
logger.info('Change current project folder', 'Ctrl K + Ctrl O');
|
|
20
|
+
logger.info('Open new vs windows', 'Ctrl Shift N');
|
|
21
|
+
logger.info('Close current vs windows', 'Ctrl Shift W');
|
|
22
|
+
logger.info('Preview md', 'Ctrl shift V');
|
|
23
|
+
logger.warn('Terminal shortcut configure with command pallette', 'Ctl shift T');
|
|
24
|
+
break;
|
|
25
|
+
}
|
|
5
26
|
case 'import':
|
|
6
27
|
{
|
|
7
28
|
const extensions = JSON.parse(fs.readFileSync(`./.vscode/extensions.json`, 'utf8'));
|
|
8
29
|
extensions.recommendations.map((extension) => {
|
|
9
|
-
if (extension)
|
|
30
|
+
if (extension)
|
|
31
|
+
shellExec(`sudo code --user-data-dir="/root/.vscode-root" --no-sandbox --install-extension ${extension}`);
|
|
10
32
|
});
|
|
11
33
|
}
|
|
12
34
|
break;
|
|
13
35
|
case 'export':
|
|
14
36
|
{
|
|
15
|
-
shellExec(`code --list-extensions > vs-extensions.txt`);
|
|
37
|
+
shellExec(`sudo code --user-data-dir="/root/.vscode-root" --no-sandbox --list-extensions > vs-extensions.txt`);
|
|
16
38
|
fs.writeFileSync(
|
|
17
39
|
`./.vscode/extensions.json`,
|
|
18
40
|
JSON.stringify(
|
|
@@ -31,5 +53,6 @@ switch (process.argv[2]) {
|
|
|
31
53
|
}
|
|
32
54
|
break;
|
|
33
55
|
default:
|
|
56
|
+
shellExec(`sudo code ${process.argv[2]} --user-data-dir="/root/.vscode-root" --no-sandbox`);
|
|
34
57
|
break;
|
|
35
58
|
}
|
package/conf.js
CHANGED
|
@@ -1,9 +1,13 @@
|
|
|
1
|
-
|
|
1
|
+
import dotenv from 'dotenv';
|
|
2
|
+
|
|
3
|
+
dotenv.config();
|
|
4
|
+
|
|
5
|
+
const DefaultConf = /**/ {
|
|
2
6
|
client: {
|
|
3
7
|
default: {
|
|
4
8
|
metadata: {
|
|
5
9
|
title: 'Demo App',
|
|
6
|
-
backgroundImage: '
|
|
10
|
+
backgroundImage: 'assets/background/white0-min.jpg',
|
|
7
11
|
description: 'Web application',
|
|
8
12
|
keywords: ['web', 'app', 'spa', 'demo', 'github-pages'],
|
|
9
13
|
author: 'https://github.com/underpostnet',
|
|
@@ -75,58 +79,16 @@ const DefaultConf = {
|
|
|
75
79
|
],
|
|
76
80
|
},
|
|
77
81
|
views: [
|
|
78
|
-
{
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
},
|
|
84
|
-
{
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
ssr: 'Default',
|
|
89
|
-
},
|
|
90
|
-
{
|
|
91
|
-
path: '/settings',
|
|
92
|
-
client: 'Default',
|
|
93
|
-
ssr: 'Default',
|
|
94
|
-
},
|
|
95
|
-
{
|
|
96
|
-
path: '/log-in',
|
|
97
|
-
client: 'Default',
|
|
98
|
-
ssr: 'Default',
|
|
99
|
-
},
|
|
100
|
-
{
|
|
101
|
-
path: '/sign-up',
|
|
102
|
-
client: 'Default',
|
|
103
|
-
ssr: 'Default',
|
|
104
|
-
},
|
|
105
|
-
{
|
|
106
|
-
path: '/log-out',
|
|
107
|
-
client: 'Default',
|
|
108
|
-
ssr: 'Default',
|
|
109
|
-
},
|
|
110
|
-
{
|
|
111
|
-
path: '/account',
|
|
112
|
-
client: 'Default',
|
|
113
|
-
ssr: 'Default',
|
|
114
|
-
},
|
|
115
|
-
{
|
|
116
|
-
path: '/docs',
|
|
117
|
-
client: 'Default',
|
|
118
|
-
ssr: 'Default',
|
|
119
|
-
},
|
|
120
|
-
{
|
|
121
|
-
path: '/recover',
|
|
122
|
-
client: 'Default',
|
|
123
|
-
ssr: 'Default',
|
|
124
|
-
},
|
|
125
|
-
{
|
|
126
|
-
path: '/default-management',
|
|
127
|
-
client: 'Default',
|
|
128
|
-
ssr: 'Default',
|
|
129
|
-
},
|
|
82
|
+
{ path: '/', title: 'Home', client: 'Default', ssr: 'Default' },
|
|
83
|
+
{ path: '/home', title: 'Home', client: 'Default', ssr: 'Default' },
|
|
84
|
+
{ path: '/settings', client: 'Default', ssr: 'Default' },
|
|
85
|
+
{ path: '/log-in', client: 'Default', ssr: 'Default' },
|
|
86
|
+
{ path: '/sign-up', client: 'Default', ssr: 'Default' },
|
|
87
|
+
{ path: '/log-out', client: 'Default', ssr: 'Default' },
|
|
88
|
+
{ path: '/account', client: 'Default', ssr: 'Default' },
|
|
89
|
+
{ path: '/docs', client: 'Default', ssr: 'Default' },
|
|
90
|
+
{ path: '/recover', client: 'Default', ssr: 'Default' },
|
|
91
|
+
{ path: '/default-management', client: 'Default', ssr: 'Default' },
|
|
130
92
|
{ client: 'Default', ssr: 'Default', path: '/404', title: '404 Not Found' },
|
|
131
93
|
{ client: 'Default', ssr: 'Default', path: '/500', title: '500 Server Error' },
|
|
132
94
|
],
|
|
@@ -137,24 +99,15 @@ const DefaultConf = {
|
|
|
137
99
|
import_name: '@neodrag/vanilla',
|
|
138
100
|
import_name_build: '/dist/@neodrag-vanilla/index.js',
|
|
139
101
|
},
|
|
140
|
-
{
|
|
141
|
-
folder: './node_modules/@fortawesome/fontawesome-free',
|
|
142
|
-
public_folder: '/dist/fontawesome',
|
|
143
|
-
},
|
|
102
|
+
{ folder: './node_modules/@fortawesome/fontawesome-free', public_folder: '/dist/fontawesome' },
|
|
144
103
|
{
|
|
145
104
|
folder: './node_modules/sortablejs/modular',
|
|
146
105
|
public_folder: '/dist/sortablejs',
|
|
147
106
|
import_name: 'sortablejs',
|
|
148
107
|
import_name_build: '/dist/sortablejs/sortable.complete.esm.js',
|
|
149
108
|
},
|
|
150
|
-
{
|
|
151
|
-
|
|
152
|
-
public_folder: '/dist/validator',
|
|
153
|
-
},
|
|
154
|
-
{
|
|
155
|
-
folder: './node_modules/@loadingio/css-spinner/entries',
|
|
156
|
-
public_folder: '/dist/loadingio',
|
|
157
|
-
},
|
|
109
|
+
{ folder: './node_modules/validator', public_folder: '/dist/validator' },
|
|
110
|
+
{ folder: './node_modules/@loadingio/css-spinner/entries', public_folder: '/dist/loadingio' },
|
|
158
111
|
{
|
|
159
112
|
import_name: 'ag-grid-community',
|
|
160
113
|
import_name_build: '/dist/ag-grid-community/ag-grid-community.auto.complete.esm.min.js',
|
|
@@ -169,10 +122,7 @@ const DefaultConf = {
|
|
|
169
122
|
import_name: 'socket.io/client-dist/socket.io.esm.min.js',
|
|
170
123
|
import_name_build: '/dist/socket.io/socket.io.esm.min.js',
|
|
171
124
|
},
|
|
172
|
-
{
|
|
173
|
-
folder: './node_modules/peerjs/dist',
|
|
174
|
-
public_folder: '/dist/peerjs',
|
|
175
|
-
},
|
|
125
|
+
{ folder: './node_modules/peerjs/dist', public_folder: '/dist/peerjs' },
|
|
176
126
|
],
|
|
177
127
|
services: ['default', 'core', 'user', 'test', 'file'],
|
|
178
128
|
},
|
|
@@ -181,28 +131,12 @@ const DefaultConf = {
|
|
|
181
131
|
Default: {
|
|
182
132
|
head: ['Seo', 'Pwa', 'Css', 'DefaultScripts', 'Production'],
|
|
183
133
|
body: ['CacheControl', 'DefaultSplashScreen', '404', '500'],
|
|
184
|
-
mailer: {
|
|
185
|
-
userVerifyEmail: 'DefaultVerifyEmail',
|
|
186
|
-
userRecoverEmail: 'DefaultRecoverEmail',
|
|
187
|
-
},
|
|
134
|
+
mailer: { userVerifyEmail: 'DefaultVerifyEmail', userRecoverEmail: 'DefaultRecoverEmail' },
|
|
188
135
|
offline: [
|
|
189
|
-
{
|
|
190
|
-
|
|
191
|
-
title: 'No Network Connection',
|
|
192
|
-
client: 'NoNetworkConnection',
|
|
193
|
-
head: [],
|
|
194
|
-
body: [],
|
|
195
|
-
},
|
|
196
|
-
],
|
|
197
|
-
pages: [
|
|
198
|
-
{
|
|
199
|
-
path: '/test',
|
|
200
|
-
title: 'Test',
|
|
201
|
-
client: 'Test',
|
|
202
|
-
head: [],
|
|
203
|
-
body: [],
|
|
204
|
-
},
|
|
136
|
+
{ path: '/offline', title: 'No Network Connection', client: 'NoNetworkConnection', head: [], body: [] },
|
|
137
|
+
{ path: '/maintenance', title: 'Server Maintenance', client: 'Maintenance', head: [], body: [] },
|
|
205
138
|
],
|
|
139
|
+
pages: [{ path: '/test', title: 'Test', client: 'Test', head: [], body: [] }],
|
|
206
140
|
},
|
|
207
141
|
},
|
|
208
142
|
server: {
|
|
@@ -220,24 +154,14 @@ const DefaultConf = {
|
|
|
220
154
|
ws: 'core',
|
|
221
155
|
peer: true,
|
|
222
156
|
proxy: [80, 443],
|
|
223
|
-
db: {
|
|
224
|
-
provider: 'mongoose',
|
|
225
|
-
host: 'mongodb://127.0.0.1:27017',
|
|
226
|
-
name: 'default',
|
|
227
|
-
},
|
|
157
|
+
db: { provider: 'mongoose', host: 'mongodb://127.0.0.1:27017', name: 'default' },
|
|
228
158
|
mailer: {
|
|
229
|
-
sender: {
|
|
230
|
-
email: 'noreply@default.net',
|
|
231
|
-
name: 'Default',
|
|
232
|
-
},
|
|
159
|
+
sender: { email: 'noreply@default.net', name: 'Default' },
|
|
233
160
|
transport: {
|
|
234
161
|
host: 'smtp.default.com',
|
|
235
162
|
port: 465,
|
|
236
163
|
secure: true,
|
|
237
|
-
auth: {
|
|
238
|
-
user: 'noreply@default.net',
|
|
239
|
-
pass: '',
|
|
240
|
-
},
|
|
164
|
+
auth: { user: 'noreply@default.net', pass: '' },
|
|
241
165
|
},
|
|
242
166
|
},
|
|
243
167
|
},
|
|
@@ -255,35 +179,11 @@ const DefaultConf = {
|
|
|
255
179
|
},
|
|
256
180
|
},
|
|
257
181
|
cron: {
|
|
258
|
-
ipDaemon: {
|
|
259
|
-
|
|
260
|
-
},
|
|
261
|
-
|
|
262
|
-
A: [
|
|
263
|
-
{
|
|
264
|
-
host: 'example.com',
|
|
265
|
-
dns: 'dondominio',
|
|
266
|
-
api_key: '???',
|
|
267
|
-
user: '???',
|
|
268
|
-
},
|
|
269
|
-
],
|
|
270
|
-
},
|
|
271
|
-
backups: [
|
|
272
|
-
{
|
|
273
|
-
deployGroupId: 'default-group',
|
|
274
|
-
},
|
|
275
|
-
],
|
|
276
|
-
jobs: {
|
|
277
|
-
dns: {
|
|
278
|
-
expression: '* * * * *',
|
|
279
|
-
enabled: true,
|
|
280
|
-
},
|
|
281
|
-
backups: {
|
|
282
|
-
expression: '0 1 * * *',
|
|
283
|
-
enabled: true,
|
|
284
|
-
},
|
|
285
|
-
},
|
|
182
|
+
ipDaemon: { ip: null },
|
|
183
|
+
records: { A: [{ host: 'example.com', dns: 'dondominio', api_key: '???', user: '???' }] },
|
|
184
|
+
backups: [{ deployGroupId: 'default-group' }],
|
|
185
|
+
jobs: { dns: { expression: '* * * * *', enabled: true }, backups: { expression: '0 1 * * *', enabled: true } },
|
|
286
186
|
},
|
|
287
|
-
};
|
|
187
|
+
}; /**/
|
|
288
188
|
|
|
289
189
|
export { DefaultConf };
|
package/docker-compose.yml
CHANGED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
---
|
|
2
|
+
# kubectl apply -k core/.
|
|
3
|
+
apiVersion: kustomize.config.k8s.io/v1beta1
|
|
4
|
+
kind: Kustomization
|
|
5
|
+
resources:
|
|
6
|
+
- underpost-engine-pv-pvc.yaml
|
|
7
|
+
- underpost-engine-headless-service.yaml
|
|
8
|
+
- underpost-engine-statefulset.yaml
|
|
9
|
+
- underpost-engine-backup-pv-pvc.yaml
|
|
10
|
+
- underpost-engine-mongodb-backup-cronjob.yaml
|
|
11
|
+
- underpost-engine-backup-access.yaml
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
apiVersion: v1
|
|
2
|
+
kind: Pod
|
|
3
|
+
metadata:
|
|
4
|
+
name: backup-access
|
|
5
|
+
spec:
|
|
6
|
+
containers:
|
|
7
|
+
- name: busybox
|
|
8
|
+
image: busybox
|
|
9
|
+
command: ['sh', '-c', 'sleep 3600']
|
|
10
|
+
volumeMounts:
|
|
11
|
+
- name: backup-storage
|
|
12
|
+
mountPath: /backup
|
|
13
|
+
volumes:
|
|
14
|
+
- name: backup-storage
|
|
15
|
+
persistentVolumeClaim:
|
|
16
|
+
claimName: backup-pvc
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
apiVersion: v1
|
|
2
|
+
kind: PersistentVolume
|
|
3
|
+
metadata:
|
|
4
|
+
name: backup-pv
|
|
5
|
+
spec:
|
|
6
|
+
capacity:
|
|
7
|
+
storage: 5Gi
|
|
8
|
+
accessModes:
|
|
9
|
+
- ReadWriteOnce
|
|
10
|
+
hostPath:
|
|
11
|
+
path: /mnt/backup
|
|
12
|
+
---
|
|
13
|
+
apiVersion: v1
|
|
14
|
+
kind: PersistentVolumeClaim
|
|
15
|
+
metadata:
|
|
16
|
+
name: backup-pvc
|
|
17
|
+
spec:
|
|
18
|
+
accessModes:
|
|
19
|
+
- ReadWriteOnce
|
|
20
|
+
resources:
|
|
21
|
+
requests:
|
|
22
|
+
storage: 5Gi
|