Docker Deployment

Quick start

mkdir mdplanner && cd mdplanner
curl -fsSLO https://raw.githubusercontent.com/studiowebux/mdplanner/main/deploy/quick-start/docker-compose.yml
docker compose up -d

Open http://localhost:8003. Project files persist in ./data/.

Image:
ghcr.io/studiowebux/mdplanner
— multi-platform (amd64, arm64), tagged per release and latest.

Configuration

Edit docker-compose.yml or create a .env file next to it.

Variable Default Description
Port mapping 8003 Change ports in docker-compose.yml
Data path ./data Host directory for project files
MDPLANNER_CACHE disabled Set to 1 to enable SQLite cache
MDPLANNER_API_TOKEN Session token for REST API authentication
MDPLANNER_MCP_TOKEN Bearer token for /mcp endpoint
MDPLANNER_WEBDAV disabled Set to 1 to enable WebDAV
MDPLANNER_WEBDAV_USER WebDAV basic auth username
MDPLANNER_WEBDAV_PASS WebDAV basic auth password
MDPLANNER_READ_ONLY disabled Set to 1 for public demo mode
MDPLANNER_SECRET_KEY 32-byte hex key for integration encryption
MDPLANNER_CORS_ORIGIN Restrict CORS to a specific origin
MDPLANNER_RATE_LIMIT 200 Max requests per minute per IP
MDPLANNER_MAX_BODY_SIZE 10 Max request body in MB

See Environment Variables for the
full list.

Enabling SQLite cache

Override the command in docker-compose.yml:

services:
  mdplanner:
    image: ghcr.io/studiowebux/mdplanner:latest
    ports:
      - "8003:8003"
    volumes:
      - ./data:/data
    environment:
      - MDPLANNER_CACHE=1
    restart: unless-stopped
    healthcheck:
      test: ["CMD", "wget", "-qO", "/dev/null", "http://127.0.0.1:8003/api/health"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 15s

Initialize a project directory

mkdir -p data
docker run --rm -v "$(pwd)/data:/data" ghcr.io/studiowebux/mdplanner:latest init /data

Management

docker compose up -d      # Start in background
docker compose down       # Stop
docker compose logs -f    # Follow logs
docker compose pull       # Update image

Healthcheck

The compose file includes a healthcheck hitting /api/health. This endpoint
returns status, version, uptime, and cache info without requiring authentication.