docker.recipes

Plone CMS

intermediate

Python-based enterprise CMS with powerful workflow capabilities.

Overview

Plone is a mature, enterprise-grade content management system built on Python and the Zope application server, first released in 2001. Known for its robust security model, sophisticated workflow engine, and multilingual capabilities, Plone has powered government websites, universities, and large corporations worldwide. Its architecture emphasizes content versioning, granular permissions, and enterprise-scale content governance that many organizations require for mission-critical web applications. This Docker configuration combines Plone's modern headless backend with Volto, the React-based frontend that represents Plone's evolution into a decoupled CMS architecture. The plone-backend container serves content via REST API while plone-frontend delivers the user interface, enabling developers to leverage Plone's powerful content modeling and workflow capabilities with contemporary JavaScript frameworks. This separation allows for flexible deployment scenarios and better performance scaling. Organizations with complex content approval processes, multi-departmental websites, or strict security requirements will find this stack particularly valuable. Government agencies, educational institutions, and enterprises that need detailed audit trails, advanced user role management, and compliance-ready content workflows can leverage Plone's battle-tested governance features while maintaining modern user experiences through the React frontend.

Key Features

  • Advanced workflow engine with customizable content approval processes and state transitions
  • Granular role-based permissions system with object-level security controls
  • Built-in content versioning and rollback capabilities for all content types
  • Multilingual content support with translation workflows and language-specific publishing
  • TTW (Through-The-Web) development capabilities for creating content types without coding
  • Zope's ZODB object database providing ACID transactions and automatic conflict resolution
  • Plone Registry for centralized configuration management across the entire site
  • Add-on ecosystem with hundreds of community-developed extensions and integrations

Common Use Cases

  • 1Government and municipal websites requiring strict content approval workflows and accessibility compliance
  • 2University and academic institution portals with department-specific content management needs
  • 3Corporate intranets with complex organizational hierarchies and document approval processes
  • 4Non-profit organizations managing multilingual content across different regions and languages
  • 5Publishing houses and media companies requiring editorial workflows and content scheduling
  • 6Healthcare and pharmaceutical companies needing audit trails and regulatory compliance features
  • 7Legal firms managing case documents with granular access controls and version tracking

Prerequisites

  • Docker and Docker Compose installed with at least 4GB RAM allocated to containers
  • Port 3000 and 8080 available for frontend and backend services respectively
  • Basic understanding of Python web applications and REST API concepts
  • Familiarity with React development if planning to customize the Volto frontend
  • Knowledge of Zope/ZODB concepts for advanced backend customization and add-on development
  • Understanding of content management workflows and user role hierarchies for proper site administration

For development & testing. Review security settings, change default credentials, and test thoroughly before production use. See Terms

docker-compose.yml

docker-compose.yml
1services:
2 plone:
3 image: plone/plone-backend:latest
4 container_name: plone
5 restart: unless-stopped
6 environment:
7 SITE: mysite
8 CORS_ALLOW_ORIGIN: "*"
9 volumes:
10 - plone_data:/data
11 ports:
12 - "8080:8080"
13 networks:
14 - plone-network
15
16 frontend:
17 image: plone/plone-frontend:latest
18 container_name: plone-frontend
19 restart: unless-stopped
20 environment:
21 RAZZLE_API_PATH: http://plone:8080/mysite
22 ports:
23 - "3000:3000"
24 depends_on:
25 - plone
26 networks:
27 - plone-network
28
29volumes:
30 plone_data:
31
32networks:
33 plone-network:
34 driver: bridge

.env Template

.env
1SITE=mysite

Usage Notes

  1. 1Docs: https://6.docs.plone.org/
  2. 2Frontend (Volto) at http://localhost:3000
  3. 3Backend REST API at http://localhost:8080/mysite
  4. 4Create admin: docker exec -it plone bin/adduser admin admin Manager
  5. 5Enterprise security: granular permissions, workflows
  6. 6Python/Zope ecosystem, highly customizable

Individual Services(2 services)

Copy individual services to mix and match with your existing compose files.

plone
plone:
  image: plone/plone-backend:latest
  container_name: plone
  restart: unless-stopped
  environment:
    SITE: mysite
    CORS_ALLOW_ORIGIN: "*"
  volumes:
    - plone_data:/data
  ports:
    - "8080:8080"
  networks:
    - plone-network
frontend
frontend:
  image: plone/plone-frontend:latest
  container_name: plone-frontend
  restart: unless-stopped
  environment:
    RAZZLE_API_PATH: http://plone:8080/mysite
  ports:
    - "3000:3000"
  depends_on:
    - plone
  networks:
    - plone-network

Quick Start

terminal
1# 1. Create the compose file
2cat > docker-compose.yml << 'EOF'
3services:
4 plone:
5 image: plone/plone-backend:latest
6 container_name: plone
7 restart: unless-stopped
8 environment:
9 SITE: mysite
10 CORS_ALLOW_ORIGIN: "*"
11 volumes:
12 - plone_data:/data
13 ports:
14 - "8080:8080"
15 networks:
16 - plone-network
17
18 frontend:
19 image: plone/plone-frontend:latest
20 container_name: plone-frontend
21 restart: unless-stopped
22 environment:
23 RAZZLE_API_PATH: http://plone:8080/mysite
24 ports:
25 - "3000:3000"
26 depends_on:
27 - plone
28 networks:
29 - plone-network
30
31volumes:
32 plone_data:
33
34networks:
35 plone-network:
36 driver: bridge
37EOF
38
39# 2. Create the .env file
40cat > .env << 'EOF'
41SITE=mysite
42EOF
43
44# 3. Start the services
45docker compose up -d
46
47# 4. View logs
48docker compose logs -f

One-Liner

Run this command to download and set up the recipe in one step:

terminal
1curl -fsSL https://docker.recipes/api/recipes/plone/run | bash

Troubleshooting

  • CORS errors in browser console: Verify CORS_ALLOW_ORIGIN environment variable matches your access URL and restart containers
  • Frontend shows 'Network Error' connecting to backend: Check that RAZZLE_API_PATH points to the correct backend container URL including site path
  • Database IntegrityError on content creation: Stop containers, remove plone_data volume, and restart to reset ZODB database
  • adduser command fails with 'No such file': Ensure you're running the command against the backend container, not the frontend container
  • Slow performance on large sites: Increase Docker memory allocation and consider configuring Zope's ZServer thread count via environment variables
  • Add-on installation fails: Mount a custom buildout configuration or use the official Plone image build process for persistent add-ons

Community Notes

Loading...
Loading notes...

Download Recipe Kit

Get all files in a ready-to-deploy package

Includes docker-compose.yml, .env template, README, and license

Ad Space