Files
reflector/docs/docs/installation/docker-setup.md
Igor Monadical 407c15299f docs: docs website + installation (#778)
* feat: WIP doc (vibe started and iterated)

* install from scratch docs

* caddyfile.example

* gitignore

* authentik script

* authentik script

* authentik script

* llm doc

* authentik ongoing

* more daily setup logs

* doc website

* gpu self hosted setup guide (no-mistakes)

* doc review round

* doc review round

* doc review round

* update doc site sidebars

* feat(docs): add mermaid diagram support

* docs polishing

* live pipeline doc

* move pipeline dev docs to dev docs location

* doc pr review iteration

* dockerfile healthcheck

* docs/pr-comments

* remove jwt comment

* llm suggestion

* pr comments

* pr comments

* document auto migrations

* cleanup docs

---------

Co-authored-by: Mathieu Virbel <mat@meltingrocks.com>
Co-authored-by: Igor Loskutov <igor.loskutoff@gmail.com>
2026-01-06 17:25:02 -05:00

4.4 KiB

sidebar_position, title
sidebar_position title
3 Docker Reference

Docker Reference

This page documents the Docker Compose configuration for Reflector. For the complete deployment guide, see Deployment Guide.

Services

The docker-compose.prod.yml includes these services:

Service Image Purpose
web monadicalsas/reflector-frontend Next.js frontend
server monadicalsas/reflector-backend FastAPI backend
worker monadicalsas/reflector-backend Celery worker for background tasks
beat monadicalsas/reflector-backend Celery beat scheduler
redis redis:7.2-alpine Message broker and cache
postgres postgres:17-alpine Primary database
caddy caddy:2-alpine Reverse proxy with auto-SSL

Environment Files

Reflector uses two separate environment files:

Backend (server/.env)

Used by: server, worker, beat

Key variables:

# Database connection
DATABASE_URL=postgresql+asyncpg://reflector:reflector@postgres:5432/reflector

# Redis
REDIS_HOST=redis
CELERY_BROKER_URL=redis://redis:6379/1
CELERY_RESULT_BACKEND=redis://redis:6379/1

# API domain and CORS
BASE_URL=https://api.example.com
CORS_ORIGIN=https://app.example.com

# Modal GPU processing
TRANSCRIPT_BACKEND=modal
TRANSCRIPT_URL=https://...
TRANSCRIPT_MODAL_API_KEY=...

Frontend (www/.env)

Used by: web

Key variables:

# Domain configuration
SITE_URL=https://app.example.com
API_URL=https://api.example.com
WEBSOCKET_URL=wss://api.example.com
SERVER_API_URL=http://server:1250

# Authentication
NEXTAUTH_URL=https://app.example.com
NEXTAUTH_SECRET=...

Note: API_URL is used client-side (browser), SERVER_API_URL is used server-side (SSR).

Volumes

Volume Purpose
redis_data Redis persistence
postgres_data PostgreSQL data
server_data Uploaded files, local storage
caddy_data SSL certificates
caddy_config Caddy configuration

Network

All services share the default network. The network is marked attachable: true to allow external containers (like Authentik) to join.

Common Commands

Start all services

docker compose -f docker-compose.prod.yml up -d

View logs

# All services
docker compose -f docker-compose.prod.yml logs -f

# Specific service
docker compose -f docker-compose.prod.yml logs server --tail 50

Restart a service

# Quick restart (doesn't reload .env changes)
docker compose -f docker-compose.prod.yml restart server

# Reload .env and restart
docker compose -f docker-compose.prod.yml up -d server

Run database migrations

docker compose -f docker-compose.prod.yml exec server uv run alembic upgrade head

Access database

docker compose -f docker-compose.prod.yml exec postgres psql -U reflector

Pull latest images

docker compose -f docker-compose.prod.yml pull
docker compose -f docker-compose.prod.yml up -d

Stop all services

docker compose -f docker-compose.prod.yml down

Full reset (WARNING: deletes data)

docker compose -f docker-compose.prod.yml down -v

Customization

Using a different database

To use an external PostgreSQL:

  1. Remove postgres service from compose file
  2. Update DATABASE_URL in server/.env:
    DATABASE_URL=postgresql+asyncpg://user:pass@external-host:5432/reflector
    

Using external Redis

  1. Remove redis service from compose file
  2. Update Redis settings in server/.env:
    REDIS_HOST=external-redis-host
    CELERY_BROKER_URL=redis://external-redis-host:6379/1
    

Adding Authentik

To add Authentik for authentication, see Authentication Setup. Quick steps:

  1. Deploy Authentik separately
  2. Connect to Reflector's network:
    docker network connect reflector_default authentik-server-1
    
  3. Add to Caddyfile:
    authentik.example.com {
        reverse_proxy authentik-server-1:9000
    }
    

Caddyfile Reference

The Caddyfile supports environment variable substitution:

{$FRONTEND_DOMAIN:app.example.com} {
    reverse_proxy web:3000
}

{$API_DOMAIN:api.example.com} {
    reverse_proxy server:1250
}

Set FRONTEND_DOMAIN and API_DOMAIN environment variables, or edit the file directly.

Reload Caddy after changes

docker compose -f docker-compose.prod.yml exec caddy caddy reload --config /etc/caddy/Caddyfile