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

This version

0.1.2

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.2.tar.gz (599.0 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.2-py3-none-any.whl (596.4 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: cdk8s_plone-0.1.2.tar.gz
  • Upload date:
  • Size: 599.0 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.2.tar.gz
Algorithm Hash digest
SHA256 daece9e867d0653dc9a041b052c302167184af4e5d50dc2ca080986f599669af
MD5 1392249f2eeeba4dc40ba7f2f93a6914
BLAKE2b-256 0a51e4e7a5c4d6a4d67b07bcab714c08cf02c05b1bc2b6bf16110edead96fa83

See more details on using hashes here.

File details

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

File metadata

  • Download URL: cdk8s_plone-0.1.2-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.2-py3-none-any.whl
Algorithm Hash digest
SHA256 66932b23b18c5e4ab69aefabad705d1c0ce147912049f4d50ecba4a5973a2c1f
MD5 c6768e0ca3e913e0103b477619966290
BLAKE2b-256 52286fcd0c4616a67e3a2ee60f3b66abc8f84f3051ba72ab1999aaa119da4472

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