@bluedynamics/cdk8s-plone 0.1.41 → 0.1.42
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/.jsii +28 -20
- package/API.md +21 -9
- package/CLAUDE.md +1 -1
- package/README.md +4 -4
- package/documentation/sources/explanation/architecture.md +7 -6
- package/documentation/sources/explanation/features.md +9 -7
- package/documentation/sources/how-to/{deploy-classic-ui.md → deploy-blicca.md} +43 -39
- package/documentation/sources/how-to/deploy-production-volto.md +1 -1
- package/documentation/sources/how-to/index.md +1 -1
- package/documentation/sources/reference/api/index.md +1 -1
- package/documentation/sources/reference/configuration-options.md +16 -10
- package/documentation/sources/tutorials/01-quick-start.md +1 -1
- package/examples/{classic-ui → blicca}/README.md +24 -25
- package/examples/{classic-ui → blicca}/__snapshots__/main.test.ts.snap +3 -3
- package/examples/{classic-ui → blicca}/config/varnish.tpl.vcl +1 -1
- package/examples/{classic-ui → blicca}/main.test.ts +3 -3
- package/examples/{classic-ui → blicca}/main.ts +6 -6
- package/examples/{classic-ui → blicca}/package.json +2 -2
- package/lib/httpcache.js +1 -1
- package/lib/plone.d.ts +13 -5
- package/lib/plone.js +14 -6
- package/lib/vinylcache.js +1 -1
- package/package.json +1 -1
- /package/examples/{classic-ui → blicca}/.env.example +0 -0
- /package/examples/{classic-ui → blicca}/cdk8s.yaml +0 -0
- /package/examples/{classic-ui → blicca}/ingress.ts +0 -0
- /package/examples/{classic-ui → blicca}/jest.config.js +0 -0
- /package/examples/{classic-ui → blicca}/postgres.bitnami.ts +0 -0
- /package/examples/{classic-ui → blicca}/postgres.cloudnativepg.ts +0 -0
package/.jsii
CHANGED
|
@@ -108,7 +108,7 @@
|
|
|
108
108
|
},
|
|
109
109
|
"name": "@bluedynamics/cdk8s-plone",
|
|
110
110
|
"readme": {
|
|
111
|
-
"markdown": "# CDK8S Plone\n\n> TypeScript and Python library for deploying Plone CMS to Kubernetes using CDK8S\n\n[](https://www.npmjs.com/package/@bluedynamics/cdk8s-plone)\n[](https://pypi.org/project/cdk8s-plone/)\n[](LICENSE)\n\n## Overview\n\ncdk8s-plone provides CDK8S constructs for deploying [Plone CMS](https://plone.org/) on Kubernetes. Define your infrastructure using TypeScript or Python and generate Kubernetes manifests automatically.\n\n**Key Features:**\n- 🚀 Supports Volto (
|
|
111
|
+
"markdown": "# CDK8S Plone\n\n> TypeScript and Python library for deploying Plone CMS to Kubernetes using CDK8S\n\n[](https://www.npmjs.com/package/@bluedynamics/cdk8s-plone)\n[](https://pypi.org/project/cdk8s-plone/)\n[](LICENSE)\n\n## Overview\n\ncdk8s-plone provides CDK8S constructs for deploying [Plone CMS](https://plone.org/) on Kubernetes. Define your infrastructure using TypeScript or Python and generate Kubernetes manifests automatically.\n\n**Key Features:**\n- 🚀 Supports Volto (React frontend) and Blicca (formerly Classic UI)\n- 📦 High availability with configurable replicas\n- ⚡ Optional Varnish HTTP caching via kube-httpcache (`PloneHttpcache`) or cloud-vinyl VinylCache operator (`PloneVinylCache`)\n- 🔧 Fine-grained resource and probe configuration\n- 🌍 Multi-language support (TypeScript/JavaScript and Python)\n- ✅ Type-safe infrastructure as code\n\n## Quick Start\n\n### Installation\n\n**TypeScript/JavaScript:**\n```bash\nnpm install @bluedynamics/cdk8s-plone\n```\n\n**Python:**\n```bash\npip install cdk8s-plone\n```\n\n### Basic Example\n\n```typescript\nimport { App, Chart } from 'cdk8s';\nimport { Plone, PloneVariant } from '@bluedynamics/cdk8s-plone';\n\nconst app = new App();\nconst chart = new Chart(app, 'PloneDeployment');\n\nnew Plone(chart, 'my-plone', {\n variant: PloneVariant.VOLTO,\n backend: {\n image: 'plone/plone-backend:6.1.3',\n replicas: 3,\n },\n frontend: {\n image: 'plone/plone-frontend:16.0.0',\n replicas: 2,\n },\n});\n\napp.synth();\n```\n\nGenerate Kubernetes manifests:\n```bash\ncdk8s synth\nkubectl apply -f dist/\n```\n\n## Documentation\n\n**📚 Full documentation:** https://bluedynamics.github.io/cdk8s-plone/\n\n- [Quick Start Tutorial](https://bluedynamics.github.io/cdk8s-plone/tutorials/01-quick-start.html)\n- [Configuration Reference](https://bluedynamics.github.io/cdk8s-plone/reference/configuration-options.html)\n- [Architecture Overview](https://bluedynamics.github.io/cdk8s-plone/explanation/architecture.html)\n- [Complete API Documentation](./API.md)\n\n## Examples\n\nComplete working examples are available in the [`examples/`](examples/) directory:\n\n- **[Production Volto](examples/production-volto/)** - Production-ready Plone 6 deployment with the React single-page frontend:\n - Volto frontend (React) + REST API backend\n - PostgreSQL with RelStorage (CloudNativePG or Bitnami)\n - Varnish HTTP caching with kube-httpcache\n - Ingress support (Traefik/Kong) with TLS\n\n- **[Blicca](examples/blicca/)** - Plone deployment with server-side rendering (formerly Classic UI):\n - Blicca (backend renders the UI, no separate frontend)\n - PostgreSQL with RelStorage (CloudNativePG or Bitnami)\n - Varnish HTTP caching with kube-httpcache\n - Ingress support (Traefik/Kong) with TLS\n - Simpler architecture (no separate frontend)\n\n### Prometheus Metrics\n\nEnable Prometheus ServiceMonitor for metrics collection (requires Prometheus Operator):\n\n```typescript\nnew Plone(chart, 'my-plone', {\n backend: {\n servicemonitor: true,\n metricsPath: '/metrics', // optional, defaults to '/metrics'\n },\n frontend: {\n servicemonitor: true,\n metricsPort: 9090, // optional, defaults to service port\n },\n});\n```\n\n**Note:** You must instrument your Plone backend/frontend to expose metrics at the configured endpoint. For Volto/Node.js frontends, consider using [prom-client](https://www.npmjs.com/package/prom-client) or [express-prometheus-middleware](https://www.npmjs.com/package/express-prometheus-middleware).\n\n## Requirements\n- **kubectl** - [Install kubectl](https://kubernetes.io/docs/tasks/tools/#kubectl)\n- **Node.js 16+** (for TypeScript/JavaScript) - [Install Node.js](https://nodejs.org/)\n- **Python 3.8+** (for Python) - [Install Python](https://www.python.org/)\n- **Kubernetes cluster** (local or cloud)\n\nFor detailed setup instructions, see [Setup Prerequisites](https://bluedynamics.github.io/cdk8s-plone/how-to/setup-prerequisites.html).\n\n## Development\n\nThis project uses [Projen](https://projen.io/) for project management.\n\n```bash\n# Install dependencies\nnpm install\n\n# Run tests\nnpm test\n\n# Build\nnpm run build\n\n# Update project configuration\n# Edit .projenrc.ts, then run:\nnpx projen\n```\n\nFor detailed development instructions, see [CONTRIBUTING.md](./CONTRIBUTING.md) (if available).\n\n## Resources\n\n- [CDK8S Documentation](https://cdk8s.io/)\n- [Plone CMS](https://plone.org/)\n- [kube-httpcache](https://github.com/mittwald/kube-httpcache) (for HTTP caching)\n- [CloudNativePG](https://cloudnative-pg.io/) (for PostgreSQL management)\n\n## License\n\n[Apache 2.0](LICENSE)\n\n## Maintainers\n\nMaintained by [Blue Dynamics Alliance](https://github.com/bluedynamics)\n\n**Author:** Jens W. Klein (jk@kleinundpartner.at)\n"
|
|
112
112
|
},
|
|
113
113
|
"repository": {
|
|
114
114
|
"type": "git",
|
|
@@ -268,7 +268,7 @@
|
|
|
268
268
|
"base": "constructs.Construct",
|
|
269
269
|
"docs": {
|
|
270
270
|
"example": "new Plone(chart, 'my-plone', {\n variant: PloneVariant.VOLTO,\n backend: {\n image: 'plone/plone-backend:6.0.10',\n replicas: 3,\n },\n frontend: {\n image: 'plone/plone-frontend:16.0.0',\n },\n});",
|
|
271
|
-
"remarks": "This construct creates all necessary Kubernetes resources for running Plone:\n- Deployment(s) for backend (and optionally frontend)\n- Service(s) for network access\n- Optional PodDisruptionBudget for high availability\n\nSupports two deployment variants:\n- VOLTO:
|
|
271
|
+
"remarks": "This construct creates all necessary Kubernetes resources for running Plone:\n- Deployment(s) for backend (and optionally frontend)\n- Service(s) for network access\n- Optional PodDisruptionBudget for high availability\n\nSupports two deployment variants:\n- VOLTO: React single-page frontend talking to the REST API backend (default)\n- BLICCA: the Plone backend renders the UI server-side and serves HTML directly",
|
|
272
272
|
"stability": "stable",
|
|
273
273
|
"summary": "Plone construct for deploying Plone CMS to Kubernetes."
|
|
274
274
|
},
|
|
@@ -279,7 +279,7 @@
|
|
|
279
279
|
},
|
|
280
280
|
"locationInModule": {
|
|
281
281
|
"filename": "src/plone.ts",
|
|
282
|
-
"line":
|
|
282
|
+
"line": 417
|
|
283
283
|
},
|
|
284
284
|
"parameters": [
|
|
285
285
|
{
|
|
@@ -306,7 +306,7 @@
|
|
|
306
306
|
"kind": "class",
|
|
307
307
|
"locationInModule": {
|
|
308
308
|
"filename": "src/plone.ts",
|
|
309
|
-
"line":
|
|
309
|
+
"line": 394
|
|
310
310
|
},
|
|
311
311
|
"name": "Plone",
|
|
312
312
|
"properties": [
|
|
@@ -319,7 +319,7 @@
|
|
|
319
319
|
"immutable": true,
|
|
320
320
|
"locationInModule": {
|
|
321
321
|
"filename": "src/plone.ts",
|
|
322
|
-
"line":
|
|
322
|
+
"line": 399
|
|
323
323
|
},
|
|
324
324
|
"name": "backendServiceName",
|
|
325
325
|
"type": {
|
|
@@ -334,7 +334,7 @@
|
|
|
334
334
|
"immutable": true,
|
|
335
335
|
"locationInModule": {
|
|
336
336
|
"filename": "src/plone.ts",
|
|
337
|
-
"line":
|
|
337
|
+
"line": 415
|
|
338
338
|
},
|
|
339
339
|
"name": "siteId",
|
|
340
340
|
"type": {
|
|
@@ -344,12 +344,12 @@
|
|
|
344
344
|
{
|
|
345
345
|
"docs": {
|
|
346
346
|
"stability": "stable",
|
|
347
|
-
"summary": "The deployment variant being used (VOLTO or
|
|
347
|
+
"summary": "The deployment variant being used (VOLTO or BLICCA)."
|
|
348
348
|
},
|
|
349
349
|
"immutable": true,
|
|
350
350
|
"locationInModule": {
|
|
351
351
|
"filename": "src/plone.ts",
|
|
352
|
-
"line":
|
|
352
|
+
"line": 410
|
|
353
353
|
},
|
|
354
354
|
"name": "variant",
|
|
355
355
|
"type": {
|
|
@@ -365,7 +365,7 @@
|
|
|
365
365
|
"immutable": true,
|
|
366
366
|
"locationInModule": {
|
|
367
367
|
"filename": "src/plone.ts",
|
|
368
|
-
"line":
|
|
368
|
+
"line": 405
|
|
369
369
|
},
|
|
370
370
|
"name": "frontendServiceName",
|
|
371
371
|
"optional": true,
|
|
@@ -1471,7 +1471,7 @@
|
|
|
1471
1471
|
"kind": "interface",
|
|
1472
1472
|
"locationInModule": {
|
|
1473
1473
|
"filename": "src/plone.ts",
|
|
1474
|
-
"line":
|
|
1474
|
+
"line": 327
|
|
1475
1475
|
},
|
|
1476
1476
|
"name": "PloneOptions",
|
|
1477
1477
|
"properties": [
|
|
@@ -1485,7 +1485,7 @@
|
|
|
1485
1485
|
"immutable": true,
|
|
1486
1486
|
"locationInModule": {
|
|
1487
1487
|
"filename": "src/plone.ts",
|
|
1488
|
-
"line":
|
|
1488
|
+
"line": 352
|
|
1489
1489
|
},
|
|
1490
1490
|
"name": "backend",
|
|
1491
1491
|
"optional": true,
|
|
@@ -1504,7 +1504,7 @@
|
|
|
1504
1504
|
"immutable": true,
|
|
1505
1505
|
"locationInModule": {
|
|
1506
1506
|
"filename": "src/plone.ts",
|
|
1507
|
-
"line":
|
|
1507
|
+
"line": 359
|
|
1508
1508
|
},
|
|
1509
1509
|
"name": "frontend",
|
|
1510
1510
|
"optional": true,
|
|
@@ -1524,7 +1524,7 @@
|
|
|
1524
1524
|
"immutable": true,
|
|
1525
1525
|
"locationInModule": {
|
|
1526
1526
|
"filename": "src/plone.ts",
|
|
1527
|
-
"line":
|
|
1527
|
+
"line": 367
|
|
1528
1528
|
},
|
|
1529
1529
|
"name": "imagePullSecrets",
|
|
1530
1530
|
"optional": true,
|
|
@@ -1548,7 +1548,7 @@
|
|
|
1548
1548
|
"immutable": true,
|
|
1549
1549
|
"locationInModule": {
|
|
1550
1550
|
"filename": "src/plone.ts",
|
|
1551
|
-
"line":
|
|
1551
|
+
"line": 340
|
|
1552
1552
|
},
|
|
1553
1553
|
"name": "siteId",
|
|
1554
1554
|
"optional": true,
|
|
@@ -1566,7 +1566,7 @@
|
|
|
1566
1566
|
"immutable": true,
|
|
1567
1567
|
"locationInModule": {
|
|
1568
1568
|
"filename": "src/plone.ts",
|
|
1569
|
-
"line":
|
|
1569
|
+
"line": 346
|
|
1570
1570
|
},
|
|
1571
1571
|
"name": "variant",
|
|
1572
1572
|
"optional": true,
|
|
@@ -1585,7 +1585,7 @@
|
|
|
1585
1585
|
"immutable": true,
|
|
1586
1586
|
"locationInModule": {
|
|
1587
1587
|
"filename": "src/plone.ts",
|
|
1588
|
-
"line":
|
|
1588
|
+
"line": 333
|
|
1589
1589
|
},
|
|
1590
1590
|
"name": "version",
|
|
1591
1591
|
"optional": true,
|
|
@@ -1996,7 +1996,7 @@
|
|
|
1996
1996
|
"docs": {
|
|
1997
1997
|
"remarks": "Deploys both frontend and backend services.",
|
|
1998
1998
|
"stability": "stable",
|
|
1999
|
-
"summary": "Volto variant: ReactJS frontend (Volto)
|
|
1999
|
+
"summary": "Volto variant: ReactJS single-page frontend (Volto) talking to the Plone REST API."
|
|
2000
2000
|
},
|
|
2001
2001
|
"name": "VOLTO"
|
|
2002
2002
|
},
|
|
@@ -2004,7 +2004,15 @@
|
|
|
2004
2004
|
"docs": {
|
|
2005
2005
|
"remarks": "Deploys only the backend service.",
|
|
2006
2006
|
"stability": "stable",
|
|
2007
|
-
"summary": "
|
|
2007
|
+
"summary": "Blicca variant: the Plone backend renders the UI server-side and serves the HTML directly."
|
|
2008
|
+
},
|
|
2009
|
+
"name": "BLICCA"
|
|
2010
|
+
},
|
|
2011
|
+
{
|
|
2012
|
+
"docs": {
|
|
2013
|
+
"deprecated": "Renamed to {@link BLICCA }. Kept for backward compatibility and selects the\nsame backend-only deployment. Existing configuration using `CLASSICUI` (or the literal\nvalue `'classicui'`) keeps working unchanged. Will be removed in a future major release.",
|
|
2014
|
+
"stability": "deprecated",
|
|
2015
|
+
"summary": "Deprecated alias for the Blicca variant (formerly \"Classic UI\")."
|
|
2008
2016
|
},
|
|
2009
2017
|
"name": "CLASSICUI"
|
|
2010
2018
|
}
|
|
@@ -3110,6 +3118,6 @@
|
|
|
3110
3118
|
"symbolId": "src/vinylcache:VinylCacheToleration"
|
|
3111
3119
|
}
|
|
3112
3120
|
},
|
|
3113
|
-
"version": "0.1.
|
|
3114
|
-
"fingerprint": "
|
|
3121
|
+
"version": "0.1.42",
|
|
3122
|
+
"fingerprint": "D9/SxjjIZbxf8BCRqRbR2qAlxXiZY5YCDvyQS6+zHXQ="
|
|
3115
3123
|
}
|
package/API.md
CHANGED
|
@@ -12,8 +12,8 @@ This construct creates all necessary Kubernetes resources for running Plone:
|
|
|
12
12
|
- Optional PodDisruptionBudget for high availability
|
|
13
13
|
|
|
14
14
|
Supports two deployment variants:
|
|
15
|
-
- VOLTO:
|
|
16
|
-
-
|
|
15
|
+
- VOLTO: React single-page frontend talking to the REST API backend (default)
|
|
16
|
+
- BLICCA: the Plone backend renders the UI server-side and serves HTML directly
|
|
17
17
|
|
|
18
18
|
*Example*
|
|
19
19
|
|
|
@@ -150,7 +150,7 @@ Any object.
|
|
|
150
150
|
| <code><a href="#@bluedynamics/cdk8s-plone.Plone.property.node">node</a></code> | <code>constructs.Node</code> | The tree node. |
|
|
151
151
|
| <code><a href="#@bluedynamics/cdk8s-plone.Plone.property.backendServiceName">backendServiceName</a></code> | <code>string</code> | Name of the backend Kubernetes service. |
|
|
152
152
|
| <code><a href="#@bluedynamics/cdk8s-plone.Plone.property.siteId">siteId</a></code> | <code>string</code> | The Plone site ID in ZODB. |
|
|
153
|
-
| <code><a href="#@bluedynamics/cdk8s-plone.Plone.property.variant">variant</a></code> | <code><a href="#@bluedynamics/cdk8s-plone.PloneVariant">PloneVariant</a></code> | The deployment variant being used (VOLTO or
|
|
153
|
+
| <code><a href="#@bluedynamics/cdk8s-plone.Plone.property.variant">variant</a></code> | <code><a href="#@bluedynamics/cdk8s-plone.PloneVariant">PloneVariant</a></code> | The deployment variant being used (VOLTO or BLICCA). |
|
|
154
154
|
| <code><a href="#@bluedynamics/cdk8s-plone.Plone.property.frontendServiceName">frontendServiceName</a></code> | <code>string</code> | Name of the frontend Kubernetes service. |
|
|
155
155
|
|
|
156
156
|
---
|
|
@@ -201,7 +201,7 @@ public readonly variant: PloneVariant;
|
|
|
201
201
|
|
|
202
202
|
- *Type:* <a href="#@bluedynamics/cdk8s-plone.PloneVariant">PloneVariant</a>
|
|
203
203
|
|
|
204
|
-
The deployment variant being used (VOLTO or
|
|
204
|
+
The deployment variant being used (VOLTO or BLICCA).
|
|
205
205
|
|
|
206
206
|
---
|
|
207
207
|
|
|
@@ -2835,25 +2835,37 @@ Plone deployment variants.
|
|
|
2835
2835
|
|
|
2836
2836
|
| **Name** | **Description** |
|
|
2837
2837
|
| --- | --- |
|
|
2838
|
-
| <code><a href="#@bluedynamics/cdk8s-plone.PloneVariant.VOLTO">VOLTO</a></code> | Volto variant: ReactJS frontend (Volto)
|
|
2839
|
-
| <code><a href="#@bluedynamics/cdk8s-plone.PloneVariant.
|
|
2838
|
+
| <code><a href="#@bluedynamics/cdk8s-plone.PloneVariant.VOLTO">VOLTO</a></code> | Volto variant: ReactJS single-page frontend (Volto) talking to the Plone REST API. |
|
|
2839
|
+
| <code><a href="#@bluedynamics/cdk8s-plone.PloneVariant.BLICCA">BLICCA</a></code> | Blicca variant: the Plone backend renders the UI server-side and serves the HTML directly. |
|
|
2840
|
+
| <code><a href="#@bluedynamics/cdk8s-plone.PloneVariant.CLASSICUI">CLASSICUI</a></code> | Deprecated alias for the Blicca variant (formerly "Classic UI"). |
|
|
2840
2841
|
|
|
2841
2842
|
---
|
|
2842
2843
|
|
|
2843
2844
|
##### `VOLTO` <a name="VOLTO" id="@bluedynamics/cdk8s-plone.PloneVariant.VOLTO"></a>
|
|
2844
2845
|
|
|
2845
|
-
Volto variant: ReactJS frontend (Volto)
|
|
2846
|
+
Volto variant: ReactJS single-page frontend (Volto) talking to the Plone REST API.
|
|
2846
2847
|
|
|
2847
2848
|
Deploys both frontend and backend services.
|
|
2848
2849
|
|
|
2849
2850
|
---
|
|
2850
2851
|
|
|
2851
2852
|
|
|
2852
|
-
##### `
|
|
2853
|
+
##### `BLICCA` <a name="BLICCA" id="@bluedynamics/cdk8s-plone.PloneVariant.BLICCA"></a>
|
|
2853
2854
|
|
|
2854
|
-
|
|
2855
|
+
Blicca variant: the Plone backend renders the UI server-side and serves the HTML directly.
|
|
2855
2856
|
|
|
2856
2857
|
Deploys only the backend service.
|
|
2857
2858
|
|
|
2858
2859
|
---
|
|
2859
2860
|
|
|
2861
|
+
|
|
2862
|
+
##### ~~`CLASSICUI`~~ <a name="CLASSICUI" id="@bluedynamics/cdk8s-plone.PloneVariant.CLASSICUI"></a>
|
|
2863
|
+
|
|
2864
|
+
- *Deprecated:* Renamed to {@link BLICCA }. Kept for backward compatibility and selects the
|
|
2865
|
+
same backend-only deployment. Existing configuration using `CLASSICUI` (or the literal
|
|
2866
|
+
value `'classicui'`) keeps working unchanged. Will be removed in a future major release.
|
|
2867
|
+
|
|
2868
|
+
Deprecated alias for the Blicca variant (formerly "Classic UI").
|
|
2869
|
+
|
|
2870
|
+
---
|
|
2871
|
+
|
package/CLAUDE.md
CHANGED
|
@@ -4,7 +4,7 @@ This document provides context and guidelines for Claude Code when working on th
|
|
|
4
4
|
|
|
5
5
|
## Project Overview
|
|
6
6
|
|
|
7
|
-
**cdk8s-plone** is a TypeScript/Python library for deploying Plone CMS to Kubernetes using CDK8S constructs. It provides type-safe infrastructure as code with support for Volto (React frontend) and Classic UI deployments.
|
|
7
|
+
**cdk8s-plone** is a TypeScript/Python library for deploying Plone CMS to Kubernetes using CDK8S constructs. It provides type-safe infrastructure as code with support for Volto (React frontend) and Blicca (server-side rendered, formerly Classic UI) deployments.
|
|
8
8
|
|
|
9
9
|
## Git Workflow
|
|
10
10
|
|
package/README.md
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
cdk8s-plone provides CDK8S constructs for deploying [Plone CMS](https://plone.org/) on Kubernetes. Define your infrastructure using TypeScript or Python and generate Kubernetes manifests automatically.
|
|
12
12
|
|
|
13
13
|
**Key Features:**
|
|
14
|
-
- 🚀 Supports Volto (
|
|
14
|
+
- 🚀 Supports Volto (React frontend) and Blicca (formerly Classic UI)
|
|
15
15
|
- 📦 High availability with configurable replicas
|
|
16
16
|
- ⚡ Optional Varnish HTTP caching via kube-httpcache (`PloneHttpcache`) or cloud-vinyl VinylCache operator (`PloneVinylCache`)
|
|
17
17
|
- 🔧 Fine-grained resource and probe configuration
|
|
@@ -75,14 +75,14 @@ kubectl apply -f dist/
|
|
|
75
75
|
|
|
76
76
|
Complete working examples are available in the [`examples/`](examples/) directory:
|
|
77
77
|
|
|
78
|
-
- **[Production Volto](examples/production-volto/)** - Production-ready Plone 6 deployment with
|
|
78
|
+
- **[Production Volto](examples/production-volto/)** - Production-ready Plone 6 deployment with the React single-page frontend:
|
|
79
79
|
- Volto frontend (React) + REST API backend
|
|
80
80
|
- PostgreSQL with RelStorage (CloudNativePG or Bitnami)
|
|
81
81
|
- Varnish HTTP caching with kube-httpcache
|
|
82
82
|
- Ingress support (Traefik/Kong) with TLS
|
|
83
83
|
|
|
84
|
-
- **[
|
|
85
|
-
-
|
|
84
|
+
- **[Blicca](examples/blicca/)** - Plone deployment with server-side rendering (formerly Classic UI):
|
|
85
|
+
- Blicca (backend renders the UI, no separate frontend)
|
|
86
86
|
- PostgreSQL with RelStorage (CloudNativePG or Bitnami)
|
|
87
87
|
- Varnish HTTP caching with kube-httpcache
|
|
88
88
|
- Ingress support (Traefik/Kong) with TLS
|
|
@@ -21,19 +21,20 @@ cdk8s-plone provides CDK8S constructs for deploying Plone CMS on Kubernetes. The
|
|
|
21
21
|
|
|
22
22
|
cdk8s-plone supports two deployment variants:
|
|
23
23
|
|
|
24
|
-
**Volto (
|
|
24
|
+
**Volto (React single-page frontend)**
|
|
25
25
|
- React-based frontend (Volto)
|
|
26
26
|
- REST API backend (Plone)
|
|
27
27
|
- Separate services for frontend and backend
|
|
28
|
-
- Modern user experience
|
|
29
28
|
- Headless CMS architecture
|
|
30
29
|
|
|
31
|
-
**
|
|
32
|
-
-
|
|
30
|
+
**Blicca (server-side rendered)**
|
|
31
|
+
- The Plone backend renders the UI and serves HTML directly
|
|
33
32
|
- Single integrated service
|
|
34
|
-
- Traditional Plone experience
|
|
35
33
|
- Simpler deployment model
|
|
36
34
|
|
|
35
|
+
Blicca is the new name for the variant Plone formerly called "Classic UI".
|
|
36
|
+
Both approaches are equally current; they differ in where rendering happens, not in how modern they are.
|
|
37
|
+
|
|
37
38
|
### High availability
|
|
38
39
|
|
|
39
40
|
**Replica Management**
|
|
@@ -251,7 +252,7 @@ For a typical Volto deployment, cdk8s-plone creates:
|
|
|
251
252
|
- Better resource utilization
|
|
252
253
|
- Clear separation of concerns
|
|
253
254
|
|
|
254
|
-
**When to use
|
|
255
|
+
**When to use Blicca:**
|
|
255
256
|
- Simpler deployment model
|
|
256
257
|
- Lower resource requirements
|
|
257
258
|
- Legacy integrations
|
|
@@ -19,17 +19,19 @@ Complete overview of cdk8s-plone features and capabilities.
|
|
|
19
19
|
|
|
20
20
|
cdk8s-plone supports two deployment modes to match your requirements:
|
|
21
21
|
|
|
22
|
-
**Volto (
|
|
23
|
-
-
|
|
22
|
+
**Volto (React single-page frontend)**
|
|
23
|
+
- React-based user interface
|
|
24
24
|
- Headless CMS architecture
|
|
25
25
|
- Separate frontend and backend services
|
|
26
|
-
- Best for:
|
|
26
|
+
- Best for: API-first architectures, SPA frontends
|
|
27
27
|
|
|
28
|
-
**
|
|
29
|
-
-
|
|
28
|
+
**Blicca (server-side rendered Plone)**
|
|
29
|
+
- The Plone backend renders the UI and serves HTML directly
|
|
30
30
|
- Integrated single-service deployment
|
|
31
|
-
-
|
|
32
|
-
|
|
31
|
+
- Best for: single-service setups, legacy migrations, existing add-ons
|
|
32
|
+
|
|
33
|
+
Blicca is the new name for the variant Plone formerly called "Classic UI".
|
|
34
|
+
Both are equally current; they differ in their rendering approach.
|
|
33
35
|
|
|
34
36
|
See {doc}`architecture` for a deeper architectural comparison of the two variants.
|
|
35
37
|
|
|
@@ -1,37 +1,40 @@
|
|
|
1
1
|
---
|
|
2
2
|
myst:
|
|
3
3
|
html_meta:
|
|
4
|
-
"description": "Deploy the
|
|
5
|
-
"property=og:description": "Deploy the
|
|
6
|
-
"property=og:title": "Deploy
|
|
7
|
-
"keywords": "Plone, cdk8s, Kubernetes, Classic UI, PostgreSQL, Varnish, ingress"
|
|
4
|
+
"description": "Deploy the Blicca example: server-side rendered Plone with PostgreSQL, Varnish caching, and ingress with TLS."
|
|
5
|
+
"property=og:description": "Deploy the Blicca example: server-side rendered Plone with PostgreSQL, Varnish caching, and ingress with TLS."
|
|
6
|
+
"property=og:title": "Deploy Blicca example"
|
|
7
|
+
"keywords": "Plone, cdk8s, Kubernetes, Blicca, Classic UI, PostgreSQL, Varnish, ingress"
|
|
8
8
|
---
|
|
9
9
|
|
|
10
|
-
# Deploy
|
|
10
|
+
# Deploy Blicca example
|
|
11
11
|
|
|
12
|
-
This guide shows you how to deploy the
|
|
12
|
+
This guide shows you how to deploy the Blicca example to your Kubernetes cluster.
|
|
13
|
+
|
|
14
|
+
Blicca is the new name for what Plone formerly called "Classic UI".
|
|
13
15
|
|
|
14
16
|
## What you'll deploy
|
|
15
17
|
|
|
16
|
-
The [
|
|
18
|
+
The [Blicca example](https://github.com/bluedynamics/cdk8s-plone/tree/main/examples/blicca) provides Plone with server-side rendering:
|
|
17
19
|
|
|
18
|
-
- **Plone 6.1
|
|
20
|
+
- **Plone 6.1 Blicca** (backend renders the UI, no separate frontend)
|
|
19
21
|
- **PostgreSQL** with RelStorage (CloudNativePG or Bitnami)
|
|
20
22
|
- **Varnish HTTP caching** with kube-httpcache
|
|
21
23
|
- **Ingress** with TLS (Traefik or Kong)
|
|
22
24
|
- **Simpler architecture** (single backend service)
|
|
23
25
|
|
|
24
|
-
##
|
|
26
|
+
## Blicca vs Volto
|
|
25
27
|
|
|
26
|
-
| Feature |
|
|
28
|
+
| Feature | Blicca | Volto |
|
|
27
29
|
|---------|-----------|-------|
|
|
28
30
|
| **Architecture** | Single backend | Frontend + Backend |
|
|
29
31
|
| **Rendering** | Server-side | Client-side (React) |
|
|
30
32
|
| **Deployment** | Simpler | More complex |
|
|
31
|
-
| **Best for** |
|
|
33
|
+
| **Best for** | Single-service setups, migrations | API-first projects, SPA frontends |
|
|
32
34
|
|
|
33
35
|
:::{tip}
|
|
34
|
-
Choose
|
|
36
|
+
Choose Blicca if you want a single backend service without a separate frontend, or if you need Blicca-specific add-ons.
|
|
37
|
+
For the React single-page frontend approach, consider [Volto](deploy-production-volto.md).
|
|
35
38
|
:::
|
|
36
39
|
|
|
37
40
|
## Prerequisites
|
|
@@ -49,7 +52,7 @@ See [Setup Prerequisites](setup-prerequisites.md) for detailed instructions.
|
|
|
49
52
|
|
|
50
53
|
```shell
|
|
51
54
|
git clone https://github.com/bluedynamics/cdk8s-plone.git
|
|
52
|
-
cd cdk8s-plone/examples/
|
|
55
|
+
cd cdk8s-plone/examples/blicca
|
|
53
56
|
```
|
|
54
57
|
|
|
55
58
|
## Step 2: Install dependencies
|
|
@@ -91,7 +94,8 @@ DATABASE=cloudnativepg
|
|
|
91
94
|
```
|
|
92
95
|
|
|
93
96
|
:::{note}
|
|
94
|
-
|
|
97
|
+
Blicca only needs one image (backend).
|
|
98
|
+
There's no frontend image configuration.
|
|
95
99
|
:::
|
|
96
100
|
|
|
97
101
|
## Step 5: Generate manifests
|
|
@@ -100,28 +104,28 @@ Classic UI only needs one image (backend). There's no frontend image configurati
|
|
|
100
104
|
npm run synth
|
|
101
105
|
```
|
|
102
106
|
|
|
103
|
-
Creates `dist/plone-
|
|
107
|
+
Creates `dist/plone-blicca.k8s.yaml` (~27 KB, smaller than Volto's 32 KB).
|
|
104
108
|
|
|
105
109
|
## Step 6: Review manifests
|
|
106
110
|
|
|
107
111
|
```shell
|
|
108
112
|
# Count resources
|
|
109
|
-
grep "^kind:" dist/plone-
|
|
113
|
+
grep "^kind:" dist/plone-blicca.k8s.yaml | sort | uniq -c
|
|
110
114
|
|
|
111
115
|
# Dry run
|
|
112
|
-
kubectl apply --dry-run=client -f dist/plone-
|
|
116
|
+
kubectl apply --dry-run=client -f dist/plone-blicca.k8s.yaml
|
|
113
117
|
```
|
|
114
118
|
|
|
115
119
|
## Step 7: Deploy
|
|
116
120
|
|
|
117
121
|
```shell
|
|
118
|
-
kubectl apply -f dist/plone-
|
|
122
|
+
kubectl apply -f dist/plone-blicca.k8s.yaml
|
|
119
123
|
```
|
|
120
124
|
|
|
121
125
|
Or to a specific namespace:
|
|
122
126
|
|
|
123
127
|
```shell
|
|
124
|
-
kubectl apply -f dist/plone-
|
|
128
|
+
kubectl apply -f dist/plone-blicca.k8s.yaml -n plone
|
|
125
129
|
```
|
|
126
130
|
|
|
127
131
|
## Step 8: Monitor deployment
|
|
@@ -137,7 +141,7 @@ kubectl wait --for=condition=ready pod \
|
|
|
137
141
|
```
|
|
138
142
|
|
|
139
143
|
:::{note}
|
|
140
|
-
|
|
144
|
+
Blicca deploys fewer pods than Volto (no frontend pods).
|
|
141
145
|
:::
|
|
142
146
|
|
|
143
147
|
## Step 9: Verify services
|
|
@@ -147,7 +151,7 @@ kubectl get svc -l app.kubernetes.io/part-of=plone
|
|
|
147
151
|
```
|
|
148
152
|
|
|
149
153
|
You should see:
|
|
150
|
-
- `plone-backend` (
|
|
154
|
+
- `plone-backend` (Blicca service)
|
|
151
155
|
- `plone-httpcache` (Varnish cache)
|
|
152
156
|
- Database service
|
|
153
157
|
|
|
@@ -174,17 +178,17 @@ Once DNS and TLS are ready:
|
|
|
174
178
|
- **Site ID**: `Plone`
|
|
175
179
|
- **Title**: Your site name
|
|
176
180
|
- **Language**: Select language
|
|
177
|
-
- **Add-ons**: Choose
|
|
181
|
+
- **Add-ons**: Choose Blicca add-ons
|
|
178
182
|
4. Click "Create Plone Site"
|
|
179
183
|
|
|
180
184
|
## Key differences from Volto
|
|
181
185
|
|
|
182
186
|
### Architecture
|
|
183
187
|
|
|
184
|
-
|
|
188
|
+
Blicca routing is simpler - all traffic goes to the backend:
|
|
185
189
|
|
|
186
190
|
```
|
|
187
|
-
Traffic → Ingress → Varnish → Plone Backend (
|
|
191
|
+
Traffic → Ingress → Varnish → Plone Backend (Blicca)
|
|
188
192
|
```
|
|
189
193
|
|
|
190
194
|
Compared to Volto:
|
|
@@ -195,7 +199,7 @@ Traffic → Ingress → {Varnish → Frontend, Backend}
|
|
|
195
199
|
|
|
196
200
|
### Ingress routes
|
|
197
201
|
|
|
198
|
-
|
|
202
|
+
Blicca uses virtual host rewriting for direct backend access:
|
|
199
203
|
|
|
200
204
|
- **Cached**: Routes through Varnish to backend
|
|
201
205
|
- **Uncached**: Direct to backend with VirtualHostBase rewrite
|
|
@@ -225,7 +229,7 @@ Common issues:
|
|
|
225
229
|
- Memory limits too low
|
|
226
230
|
- Image pull errors
|
|
227
231
|
|
|
228
|
-
###
|
|
232
|
+
### Blicca interface not loading
|
|
229
233
|
|
|
230
234
|
1. Check if backend pods are running:
|
|
231
235
|
```shell
|
|
@@ -244,14 +248,14 @@ Common issues:
|
|
|
244
248
|
|
|
245
249
|
### Add-on compatibility
|
|
246
250
|
|
|
247
|
-
Some add-ons are Volto-specific. For
|
|
248
|
-
- Use
|
|
249
|
-
- Check add-on compatibility with Plone 6
|
|
251
|
+
Some add-ons are Volto-specific. For Blicca:
|
|
252
|
+
- Use Blicca themes (not Volto themes)
|
|
253
|
+
- Check add-on compatibility with Plone 6 Blicca
|
|
250
254
|
- Avoid Volto-specific frontend add-ons
|
|
251
255
|
|
|
252
256
|
## Migrating to Volto
|
|
253
257
|
|
|
254
|
-
If you want to migrate from
|
|
258
|
+
If you want to migrate from Blicca to Volto later:
|
|
255
259
|
|
|
256
260
|
1. Keep your backend deployment (same configuration)
|
|
257
261
|
2. Add Volto frontend from the [Volto example](deploy-production-volto.md)
|
|
@@ -268,7 +272,7 @@ Edit `main.ts` to customize:
|
|
|
268
272
|
|
|
269
273
|
```typescript
|
|
270
274
|
const plone = new Plone(this, 'plone', {
|
|
271
|
-
variant: PloneVariant.
|
|
275
|
+
variant: PloneVariant.BLICCA,
|
|
272
276
|
backend: {
|
|
273
277
|
image: 'plone/plone-backend:6.1.3',
|
|
274
278
|
replicas: 2,
|
|
@@ -281,9 +285,9 @@ const plone = new Plone(this, 'plone', {
|
|
|
281
285
|
|
|
282
286
|
### Varnish caching
|
|
283
287
|
|
|
284
|
-
Edit `config/varnish.tpl.vcl` for caching rules specific to
|
|
288
|
+
Edit `config/varnish.tpl.vcl` for caching rules specific to Blicca.
|
|
285
289
|
|
|
286
|
-
|
|
290
|
+
Blicca VCL is simpler than Volto's - all traffic routes to one backend.
|
|
287
291
|
|
|
288
292
|
## Scaling
|
|
289
293
|
|
|
@@ -298,14 +302,14 @@ backend: {
|
|
|
298
302
|
Then:
|
|
299
303
|
```shell
|
|
300
304
|
npm run synth
|
|
301
|
-
kubectl apply -f dist/plone-
|
|
305
|
+
kubectl apply -f dist/plone-blicca.k8s.yaml
|
|
302
306
|
```
|
|
303
307
|
|
|
304
308
|
## Performance
|
|
305
309
|
|
|
306
|
-
|
|
310
|
+
Blicca performance characteristics:
|
|
307
311
|
|
|
308
|
-
- **Server-side rendering**
|
|
312
|
+
- **Server-side rendering** moves rendering work to the backend, so Varnish caching matters
|
|
309
313
|
- **Varnish caching** is critical for performance
|
|
310
314
|
- **Database** is the main bottleneck (use CloudNativePG for HA)
|
|
311
315
|
- **Fewer HTTP requests** than Volto (no separate frontend API calls)
|
|
@@ -313,18 +317,18 @@ Classic UI performance characteristics:
|
|
|
313
317
|
## Cleanup
|
|
314
318
|
|
|
315
319
|
```shell
|
|
316
|
-
kubectl delete -f dist/plone-
|
|
320
|
+
kubectl delete -f dist/plone-blicca.k8s.yaml
|
|
317
321
|
```
|
|
318
322
|
|
|
319
323
|
## Next steps
|
|
320
324
|
|
|
321
325
|
- Follow {doc}`enable-prometheus-monitoring` to add Prometheus monitoring.
|
|
322
326
|
- Configure [CloudNativePG backups](https://cloudnative-pg.io/documentation/).
|
|
323
|
-
- Customize the
|
|
327
|
+
- Customize the theme through the [Plone 6 Classic UI documentation](https://6.docs.plone.org/classic-ui/) (upstream docs; Blicca is the new name for Classic UI).
|
|
324
328
|
|
|
325
329
|
## See also
|
|
326
330
|
|
|
327
|
-
- {doc}`deploy-production-volto` — For the
|
|
331
|
+
- {doc}`deploy-production-volto` — For the React single-page frontend.
|
|
328
332
|
- {doc}`setup-prerequisites` — Cluster requirements.
|
|
329
333
|
- {doc}`/reference/configuration-options` — API reference.
|
|
330
334
|
- [Plone 6 Classic UI documentation](https://6.docs.plone.org/classic-ui/)
|
|
@@ -324,6 +324,6 @@ kubectl delete -f dist/plone-example.k8s.yaml
|
|
|
324
324
|
|
|
325
325
|
## See also
|
|
326
326
|
|
|
327
|
-
- {doc}`deploy-
|
|
327
|
+
- {doc}`deploy-blicca` — For the server-side rendered Plone UI.
|
|
328
328
|
- {doc}`setup-prerequisites` — Detailed cluster setup.
|
|
329
329
|
- {doc}`/reference/configuration-options` — API reference.
|
|
@@ -15,7 +15,7 @@ Complete API reference for cdk8s-plone constructs, generated from TypeScript sou
|
|
|
15
15
|
|
|
16
16
|
The cdk8s-plone library provides the following main constructs:
|
|
17
17
|
|
|
18
|
-
- **Plone**: Main construct for deploying Plone CMS with support for both Volto (React frontend) and
|
|
18
|
+
- **Plone**: Main construct for deploying Plone CMS with support for both Volto (React frontend) and Blicca (server-side rendered) variants
|
|
19
19
|
- **PloneHttpcache**: HTTP caching layer using Varnish for improved performance
|
|
20
20
|
|
|
21
21
|
## Language support
|