$docker.recipes

Caisy

beginner

High-performance headless CMS with visual editor.

[i]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

  • [1]Developing headless websites and web applications with complex content requirements
  • [2]Building multi-platform mobile apps that need centralized content management
  • [3]Creating marketing websites with frequent content updates from non-technical teams
  • [4]Prototyping client projects that require visual content modeling capabilities
  • [5]Developing e-commerce product catalogs with rich media and variant management
  • [6]Building documentation sites with collaborative editing workflows
  • [7]Creating 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
[!]

WARNING: 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

[i]Usage Notes

  1. [1]Docs: https://caisy.io/docs
  2. [2]Access at http://localhost:3000
  3. [3]GraphQL API for content delivery
  4. [4]Visual editor for content modeling
  5. [5]Global CDN for asset delivery
  6. [6]Caisy 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