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.3

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.3.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.3-py3-none-any.whl (596.4 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: cdk8s_plone-0.1.3.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.3.tar.gz
Algorithm Hash digest
SHA256 1eedd49b8947773b7d2933a983aa8c82fefb6b5a016093ffb98c39d65dde2bd5
MD5 83250f29d1f2214397c2e58b1e425156
BLAKE2b-256 b9414d3591d71ddd6d16e1d5448569d7b22ca2b2bc6400da11640be0a476f5e2

See more details on using hashes here.

File details

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

File metadata

  • Download URL: cdk8s_plone-0.1.3-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.3-py3-none-any.whl
Algorithm Hash digest
SHA256 4bb1814d8da64fe8aabc41f3210f1b3acb87661d800a4ba855d13bcb3b690e7c
MD5 f9c2f0e712c0b23920b6dc22bb50a45a
BLAKE2b-256 082aa7c18bc6722480138481c4c2f05dd7426a089cd9f547cdac2abc3698d796

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