@cicore/cli 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/bin/ci.js +13 -0
- package/dist/commands/addon/api-actions.d.ts +45 -0
- package/dist/commands/addon/api-actions.d.ts.map +1 -0
- package/dist/commands/addon/api-actions.js +281 -0
- package/dist/commands/addon/api-actions.js.map +1 -0
- package/dist/commands/addon/build.d.ts +11 -0
- package/dist/commands/addon/build.d.ts.map +1 -0
- package/dist/commands/addon/build.js +182 -0
- package/dist/commands/addon/build.js.map +1 -0
- package/dist/commands/addon/create.d.ts +11 -0
- package/dist/commands/addon/create.d.ts.map +1 -0
- package/dist/commands/addon/create.js +1186 -0
- package/dist/commands/addon/create.js.map +1 -0
- package/dist/commands/addon/delete.d.ts +13 -0
- package/dist/commands/addon/delete.d.ts.map +1 -0
- package/dist/commands/addon/delete.js +83 -0
- package/dist/commands/addon/delete.js.map +1 -0
- package/dist/commands/addon/deploy.d.ts +27 -0
- package/dist/commands/addon/deploy.d.ts.map +1 -0
- package/dist/commands/addon/deploy.js +459 -0
- package/dist/commands/addon/deploy.js.map +1 -0
- package/dist/commands/addon/dev-deploy.d.ts +31 -0
- package/dist/commands/addon/dev-deploy.d.ts.map +1 -0
- package/dist/commands/addon/dev-deploy.js +128 -0
- package/dist/commands/addon/dev-deploy.js.map +1 -0
- package/dist/commands/addon/dev.d.ts +36 -0
- package/dist/commands/addon/dev.d.ts.map +1 -0
- package/dist/commands/addon/dev.js +323 -0
- package/dist/commands/addon/dev.js.map +1 -0
- package/dist/commands/addon/extract-classes.d.ts +23 -0
- package/dist/commands/addon/extract-classes.d.ts.map +1 -0
- package/dist/commands/addon/extract-classes.js +281 -0
- package/dist/commands/addon/extract-classes.js.map +1 -0
- package/dist/commands/addon/generate-safelist.d.ts +24 -0
- package/dist/commands/addon/generate-safelist.d.ts.map +1 -0
- package/dist/commands/addon/generate-safelist.js +276 -0
- package/dist/commands/addon/generate-safelist.js.map +1 -0
- package/dist/commands/addon/index.d.ts +19 -0
- package/dist/commands/addon/index.d.ts.map +1 -0
- package/dist/commands/addon/index.js +296 -0
- package/dist/commands/addon/index.js.map +1 -0
- package/dist/commands/addon/init-repo.d.ts +25 -0
- package/dist/commands/addon/init-repo.d.ts.map +1 -0
- package/dist/commands/addon/init-repo.js +171 -0
- package/dist/commands/addon/init-repo.js.map +1 -0
- package/dist/commands/addon/install.d.ts +23 -0
- package/dist/commands/addon/install.d.ts.map +1 -0
- package/dist/commands/addon/install.js +84 -0
- package/dist/commands/addon/install.js.map +1 -0
- package/dist/commands/addon/list.d.ts +10 -0
- package/dist/commands/addon/list.d.ts.map +1 -0
- package/dist/commands/addon/list.js +102 -0
- package/dist/commands/addon/list.js.map +1 -0
- package/dist/commands/addon/manifest-refresh.d.ts +17 -0
- package/dist/commands/addon/manifest-refresh.d.ts.map +1 -0
- package/dist/commands/addon/manifest-refresh.js +48 -0
- package/dist/commands/addon/manifest-refresh.js.map +1 -0
- package/dist/commands/addon/migrate.d.ts +40 -0
- package/dist/commands/addon/migrate.d.ts.map +1 -0
- package/dist/commands/addon/migrate.js +236 -0
- package/dist/commands/addon/migrate.js.map +1 -0
- package/dist/commands/addon/publish.d.ts +33 -0
- package/dist/commands/addon/publish.d.ts.map +1 -0
- package/dist/commands/addon/publish.js +236 -0
- package/dist/commands/addon/publish.js.map +1 -0
- package/dist/commands/addon/scaffold-quality.d.ts +21 -0
- package/dist/commands/addon/scaffold-quality.d.ts.map +1 -0
- package/dist/commands/addon/scaffold-quality.js +90 -0
- package/dist/commands/addon/scaffold-quality.js.map +1 -0
- package/dist/commands/addon/sign.d.ts +9 -0
- package/dist/commands/addon/sign.d.ts.map +1 -0
- package/dist/commands/addon/sign.js +83 -0
- package/dist/commands/addon/sign.js.map +1 -0
- package/dist/commands/addon/toggle.d.ts +6 -0
- package/dist/commands/addon/toggle.d.ts.map +1 -0
- package/dist/commands/addon/toggle.js +46 -0
- package/dist/commands/addon/toggle.js.map +1 -0
- package/dist/commands/agent/index.d.ts +34 -0
- package/dist/commands/agent/index.d.ts.map +1 -0
- package/dist/commands/agent/index.js +564 -0
- package/dist/commands/agent/index.js.map +1 -0
- package/dist/commands/brand/index.d.ts +54 -0
- package/dist/commands/brand/index.d.ts.map +1 -0
- package/dist/commands/brand/index.js +367 -0
- package/dist/commands/brand/index.js.map +1 -0
- package/dist/commands/build/index.d.ts +53 -0
- package/dist/commands/build/index.d.ts.map +1 -0
- package/dist/commands/build/index.js +726 -0
- package/dist/commands/build/index.js.map +1 -0
- package/dist/commands/cache/flush-local.d.ts +31 -0
- package/dist/commands/cache/flush-local.d.ts.map +1 -0
- package/dist/commands/cache/flush-local.js +161 -0
- package/dist/commands/cache/flush-local.js.map +1 -0
- package/dist/commands/cache/index.d.ts +14 -0
- package/dist/commands/cache/index.d.ts.map +1 -0
- package/dist/commands/cache/index.js +453 -0
- package/dist/commands/cache/index.js.map +1 -0
- package/dist/commands/check/index.d.ts +8 -0
- package/dist/commands/check/index.d.ts.map +1 -0
- package/dist/commands/check/index.js +1316 -0
- package/dist/commands/check/index.js.map +1 -0
- package/dist/commands/cloudflare/index.d.ts +8 -0
- package/dist/commands/cloudflare/index.d.ts.map +1 -0
- package/dist/commands/cloudflare/index.js +453 -0
- package/dist/commands/cloudflare/index.js.map +1 -0
- package/dist/commands/core/create.d.ts +12 -0
- package/dist/commands/core/create.d.ts.map +1 -0
- package/dist/commands/core/create.js +206 -0
- package/dist/commands/core/create.js.map +1 -0
- package/dist/commands/core/delete.d.ts +11 -0
- package/dist/commands/core/delete.d.ts.map +1 -0
- package/dist/commands/core/delete.js +64 -0
- package/dist/commands/core/delete.js.map +1 -0
- package/dist/commands/core/env.d.ts +12 -0
- package/dist/commands/core/env.d.ts.map +1 -0
- package/dist/commands/core/env.js +95 -0
- package/dist/commands/core/env.js.map +1 -0
- package/dist/commands/core/health.d.ts +6 -0
- package/dist/commands/core/health.d.ts.map +1 -0
- package/dist/commands/core/health.js +215 -0
- package/dist/commands/core/health.js.map +1 -0
- package/dist/commands/core/index.d.ts +15 -0
- package/dist/commands/core/index.d.ts.map +1 -0
- package/dist/commands/core/index.js +86 -0
- package/dist/commands/core/index.js.map +1 -0
- package/dist/commands/core/list.d.ts +11 -0
- package/dist/commands/core/list.d.ts.map +1 -0
- package/dist/commands/core/list.js +58 -0
- package/dist/commands/core/list.js.map +1 -0
- package/dist/commands/core/rebuild.d.ts +13 -0
- package/dist/commands/core/rebuild.d.ts.map +1 -0
- package/dist/commands/core/rebuild.js +119 -0
- package/dist/commands/core/rebuild.js.map +1 -0
- package/dist/commands/db/index.d.ts +23 -0
- package/dist/commands/db/index.d.ts.map +1 -0
- package/dist/commands/db/index.js +355 -0
- package/dist/commands/db/index.js.map +1 -0
- package/dist/commands/db/promote-silo.d.ts +320 -0
- package/dist/commands/db/promote-silo.d.ts.map +1 -0
- package/dist/commands/db/promote-silo.js +930 -0
- package/dist/commands/db/promote-silo.js.map +1 -0
- package/dist/commands/db/relocate.d.ts +41 -0
- package/dist/commands/db/relocate.d.ts.map +1 -0
- package/dist/commands/db/relocate.js +482 -0
- package/dist/commands/db/relocate.js.map +1 -0
- package/dist/commands/db/rollback-silo.d.ts +44 -0
- package/dist/commands/db/rollback-silo.d.ts.map +1 -0
- package/dist/commands/db/rollback-silo.js +402 -0
- package/dist/commands/db/rollback-silo.js.map +1 -0
- package/dist/commands/deploy/index.d.ts +26 -0
- package/dist/commands/deploy/index.d.ts.map +1 -0
- package/dist/commands/deploy/index.js +107 -0
- package/dist/commands/deploy/index.js.map +1 -0
- package/dist/commands/devops/index.d.ts +6 -0
- package/dist/commands/devops/index.d.ts.map +1 -0
- package/dist/commands/devops/index.js +220 -0
- package/dist/commands/devops/index.js.map +1 -0
- package/dist/commands/domain/index.d.ts +8 -0
- package/dist/commands/domain/index.d.ts.map +1 -0
- package/dist/commands/domain/index.js +386 -0
- package/dist/commands/domain/index.js.map +1 -0
- package/dist/commands/image/index.d.ts +8 -0
- package/dist/commands/image/index.d.ts.map +1 -0
- package/dist/commands/image/index.js +308 -0
- package/dist/commands/image/index.js.map +1 -0
- package/dist/commands/install/factory-reset.d.ts +21 -0
- package/dist/commands/install/factory-reset.d.ts.map +1 -0
- package/dist/commands/install/factory-reset.js +83 -0
- package/dist/commands/install/factory-reset.js.map +1 -0
- package/dist/commands/install/index.d.ts +17 -0
- package/dist/commands/install/index.d.ts.map +1 -0
- package/dist/commands/install/index.js +44 -0
- package/dist/commands/install/index.js.map +1 -0
- package/dist/commands/install/install.d.ts +35 -0
- package/dist/commands/install/install.d.ts.map +1 -0
- package/dist/commands/install/install.js +171 -0
- package/dist/commands/install/install.js.map +1 -0
- package/dist/commands/login/index.d.ts +15 -0
- package/dist/commands/login/index.d.ts.map +1 -0
- package/dist/commands/login/index.js +58 -0
- package/dist/commands/login/index.js.map +1 -0
- package/dist/commands/nginx/index.d.ts +11 -0
- package/dist/commands/nginx/index.d.ts.map +1 -0
- package/dist/commands/nginx/index.js +580 -0
- package/dist/commands/nginx/index.js.map +1 -0
- package/dist/commands/server/bootstrap.d.ts +25 -0
- package/dist/commands/server/bootstrap.d.ts.map +1 -0
- package/dist/commands/server/bootstrap.js +260 -0
- package/dist/commands/server/bootstrap.js.map +1 -0
- package/dist/commands/server/index.d.ts +8 -0
- package/dist/commands/server/index.d.ts.map +1 -0
- package/dist/commands/server/index.js +2524 -0
- package/dist/commands/server/index.js.map +1 -0
- package/dist/commands/setup/index.d.ts +34 -0
- package/dist/commands/setup/index.d.ts.map +1 -0
- package/dist/commands/setup/index.js +423 -0
- package/dist/commands/setup/index.js.map +1 -0
- package/dist/commands/ssl/index.d.ts +8 -0
- package/dist/commands/ssl/index.d.ts.map +1 -0
- package/dist/commands/ssl/index.js +275 -0
- package/dist/commands/ssl/index.js.map +1 -0
- package/dist/commands/superadmin/index.d.ts +16 -0
- package/dist/commands/superadmin/index.d.ts.map +1 -0
- package/dist/commands/superadmin/index.js +81 -0
- package/dist/commands/superadmin/index.js.map +1 -0
- package/dist/commands/tenant/index.d.ts +6 -0
- package/dist/commands/tenant/index.d.ts.map +1 -0
- package/dist/commands/tenant/index.js +192 -0
- package/dist/commands/tenant/index.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +107 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/addon-sign.d.ts +23 -0
- package/dist/lib/addon-sign.d.ts.map +1 -0
- package/dist/lib/addon-sign.js +39 -0
- package/dist/lib/addon-sign.js.map +1 -0
- package/dist/lib/addon-sign.test.d.ts +2 -0
- package/dist/lib/addon-sign.test.d.ts.map +1 -0
- package/dist/lib/addon-sign.test.js +27 -0
- package/dist/lib/addon-sign.test.js.map +1 -0
- package/dist/lib/cdn.d.ts +25 -0
- package/dist/lib/cdn.d.ts.map +1 -0
- package/dist/lib/cdn.js +131 -0
- package/dist/lib/cdn.js.map +1 -0
- package/dist/lib/cloudflare.d.ts +133 -0
- package/dist/lib/cloudflare.d.ts.map +1 -0
- package/dist/lib/cloudflare.js +435 -0
- package/dist/lib/cloudflare.js.map +1 -0
- package/dist/lib/config.d.ts +96 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +132 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/env.d.ts +8 -0
- package/dist/lib/env.d.ts.map +1 -0
- package/dist/lib/env.js +64 -0
- package/dist/lib/env.js.map +1 -0
- package/dist/lib/hosts.d.ts +194 -0
- package/dist/lib/hosts.d.ts.map +1 -0
- package/dist/lib/hosts.js +183 -0
- package/dist/lib/hosts.js.map +1 -0
- package/dist/lib/logger.d.ts +68 -0
- package/dist/lib/logger.d.ts.map +1 -0
- package/dist/lib/logger.js +130 -0
- package/dist/lib/logger.js.map +1 -0
- package/dist/lib/nginx-config.d.ts +78 -0
- package/dist/lib/nginx-config.d.ts.map +1 -0
- package/dist/lib/nginx-config.js +736 -0
- package/dist/lib/nginx-config.js.map +1 -0
- package/dist/lib/ops/addon-dev.d.ts +93 -0
- package/dist/lib/ops/addon-dev.d.ts.map +1 -0
- package/dist/lib/ops/addon-dev.js +237 -0
- package/dist/lib/ops/addon-dev.js.map +1 -0
- package/dist/lib/ops/addon-quality.d.ts +38 -0
- package/dist/lib/ops/addon-quality.d.ts.map +1 -0
- package/dist/lib/ops/addon-quality.js +338 -0
- package/dist/lib/ops/addon-quality.js.map +1 -0
- package/dist/lib/ops/addon-routes.d.ts +49 -0
- package/dist/lib/ops/addon-routes.d.ts.map +1 -0
- package/dist/lib/ops/addon-routes.js +189 -0
- package/dist/lib/ops/addon-routes.js.map +1 -0
- package/dist/lib/ops/addon.d.ts +120 -0
- package/dist/lib/ops/addon.d.ts.map +1 -0
- package/dist/lib/ops/addon.js +260 -0
- package/dist/lib/ops/addon.js.map +1 -0
- package/dist/lib/ops/cdn.d.ts +87 -0
- package/dist/lib/ops/cdn.d.ts.map +1 -0
- package/dist/lib/ops/cdn.js +170 -0
- package/dist/lib/ops/cdn.js.map +1 -0
- package/dist/lib/ops/cf.d.ts +36 -0
- package/dist/lib/ops/cf.d.ts.map +1 -0
- package/dist/lib/ops/cf.js +114 -0
- package/dist/lib/ops/cf.js.map +1 -0
- package/dist/lib/ops/compose.d.ts +95 -0
- package/dist/lib/ops/compose.d.ts.map +1 -0
- package/dist/lib/ops/compose.js +165 -0
- package/dist/lib/ops/compose.js.map +1 -0
- package/dist/lib/ops/core.d.ts +117 -0
- package/dist/lib/ops/core.d.ts.map +1 -0
- package/dist/lib/ops/core.js +322 -0
- package/dist/lib/ops/core.js.map +1 -0
- package/dist/lib/ops/db.d.ts +116 -0
- package/dist/lib/ops/db.d.ts.map +1 -0
- package/dist/lib/ops/db.js +351 -0
- package/dist/lib/ops/db.js.map +1 -0
- package/dist/lib/ops/dns.d.ts +111 -0
- package/dist/lib/ops/dns.d.ts.map +1 -0
- package/dist/lib/ops/dns.js +306 -0
- package/dist/lib/ops/dns.js.map +1 -0
- package/dist/lib/ops/image.d.ts +94 -0
- package/dist/lib/ops/image.d.ts.map +1 -0
- package/dist/lib/ops/image.js +159 -0
- package/dist/lib/ops/image.js.map +1 -0
- package/dist/lib/ops/nginx.d.ts +114 -0
- package/dist/lib/ops/nginx.d.ts.map +1 -0
- package/dist/lib/ops/nginx.js +388 -0
- package/dist/lib/ops/nginx.js.map +1 -0
- package/dist/lib/ops/redis.d.ts +7 -0
- package/dist/lib/ops/redis.d.ts.map +1 -0
- package/dist/lib/ops/redis.js +35 -0
- package/dist/lib/ops/redis.js.map +1 -0
- package/dist/lib/ops/ssh.d.ts +127 -0
- package/dist/lib/ops/ssh.d.ts.map +1 -0
- package/dist/lib/ops/ssh.js +269 -0
- package/dist/lib/ops/ssh.js.map +1 -0
- package/dist/lib/prompts.d.ts +46 -0
- package/dist/lib/prompts.d.ts.map +1 -0
- package/dist/lib/prompts.js +113 -0
- package/dist/lib/prompts.js.map +1 -0
- package/dist/lib/sast.d.ts +43 -0
- package/dist/lib/sast.d.ts.map +1 -0
- package/dist/lib/sast.js +79 -0
- package/dist/lib/sast.js.map +1 -0
- package/dist/lib/sast.test.d.ts +2 -0
- package/dist/lib/sast.test.d.ts.map +1 -0
- package/dist/lib/sast.test.js +33 -0
- package/dist/lib/sast.test.js.map +1 -0
- package/dist/lib/shell.d.ts +61 -0
- package/dist/lib/shell.d.ts.map +1 -0
- package/dist/lib/shell.js +183 -0
- package/dist/lib/shell.js.map +1 -0
- package/dist/lib/ssh-config.d.ts +37 -0
- package/dist/lib/ssh-config.d.ts.map +1 -0
- package/dist/lib/ssh-config.js +122 -0
- package/dist/lib/ssh-config.js.map +1 -0
- package/dist/lib/tenant-scope.d.ts +38 -0
- package/dist/lib/tenant-scope.d.ts.map +1 -0
- package/dist/lib/tenant-scope.js +129 -0
- package/dist/lib/tenant-scope.js.map +1 -0
- package/dist/lib/tenant-scope.test.d.ts +2 -0
- package/dist/lib/tenant-scope.test.d.ts.map +1 -0
- package/dist/lib/tenant-scope.test.js +223 -0
- package/dist/lib/tenant-scope.test.js.map +1 -0
- package/package.json +58 -0
- package/templates/bootstrap/.env.template +54 -0
- package/templates/bootstrap/docker-compose.yml +145 -0
- package/templates/vhost.conf.tmpl +446 -0
|
@@ -0,0 +1,736 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CiCore CLI - Nginx Configuration Manager
|
|
3
|
+
*
|
|
4
|
+
* Dynamically manages nginx config for multi-domain setup:
|
|
5
|
+
* - CORS origin mapping
|
|
6
|
+
* - Domain to Core mapping
|
|
7
|
+
* - SSL certificates
|
|
8
|
+
* - Server blocks
|
|
9
|
+
*/
|
|
10
|
+
// ============================================
|
|
11
|
+
// PARSER - Extract current domains from config
|
|
12
|
+
// ============================================
|
|
13
|
+
/**
|
|
14
|
+
* Parse existing nginx config and extract domain configurations
|
|
15
|
+
*/
|
|
16
|
+
export function parseNginxConfig(configContent) {
|
|
17
|
+
const domains = [];
|
|
18
|
+
// Extract from CORS map
|
|
19
|
+
const corsRegex = /"\~\^https\?:\/\/\(www\\\.\)\?([a-zA-Z0-9.-]+)\$"/g;
|
|
20
|
+
let match;
|
|
21
|
+
const foundDomains = new Set();
|
|
22
|
+
while ((match = corsRegex.exec(configContent)) !== null) {
|
|
23
|
+
foundDomains.add(match[1].replace(/\\\./g, '.'));
|
|
24
|
+
}
|
|
25
|
+
// Extract domain-core mappings
|
|
26
|
+
const domainCoreRegex = /^\s+([a-zA-Z0-9.-]+)\s+(core\d+);/gm;
|
|
27
|
+
const domainCoreMap = new Map();
|
|
28
|
+
while ((match = domainCoreRegex.exec(configContent)) !== null) {
|
|
29
|
+
const domain = match[1];
|
|
30
|
+
const core = match[2];
|
|
31
|
+
if (!domain.startsWith('www.') && !domain.startsWith('api.') && !domain.startsWith('~')) {
|
|
32
|
+
domainCoreMap.set(domain, core);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
// Extract SSL cert name
|
|
36
|
+
const sslRegex = /ssl_certificate\s+\/etc\/nginx\/ssl\/([a-zA-Z0-9-]+)\.crt/;
|
|
37
|
+
const sslMatch = configContent.match(sslRegex);
|
|
38
|
+
const defaultSslCert = sslMatch ? sslMatch[1] : 'default';
|
|
39
|
+
// Build domain configs
|
|
40
|
+
for (const [domain, core] of domainCoreMap) {
|
|
41
|
+
domains.push({
|
|
42
|
+
domain,
|
|
43
|
+
coreName: core,
|
|
44
|
+
sslCertName: defaultSslCert,
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
return domains;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* List domains currently configured in nginx
|
|
51
|
+
*/
|
|
52
|
+
export function listDomainsFromConfig(configContent) {
|
|
53
|
+
const domains = [];
|
|
54
|
+
// Extract domain-core mappings from map block
|
|
55
|
+
const mapBlockRegex = /map \$host \$target_core \{([\s\S]*?)\}/;
|
|
56
|
+
const mapMatch = configContent.match(mapBlockRegex);
|
|
57
|
+
if (mapMatch) {
|
|
58
|
+
const mapContent = mapMatch[1];
|
|
59
|
+
const domainRegex = /^\s+([a-zA-Z0-9.-]+)\s+(core\d+);/gm;
|
|
60
|
+
let match;
|
|
61
|
+
while ((match = domainRegex.exec(mapContent)) !== null) {
|
|
62
|
+
const domain = match[1];
|
|
63
|
+
const core = match[2];
|
|
64
|
+
// Only include root domains (not www., api., or regex patterns)
|
|
65
|
+
if (!domain.startsWith('www.') && !domain.startsWith('api.') && !domain.startsWith('~')) {
|
|
66
|
+
domains.push({ domain, core });
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return domains;
|
|
71
|
+
}
|
|
72
|
+
// ============================================
|
|
73
|
+
// GENERATOR - Create config sections
|
|
74
|
+
// ============================================
|
|
75
|
+
/**
|
|
76
|
+
* Generate CORS origin map entries for a domain
|
|
77
|
+
*/
|
|
78
|
+
export function generateCorsEntries(domain) {
|
|
79
|
+
const escaped = domain.replace(/\./g, '\\.');
|
|
80
|
+
return ` "~^https?://(www\\.)?${escaped}$" $http_origin;
|
|
81
|
+
"~^https?://api\\.${escaped}$" $http_origin;
|
|
82
|
+
"~^https?://.*\\.${escaped}$" $http_origin;`;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Generate domain-to-core map entries
|
|
86
|
+
*/
|
|
87
|
+
export function generateDomainCoreEntries(domain, coreName) {
|
|
88
|
+
return ` ${domain} ${coreName};
|
|
89
|
+
www.${domain} ${coreName};
|
|
90
|
+
api.${domain} ${coreName};`;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Generate tenant subdomain regex entry
|
|
94
|
+
*/
|
|
95
|
+
export function generateTenantRegex(domain, coreName) {
|
|
96
|
+
const escaped = domain.replace(/\./g, '\\.');
|
|
97
|
+
return ` ~^.+\\.${escaped}$ ${coreName};`;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Generate core path map entry
|
|
101
|
+
*/
|
|
102
|
+
export function generateCorePathEntry(coreName) {
|
|
103
|
+
return ` ${coreName} /var/www/cores/${coreName};`;
|
|
104
|
+
}
|
|
105
|
+
// ============================================
|
|
106
|
+
// MODIFIER - Add/Remove domains
|
|
107
|
+
// ============================================
|
|
108
|
+
/**
|
|
109
|
+
* Add a new domain to nginx config
|
|
110
|
+
*/
|
|
111
|
+
export function addDomainToConfig(configContent, domain, coreName, sslCertName) {
|
|
112
|
+
let newConfig = configContent;
|
|
113
|
+
// 1. Add CORS entries
|
|
114
|
+
const corsMapEnd = newConfig.indexOf(' "" "https://');
|
|
115
|
+
if (corsMapEnd > 0) {
|
|
116
|
+
const corsEntries = generateCorsEntries(domain);
|
|
117
|
+
newConfig = newConfig.slice(0, corsMapEnd) + corsEntries + '\n' + newConfig.slice(corsMapEnd);
|
|
118
|
+
}
|
|
119
|
+
// 2. Add domain-core mapping
|
|
120
|
+
const domainMapRegex = /(map \$host \$target_core \{[\s\S]*?)( default\s+core\d+;)/;
|
|
121
|
+
const domainMapMatch = newConfig.match(domainMapRegex);
|
|
122
|
+
if (domainMapMatch) {
|
|
123
|
+
const domainEntries = `\n ${domain} ${coreName};\n www.${domain} ${coreName};\n api.${domain} ${coreName};\n\n # Tenant subdomainleri\n ~^.+\\.${domain.replace(/\./g, '\\.')}$ ${coreName};\n\n`;
|
|
124
|
+
newConfig = newConfig.replace(domainMapRegex, `$1${domainEntries} default ${coreName};`);
|
|
125
|
+
}
|
|
126
|
+
// 3. Add core path if new core
|
|
127
|
+
const corePathRegex = new RegExp(`${coreName} /var/www/cores/${coreName};`);
|
|
128
|
+
if (!corePathRegex.test(newConfig)) {
|
|
129
|
+
const corePathMapEnd = newConfig.indexOf('}\n\n# ======', newConfig.indexOf('map $target_core $core_path'));
|
|
130
|
+
if (corePathMapEnd > 0) {
|
|
131
|
+
const corePathEntry = ` ${coreName} /var/www/cores/${coreName};\n`;
|
|
132
|
+
newConfig = newConfig.slice(0, corePathMapEnd) + corePathEntry + newConfig.slice(corePathMapEnd);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
// 4. Add to API server block server_name
|
|
136
|
+
const apiServerNameRegex = /(server_name\s+)(api\.[a-zA-Z0-9.-]+(?:\s+api\.[a-zA-Z0-9.-]+)*)(;)/;
|
|
137
|
+
const apiMatch = newConfig.match(apiServerNameRegex);
|
|
138
|
+
if (apiMatch && !apiMatch[2].includes(`api.${domain}`)) {
|
|
139
|
+
newConfig = newConfig.replace(apiServerNameRegex, `$1$2 api.${domain}$3`);
|
|
140
|
+
}
|
|
141
|
+
// 5. Add to tenant subdomain server block
|
|
142
|
+
const tenantServerRegex = /(server_name\s+)(~\^\(\?!api\\\.\)\(\?<subdomain>\[\^.\]\+\)\\\.[\w.-]+\\\.\w+\$(?:\s+~\^\(\?!api\\\.\)\(\?<subdomain>\[\^.\]\+\)\\\.[\w.-]+\\\.\w+\$)*)(;)/;
|
|
143
|
+
const tenantMatch = newConfig.match(tenantServerRegex);
|
|
144
|
+
if (tenantMatch) {
|
|
145
|
+
const escapedDomain = domain.replace(/\./g, '\\.');
|
|
146
|
+
if (!tenantMatch[2].includes(escapedDomain)) {
|
|
147
|
+
const newTenantRegex = `~^(?!api\\.)(?<subdomain>[^.]+)\\.${escapedDomain}$`;
|
|
148
|
+
newConfig = newConfig.replace(tenantServerRegex, `$1$2\n ${newTenantRegex}$3`);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
// 6. Add to main web server block
|
|
152
|
+
const mainServerRegex = /(# 9\. ANA WEB SERVER[\s\S]*?server_name\s+)([a-zA-Z0-9.-]+(?:\s+[a-zA-Z0-9.-]+)*)(;)/;
|
|
153
|
+
const mainMatch = newConfig.match(mainServerRegex);
|
|
154
|
+
if (mainMatch && !mainMatch[2].includes(domain)) {
|
|
155
|
+
newConfig = newConfig.replace(mainServerRegex, `$1$2 ${domain} www.${domain}$3`);
|
|
156
|
+
}
|
|
157
|
+
return newConfig;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Remove a domain from nginx config
|
|
161
|
+
*/
|
|
162
|
+
export function removeDomainFromConfig(configContent, domain) {
|
|
163
|
+
let newConfig = configContent;
|
|
164
|
+
const escaped = domain.replace(/\./g, '\\.');
|
|
165
|
+
// 1. Remove CORS entries
|
|
166
|
+
const corsRegex = new RegExp(`\\s*"~\\^https\\?://\\(www\\\\\\.\\)\\?${escaped}\\$" \\$http_origin;\\n`, 'g');
|
|
167
|
+
newConfig = newConfig.replace(corsRegex, '');
|
|
168
|
+
const corsApiRegex = new RegExp(`\\s*"~\\^https\\?://api\\\\.${escaped}\\$" \\$http_origin;\\n`, 'g');
|
|
169
|
+
newConfig = newConfig.replace(corsApiRegex, '');
|
|
170
|
+
const corsWildcardRegex = new RegExp(`\\s*"~\\^https\\?://\\.\\*\\\\.${escaped}\\$" \\$http_origin;\\n`, 'g');
|
|
171
|
+
newConfig = newConfig.replace(corsWildcardRegex, '');
|
|
172
|
+
// 2. Remove domain-core mapping
|
|
173
|
+
const domainMapRegex = new RegExp(`\\s*${domain}\\s+core\\d+;\\n`, 'g');
|
|
174
|
+
newConfig = newConfig.replace(domainMapRegex, '');
|
|
175
|
+
const wwwMapRegex = new RegExp(`\\s*www\\.${domain}\\s+core\\d+;\\n`, 'g');
|
|
176
|
+
newConfig = newConfig.replace(wwwMapRegex, '');
|
|
177
|
+
const apiMapRegex = new RegExp(`\\s*api\\.${domain}\\s+core\\d+;\\n`, 'g');
|
|
178
|
+
newConfig = newConfig.replace(apiMapRegex, '');
|
|
179
|
+
// 3. Remove tenant regex
|
|
180
|
+
const tenantRegex = new RegExp(`\\s*~\\^\\.\+\\\\.${escaped}\\$\\s+core\\d+;\\n`, 'g');
|
|
181
|
+
newConfig = newConfig.replace(tenantRegex, '');
|
|
182
|
+
// 4. Remove from API server_name
|
|
183
|
+
const apiServerRegex = new RegExp(`\\s*api\\.${domain}`, 'g');
|
|
184
|
+
newConfig = newConfig.replace(apiServerRegex, '');
|
|
185
|
+
// 5. Remove from tenant server_name
|
|
186
|
+
const tenantServerRegex = new RegExp(`\\s*~\\^\\(\\?!api\\\\.\\)\\(\\?<subdomain>\\[\\^.\\]\\+\\)\\\\.${escaped}\\$`, 'g');
|
|
187
|
+
newConfig = newConfig.replace(tenantServerRegex, '');
|
|
188
|
+
// 6. Remove from main server_name
|
|
189
|
+
const mainServerRegex = new RegExp(`\\s*${domain}`, 'g');
|
|
190
|
+
newConfig = newConfig.replace(mainServerRegex, '');
|
|
191
|
+
const wwwServerRegex = new RegExp(`\\s*www\\.${domain}`, 'g');
|
|
192
|
+
newConfig = newConfig.replace(wwwServerRegex, '');
|
|
193
|
+
return newConfig;
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Update SSL certificate references in config
|
|
197
|
+
*/
|
|
198
|
+
export function updateSSLCertInConfig(configContent, certName) {
|
|
199
|
+
let newConfig = configContent;
|
|
200
|
+
// Update all ssl_certificate directives
|
|
201
|
+
newConfig = newConfig.replace(/ssl_certificate\s+\/etc\/nginx\/ssl\/[a-zA-Z0-9-]+\.crt;/g, `ssl_certificate /etc/nginx/ssl/${certName}.crt;`);
|
|
202
|
+
newConfig = newConfig.replace(/ssl_certificate_key\s+\/etc\/nginx\/ssl\/[a-zA-Z0-9-]+\.key;/g, `ssl_certificate_key /etc/nginx/ssl/${certName}.key;`);
|
|
203
|
+
return newConfig;
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Update default CORS origin in config
|
|
207
|
+
*/
|
|
208
|
+
export function updateDefaultCorsOrigin(configContent, domain) {
|
|
209
|
+
let newConfig = configContent;
|
|
210
|
+
// Update default in CORS map
|
|
211
|
+
newConfig = newConfig.replace(/default "https:\/\/[a-zA-Z0-9.-]+";/, `default "https://${domain}";`);
|
|
212
|
+
// Update empty origin fallback
|
|
213
|
+
newConfig = newConfig.replace(/"" "https:\/\/[a-zA-Z0-9.-]+";/, `"" "https://${domain}";`);
|
|
214
|
+
return newConfig;
|
|
215
|
+
}
|
|
216
|
+
// ============================================
|
|
217
|
+
// VALIDATOR
|
|
218
|
+
// ============================================
|
|
219
|
+
/**
|
|
220
|
+
* Validate nginx config syntax (basic check)
|
|
221
|
+
*/
|
|
222
|
+
export function validateNginxConfig(configContent) {
|
|
223
|
+
const errors = [];
|
|
224
|
+
// Check for balanced braces
|
|
225
|
+
const openBraces = (configContent.match(/{/g) || []).length;
|
|
226
|
+
const closeBraces = (configContent.match(/}/g) || []).length;
|
|
227
|
+
if (openBraces !== closeBraces) {
|
|
228
|
+
errors.push(`Unbalanced braces: ${openBraces} open, ${closeBraces} close`);
|
|
229
|
+
}
|
|
230
|
+
// Check for required sections
|
|
231
|
+
if (!configContent.includes('map $http_origin $cors_origin')) {
|
|
232
|
+
errors.push('Missing CORS origin map');
|
|
233
|
+
}
|
|
234
|
+
if (!configContent.includes('map $host $target_core')) {
|
|
235
|
+
errors.push('Missing domain-core map');
|
|
236
|
+
}
|
|
237
|
+
if (!configContent.includes('upstream php_backend')) {
|
|
238
|
+
errors.push('Missing PHP upstream');
|
|
239
|
+
}
|
|
240
|
+
if (!configContent.includes('upstream nuxt_frontend')) {
|
|
241
|
+
errors.push('Missing Nuxt upstream');
|
|
242
|
+
}
|
|
243
|
+
return {
|
|
244
|
+
valid: errors.length === 0,
|
|
245
|
+
errors,
|
|
246
|
+
};
|
|
247
|
+
}
|
|
248
|
+
// ============================================
|
|
249
|
+
// FULL CONFIG GENERATOR
|
|
250
|
+
// ============================================
|
|
251
|
+
/**
|
|
252
|
+
* Generate a complete nginx config from domain list
|
|
253
|
+
*/
|
|
254
|
+
export function generateFullNginxConfig(domains) {
|
|
255
|
+
if (domains.length === 0) {
|
|
256
|
+
throw new Error('At least one domain is required');
|
|
257
|
+
}
|
|
258
|
+
const primaryDomain = domains[0].domain;
|
|
259
|
+
const primaryCert = domains[0].sslCertName;
|
|
260
|
+
// Generate CORS entries
|
|
261
|
+
const corsEntries = domains.map(d => generateCorsEntries(d.domain)).join('\n');
|
|
262
|
+
// Generate domain-core map entries
|
|
263
|
+
const domainCoreEntries = domains.map(d => {
|
|
264
|
+
return ` # ${d.domain} → ${d.coreName}
|
|
265
|
+
${d.domain} ${d.coreName};
|
|
266
|
+
www.${d.domain} ${d.coreName};
|
|
267
|
+
api.${d.domain} ${d.coreName};`;
|
|
268
|
+
}).join('\n\n');
|
|
269
|
+
// Generate tenant regex entries
|
|
270
|
+
const tenantRegexEntries = domains.map(d => {
|
|
271
|
+
const escaped = d.domain.replace(/\./g, '\\.');
|
|
272
|
+
return ` ~^.+\\.${escaped}$ ${d.coreName};`;
|
|
273
|
+
}).join('\n');
|
|
274
|
+
// Generate core paths
|
|
275
|
+
const uniqueCores = [...new Set(domains.map(d => d.coreName))];
|
|
276
|
+
const corePathEntries = uniqueCores.map(c => ` ${c} /var/www/cores/${c};`).join('\n');
|
|
277
|
+
// Generate server_name lists
|
|
278
|
+
const apiServerNames = domains.map(d => `api.${d.domain}`).join(' ');
|
|
279
|
+
const tenantServerNames = domains.map(d => {
|
|
280
|
+
const escaped = d.domain.replace(/\./g, '\\.');
|
|
281
|
+
return `~^(?!api\\.)(?<subdomain>[^.]+)\\.${escaped}$`;
|
|
282
|
+
}).join('\n ');
|
|
283
|
+
const mainServerNames = domains.flatMap(d => [d.domain, `www.${d.domain}`]).join(' ');
|
|
284
|
+
return `##
|
|
285
|
+
## VUCORE GLOBAL NGINX ROUTER
|
|
286
|
+
## Multi-Core + Multi-Tenant Yönetim Sistemi
|
|
287
|
+
## Generated by CiCore CLI
|
|
288
|
+
##
|
|
289
|
+
|
|
290
|
+
# ======================================================
|
|
291
|
+
# 0. CORS Origin Mapping (Dynamic CORS Support)
|
|
292
|
+
# ======================================================
|
|
293
|
+
map $http_origin $cors_origin {
|
|
294
|
+
default "https://${primaryDomain}";
|
|
295
|
+
${corsEntries}
|
|
296
|
+
"" "https://${primaryDomain}";
|
|
297
|
+
"null" "null";
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
# ======================================================
|
|
301
|
+
# 0.1. Addon Cache Control Map
|
|
302
|
+
# ======================================================
|
|
303
|
+
map $uri $addon_cache_control {
|
|
304
|
+
default "public, max-age=31536000, immutable";
|
|
305
|
+
"~*entry\\.js$" "no-cache, no-store, must-revalidate";
|
|
306
|
+
"~*addon\\.json$" "no-cache, no-store, must-revalidate";
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
# ======================================================
|
|
310
|
+
# 1. Cloudflare Real-IP Ayarları
|
|
311
|
+
# ======================================================
|
|
312
|
+
set_real_ip_from 173.245.48.0/20;
|
|
313
|
+
set_real_ip_from 103.21.244.0/22;
|
|
314
|
+
set_real_ip_from 103.22.200.0/22;
|
|
315
|
+
set_real_ip_from 103.31.4.0/22;
|
|
316
|
+
set_real_ip_from 141.101.64.0/18;
|
|
317
|
+
set_real_ip_from 108.162.192.0/18;
|
|
318
|
+
set_real_ip_from 190.93.240.0/20;
|
|
319
|
+
set_real_ip_from 188.114.96.0/20;
|
|
320
|
+
set_real_ip_from 197.234.240.0/22;
|
|
321
|
+
set_real_ip_from 198.41.128.0/17;
|
|
322
|
+
set_real_ip_from 162.158.0.0/15;
|
|
323
|
+
set_real_ip_from 104.16.0.0/13;
|
|
324
|
+
set_real_ip_from 104.24.0.0/14;
|
|
325
|
+
set_real_ip_from 172.64.0.0/13;
|
|
326
|
+
set_real_ip_from 131.0.72.0/22;
|
|
327
|
+
set_real_ip_from 2400:cb00::/32;
|
|
328
|
+
set_real_ip_from 2606:4700::/32;
|
|
329
|
+
set_real_ip_from 2803:f800::/32;
|
|
330
|
+
set_real_ip_from 2405:b500::/32;
|
|
331
|
+
set_real_ip_from 2405:8100::/32;
|
|
332
|
+
set_real_ip_from 2a06:98c0::/29;
|
|
333
|
+
set_real_ip_from 2c0f:f248::/32;
|
|
334
|
+
real_ip_header CF-Connecting-IP;
|
|
335
|
+
|
|
336
|
+
# ======================================================
|
|
337
|
+
# 1.1. WebSocket Connection Upgrade Map
|
|
338
|
+
# ======================================================
|
|
339
|
+
map $http_upgrade $connection_upgrade {
|
|
340
|
+
default upgrade;
|
|
341
|
+
'' close;
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
# ======================================================
|
|
345
|
+
# 2. PORT 80 → HTTPS YÖNLENDİRMESİ
|
|
346
|
+
# ======================================================
|
|
347
|
+
server {
|
|
348
|
+
listen 80;
|
|
349
|
+
server_name _;
|
|
350
|
+
|
|
351
|
+
location /health {
|
|
352
|
+
access_log off;
|
|
353
|
+
return 200 "healthy\\n";
|
|
354
|
+
add_header Content-Type text/plain;
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
location / {
|
|
358
|
+
return 301 https://$host$request_uri;
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
# ======================================================
|
|
363
|
+
# 3. DOMAIN → CORE MAP
|
|
364
|
+
# ======================================================
|
|
365
|
+
map $host $target_core {
|
|
366
|
+
${domainCoreEntries}
|
|
367
|
+
|
|
368
|
+
# Tenant subdomainleri
|
|
369
|
+
${tenantRegexEntries}
|
|
370
|
+
|
|
371
|
+
default ${domains[0].coreName};
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
# ======================================================
|
|
375
|
+
# 4. CORE → PATH MAP
|
|
376
|
+
# ======================================================
|
|
377
|
+
map $target_core $core_path {
|
|
378
|
+
${corePathEntries}
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
# ======================================================
|
|
382
|
+
# 5. Tenant Host Pass-through
|
|
383
|
+
# ======================================================
|
|
384
|
+
map $host $tenant_api_host {
|
|
385
|
+
default $host;
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
# ======================================================
|
|
389
|
+
# 6. UPSTREAM TANIMLARI
|
|
390
|
+
# ======================================================
|
|
391
|
+
upstream php_backend {
|
|
392
|
+
server cicore_php:9000;
|
|
393
|
+
keepalive 32;
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
upstream nuxt_frontend {
|
|
397
|
+
server cicore_nuxt:3000;
|
|
398
|
+
keepalive 64;
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
# ======================================================
|
|
402
|
+
# 7. API SUBDOMAIN SERVER
|
|
403
|
+
# ======================================================
|
|
404
|
+
server {
|
|
405
|
+
listen 443 ssl http2;
|
|
406
|
+
server_name ${apiServerNames};
|
|
407
|
+
|
|
408
|
+
ssl_certificate /etc/nginx/ssl/${primaryCert}.crt;
|
|
409
|
+
ssl_certificate_key /etc/nginx/ssl/${primaryCert}.key;
|
|
410
|
+
ssl_protocols TLSv1.2 TLSv1.3;
|
|
411
|
+
ssl_prefer_server_ciphers on;
|
|
412
|
+
ssl_session_cache shared:SSL:10m;
|
|
413
|
+
ssl_session_timeout 10m;
|
|
414
|
+
|
|
415
|
+
client_max_body_size 25m;
|
|
416
|
+
|
|
417
|
+
location / {
|
|
418
|
+
if ($request_method = 'OPTIONS') {
|
|
419
|
+
add_header 'Access-Control-Allow-Origin' $cors_origin always;
|
|
420
|
+
add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, PATCH, DELETE, OPTIONS' always;
|
|
421
|
+
add_header 'Access-Control-Allow-Headers' 'Authorization, Content-Type, X-Requested-With, X-CSRF-Token, X-Core-Path, X-Tenant-Host, Cache-Control, Accept' always;
|
|
422
|
+
add_header 'Access-Control-Allow-Credentials' 'true' always;
|
|
423
|
+
add_header 'Access-Control-Max-Age' '86400' always;
|
|
424
|
+
add_header 'Content-Type' 'text/plain; charset=utf-8' always;
|
|
425
|
+
add_header 'Content-Length' '0' always;
|
|
426
|
+
return 204;
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
add_header 'Access-Control-Allow-Origin' $cors_origin always;
|
|
430
|
+
add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, PATCH, DELETE, OPTIONS' always;
|
|
431
|
+
add_header 'Access-Control-Allow-Headers' 'Authorization, Content-Type, X-Requested-With, X-CSRF-Token, X-Core-Path, X-Tenant-Host, Accept' always;
|
|
432
|
+
add_header 'Access-Control-Allow-Credentials' 'true' always;
|
|
433
|
+
add_header 'Access-Control-Expose-Headers' 'X-CSRF-Token' always;
|
|
434
|
+
|
|
435
|
+
fastcgi_pass php_backend;
|
|
436
|
+
|
|
437
|
+
fastcgi_param SCRIPT_FILENAME /var/www/public/index.php;
|
|
438
|
+
fastcgi_param CORE_PATH $core_path;
|
|
439
|
+
|
|
440
|
+
include fastcgi_params;
|
|
441
|
+
|
|
442
|
+
fastcgi_param REQUEST_URI $request_uri;
|
|
443
|
+
fastcgi_param SCRIPT_NAME /index.php;
|
|
444
|
+
fastcgi_param HTTP_HOST $host;
|
|
445
|
+
fastcgi_param HTTP_TENANT_HOST $tenant_api_host;
|
|
446
|
+
fastcgi_param HTTPS on;
|
|
447
|
+
fastcgi_param HTTP_X_FORWARDED_PROTO https;
|
|
448
|
+
|
|
449
|
+
fastcgi_connect_timeout 300s;
|
|
450
|
+
fastcgi_send_timeout 300s;
|
|
451
|
+
fastcgi_read_timeout 300s;
|
|
452
|
+
fastcgi_buffer_size 128k;
|
|
453
|
+
fastcgi_buffers 4 256k;
|
|
454
|
+
fastcgi_busy_buffers_size 256k;
|
|
455
|
+
fastcgi_temp_file_write_size 256k;
|
|
456
|
+
}
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
# ======================================================
|
|
460
|
+
# 8. TENANT SUBDOMAIN SERVER
|
|
461
|
+
# ======================================================
|
|
462
|
+
server {
|
|
463
|
+
listen 443 ssl http2;
|
|
464
|
+
server_name ${tenantServerNames};
|
|
465
|
+
|
|
466
|
+
ssl_certificate /etc/nginx/ssl/${primaryCert}.crt;
|
|
467
|
+
ssl_certificate_key /etc/nginx/ssl/${primaryCert}.key;
|
|
468
|
+
ssl_protocols TLSv1.2 TLSv1.3;
|
|
469
|
+
ssl_prefer_server_ciphers on;
|
|
470
|
+
ssl_session_cache shared:SSL:10m;
|
|
471
|
+
ssl_session_timeout 10m;
|
|
472
|
+
|
|
473
|
+
client_max_body_size 25m;
|
|
474
|
+
client_body_timeout 60s;
|
|
475
|
+
client_header_timeout 60s;
|
|
476
|
+
|
|
477
|
+
access_log /var/log/nginx/tenant-access.log;
|
|
478
|
+
error_log /var/log/nginx/tenant-error.log warn;
|
|
479
|
+
|
|
480
|
+
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
|
|
481
|
+
add_header X-Content-Type-Options "nosniff" always;
|
|
482
|
+
add_header X-Frame-Options "SAMEORIGIN" always;
|
|
483
|
+
add_header X-XSS-Protection "1; mode=block" always;
|
|
484
|
+
|
|
485
|
+
gzip on;
|
|
486
|
+
gzip_vary on;
|
|
487
|
+
gzip_proxied any;
|
|
488
|
+
gzip_comp_level 6;
|
|
489
|
+
gzip_min_length 1000;
|
|
490
|
+
gzip_types text/plain text/css text/xml text/javascript application/json application/javascript application/xml+rss application/rss+xml font/truetype font/opentype application/vnd.ms-fontobject image/svg+xml;
|
|
491
|
+
|
|
492
|
+
server_tokens off;
|
|
493
|
+
|
|
494
|
+
location /health {
|
|
495
|
+
access_log off;
|
|
496
|
+
return 200 "healthy\\n";
|
|
497
|
+
add_header Content-Type text/plain;
|
|
498
|
+
}
|
|
499
|
+
|
|
500
|
+
location ^~ /shared/ {
|
|
501
|
+
alias /home/cores/$target_core/shared/;
|
|
502
|
+
autoindex off;
|
|
503
|
+
types {
|
|
504
|
+
application/javascript js mjs;
|
|
505
|
+
application/json json;
|
|
506
|
+
}
|
|
507
|
+
default_type application/javascript;
|
|
508
|
+
add_header 'Access-Control-Allow-Origin' $cors_origin always;
|
|
509
|
+
add_header 'Access-Control-Allow-Credentials' 'true' always;
|
|
510
|
+
add_header 'Cache-Control' 'public, max-age=3600, immutable' always;
|
|
511
|
+
try_files $uri =404;
|
|
512
|
+
}
|
|
513
|
+
|
|
514
|
+
location ^~ /vendor/ {
|
|
515
|
+
alias /home/cores/$target_core/shared/vendor/;
|
|
516
|
+
autoindex off;
|
|
517
|
+
types {
|
|
518
|
+
application/javascript js mjs;
|
|
519
|
+
}
|
|
520
|
+
default_type application/javascript;
|
|
521
|
+
add_header 'Access-Control-Allow-Origin' $cors_origin always;
|
|
522
|
+
add_header 'Access-Control-Allow-Credentials' 'true' always;
|
|
523
|
+
add_header 'Cache-Control' 'public, max-age=31536000, immutable' always;
|
|
524
|
+
try_files $uri =404;
|
|
525
|
+
}
|
|
526
|
+
|
|
527
|
+
location ^~ /cores/ {
|
|
528
|
+
alias /home/cores/;
|
|
529
|
+
autoindex off;
|
|
530
|
+
types {
|
|
531
|
+
application/javascript js mjs;
|
|
532
|
+
application/json json;
|
|
533
|
+
text/css css;
|
|
534
|
+
text/html html vue;
|
|
535
|
+
image/svg+xml svg;
|
|
536
|
+
}
|
|
537
|
+
default_type application/javascript;
|
|
538
|
+
add_header 'Access-Control-Allow-Origin' $cors_origin always;
|
|
539
|
+
add_header 'Access-Control-Allow-Credentials' 'true' always;
|
|
540
|
+
add_header 'Cache-Control' $addon_cache_control always;
|
|
541
|
+
add_header 'X-Content-Type-Options' 'nosniff' always;
|
|
542
|
+
open_file_cache off;
|
|
543
|
+
try_files $uri =404;
|
|
544
|
+
}
|
|
545
|
+
|
|
546
|
+
location / {
|
|
547
|
+
proxy_pass http://nuxt_frontend;
|
|
548
|
+
|
|
549
|
+
proxy_set_header Host $host;
|
|
550
|
+
proxy_set_header X-Real-IP $remote_addr;
|
|
551
|
+
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
|
552
|
+
proxy_set_header X-Forwarded-Proto https;
|
|
553
|
+
proxy_set_header X-Forwarded-Host $host;
|
|
554
|
+
proxy_set_header X-Core-Path $core_path;
|
|
555
|
+
proxy_set_header X-Tenant-Host $host;
|
|
556
|
+
proxy_set_header X-Tenant-Subdomain $subdomain;
|
|
557
|
+
proxy_http_version 1.1;
|
|
558
|
+
|
|
559
|
+
proxy_set_header Upgrade $http_upgrade;
|
|
560
|
+
proxy_set_header Connection $connection_upgrade;
|
|
561
|
+
|
|
562
|
+
proxy_connect_timeout 300s;
|
|
563
|
+
proxy_send_timeout 300s;
|
|
564
|
+
proxy_read_timeout 300s;
|
|
565
|
+
|
|
566
|
+
proxy_buffering off;
|
|
567
|
+
proxy_cache_bypass $http_upgrade;
|
|
568
|
+
}
|
|
569
|
+
|
|
570
|
+
location ~ /\\.(?!well-known) {
|
|
571
|
+
deny all;
|
|
572
|
+
access_log off;
|
|
573
|
+
log_not_found off;
|
|
574
|
+
}
|
|
575
|
+
}
|
|
576
|
+
|
|
577
|
+
# ======================================================
|
|
578
|
+
# 9. ANA WEB SERVER
|
|
579
|
+
# ======================================================
|
|
580
|
+
server {
|
|
581
|
+
listen 443 ssl http2;
|
|
582
|
+
server_name ${mainServerNames};
|
|
583
|
+
|
|
584
|
+
ssl_certificate /etc/nginx/ssl/${primaryCert}.crt;
|
|
585
|
+
ssl_certificate_key /etc/nginx/ssl/${primaryCert}.key;
|
|
586
|
+
ssl_protocols TLSv1.2 TLSv1.3;
|
|
587
|
+
ssl_prefer_server_ciphers on;
|
|
588
|
+
ssl_session_cache shared:SSL:10m;
|
|
589
|
+
ssl_session_timeout 10m;
|
|
590
|
+
|
|
591
|
+
client_max_body_size 25m;
|
|
592
|
+
client_body_timeout 60s;
|
|
593
|
+
client_header_timeout 60s;
|
|
594
|
+
|
|
595
|
+
access_log /var/log/nginx/access.log;
|
|
596
|
+
error_log /var/log/nginx/error.log warn;
|
|
597
|
+
|
|
598
|
+
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
|
|
599
|
+
add_header X-Content-Type-Options "nosniff" always;
|
|
600
|
+
add_header X-Frame-Options "SAMEORIGIN" always;
|
|
601
|
+
add_header X-XSS-Protection "1; mode=block" always;
|
|
602
|
+
|
|
603
|
+
gzip on;
|
|
604
|
+
gzip_vary on;
|
|
605
|
+
gzip_proxied any;
|
|
606
|
+
gzip_comp_level 6;
|
|
607
|
+
gzip_min_length 1000;
|
|
608
|
+
gzip_types text/plain text/css text/xml text/javascript application/json application/javascript application/xml+rss application/rss+xml font/truetype font/opentype application/vnd.ms-fontobject image/svg+xml;
|
|
609
|
+
|
|
610
|
+
server_tokens off;
|
|
611
|
+
|
|
612
|
+
location /health {
|
|
613
|
+
access_log off;
|
|
614
|
+
return 200 "healthy\\n";
|
|
615
|
+
add_header Content-Type text/plain;
|
|
616
|
+
}
|
|
617
|
+
|
|
618
|
+
location ^~ /shared/ {
|
|
619
|
+
alias /home/cores/$target_core/shared/;
|
|
620
|
+
autoindex off;
|
|
621
|
+
types {
|
|
622
|
+
application/javascript js mjs;
|
|
623
|
+
application/json json;
|
|
624
|
+
}
|
|
625
|
+
default_type application/javascript;
|
|
626
|
+
add_header 'Access-Control-Allow-Origin' $cors_origin always;
|
|
627
|
+
add_header 'Access-Control-Allow-Credentials' 'true' always;
|
|
628
|
+
add_header 'Cache-Control' 'public, max-age=3600, immutable' always;
|
|
629
|
+
try_files $uri =404;
|
|
630
|
+
}
|
|
631
|
+
|
|
632
|
+
location ^~ /vendor/ {
|
|
633
|
+
alias /home/cores/$target_core/shared/vendor/;
|
|
634
|
+
autoindex off;
|
|
635
|
+
types {
|
|
636
|
+
application/javascript js mjs;
|
|
637
|
+
}
|
|
638
|
+
default_type application/javascript;
|
|
639
|
+
add_header 'Access-Control-Allow-Origin' $cors_origin always;
|
|
640
|
+
add_header 'Access-Control-Allow-Credentials' 'true' always;
|
|
641
|
+
add_header 'Cache-Control' 'public, max-age=31536000, immutable' always;
|
|
642
|
+
try_files $uri =404;
|
|
643
|
+
}
|
|
644
|
+
|
|
645
|
+
location ^~ /cores/ {
|
|
646
|
+
alias /home/cores/;
|
|
647
|
+
autoindex off;
|
|
648
|
+
types {
|
|
649
|
+
application/javascript js mjs;
|
|
650
|
+
application/json json;
|
|
651
|
+
text/css css;
|
|
652
|
+
text/html html vue;
|
|
653
|
+
image/svg+xml svg;
|
|
654
|
+
}
|
|
655
|
+
default_type application/javascript;
|
|
656
|
+
add_header 'Access-Control-Allow-Origin' $cors_origin always;
|
|
657
|
+
add_header 'Access-Control-Allow-Credentials' 'true' always;
|
|
658
|
+
add_header 'Cache-Control' $addon_cache_control always;
|
|
659
|
+
add_header 'X-Content-Type-Options' 'nosniff' always;
|
|
660
|
+
open_file_cache off;
|
|
661
|
+
try_files $uri =404;
|
|
662
|
+
}
|
|
663
|
+
|
|
664
|
+
location ~ ^/(api|v1|v2|auth|system|system-settings|upload|addons|core_addons|core|analyzer|summary|metrics|jobs|worker|setup|tenant-manager) {
|
|
665
|
+
if ($request_method = 'OPTIONS') {
|
|
666
|
+
add_header 'Access-Control-Allow-Origin' $cors_origin always;
|
|
667
|
+
add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, PATCH, DELETE, OPTIONS' always;
|
|
668
|
+
add_header 'Access-Control-Allow-Headers' 'Authorization, Content-Type, X-Requested-With, X-CSRF-Token, X-Core-Path, X-Tenant-Host, Cache-Control, Accept' always;
|
|
669
|
+
add_header 'Access-Control-Allow-Credentials' 'true' always;
|
|
670
|
+
add_header 'Access-Control-Max-Age' '86400' always;
|
|
671
|
+
add_header 'Content-Type' 'text/plain; charset=utf-8' always;
|
|
672
|
+
add_header 'Content-Length' '0' always;
|
|
673
|
+
return 204;
|
|
674
|
+
}
|
|
675
|
+
|
|
676
|
+
add_header 'Access-Control-Allow-Origin' $cors_origin always;
|
|
677
|
+
add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, PATCH, DELETE, OPTIONS' always;
|
|
678
|
+
add_header 'Access-Control-Allow-Headers' 'Authorization, Content-Type, X-Requested-With, X-CSRF-Token, X-Core-Path, X-Tenant-Host, Accept' always;
|
|
679
|
+
add_header 'Access-Control-Allow-Credentials' 'true' always;
|
|
680
|
+
add_header 'Access-Control-Expose-Headers' 'X-CSRF-Token' always;
|
|
681
|
+
|
|
682
|
+
fastcgi_pass php_backend;
|
|
683
|
+
|
|
684
|
+
fastcgi_param SCRIPT_FILENAME /var/www/public/index.php;
|
|
685
|
+
fastcgi_param CORE_PATH $core_path;
|
|
686
|
+
|
|
687
|
+
include fastcgi_params;
|
|
688
|
+
|
|
689
|
+
fastcgi_param REQUEST_URI $request_uri;
|
|
690
|
+
fastcgi_param SCRIPT_NAME /index.php;
|
|
691
|
+
fastcgi_param HTTP_HOST $host;
|
|
692
|
+
fastcgi_param HTTP_TENANT_HOST $tenant_api_host;
|
|
693
|
+
fastcgi_param HTTPS on;
|
|
694
|
+
fastcgi_param HTTP_X_FORWARDED_PROTO https;
|
|
695
|
+
|
|
696
|
+
fastcgi_connect_timeout 300s;
|
|
697
|
+
fastcgi_send_timeout 300s;
|
|
698
|
+
fastcgi_read_timeout 300s;
|
|
699
|
+
fastcgi_buffer_size 128k;
|
|
700
|
+
fastcgi_buffers 4 256k;
|
|
701
|
+
fastcgi_busy_buffers_size 256k;
|
|
702
|
+
fastcgi_temp_file_write_size 256k;
|
|
703
|
+
}
|
|
704
|
+
|
|
705
|
+
location / {
|
|
706
|
+
proxy_pass http://nuxt_frontend;
|
|
707
|
+
|
|
708
|
+
proxy_set_header Host $host;
|
|
709
|
+
proxy_set_header X-Real-IP $remote_addr;
|
|
710
|
+
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
|
711
|
+
proxy_set_header X-Forwarded-Proto https;
|
|
712
|
+
proxy_set_header X-Forwarded-Host $host;
|
|
713
|
+
proxy_set_header X-Core-Path $core_path;
|
|
714
|
+
proxy_set_header X-Tenant-Host $tenant_api_host;
|
|
715
|
+
proxy_http_version 1.1;
|
|
716
|
+
|
|
717
|
+
proxy_set_header Upgrade $http_upgrade;
|
|
718
|
+
proxy_set_header Connection $connection_upgrade;
|
|
719
|
+
|
|
720
|
+
proxy_connect_timeout 300s;
|
|
721
|
+
proxy_send_timeout 300s;
|
|
722
|
+
proxy_read_timeout 300s;
|
|
723
|
+
|
|
724
|
+
proxy_buffering off;
|
|
725
|
+
proxy_cache_bypass $http_upgrade;
|
|
726
|
+
}
|
|
727
|
+
|
|
728
|
+
location ~ /\\.(?!well-known) {
|
|
729
|
+
deny all;
|
|
730
|
+
access_log off;
|
|
731
|
+
log_not_found off;
|
|
732
|
+
}
|
|
733
|
+
}
|
|
734
|
+
`;
|
|
735
|
+
}
|
|
736
|
+
//# sourceMappingURL=nginx-config.js.map
|