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)
  • appVersion - kube-httpcache container image version (default: chartVersion or chart default)

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.5.tar.gz (599.6 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.5-py3-none-any.whl (597.0 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: cdk8s_plone-0.1.5.tar.gz
  • Upload date:
  • Size: 599.6 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.5.tar.gz
Algorithm Hash digest
SHA256 7e5ec979d1a9d79f18bddc19a9c95afc7d9bb0a39eec643043967163e4b3314b
MD5 4f86c2c2856e0fe00dcd4908a3acfa46
BLAKE2b-256 c026a92509f8855f8849bbcb873e5f10e78854479fa1a33ce2d40d9a49f04a7d

See more details on using hashes here.

File details

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

File metadata

  • Download URL: cdk8s_plone-0.1.5-py3-none-any.whl
  • Upload date:
  • Size: 597.0 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.5-py3-none-any.whl
Algorithm Hash digest
SHA256 ac9213e2faaaf6ab70585976ed062a84198289b69c7413bab4cc59ab137e2dfd
MD5 f609fd48115f2cf17fb9e74cb555e205
BLAKE2b-256 0c1af78bb8a8d525971dfb0a6a92764419a8d62b251bc81d7773a85ffbf51420

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