Skip to main content

Provides a CMS Plone Backend and Frontend for Kubernetes with cdk8s

Project description

CDK8S Plone

A CDK8S library for deploying Plone CMS to Kubernetes.

This library provides constructs to bootstrap a Plone deployment on a Kubernetes cluster using the CDK8S framework.

Features

  • Backend: Plone backend (API with plone.volto or Classic-UI)
  • Frontend: Plone Volto (modern React-based user interface)
  • Varnish Caching: Optional HTTP caching layer using kube-httpcache with cluster-wide cache invalidation
  • High Availability: Configurable replicas with PodDisruptionBudgets
  • Multi-language Support: Published to npm (TypeScript/JavaScript) and PyPI (Python)

Installation

TypeScript/JavaScript

Create a new CDK8S project (or use an existing one):

cdk8s init typescript-app

Install the library:

npm install @bluedynamics/cdk8s-plone

Package: @bluedynamics/cdk8s-plone

Python

Create a new CDK8S project:

cdk8s init python-app

Install the library:

pip install cdk8s-plone

Package: cdk8s-plone

Quick Start

Basic Plone Deployment

import { App, Chart } from 'cdk8s';
import { Plone, PloneVariant } from '@bluedynamics/cdk8s-plone';

const app = new App();
const chart = new Chart(app, 'PloneDeployment');

new Plone(chart, 'my-plone', {
  variant: PloneVariant.VOLTO,
  backend: {
    image: 'plone/plone-backend:6.0.10',
    replicas: 3,
  },
  frontend: {
    image: 'plone/plone-frontend:16.0.0',
    replicas: 2,
  },
});

app.synth();

With Varnish HTTP Cache

import { PloneHttpcache } from '@bluedynamics/cdk8s-plone';

const plone = new Plone(chart, 'my-plone', {
  variant: PloneVariant.VOLTO,
  backend: { image: 'plone/plone-backend:6.0.10' },
  frontend: { image: 'plone/plone-frontend:16.0.0' },
});

new PloneHttpcache(chart, 'cache', {
  plone: plone,
  existingSecret: 'varnish-secret',
  replicas: 2,
});

Generate Kubernetes Manifests

cdk8s synth

The manifests are stored in the dist/ directory.

For a complete example, see the example project.

Prerequisites

  • kubectl - Command-line tool for deploying Kubernetes manifests. Install kubectl
  • Helm (optional) - Only needed if generating Helm charts. Install Helm
  • Node.js - For TypeScript/JavaScript development
  • Python 3.8+ - For Python development

API Documentation

For complete API documentation, see API.md.

Key Constructs

Plone

Main construct for deploying Plone CMS. Supports two variants:

  • VOLTO: Modern React frontend with REST API backend (default)
  • CLASSICUI: Traditional server-side rendered Plone

Properties:

  • backendServiceName - Name of the backend Kubernetes service
  • frontendServiceName - Name of the frontend service (VOLTO only)
  • variant - Deployment variant (VOLTO or CLASSICUI)
  • siteId - Plone site ID in ZODB (default: 'Plone')

PloneHttpcache

Varnish HTTP caching layer using the kube-httpcache Helm chart.

Properties:

  • httpcacheServiceName - Name of the Varnish service

Configuration Options

PloneOptions

  • version - Version of your project
  • siteId - Plone site ID (default: 'Plone')
  • variant - PloneVariant.VOLTO or PloneVariant.CLASSICUI (default: VOLTO)
  • backend - Backend configuration (PloneBaseOptions)
  • frontend - Frontend configuration (PloneBaseOptions, required for VOLTO)
  • imagePullSecrets - Image pull secrets for private registries

PloneBaseOptions

Configuration for backend or frontend:

Container:

  • image - Container image (e.g., 'plone/plone-backend:6.0.10')
  • imagePullPolicy - Pull policy (default: 'IfNotPresent')
  • replicas - Number of replicas (default: 2)
  • environment - Environment variables (cdk8s-plus-30.Env)

