Docker Deployment¶
Production-ready Docker deployment for Remembra.
Quick Start¶
docker run -d \
--name remembra \
-p 8787:8787 \
-e OPENAI_API_KEY=sk-your-key \
-v remembra-data:/app/data \
remembra/remembra
Docker Compose (Recommended)¶
For production, use Docker Compose with persistent storage:
docker-compose.yml
version: '3.8'
services:
remembra:
image: remembra/remembra:latest
ports:
- "8787:8787"
environment:
# Required
- OPENAI_API_KEY=${OPENAI_API_KEY}
# Database
- REMEMBRA_DATABASE_PATH=/app/data/remembra.db
# Qdrant (built-in)
- QDRANT_HOST=qdrant
- QDRANT_PORT=6333
# Security (enable in production!)
- REMEMBRA_AUTH_ENABLED=true
- REMEMBRA_AUTH_MASTER_KEY=${REMEMBRA_MASTER_KEY}
# Performance
- REMEMBRA_RATE_LIMIT_ENABLED=true
volumes:
- remembra-data:/app/data
depends_on:
- qdrant
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8787/health"]
interval: 30s
timeout: 10s
retries: 3
qdrant:
image: qdrant/qdrant:latest
volumes:
- qdrant-data:/qdrant/storage
ports:
- "6333:6333"
volumes:
remembra-data:
qdrant-data:
Start with:
# Create .env file
echo "OPENAI_API_KEY=sk-your-key" > .env
echo "REMEMBRA_MASTER_KEY=$(openssl rand -hex 32)" >> .env
# Start services
docker-compose up -d
Environment Variables¶
Required¶
| Variable | Description | Example |
|---|---|---|
OPENAI_API_KEY |
OpenAI API key for embeddings | sk-... |
Storage¶
| Variable | Default | Description |
|---|---|---|
REMEMBRA_DATABASE_PATH |
./remembra.db |
SQLite database path |
QDRANT_HOST |
localhost |
Qdrant host |
QDRANT_PORT |
6333 |
Qdrant port |
Security¶
| Variable | Default | Description |
|---|---|---|
REMEMBRA_AUTH_ENABLED |
true |
Enable API key auth |
REMEMBRA_AUTH_MASTER_KEY |
- | Master admin key |
REMEMBRA_RATE_LIMIT_ENABLED |
true |
Enable rate limiting |
Extraction¶
| Variable | Default | Description |
|---|---|---|
REMEMBRA_EXTRACTION_MODEL |
gpt-4o-mini |
Model for fact extraction |
REMEMBRA_SMART_EXTRACTION_ENABLED |
true |
Enable LLM extraction |
Retrieval¶
| Variable | Default | Description |
|---|---|---|
REMEMBRA_HYBRID_SEARCH_ENABLED |
true |
Enable hybrid search |
REMEMBRA_RERANK_ENABLED |
false |
Enable CrossEncoder reranking |
REMEMBRA_DEFAULT_MAX_TOKENS |
4000 |
Max context tokens |
See Configuration Reference for all options.
Production Checklist¶
- [ ] Set
REMEMBRA_AUTH_ENABLED=true - [ ] Generate strong
REMEMBRA_AUTH_MASTER_KEY - [ ] Enable rate limiting
- [ ] Use persistent volumes for data
- [ ] Set up health checks
- [ ] Configure reverse proxy (nginx/traefik) with HTTPS
- [ ] Set up backups for volumes
Reverse Proxy (HTTPS)¶
Example nginx configuration:
server {
listen 443 ssl http2;
server_name memory.yourdomain.com;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
location / {
proxy_pass http://localhost:8787;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Resource Requirements¶
| Workload | CPU | Memory | Storage |
|---|---|---|---|
| Development | 1 core | 1GB | 1GB |
| Small (< 10k memories) | 2 cores | 2GB | 5GB |
| Medium (10k-100k) | 4 cores | 4GB | 20GB |
| Large (100k+) | 8+ cores | 8GB+ | 50GB+ |
Scaling¶
Horizontal Scaling¶
For high availability, run multiple Remembra instances behind a load balancer:
Note: Use Redis for rate limiting when scaling horizontally:
Qdrant Clustering¶
For large deployments, use Qdrant's distributed mode. See Qdrant documentation.
Backup & Restore¶
Backup¶
# Stop containers (optional, for consistent backup)
docker-compose stop
# Backup volumes
docker run --rm \
-v remembra-data:/data \
-v $(pwd):/backup \
alpine tar czf /backup/remembra-backup.tar.gz /data
docker run --rm \
-v qdrant-data:/data \
-v $(pwd):/backup \
alpine tar czf /backup/qdrant-backup.tar.gz /data
# Restart
docker-compose start
Restore¶
docker run --rm \
-v remembra-data:/data \
-v $(pwd):/backup \
alpine tar xzf /backup/remembra-backup.tar.gz -C /
docker run --rm \
-v qdrant-data:/data \
-v $(pwd):/backup \
alpine tar xzf /backup/qdrant-backup.tar.gz -C /
Troubleshooting¶
Container won't start¶
Common issues:
- Missing OPENAI_API_KEY
- Port 8787 already in use
- Insufficient permissions for volume mount
Qdrant connection failed¶
Ensure Qdrant is running and accessible:
Out of memory¶
Increase Docker memory limit or reduce REMEMBRA_DEFAULT_MAX_TOKENS.