docker.recipes

Caisy

beginner

High-performance headless CMS with visual editor.

Overview

Caisy is a modern headless content management system built for performance and developer experience, featuring a visual editor that empowers content creators while delivering content through a high-performance GraphQL API. Founded as a German-based SaaS platform, Caisy distinguishes itself from traditional CMSs by combining intuitive visual content modeling with robust API-first architecture, making it particularly valuable for teams building modern web applications, mobile apps, and multi-channel digital experiences. This Docker configuration creates a local development environment by pairing Caisy with PostgreSQL 16, enabling developers to work with Caisy's content modeling and GraphQL capabilities locally before deploying to production. The stack combines Caisy's visual editor and content delivery engine with PostgreSQL's proven reliability for content storage, creating an environment where content teams can model complex content structures visually while developers consume that content through Caisy's optimized GraphQL endpoints. This setup is ideal for development teams working on headless projects who need local access to Caisy's features, agencies prototyping client projects, or organizations evaluating Caisy's capabilities before committing to the hosted service.

Key Features

  • Visual content modeling interface for creating custom content types without code
  • High-performance GraphQL API with automatic query optimization and caching
  • Built-in asset management with automatic image optimization and WebP conversion
  • Multi-language content support with translation workflows
  • Real-time collaborative editing with conflict resolution
  • Component-based content architecture for reusable content blocks
  • Advanced content relationships and reference management
  • Webhook support for triggering builds and integrations on content changes

Common Use Cases

  • 1Developing headless websites and web applications with complex content requirements
  • 2Building multi-platform mobile apps that need centralized content management
  • 3Creating marketing websites with frequent content updates from non-technical teams
  • 4Prototyping client projects that require visual content modeling capabilities
  • 5Developing e-commerce product catalogs with rich media and variant management
  • 6Building documentation sites with collaborative editing workflows
  • 7Creating multi-brand digital experiences with shared content libraries

Prerequisites

  • Docker and Docker Compose installed on your development machine
  • At least 4GB RAM available for PostgreSQL and Caisy containers
  • Port 3000 available for Caisy web interface access
  • Basic understanding of GraphQL for content consumption
  • Environment file with DB_PASSWORD variable configured
  • Familiarity with headless CMS concepts and API-driven development

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 caisy:
3 image: caisy/caisy:latest
4 container_name: caisy
5 restart: unless-stopped
6 environment:
7 DATABASE_URL: postgres://caisy:${DB_PASSWORD}@postgres:5432/caisy
8 ports:
9 - "3000:3000"
10 depends_on:
11 - postgres
12 networks:
13 - caisy-network
14
15 postgres:
16 image: postgres:16-alpine
17 container_name: caisy-postgres
18 environment:
19 POSTGRES_USER: caisy
20 POSTGRES_PASSWORD: ${DB_PASSWORD}
21 POSTGRES_DB: caisy
22 volumes:
23 - postgres_data:/var/lib/postgresql/data
24 networks:
25 - caisy-network
26
27volumes:
28 postgres_data:
29
30networks:
31 caisy-network:
32 driver: bridge

.env Template

.env
1DB_PASSWORD=changeme

Usage Notes

  1. 1Docs: https://caisy.io/docs
  2. 2Access at http://localhost:3000
  3. 3GraphQL API for content delivery
  4. 4Visual editor for content modeling
  5. 5Global CDN for asset delivery
  6. 6Caisy is primarily a SaaS; self-hosted option limited

Individual Services(2 services)

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

caisy
caisy:
  image: caisy/caisy:latest
  container_name: caisy
  restart: unless-stopped
  environment:
    DATABASE_URL: postgres://caisy:${DB_PASSWORD}@postgres:5432/caisy
  ports:
    - "3000:3000"
  depends_on:
    - postgres
  networks:
    - caisy-network
postgres
postgres:
  image: postgres:16-alpine
  container_name: caisy-postgres
  environment:
    POSTGRES_USER: caisy
    POSTGRES_PASSWORD: ${DB_PASSWORD}
    POSTGRES_DB: caisy
  volumes:
    - postgres_data:/var/lib/postgresql/data
  networks:
    - caisy-network

Quick Start

terminal
1# 1. Create the compose file
2cat > docker-compose.yml << 'EOF'
3services:
4 caisy:
5 image: caisy/caisy:latest
6 container_name: caisy
7 restart: unless-stopped
8 environment:
9 DATABASE_URL: postgres://caisy:${DB_PASSWORD}@postgres:5432/caisy
10 ports:
11 - "3000:3000"
12 depends_on:
13 - postgres
14 networks:
15 - caisy-network
16
17 postgres:
18 image: postgres:16-alpine
19 container_name: caisy-postgres
20 environment:
21 POSTGRES_USER: caisy
22 POSTGRES_PASSWORD: ${DB_PASSWORD}
23 POSTGRES_DB: caisy
24 volumes:
25 - postgres_data:/var/lib/postgresql/data
26 networks:
27 - caisy-network
28
29volumes:
30 postgres_data:
31
32networks:
33 caisy-network:
34 driver: bridge
35EOF
36
37# 2. Create the .env file
38cat > .env << 'EOF'
39DB_PASSWORD=changeme
40EOF
41
42# 3. Start the services
43docker compose up -d
44
45# 4. View logs
46docker 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/contentful-like-caisy/run | bash

Troubleshooting

  • Caisy container fails to start with database connection error: Ensure PostgreSQL container is fully initialized before Caisy starts, add healthcheck or increase depends_on timing
  • GraphQL queries returning empty results: Verify content has been published in Caisy admin interface, check API endpoint configuration
  • Asset uploads failing or not displaying: Check volume mounts for asset storage and verify Caisy has write permissions to mounted directories
  • Visual editor not loading properly: Clear browser cache and ensure all Caisy static assets are served correctly from port 3000
  • PostgreSQL connection pool exhausted: Increase PostgreSQL max_connections setting or optimize Caisy connection pooling configuration
  • Content changes not reflecting in API: Check if content is published and not in draft state, verify webhook triggers are configured properly

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