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:
| File | Purpose |
|---|
docker-compose.yml | Main orchestrator that includes other files |
docker-compose.launchpad.yml | Core application services |
docker-compose.supabase.yml | Supabase backend services |
docker-compose.caddy.yml | Reverse 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:
| Service | Image | Port | Purpose |
|---|
| api | Custom (Dockerfile.api) | 8080 | FastAPI application server |
| celery_worker | Custom (Dockerfile.celery) | - | Async task processing |
| redis | redis:latest | 6379 | Message broker & cache |
| db | supabase/postgres:15.8.1.085 | 5432 | PostgreSQL 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:
| Service | Image | Purpose |
|---|
| studio | supabase/studio | Dashboard UI |
| kong | kong:2.8.1 | API gateway (ports 8000, 8443) |
| auth | supabase/gotrue | Authentication service |
| rest | postgrest/postgrest | Auto-generated REST API |
| realtime | supabase/realtime | WebSocket subscriptions |
| storage | supabase/storage-api | File storage |
| imgproxy | darthsim/imgproxy | Image transformations |
| meta | supabase/postgres-meta | Schema introspection |
| functions | supabase/edge-runtime | Deno edge functions |
| analytics | supabase/logflare | Log aggregation |
| vector | timberio/vector | Log collection |
| supavisor | supabase/supavisor | Connection 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:
stop.sh
Stops all running containers:
logs.sh
Interactive log viewer with service selection:
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:
| Category | Variables |
|---|
| Project | PROJECT_NAME |
| Database | POSTGRES_PASSWORD, POSTGRES_DB, POSTGRES_PORT |
| JWT | JWT_SECRET, JWT_EXPIRY, ANON_KEY, SERVICE_ROLE_KEY |
| LLM Providers | OPENAI_API_KEY, ANTHROPIC_API_KEY, MISTRAL_API_KEY, etc. |
| Langfuse | LANGFUSE_PUBLIC_KEY, LANGFUSE_SECRET_KEY, LANGFUSE_BASE_URL |
Copy docker/.env.example to docker/.env and configure your values before starting.