Resources:

  • requestCpu / limitCpu - CPU requests/limits
  • requestMemory / limitMemory - Memory requests/limits

High Availability:

  • minAvailable - Min pods during updates (for PodDisruptionBudget)
  • maxUnavailable - Max unavailable pods during updates

Health Probes:

  • readinessEnabled - Enable readiness probe (default: true)
  • readinessInitialDelaySeconds / readinessTimeoutSeconds / readinessPeriodSeconds
  • readinessSuccessThreshold / readinessFailureThreshold
  • livenessEnabled - Enable liveness probe (default: false, recommended true for frontend)
  • livenessInitialDelaySeconds / livenessTimeoutSeconds / livenessPeriodSeconds
  • livenessSuccessThreshold / livenessFailureThreshold

Annotations:

  • annotations - Deployment metadata annotations
  • podAnnotations - Pod template annotations (e.g., for Prometheus)
  • serviceAnnotations - Service annotations (e.g., for external-dns)

PloneHttpcacheOptions

  • plone - Plone construct to attach cache to (required)
  • varnishVcl - VCL configuration as string
  • varnishVclFile - Path to VCL configuration file
  • existingSecret - Kubernetes secret for Varnish admin credentials
  • replicas - Number of Varnish replicas (default: 2)
  • requestCpu / limitCpu - CPU resources
  • requestMemory / limitMemory - Memory resources
  • servicemonitor - Enable Prometheus ServiceMonitor (default: false)
  • exporterEnabled - Enable Prometheus exporter sidecar (default: true)
  • chartVersion - kube-httpcache Helm chart version (default: latest)

Development

This project uses Projen to manage project configuration. Do not edit generated files directly.

Setup

Clone the repository and install dependencies:

nvm use lts/*
corepack enable
npx projen

Common Commands

# Run tests
npx projen test

# Run tests in watch mode
npx projen test:watch

# Build (compile TypeScript + generate JSII bindings)
npx projen build

# Lint
npx projen eslint

# Generate API documentation
npx projen docgen

# Package for distribution
npx projen package-all

Making Changes

  1. Edit .projenrc.ts for project configuration changes
  2. Run npx projen to regenerate project files
  3. Make code changes in src/
  4. Run tests and update snapshots if needed: npx projen test -- -u

References

License

See LICENSE file.

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cdk8s_plone-0.1.4.tar.gz (598.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

cdk8s_plone-0.1.4-py3-none-any.whl (596.4 kB view details)

Uploaded Python 3

File details

Details for the file cdk8s_plone-0.1.4.tar.gz.

File metadata

  • Download URL: cdk8s_plone-0.1.4.tar.gz
  • Upload date:
  • Size: 598.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.14.0

File hashes

Hashes for cdk8s_plone-0.1.4.tar.gz
Algorithm Hash digest
SHA256 5a2e38e08f544564a7a8161b4cfd489024676edda90b715c54d5dd613dbfab35
MD5 dc778e02f0b4b2b49c49f17331116efa
BLAKE2b-256 4d721a7e37f48d9c188bfb26ac21418852879e8621a58781e320beb924a2a0b5

See more details on using hashes here.

File details

Details for the file cdk8s_plone-0.1.4-py3-none-any.whl.

File metadata

  • Download URL: cdk8s_plone-0.1.4-py3-none-any.whl
  • Upload date:
  • Size: 596.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.14.0

File hashes

Hashes for cdk8s_plone-0.1.4-py3-none-any.whl
Algorithm Hash digest
SHA256 914673f9f470e74ec5915859a35c65e2b3ce531be06d4027f643ffe53a54a0b7
MD5 2a87a587ceec60df5cef7f9debe3fae1
BLAKE2b-256 4a91ffa10e16b61dcf0be78781728b9d077d4b07c05f34e5530a56920a917df9

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page