Configuration
Configure MeetBot for your environment.
Environment Variables
Required Variables
| Variable | Description | Example |
|---|---|---|
DATABASE_URL | PostgreSQL connection string | postgresql://user:pass@host:5432/db |
JWT_SECRET_KEY | Secret for JWT token signing | Random 32+ char string |
AWS_ACCESS_KEY_ID | S3/MinIO access key | minioadmin |
AWS_SECRET_ACCESS_KEY | S3/MinIO secret key | minioadmin |
AWS_BUCKET_NAME | S3 bucket for recordings | meetbot-recordings |
Optional Variables
| Variable | Description | Default |
|---|---|---|
S3_ENDPOINT | Custom S3 endpoint (for MinIO) | None (uses AWS) |
AWS_REGION | AWS region | us-east-1 |
CORS_ORIGINS | Allowed CORS origins | * |
LOG_LEVEL | Logging level | INFO |
OAuth Configuration
| Variable | Description |
|---|---|
GITHUB_CLIENT_ID | GitHub OAuth app client ID |
GITHUB_CLIENT_SECRET | GitHub OAuth app secret |
GOOGLE_CLIENT_ID | Google OAuth client ID |
GOOGLE_CLIENT_SECRET | Google OAuth client secret |
Docker Configuration
docker-compose.yml
Key configuration options:
services:
server:
environment:
# Database
DATABASE_URL: postgresql+asyncpg://postgres:postgres@postgres:5432/meetbot
# JWT
JWT_SECRET_KEY: ${JWT_SECRET_KEY:-change-me-in-production}
# Storage
S3_ENDPOINT: http://minio:9000
AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID:-minioadmin}
AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY:-minioadmin}
AWS_BUCKET_NAME: ${AWS_BUCKET_NAME:-meetbot-recordings}
# Bot deployment
BOT_CALLBACK_URL: http://server:8000/api/v1/bot-callbacks
DOCKER_NETWORK: meetbot-network
Storage Configuration
Using MinIO (Local/Self-Hosted)
minio:
image: minio/minio
command: server /data --console-address ":9001"
environment:
MINIO_ROOT_USER: minioadmin
MINIO_ROOT_PASSWORD: minioadmin
volumes:
- minio-data:/data
Using AWS S3
# Remove S3_ENDPOINT to use AWS S3
AWS_ACCESS_KEY_ID=your-aws-access-key
AWS_SECRET_ACCESS_KEY=your-aws-secret-key
AWS_BUCKET_NAME=your-bucket-name
AWS_REGION=us-east-1
Bot Configuration
Default Bot Settings
Configure default settings for all bots:
# apps/server/app/config.py
class Settings:
# Default bot display name
DEFAULT_BOT_NAME: str = "MeetBot"
# Heartbeat interval (ms)
DEFAULT_HEARTBEAT_INTERVAL: int = 5000
# Automatic leave timeouts (seconds)
DEFAULT_WAITING_ROOM_TIMEOUT: int = 300
DEFAULT_NO_ONE_JOINED_TIMEOUT: int = 300
DEFAULT_EVERYONE_LEFT_TIMEOUT: int = 60
Per-Bot Configuration
Each bot can override defaults:
{
"botDisplayName": "Custom Name",
"heartbeatInterval": 10000,
"automaticLeave": {
"waitingRoomTimeout": 600,
"noOneJoinedTimeout": 120,
"everyoneLeftTimeout": 30
}
}
Security Settings
JWT Configuration
# Token expiration times
ACCESS_TOKEN_EXPIRE_MINUTES=30
REFRESH_TOKEN_EXPIRE_DAYS=7
Rate Limiting
Configure in app/core/security.py:
RATE_LIMIT_PER_MINUTE = 60
RATE_LIMIT_PER_HOUR = 1000
CORS
# Comma-separated list of allowed origins
CORS_ORIGINS=http://localhost:3000,https://app.meetbot.dev
Logging
Log Levels
LOG_LEVEL=INFO # DEBUG, INFO, WARNING, ERROR, CRITICAL
Structured Logging
# Enable JSON logging for production
LOG_FORMAT=json
Production Recommendations
-
Generate secure secrets:
openssl rand -hex 32 # For JWT_SECRET_KEY -
Use managed database:
- AWS RDS
- Google Cloud SQL
- Supabase
-
Use managed storage:
- AWS S3
- Google Cloud Storage
- Cloudflare R2
-
Enable HTTPS:
- Use a reverse proxy (nginx, Traefik)
- Or a managed load balancer
-
Monitor and alert:
- Set up health checks
- Configure log aggregation
- Set up error tracking (Sentry)