Skip to main content
The Launchpad uses a modular Docker Compose architecture that lets you include or exclude services based on your needs. All services run on a shared bridge network for seamless communication.

Compose File Structure

The Docker setup is split into four compose files:
FilePurpose
docker-compose.ymlMain orchestrator that includes other files
docker-compose.launchpad.ymlCore application services
docker-compose.supabase.ymlSupabase backend services
docker-compose.caddy.ymlReverse proxy with automatic HTTPS

Main Compose File

The docker-compose.yml file controls which services to include:
include:
  - path: ./docker-compose.launchpad.yml
  - path: ./docker-compose.supabase.yml   # Comment to exclude
  - path: ./docker-compose.caddy.yml      # Comment to exclude

networks:
  default:
    driver: bridge
    external: true
    name: "${PROJECT_NAME}-network"

Core Application Services

The docker-compose.launchpad.yml file contains the essential application services:
ServiceImagePortPurpose
apiCustom (Dockerfile.api)8080FastAPI application server
celery_workerCustom (Dockerfile.celery)-Async task processing
redisredis:latest6379Message broker & cache
dbsupabase/postgres:15.8.1.0855432PostgreSQL database
The API and Celery services mount the app/ directory for live code reloading during development.

Supabase Services

The docker-compose.supabase.yml file provides the full Supabase stack:
ServiceImagePurpose
studiosupabase/studioDashboard UI
kongkong:2.8.1API gateway (ports 8000, 8443)
authsupabase/gotrueAuthentication service
restpostgrest/postgrestAuto-generated REST API
realtimesupabase/realtimeWebSocket subscriptions
storagesupabase/storage-apiFile storage
imgproxydarthsim/imgproxyImage transformations
metasupabase/postgres-metaSchema introspection
functionssupabase/edge-runtimeDeno edge functions
analyticssupabase/logflareLog aggregation
vectortimberio/vectorLog collection
supavisorsupabase/supavisorConnection pooling
When Supabase is enabled, access the Studio dashboard at http://localhost:8000 with credentials from your .env file.

Caddy Reverse Proxy

The docker-compose.caddy.yml file provides:
  • Automatic HTTPS certificate management
  • Reverse proxy to application services
  • HTTP/2 support
  • Ports: 80 (HTTP), 443 (HTTPS), 2019 (admin API)

Including and Excluding Services

Option 1: Edit docker-compose.yml

Comment out the services you don’t need:
include:
  - path: ./docker-compose.launchpad.yml      # Always include
  # - path: ./docker-compose.supabase.yml     # Exclude Supabase
  # - path: ./docker-compose.caddy.yml        # Exclude Caddy

Option 2: Use CLI flags

Specify which compose files to use:
# Without Supabase (use external database)
docker compose -f docker-compose.launchpad.yml up

# Without Caddy (access Kong directly)
docker compose -f docker-compose.launchpad.yml \
               -f docker-compose.supabase.yml up

# Full stack
docker compose up

Management Scripts

The docker/ directory includes helper scripts:

start.sh

Creates the network if needed and starts all services:
cd docker && ./start.sh

stop.sh

Stops all running containers:
cd docker && ./stop.sh

logs.sh

Interactive log viewer with service selection:
cd docker && ./logs.sh

Architecture Overview

┌─────────────────────────────────────────────────────────┐
│                    Caddy (optional)                     │
│                   :80, :443, :2019                      │
└────────────────────────┬────────────────────────────────┘

┌────────────────────────▼────────────────────────────────┐
│                 Kong API Gateway                        │
│                  :8000, :8443                           │
└───────┬─────────────┬─────────────┬─────────────────────┘
        │             │             │
┌───────▼───────┐ ┌───▼───────┐ ┌───▼───────────────────┐
│  Auth/GoTrue  │ │ PostgREST │ │ Storage / Realtime /  │
│    :9999      │ │   :3000   │ │ Functions / etc.      │
└───────┬───────┘ └─────┬─────┘ └───────────┬───────────┘
        │               │                   │
┌───────▼───────────────▼───────────────────▼─────────────┐
│              PostgreSQL Database                        │
│              supabase/postgres:15.8.1.085              │
│              :5432 (direct) / :6543 (pooled)           │
└─────────────────────────────────────────────────────────┘

┌─────────────────────────────────────────────────────────┐
│               Application Services                      │
│  ┌─────────────────┐  ┌──────────────┐  ┌───────────┐  │
│  │ FastAPI (:8080) │  │ Celery Worker│  │   Redis   │  │
│  │    /app mount   │  │  async tasks │  │   :6379   │  │
│  └─────────────────┘  └──────────────┘  └───────────┘  │
└─────────────────────────────────────────────────────────┘

All services connected via: ${PROJECT_NAME}-network

Environment Variables

Key environment variables in docker/.env:
CategoryVariables
ProjectPROJECT_NAME
DatabasePOSTGRES_PASSWORD, POSTGRES_DB, POSTGRES_PORT
JWTJWT_SECRET, JWT_EXPIRY, ANON_KEY, SERVICE_ROLE_KEY
LLM ProvidersOPENAI_API_KEY, ANTHROPIC_API_KEY, MISTRAL_API_KEY, etc.
LangfuseLANGFUSE_PUBLIC_KEY, LANGFUSE_SECRET_KEY, LANGFUSE_BASE_URL
Copy docker/.env.example to docker/.env and configure your values before starting.