nibula 1.0.2 → 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +51 -0
- package/README.md +20 -6
- package/bin/create.js +107 -5
- package/docs/Backend.md +188 -43
- package/docs/Deploy.md +139 -50
- package/nginx.conf +37 -9
- package/package.json +1 -1
- package/src/backend/_core/index.js +267 -0
- package/src/backend/_core/init.js +52 -0
- package/src/backend/_core/modules/RateLimiter.js +58 -0
- package/src/backend/_core/modules/Response.js +59 -0
- package/src/backend/api/protected/example-protected.js +23 -0
- package/src/backend/api/public/example-public.js +24 -0
- package/src/backend/backend-node.service.example +30 -0
- package/src/backend/database/Database.js +46 -0
- package/src/backend/example.config.js +37 -0
- package/src/backend/package.json +18 -0
- package/src/frontend/.htaccess +36 -1
- package/src/frontend/assets/brand/favicon.svg +54 -54
- package/src/frontend/assets/brand/logo.svg +54 -54
- package/src/frontend/data/site.json +54 -54
- package/src/frontend/web.config +43 -15
|
@@ -1,54 +1,54 @@
|
|
|
1
|
-
{
|
|
2
|
-
"site_name": "Site name",
|
|
3
|
-
"title": "Site title",
|
|
4
|
-
"description": "Site description",
|
|
5
|
-
"keywords": "keyword1, keyword2, keyword3",
|
|
6
|
-
"domain": "yoursite.com",
|
|
7
|
-
"url": "https://yoursite.com",
|
|
8
|
-
"lang": "en",
|
|
9
|
-
"author": "Name and surname",
|
|
10
|
-
"data_bs_theme": "dark",
|
|
11
|
-
"theme_color": {
|
|
12
|
-
"light": "#ffffff",
|
|
13
|
-
"dark": "#0d1117"
|
|
14
|
-
},
|
|
15
|
-
"favicon": "/assets/brand/favicon.svg",
|
|
16
|
-
"logo": "/assets/brand/logo.svg",
|
|
17
|
-
"legal": {
|
|
18
|
-
"privacy": "",
|
|
19
|
-
"cookie": "",
|
|
20
|
-
"cookieControls": "",
|
|
21
|
-
"terms": "",
|
|
22
|
-
"copyright": {
|
|
23
|
-
"year": "2026",
|
|
24
|
-
"text": "All rights reserved."
|
|
25
|
-
}
|
|
26
|
-
},
|
|
27
|
-
"pages": {
|
|
28
|
-
"404": {
|
|
29
|
-
"seo": {
|
|
30
|
-
"title": "404 - Not found",
|
|
31
|
-
"keywords": "",
|
|
32
|
-
"noindex": true,
|
|
33
|
-
"canonical": ""
|
|
34
|
-
},
|
|
35
|
-
"cdn": {
|
|
36
|
-
"css": [],
|
|
37
|
-
"js": []
|
|
38
|
-
}
|
|
39
|
-
},
|
|
40
|
-
"homepage": {
|
|
41
|
-
"seo": {
|
|
42
|
-
"title": "Homepage",
|
|
43
|
-
"description": "Description",
|
|
44
|
-
"keywords": "",
|
|
45
|
-
"noindex": false,
|
|
46
|
-
"canonical": ""
|
|
47
|
-
},
|
|
48
|
-
"cdn": {
|
|
49
|
-
"css": [],
|
|
50
|
-
"js": []
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"site_name": "Site name",
|
|
3
|
+
"title": "Site title",
|
|
4
|
+
"description": "Site description",
|
|
5
|
+
"keywords": "keyword1, keyword2, keyword3",
|
|
6
|
+
"domain": "yoursite.com",
|
|
7
|
+
"url": "https://yoursite.com",
|
|
8
|
+
"lang": "en",
|
|
9
|
+
"author": "Name and surname",
|
|
10
|
+
"data_bs_theme": "dark",
|
|
11
|
+
"theme_color": {
|
|
12
|
+
"light": "#ffffff",
|
|
13
|
+
"dark": "#0d1117"
|
|
14
|
+
},
|
|
15
|
+
"favicon": "/assets/brand/favicon.svg",
|
|
16
|
+
"logo": "/assets/brand/logo.svg",
|
|
17
|
+
"legal": {
|
|
18
|
+
"privacy": "",
|
|
19
|
+
"cookie": "",
|
|
20
|
+
"cookieControls": "",
|
|
21
|
+
"terms": "",
|
|
22
|
+
"copyright": {
|
|
23
|
+
"year": "2026",
|
|
24
|
+
"text": "All rights reserved."
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
"pages": {
|
|
28
|
+
"404": {
|
|
29
|
+
"seo": {
|
|
30
|
+
"title": "404 - Not found",
|
|
31
|
+
"keywords": "",
|
|
32
|
+
"noindex": true,
|
|
33
|
+
"canonical": ""
|
|
34
|
+
},
|
|
35
|
+
"cdn": {
|
|
36
|
+
"css": [],
|
|
37
|
+
"js": []
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
"homepage": {
|
|
41
|
+
"seo": {
|
|
42
|
+
"title": "Homepage",
|
|
43
|
+
"description": "Description",
|
|
44
|
+
"keywords": "",
|
|
45
|
+
"noindex": false,
|
|
46
|
+
"canonical": ""
|
|
47
|
+
},
|
|
48
|
+
"cdn": {
|
|
49
|
+
"css": [],
|
|
50
|
+
"js": []
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
package/src/frontend/web.config
CHANGED
|
@@ -1,27 +1,55 @@
|
|
|
1
1
|
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
<directoryBrowse enabled="false" />
|
|
2
|
+
<!--
|
|
3
|
+
IIS config for a Nibula site — covers BOTH backends.
|
|
5
4
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
5
|
+
IIS (like Apache, unlike nginx) cannot health-check an upstream, so it cannot
|
|
6
|
+
auto-fall back from Node to PHP. URL Rewrite processes rules top-down and the
|
|
7
|
+
first match with stopProcessing="true" wins:
|
|
8
|
+
|
|
9
|
+
- "ApiToNode" wins if present -> /api is reverse-proxied to the Node backend
|
|
10
|
+
(requires the Application Request Routing + URL Rewrite modules, with proxy
|
|
11
|
+
enabled: ARR > Server Proxy Settings > Enable proxy).
|
|
12
|
+
- To use the PHP backend instead, remove or comment the "ApiToNode" rule;
|
|
13
|
+
"ApiToPhp" then rewrites /api to the PHP front controller.
|
|
12
14
|
|
|
15
|
+
On Windows shared hosting without ARR, keep only "ApiToPhp".
|
|
16
|
+
-->
|
|
17
|
+
<configuration>
|
|
18
|
+
<system.webServer>
|
|
13
19
|
<rewrite>
|
|
14
20
|
<rules>
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
21
|
+
|
|
22
|
+
<!-- Block sensitive files -->
|
|
23
|
+
<rule name="BlockSensitive" stopProcessing="true">
|
|
24
|
+
<match url="^(web\.config|\..*)$" ignoreCase="true" />
|
|
25
|
+
<action type="CustomResponse" statusCode="404" />
|
|
18
26
|
</rule>
|
|
19
27
|
|
|
20
|
-
|
|
21
|
-
|
|
28
|
+
<!-- Node backend (requires ARR). Remove this rule to use PHP. -->
|
|
29
|
+
<rule name="ApiToNode" stopProcessing="true">
|
|
30
|
+
<match url="^api/(.*)" ignoreCase="true" />
|
|
31
|
+
<action type="Rewrite" url="http://127.0.0.1:3000/api/{R:1}" appendQueryString="true" />
|
|
32
|
+
<serverVariables>
|
|
33
|
+
<set name="HTTP_X_FORWARDED_PROTO" value="https" />
|
|
34
|
+
</serverVariables>
|
|
35
|
+
</rule>
|
|
36
|
+
|
|
37
|
+
<!-- PHP backend fallback: rewrite /api to the PHP front controller. -->
|
|
38
|
+
<rule name="ApiToPhp" stopProcessing="true">
|
|
39
|
+
<match url="^api/(.*)" ignoreCase="true" />
|
|
22
40
|
<action type="Rewrite" url="backend/_core/index.php" appendQueryString="true" />
|
|
23
41
|
</rule>
|
|
42
|
+
|
|
24
43
|
</rules>
|
|
25
44
|
</rewrite>
|
|
45
|
+
|
|
46
|
+
<directoryBrowse enabled="false" />
|
|
47
|
+
|
|
48
|
+
<httpErrors errorMode="Custom" existingResponse="Replace">
|
|
49
|
+
<remove statusCode="404" />
|
|
50
|
+
<remove statusCode="403" />
|
|
51
|
+
<error statusCode="404" path="/404.html" responseMode="ExecuteURL" />
|
|
52
|
+
<error statusCode="403" path="/404.html" responseMode="ExecuteURL" />
|
|
53
|
+
</httpErrors>
|
|
26
54
|
</system.webServer>
|
|
27
|
-
</configuration>
|
|
55
|
+
</configuration>
|