5.8 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 (optional; see Caddy profile) |
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.
Caddy profile
Caddy (ports 80 and 443) is optional and behind the caddy profile so it does not conflict with an existing reverse proxy (e.g. Coolify, Traefik, nginx).
- With Caddy (you want Reflector to handle SSL):
docker compose -f docker-compose.prod.yml --profile caddy up -d - Without Caddy (Coolify or another proxy already on 80/443):
docker compose -f docker-compose.prod.yml up -dThen configure your proxy to send traffic toweb:3000(frontend) andserver:1250(API).
Common Commands
Start all services
# Without Caddy (e.g. when using Coolify)
docker compose -f docker-compose.prod.yml up -d
# With Caddy as reverse proxy
docker compose -f docker-compose.prod.yml --profile caddy 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:
- Remove
postgresservice from compose file - Update
DATABASE_URLinserver/.env:DATABASE_URL=postgresql+asyncpg://user:pass@external-host:5432/reflector
Using external Redis
- Remove
redisservice from compose file - 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:
- Deploy Authentik separately
- Connect to Reflector's network:
docker network connect reflector_default authentik-server-1 - 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