@drumee/setup-infra 1.0.0
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/LICENSE +661 -0
- package/README.md +3 -0
- package/configs/etc/cron.d/drumee +6 -0
- package/configs/etc/postfix/master.cf +137 -0
- package/congigure/init/acme +69 -0
- package/congigure/init/mail +16 -0
- package/congigure/init/named +27 -0
- package/congigure/menu/menu -tmp +144 -0
- package/congigure/menu/menu-install +147 -0
- package/congigure/menu/menu-reinstall +15 -0
- package/congigure/prepare +10 -0
- package/congigure/preset/jitsi +9 -0
- package/congigure/setup-infra +58 -0
- package/congigure/setup-schemas +57 -0
- package/congigure/start +29 -0
- package/congigure/utils/configure +56 -0
- package/congigure/utils/dependencies +90 -0
- package/congigure/utils/jitsi +122 -0
- package/congigure/utils/misc +77 -0
- package/congigure/utils/prompt.sh +35 -0
- package/congigure/utils/setup-versions +7 -0
- package/index.js +572 -0
- package/package.json +30 -0
- package/template.js +453 -0
- package/templates/env/application.json.tpl +0 -0
- package/templates/env/logrotate.tpl +7 -0
- package/templates/etc/bind/named.conf.local +13 -0
- package/templates/etc/bind/named.conf.log +105 -0
- package/templates/etc/bind/named.conf.options +33 -0
- package/templates/etc/dkimkeys/dkim.key +1 -0
- package/templates/etc/drumee/conf.d/conference.json.tpl +9 -0
- package/templates/etc/drumee/conf.d/drumee.json.tpl +7 -0
- package/templates/etc/drumee/conf.d/exchange.json.tpl +4 -0
- package/templates/etc/drumee/conf.d/myDrumee.json.tpl +16 -0
- package/templates/etc/drumee/credential/db.json.tpl +6 -0
- package/templates/etc/drumee/credential/email.json.tpl +12 -0
- package/templates/etc/drumee/credential/ovh/dns.json.tpl +6 -0
- package/templates/etc/drumee/credential/ovh/dns.sh.tpl +7 -0
- package/templates/etc/drumee/credential/redis.json.tpl +6 -0
- package/templates/etc/drumee/credential/sms.json.tpl +6 -0
- package/templates/etc/drumee/dnsapi.sh.tpl +28 -0
- package/templates/etc/drumee/drumee.sh.tpl +43 -0
- package/templates/etc/drumee/env.json +29 -0
- package/templates/etc/drumee/infrastructure/internals/accel.conf.tpl +47 -0
- package/templates/etc/drumee/infrastructure/mfs.conf.tpl +16 -0
- package/templates/etc/drumee/infrastructure/platform.json.tpl +16 -0
- package/templates/etc/drumee/infrastructure/routes/main.conf.tpl +143 -0
- package/templates/etc/drumee/infrastructure/servers/tt.conf +199 -0
- package/templates/etc/drumee/ssl/main.conf.tpl +10 -0
- package/templates/etc/jitsi/jicofo/config +2 -0
- package/templates/etc/jitsi/jicofo/defaults/jicofo.conf +225 -0
- package/templates/etc/jitsi/jicofo/defaults/logging.properties +15 -0
- package/templates/etc/jitsi/jicofo/jicofo.conf.tpl +46 -0
- package/templates/etc/jitsi/jicofo/logging.properties.tpl +12 -0
- package/templates/etc/jitsi/meet.conf.tpl +131 -0
- package/templates/etc/jitsi/ssl.conf.tpl +25 -0
- package/templates/etc/jitsi/videobridge/config +2 -0
- package/templates/etc/jitsi/videobridge/defaults/jvb.conf +129 -0
- package/templates/etc/jitsi/videobridge/defaults/logging.properties +12 -0
- package/templates/etc/jitsi/videobridge/jvb.conf +67 -0
- package/templates/etc/jitsi/videobridge/logging.properties.tpl +12 -0
- package/templates/etc/jitsi/web/config.js.tpl +208 -0
- package/templates/etc/jitsi/web/defaults/default +26 -0
- package/templates/etc/jitsi/web/defaults/ffdhe2048.txt +8 -0
- package/templates/etc/jitsi/web/defaults/interface_config.js +273 -0
- package/templates/etc/jitsi/web/defaults/meet.conf +193 -0
- package/templates/etc/jitsi/web/defaults/nginx.conf +73 -0
- package/templates/etc/jitsi/web/defaults/settings-config.js +480 -0
- package/templates/etc/jitsi/web/defaults/ssl.conf +28 -0
- package/templates/etc/jitsi/web/defaults/system-config.js +60 -0
- package/templates/etc/jitsi/web/interface_config.js +273 -0
- package/templates/etc/mail/dkim.key +1 -0
- package/templates/etc/mailname +1 -0
- package/templates/etc/mysql/mariadb.conf.d/50-server.cnf +120 -0
- package/templates/etc/nginx/modules-enabled/90-turn-relay.conf +27 -0
- package/templates/etc/nginx/modules-enabled/90-turn-relay.conf.tpl +27 -0
- package/templates/etc/nginx/nginx.conf +65 -0
- package/templates/etc/nginx/sites-enabled/drumee.conf.tpl +33 -0
- package/templates/etc/nginx/sites-enabled/jitsi.conf.tpl +28 -0
- package/templates/etc/nginx/sites-enabled/turnrelay.conf.tpl +9 -0
- package/templates/etc/opendkim/KeyTable +1 -0
- package/templates/etc/postfix/main.cf +76 -0
- package/templates/etc/postfix/mysql-virtual-alias-maps.cf +5 -0
- package/templates/etc/postfix/mysql-virtual-mailbox-domains.cf +5 -0
- package/templates/etc/postfix/mysql-virtual-mailbox-maps.cf +5 -0
- package/templates/etc/prosody/conf.d/vhost.cfg.lua.tpl +162 -0
- package/templates/etc/prosody/defaults/conf.d/jitsi-meet.cfg.lua +406 -0
- package/templates/etc/prosody/defaults/credentials.sh +10 -0
- package/templates/etc/prosody/defaults/prosody.cfg.lua +225 -0
- package/templates/etc/prosody/defaults/saslauthd.conf +30 -0
- package/templates/etc/prosody/prosody.cfg.lua.tpl +203 -0
- package/templates/etc/turnserver.conf.tpl +46 -0
- package/templates/index.js +102 -0
- package/templates/schema/utils/configs.init.sql.tpl +20 -0
- package/templates/schema/utils/configs.update.sql.tpl +19 -0
- package/templates/server/ecosystem.config.js.tpl +8 -0
- package/templates/var/lib/bind/domain.tpl +70 -0
package/template.js
ADDED
|
@@ -0,0 +1,453 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
// ======================================================
|
|
4
|
+
//
|
|
5
|
+
// ======================================================
|
|
6
|
+
const Template = require("./templates");
|
|
7
|
+
const { writeFileSync, readFileSync } = require(`jsonfile`);
|
|
8
|
+
const { exec } = require("shelljs");
|
|
9
|
+
const { join } = require("path");
|
|
10
|
+
const { isString } = require("lodash");
|
|
11
|
+
const { exit } = process;
|
|
12
|
+
const { sysEnv } = require("@drumee/server-essentials");
|
|
13
|
+
const { totalmem } = require('os');
|
|
14
|
+
const ARGV = require('minimist')(process.argv.slice(2));
|
|
15
|
+
const { existsSync } = require("fs");
|
|
16
|
+
|
|
17
|
+
const {
|
|
18
|
+
ACME_DIR,
|
|
19
|
+
ACME_EMAIL_ACCOUNT,
|
|
20
|
+
ADMIN_EMAIL,
|
|
21
|
+
DRUMEE_DESCRIPTION,
|
|
22
|
+
DRUMEE_DOMAIN_NAME,
|
|
23
|
+
FORCE_INSTALL,
|
|
24
|
+
NSUPDATE_KEY,
|
|
25
|
+
PUBLIC_IP4,
|
|
26
|
+
PUBLIC_IP6,
|
|
27
|
+
} = process.env;
|
|
28
|
+
|
|
29
|
+
let Dns = require("dns");
|
|
30
|
+
/**
|
|
31
|
+
*
|
|
32
|
+
* @param {*} l
|
|
33
|
+
* @returns
|
|
34
|
+
*/
|
|
35
|
+
function randomString(l = 16) {
|
|
36
|
+
let crypto = require("crypto");
|
|
37
|
+
return crypto
|
|
38
|
+
.randomBytes(16)
|
|
39
|
+
.toString("base64")
|
|
40
|
+
.replace(/[\+\/=]+/g, "");
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
*
|
|
45
|
+
* @param {*} data
|
|
46
|
+
* @returns
|
|
47
|
+
*/
|
|
48
|
+
function copyFields(data, keys) {
|
|
49
|
+
let r = {};
|
|
50
|
+
for (let key of keys) {
|
|
51
|
+
if (data[key] !== null) {
|
|
52
|
+
r[key] = data[key];
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return r;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
*
|
|
60
|
+
* @param {*} data
|
|
61
|
+
* @returns
|
|
62
|
+
*/
|
|
63
|
+
function factory(data) {
|
|
64
|
+
let route = "main";
|
|
65
|
+
let mode = "dist";
|
|
66
|
+
let base = `${data.server_dir}/${mode}/${route}/`;
|
|
67
|
+
return {
|
|
68
|
+
name: "factory",
|
|
69
|
+
script: `./index.js`,
|
|
70
|
+
autorestart: false,
|
|
71
|
+
cwd: `${base}/offline/factory`,
|
|
72
|
+
env: copyFields(data, [
|
|
73
|
+
"domain_name",
|
|
74
|
+
"domain_desc",
|
|
75
|
+
"data_dir",
|
|
76
|
+
"system_user",
|
|
77
|
+
"system_group",
|
|
78
|
+
"drumee_root",
|
|
79
|
+
"cache_dir",
|
|
80
|
+
"acme_dir",
|
|
81
|
+
"acme_dns",
|
|
82
|
+
"acme_email_account",
|
|
83
|
+
"static_dir",
|
|
84
|
+
"runtime_dir",
|
|
85
|
+
"credential_dir",
|
|
86
|
+
]),
|
|
87
|
+
dependencies: [`pm2-logrotate`],
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
*
|
|
93
|
+
* @param {*} data
|
|
94
|
+
* @returns
|
|
95
|
+
*/
|
|
96
|
+
function worker(data, instances = 1, exec_mode = 'fork_mode') {
|
|
97
|
+
let {
|
|
98
|
+
script,
|
|
99
|
+
pushPort,
|
|
100
|
+
route,
|
|
101
|
+
restPort,
|
|
102
|
+
name,
|
|
103
|
+
server_dir,
|
|
104
|
+
runtime_dir,
|
|
105
|
+
mode,
|
|
106
|
+
} = data;
|
|
107
|
+
if (!server_dir) server_dir = join(runtime_dir, 'server');
|
|
108
|
+
let base = `${server_dir}/${mode}/${route}`;
|
|
109
|
+
return {
|
|
110
|
+
name,
|
|
111
|
+
script,
|
|
112
|
+
cwd: base,
|
|
113
|
+
args: `--pushPort=${pushPort} --restPort=${restPort}`,
|
|
114
|
+
route,
|
|
115
|
+
env: {
|
|
116
|
+
cwd: base,
|
|
117
|
+
route,
|
|
118
|
+
server_home: base,
|
|
119
|
+
},
|
|
120
|
+
dependencies: [`pm2-logrotate`],
|
|
121
|
+
exec_mode,
|
|
122
|
+
instances
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/***
|
|
127
|
+
*
|
|
128
|
+
*/
|
|
129
|
+
function writeTemplates(data, targets) {
|
|
130
|
+
if (ARGV.readonly || ARGV.noCheck) {
|
|
131
|
+
console.log("Readonly", targets, data);
|
|
132
|
+
return
|
|
133
|
+
}
|
|
134
|
+
for (let target of targets) {
|
|
135
|
+
if (isString(target)) {
|
|
136
|
+
Template.write(data, target, target);
|
|
137
|
+
} else {
|
|
138
|
+
let { out, tpl } = target;
|
|
139
|
+
Template.write(data, out, tpl);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
*
|
|
146
|
+
*/
|
|
147
|
+
function writeEcoSystem(data) {
|
|
148
|
+
const ports = {
|
|
149
|
+
pushPort: 23000,
|
|
150
|
+
restPort: 24000,
|
|
151
|
+
mode: "dist",
|
|
152
|
+
route: "main",
|
|
153
|
+
};
|
|
154
|
+
|
|
155
|
+
let main = worker({
|
|
156
|
+
...data,
|
|
157
|
+
...ports,
|
|
158
|
+
name: "main",
|
|
159
|
+
script: "./index.js",
|
|
160
|
+
});
|
|
161
|
+
|
|
162
|
+
let instances = 4;
|
|
163
|
+
if ((totalmem() / (1024 * 1024 * 1024)) < 2) {
|
|
164
|
+
instances = 2;
|
|
165
|
+
} else if ((totalmem() / (1024 * 1024 * 1024) < 6)) {
|
|
166
|
+
instances = 3;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
let main_service = worker({
|
|
170
|
+
...data,
|
|
171
|
+
...ports,
|
|
172
|
+
name: "main/service",
|
|
173
|
+
script: "./service.js"
|
|
174
|
+
}, instances, 'cluster_mode');
|
|
175
|
+
|
|
176
|
+
let f = factory(data);
|
|
177
|
+
let routes = [main, main_service, f];
|
|
178
|
+
let ecosystem = "/etc/drumee/infrastructure/ecosystem.json";
|
|
179
|
+
if (ARGV.readonly) {
|
|
180
|
+
console.log("Readonly", ecosystem, routes);
|
|
181
|
+
return
|
|
182
|
+
}
|
|
183
|
+
writeFileSync(ecosystem, routes, { spaces: 2, EOL: "\r\n" });
|
|
184
|
+
let targets = [
|
|
185
|
+
{
|
|
186
|
+
out: `${data.server_dir}/ecosystem.config.js`,
|
|
187
|
+
tpl: "server/ecosystem.config.js",
|
|
188
|
+
},
|
|
189
|
+
];
|
|
190
|
+
writeTemplates({ ecosystem, chroot: Template.chroot }, targets);
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
/**
|
|
194
|
+
*
|
|
195
|
+
*/
|
|
196
|
+
function getSysConfigs() {
|
|
197
|
+
let { domain_name } = sysEnv();
|
|
198
|
+
if (existsSync('/etc/drumee/drumee.sh') && !FORCE_INSTALL) {
|
|
199
|
+
console.log(
|
|
200
|
+
`There is already a domain name configured on this server (${domain_name})\n`, `Use FORCE_INSTALL=yes to override`);
|
|
201
|
+
exit(0)
|
|
202
|
+
}
|
|
203
|
+
domain_name = domain_name || ARGV.domain || DRUMEE_DOMAIN_NAME;
|
|
204
|
+
if (!domain_name) {
|
|
205
|
+
console.log("There no domain name defined for the installation");
|
|
206
|
+
exit(0)
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
let data = { ...sysEnv(), domain_name, domain: domain_name };
|
|
210
|
+
|
|
211
|
+
data.chroot = Template.chroot();
|
|
212
|
+
data.acme_store = join(data.certs_dir, `${data.domain_name}_ecc`);
|
|
213
|
+
data.ca_server = data.ca_server || data.acme_ssl;
|
|
214
|
+
if (data.own_ssl && data.certs_dir) {
|
|
215
|
+
data.own_certs_dir = data.certs_dir;
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
if (!data.acme_dir) {
|
|
219
|
+
data.acme_dir = ACME_DIR || '/usr/share/acme';
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
|
|
223
|
+
if (!data.jitsi_domain) {
|
|
224
|
+
data.jitsi_domain = `jit.${data.domain_name}`;
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
if (!data.nsupdate_key) {
|
|
228
|
+
data.nsupdate_key = NSUPDATE_KEY || "/etc/bind/keys/update.key";
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
if (!data.domain_desc) {
|
|
232
|
+
data.domain_desc = DRUMEE_DESCRIPTION || 'My Drumee Box';
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
if (!data.admin_email) {
|
|
236
|
+
data.admin_email = ADMIN_EMAIL || `admin@${data.domain_name}`;
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
if (!data.acme_email_account) {
|
|
240
|
+
data.acme_email_account = ACME_EMAIL_ACCOUNT || data.admin_email;
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
if (!data.public_ip4) {
|
|
244
|
+
data.public_ip4 = PUBLIC_IP4;
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
if (!data.public_ip6) {
|
|
248
|
+
data.public_ip6 = PUBLIC_IP6;
|
|
249
|
+
}
|
|
250
|
+
let d = new Date().toISOString();
|
|
251
|
+
let [day, hour] = d.split('T')
|
|
252
|
+
day = day.replace(/\-/g, '');
|
|
253
|
+
hour = hour.split(':')[0];
|
|
254
|
+
data.serial = `${day}${hour}`;
|
|
255
|
+
let target = [
|
|
256
|
+
"etc/drumee/drumee.sh",
|
|
257
|
+
{
|
|
258
|
+
tpl: "etc/bind/db.domain",
|
|
259
|
+
out: `etc/bind/db.${domain_name}`
|
|
260
|
+
},
|
|
261
|
+
"etc/bind/named.conf.local",
|
|
262
|
+
"etc/bind/named.conf.log",
|
|
263
|
+
"etc/bind/named.conf.options"
|
|
264
|
+
];
|
|
265
|
+
|
|
266
|
+
writeTemplates(data, target);
|
|
267
|
+
|
|
268
|
+
let args = { ...data };
|
|
269
|
+
let keys = ["myConf", "chroot", "date"];
|
|
270
|
+
|
|
271
|
+
for (let key of keys) {
|
|
272
|
+
delete args[key];
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
if (ARGV.readonly) {
|
|
276
|
+
return args;
|
|
277
|
+
}
|
|
278
|
+
console.log("Writing main conf into drumee.json");
|
|
279
|
+
writeFileSync(Template.chroot("etc/drumee/drumee.json"), args, {
|
|
280
|
+
spaces: 2,
|
|
281
|
+
EOL: "\r\n",
|
|
282
|
+
});
|
|
283
|
+
return args;
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
/**
|
|
287
|
+
*
|
|
288
|
+
*/
|
|
289
|
+
function writeInfraConf(data) {
|
|
290
|
+
writeEcoSystem(data);
|
|
291
|
+
const etc = 'etc';
|
|
292
|
+
const nginx = join(etc, 'nginx');
|
|
293
|
+
const drumee = join(etc, 'drumee');
|
|
294
|
+
const infra = join(drumee, 'infrastructure');
|
|
295
|
+
let targets = [
|
|
296
|
+
|
|
297
|
+
// Nginx
|
|
298
|
+
`${nginx}/sites-enabled/drumee.conf`,
|
|
299
|
+
|
|
300
|
+
// Drumee
|
|
301
|
+
`${drumee}/ssl/main.conf`,
|
|
302
|
+
`${drumee}/conf.d/conference.json`,
|
|
303
|
+
`${drumee}/conf.d/drumee.json`,
|
|
304
|
+
`${drumee}/conf.d/exchange.json`,
|
|
305
|
+
`${drumee}/conf.d/myDrumee.json`,
|
|
306
|
+
`${drumee}/conf.d/conference.json`,
|
|
307
|
+
`${drumee}/conf.d/drumee.json`,
|
|
308
|
+
`${drumee}/conf.d/exchange.json`,
|
|
309
|
+
`${drumee}/conf.d/myDrumee.json`,
|
|
310
|
+
|
|
311
|
+
`${infra}/mfs.conf`,
|
|
312
|
+
`${infra}/routes/main.conf`,
|
|
313
|
+
`${infra}/internals/accel.conf`
|
|
314
|
+
];
|
|
315
|
+
writeTemplates(data, targets);
|
|
316
|
+
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
/**
|
|
320
|
+
*
|
|
321
|
+
*/
|
|
322
|
+
function writeJitsiConf(data) {
|
|
323
|
+
const etc = 'etc';
|
|
324
|
+
const jitsi = join(etc, 'jitsi');
|
|
325
|
+
const nginx = join(etc, 'nginx');
|
|
326
|
+
const prosody = join(etc, 'prosody');
|
|
327
|
+
const drumee = join(etc, 'drumee');
|
|
328
|
+
let targets = [
|
|
329
|
+
// Jicofo
|
|
330
|
+
`${jitsi}/jicofo/config`,
|
|
331
|
+
`${jitsi}/jicofo/jicofo.conf`,
|
|
332
|
+
`${jitsi}/jicofo/logging.properties`,
|
|
333
|
+
|
|
334
|
+
// Jitsi Video Bridge
|
|
335
|
+
`${jitsi}/videobridge/config`,
|
|
336
|
+
`${jitsi}/videobridge/jvb.conf`,
|
|
337
|
+
`${jitsi}/videobridge/logging.properties`,
|
|
338
|
+
|
|
339
|
+
// Jitsi meet
|
|
340
|
+
`${jitsi}/ssl.conf`,
|
|
341
|
+
`${jitsi}/meet.conf`,
|
|
342
|
+
`${jitsi}/web/config.js`,
|
|
343
|
+
`${jitsi}/web/interface_config.js`,
|
|
344
|
+
`${jitsi}/web/defaults/ffdhe2048.txt`,
|
|
345
|
+
|
|
346
|
+
// Nginx
|
|
347
|
+
`${nginx}/sites-enabled/jitsi.conf`,
|
|
348
|
+
`${nginx}/modules-enabled/90-turn-relay.conf`,
|
|
349
|
+
//`${nginx}/sites-enabled/turnrelay.conf`,
|
|
350
|
+
|
|
351
|
+
// Prosody
|
|
352
|
+
`${prosody}/prosody.cfg.lua`,
|
|
353
|
+
`${prosody}/defaults/credentials.sh`,
|
|
354
|
+
{
|
|
355
|
+
out: `${prosody}/conf.d/${data.jitsi_domain}.cfg.lua`,
|
|
356
|
+
tpl: `${prosody}/conf.d/vhost.cfg.lua`
|
|
357
|
+
},
|
|
358
|
+
// `${prosody}/migrator.cfg.lua`,
|
|
359
|
+
|
|
360
|
+
// Turnserver
|
|
361
|
+
`${etc}/turnserver.conf`,
|
|
362
|
+
|
|
363
|
+
`${drumee}/conf.d/conference.json`,
|
|
364
|
+
|
|
365
|
+
];
|
|
366
|
+
writeTemplates(data, targets);
|
|
367
|
+
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
/**
|
|
371
|
+
*
|
|
372
|
+
*/
|
|
373
|
+
function makeConfData(data) {
|
|
374
|
+
const routes = join('etc', 'drumee', 'infrastructure', 'routes');
|
|
375
|
+
//let jitsi_domain = `jit.${data.domain}`;
|
|
376
|
+
data = {
|
|
377
|
+
...data,
|
|
378
|
+
turn_sercret: randomString(),
|
|
379
|
+
prosody_plugins: "/usr/share/jitsi-meet/prosody-plugins/",
|
|
380
|
+
xmpp_password: randomString(),
|
|
381
|
+
public_port: 9090,
|
|
382
|
+
ice_port: 10000,
|
|
383
|
+
jicofo_password: randomString(),
|
|
384
|
+
jvb_password: randomString(),
|
|
385
|
+
app_id: randomString(),
|
|
386
|
+
app_password: randomString(),
|
|
387
|
+
//jitsi_domain,
|
|
388
|
+
ui_base: join(data.ui_base, 'dist', 'main'),
|
|
389
|
+
location: '/-/',
|
|
390
|
+
pushPort: 23000,
|
|
391
|
+
restPort: 24000,
|
|
392
|
+
};
|
|
393
|
+
if (!data.export_dir) data.export_dir = null;
|
|
394
|
+
if (!data.import_dir) data.import_dir = null;
|
|
395
|
+
return data
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
/**
|
|
399
|
+
*
|
|
400
|
+
*/
|
|
401
|
+
function privateIp() {
|
|
402
|
+
return new Promise(async (res, rej) => {
|
|
403
|
+
import("private-ip").then(module => { res(module.default) });
|
|
404
|
+
})
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
/**
|
|
408
|
+
*
|
|
409
|
+
* @returns
|
|
410
|
+
*/
|
|
411
|
+
function configure() {
|
|
412
|
+
return new Promise(async (res, rej) => {
|
|
413
|
+
let data = getSysConfigs();
|
|
414
|
+
data.chroot = Template.chroot();
|
|
415
|
+
const isPrivate = await privateIp();
|
|
416
|
+
let os = require("os");
|
|
417
|
+
let interfaces = os.networkInterfaces();
|
|
418
|
+
for (let name in interfaces) {
|
|
419
|
+
for (let dev of interfaces[name]) {
|
|
420
|
+
if (dev.family == 'IPv4' && !dev.internal) {
|
|
421
|
+
if (isPrivate(dev.address)) {
|
|
422
|
+
data.local_address = dev.address;
|
|
423
|
+
break;
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
if (data.local_address) break;
|
|
428
|
+
}
|
|
429
|
+
//console.log(addr, service);
|
|
430
|
+
data = makeConfData(data);
|
|
431
|
+
let func = [];
|
|
432
|
+
if (!ARGV.infra && !ARGV.jitsi) {
|
|
433
|
+
func = [writeInfraConf, writeJitsiConf];
|
|
434
|
+
} else {
|
|
435
|
+
if (ARGV.infra) func.push(writeInfraConf)
|
|
436
|
+
if (ARGV.jitsi) func.push(writeJitsiConf)
|
|
437
|
+
}
|
|
438
|
+
func.map(function (f) {
|
|
439
|
+
f(data);
|
|
440
|
+
})
|
|
441
|
+
res();
|
|
442
|
+
|
|
443
|
+
});
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
configure()
|
|
447
|
+
.then(() => {
|
|
448
|
+
exit(0);
|
|
449
|
+
})
|
|
450
|
+
.catch((e) => {
|
|
451
|
+
console.error("Failed to setup Drumee infra", e);
|
|
452
|
+
exit(0);
|
|
453
|
+
});
|
|
File without changes
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Configs setup by Drumee infra-setup utility
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
include "/etc/bind/named.conf.log";
|
|
6
|
+
include "<%= nsupdate_key %>";
|
|
7
|
+
zone "<%= domain %>" {
|
|
8
|
+
type master;
|
|
9
|
+
file "/var/lib/bind/<%= domain %>";
|
|
10
|
+
allow-query { any; };
|
|
11
|
+
allow-update { key "update"; };
|
|
12
|
+
allow-transfer { <%= public_ip4 %>; };
|
|
13
|
+
};
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
logging {
|
|
2
|
+
channel default_file {
|
|
3
|
+
file "/var/log/named/default.log" versions 3 size 5m;
|
|
4
|
+
severity dynamic;
|
|
5
|
+
print-time yes;
|
|
6
|
+
};
|
|
7
|
+
channel general_file {
|
|
8
|
+
file "/var/log/named/general.log" versions 3 size 5m;
|
|
9
|
+
severity dynamic;
|
|
10
|
+
print-time yes;
|
|
11
|
+
};
|
|
12
|
+
channel database_file {
|
|
13
|
+
file "/var/log/named/database.log" versions 3 size 5m;
|
|
14
|
+
severity dynamic;
|
|
15
|
+
print-time yes;
|
|
16
|
+
};
|
|
17
|
+
channel security_file {
|
|
18
|
+
file "/var/log/named/security.log" versions 3 size 5m;
|
|
19
|
+
severity dynamic;
|
|
20
|
+
print-time yes;
|
|
21
|
+
};
|
|
22
|
+
channel config_file {
|
|
23
|
+
file "/var/log/named/config.log" versions 3 size 5m;
|
|
24
|
+
severity dynamic;
|
|
25
|
+
print-time yes;
|
|
26
|
+
};
|
|
27
|
+
channel resolver_file {
|
|
28
|
+
file "/var/log/named/resolver.log" versions 3 size 5m;
|
|
29
|
+
severity dynamic;
|
|
30
|
+
print-time yes;
|
|
31
|
+
};
|
|
32
|
+
channel xfer-in_file {
|
|
33
|
+
file "/var/log/named/xfer-in.log" versions 3 size 5m;
|
|
34
|
+
severity dynamic;
|
|
35
|
+
print-time yes;
|
|
36
|
+
};
|
|
37
|
+
channel xfer-out_file {
|
|
38
|
+
file "/var/log/named/xfer-out.log" versions 3 size 5m;
|
|
39
|
+
severity dynamic;
|
|
40
|
+
print-time yes;
|
|
41
|
+
};
|
|
42
|
+
channel notify_file {
|
|
43
|
+
file "/var/log/named/notify.log" versions 3 size 5m;
|
|
44
|
+
severity dynamic;
|
|
45
|
+
print-time yes;
|
|
46
|
+
};
|
|
47
|
+
channel client_file {
|
|
48
|
+
file "/var/log/named/client.log" versions 3 size 5m;
|
|
49
|
+
severity dynamic;
|
|
50
|
+
print-time yes;
|
|
51
|
+
};
|
|
52
|
+
channel unmatched_file {
|
|
53
|
+
file "/var/log/named/unmatched.log" versions 3 size 5m;
|
|
54
|
+
severity dynamic;
|
|
55
|
+
print-time yes;
|
|
56
|
+
};
|
|
57
|
+
channel queries_file {
|
|
58
|
+
file "/var/log/named/queries.log" versions 3 size 5m;
|
|
59
|
+
severity dynamic;
|
|
60
|
+
print-time yes;
|
|
61
|
+
};
|
|
62
|
+
channel network_file {
|
|
63
|
+
file "/var/log/named/network.log" versions 3 size 5m;
|
|
64
|
+
severity dynamic;
|
|
65
|
+
print-time yes;
|
|
66
|
+
};
|
|
67
|
+
channel update_file {
|
|
68
|
+
file "/var/log/named/update.log" versions 3 size 5m;
|
|
69
|
+
severity dynamic;
|
|
70
|
+
print-time yes;
|
|
71
|
+
};
|
|
72
|
+
channel dispatch_file {
|
|
73
|
+
file "/var/log/named/dispatch.log" versions 3 size 5m;
|
|
74
|
+
severity dynamic;
|
|
75
|
+
print-time yes;
|
|
76
|
+
};
|
|
77
|
+
channel dnssec_file {
|
|
78
|
+
file "/var/log/named/dnssec.log" versions 3 size 5m;
|
|
79
|
+
severity dynamic;
|
|
80
|
+
print-time yes;
|
|
81
|
+
};
|
|
82
|
+
channel lame-servers_file {
|
|
83
|
+
file "/var/log/named/lame-servers.log" versions 3 size 5m;
|
|
84
|
+
severity dynamic;
|
|
85
|
+
print-time yes;
|
|
86
|
+
};
|
|
87
|
+
|
|
88
|
+
category default { default_file; };
|
|
89
|
+
category general { general_file; };
|
|
90
|
+
category database { database_file; };
|
|
91
|
+
category security { security_file; };
|
|
92
|
+
category config { config_file; };
|
|
93
|
+
category resolver { resolver_file; };
|
|
94
|
+
category xfer-in { xfer-in_file; };
|
|
95
|
+
category xfer-out { xfer-out_file; };
|
|
96
|
+
category notify { notify_file; };
|
|
97
|
+
category client { client_file; };
|
|
98
|
+
category unmatched { unmatched_file; };
|
|
99
|
+
category queries { queries_file; };
|
|
100
|
+
category network { network_file; };
|
|
101
|
+
category update { update_file; };
|
|
102
|
+
category dispatch { dispatch_file; };
|
|
103
|
+
category dnssec { dnssec_file; };
|
|
104
|
+
category lame-servers { lame-servers_file; };
|
|
105
|
+
};
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
options {
|
|
2
|
+
directory "/var/cache/bind";
|
|
3
|
+
|
|
4
|
+
// If there is a firewall between you and nameservers you want
|
|
5
|
+
// to talk to, you may need to fix the firewall to allow multiple
|
|
6
|
+
// ports to talk. See http://www.kb.cert.org/vuls/id/800113
|
|
7
|
+
|
|
8
|
+
// If your ISP provided one or more IP addresses for stable
|
|
9
|
+
// nameservers, you probably want to use them as forwarders.
|
|
10
|
+
// Uncomment the following block, and insert the addresses replacing
|
|
11
|
+
// the all-0's placeholder.
|
|
12
|
+
|
|
13
|
+
//============================================================
|
|
14
|
+
// If BIND logs error messages about the root key being expired,
|
|
15
|
+
// you will need to update your keys. See https://www.isc.org/bind-keys
|
|
16
|
+
//============================================================
|
|
17
|
+
dnssec-validation auto;
|
|
18
|
+
|
|
19
|
+
listen-on-v6 { any; };
|
|
20
|
+
|
|
21
|
+
// hide version number from clients for security reasons.
|
|
22
|
+
version "not currently available";
|
|
23
|
+
|
|
24
|
+
// allow recursion for trusted clients only.
|
|
25
|
+
recursion yes;
|
|
26
|
+
allow-query { localhost; <%= public_ip4 %>; };
|
|
27
|
+
|
|
28
|
+
// enable the query log
|
|
29
|
+
querylog yes;
|
|
30
|
+
|
|
31
|
+
// disallow zone transfer
|
|
32
|
+
allow-transfer { none; };
|
|
33
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
*@<%= domain %>:<%= domain %>:/etc/opendkim/keys/<%= domain %>/private.pem
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# -------------------------------------------------------------
|
|
2
|
+
# ! DO NOT EDIT !
|
|
3
|
+
# Config file automatically generated by <infra-setup>
|
|
4
|
+
# -------------------------------------------------------------
|
|
5
|
+
export OVH_AK=<%= appKey %>
|
|
6
|
+
export OVH_CK=<%= consumerKey %>
|
|
7
|
+
export OVH_AS=<%= appSecret %>
|