Files
metabuilder/deployment/docker/celery-worker/INDEX.md
T
2026-01-24 00:25:09 +00:00

356 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Celery Worker Container - Complete Implementation
**Phase 8: Email Service Background Task Processing**
Location: `/deployment/docker/celery-worker/`
## Files Created
### 1. **Dockerfile** (2.8 KB)
Multi-stage Docker image for Celery worker container.
**Features**:
- Python 3.11-slim base image (minimal footprint)
- Build stage: Compiles dependencies with gcc/g++
- Runtime stage: Only runtime dependencies (ca-certificates, libpq5, curl)
- Non-root user (`celeryworker` UID 1000) for security
- Health check via `celery inspect ping` (30s interval, 15s startup)
- Environment variables for Redis broker and result backend
- Logs volume: `/app/logs/` for persistent logging
**CMD**:
```bash
celery -A tasks.celery_app worker \
--loglevel=info \
--concurrency=4 \
--time-limit=300 \
--soft-time-limit=280 \
--pool=prefork \
--queues=sync,send,delete,spam,periodic \
--hostname=celery-worker@%h \
--logfile=/app/logs/celery-worker.log
```
### 2. **docker-compose.yml** (6.7 KB)
Docker Compose service definitions for Celery ecosystem.
**Services**:
1. **celery-worker** - Main task processor
- Image: Custom (from Dockerfile)
- Container: `metabuilder-celery-worker`
- Concurrency: 4 worker processes
- Timeout: 300s hard, 280s soft
- Health check: `celery inspect ping` (30s)
- Resource limits: 2 CPU / 512 MB memory
- Logs: JSON-file driver (10MB / 3 files)
- Volumes: `celery_worker_logs:/app/logs`
2. **celery-beat** - Task scheduler
- Image: Custom (same Dockerfile)
- Container: `metabuilder-celery-beat`
- Scheduler: PersistentScheduler (database-backed)
- Schedule DB: `/app/logs/celery-beat-schedule.db`
- Tasks:
- `sync-emails-every-5min` - Periodic email sync
- `cleanup-stale-tasks-hourly` - Redis cleanup
- Health check: `ps aux` (process monitor)
- Depends on: redis, postgres, celery-worker
3. **celery-flower** - Web monitoring dashboard
- Image: `mher/flower:2.0.1` (official)
- Container: `metabuilder-celery-flower`
- Port: `5556:5555`
- URL: http://localhost:5556
- Database: `/data/flower.db` (persistent SQLite)
- Features: Task history, worker stats, real-time graphs
- Health check: `curl http://localhost:5555/health`
- Depends on: redis, celery-worker
**Volumes**:
- `celery_worker_logs` - tmpfs (100MB, in-memory) for logs
- `celery_flower_data` - local (persistent) for Flower database
**Network**: `metabuilder-dev-network` (external, from main compose)
### 3. **README.md** (13 KB)
Complete user guide for Celery worker operations.
**Sections**:
- Quick start guide (3 commands to get running)
- Architecture overview with diagrams
- Multi-tenant safety validation
- Queue types and priorities (sync, send, delete, spam, periodic)
- Task timeout configuration (hard/soft limits)
- Deployment instructions (Docker Compose)
- Configuration via environment variables
- Resource limits and tuning
- Monitoring with Flower dashboard
- Health checks (worker, beat, flower)
- Logs inspection and troubleshooting
- Task management (list, revoke, cancel, trigger)
- Queue management (depth, status, flush)
- Production checklist
### 4. **SETUP.md** (14 KB)
Step-by-step setup and operational guide.
**Sections**:
- Quick start (5-step guide)
- Environment setup (create .env, configure)
- Docker setup (build images, network, volumes)
- Database setup (PostgreSQL verification)
- Redis setup (broker/result backend)
- Configuration guide (concurrency, timeouts, memory, logging)
- Operational tasks (start, stop, restart, monitor)
- Monitoring commands (Flower, CLI tools, logs)
- Task management (list, check status, cancel, trigger)
- Troubleshooting (not starting, crashes, not processing, memory, timeouts, connectivity)
- Performance tuning (queue optimization, connection pooling)
- Production deployment (checklist, environment, build, Kubernetes)
### 5. **ARCHITECTURE.md** (19 KB)
Technical architecture documentation.
**Sections**:
- System overview with component diagrams
- Service architecture (workers, beat, flower, infrastructure)
- Component details (concurrency, queues, health checks)
- Data flow (email sync, email send)
- Multi-tenant safety (validation pattern, data isolation)
- Retry and error handling (exponential backoff)
- Health checks (worker, beat, flower, startup)
- Resource management (memory, CPU, connection pooling)
- Volume and persistence (tmpfs vs local)
- Security (task validation, credential handling, network)
- Monitoring and observability (metrics, logging, Flower UI)
- References (Celery docs, Flower docs, Redis docs)
### 6. **.env.example** (6.8 KB)
Environment variable configuration template.
**Sections**:
- Redis configuration (broker, result backend, SSL/TLS)
- Database configuration (PostgreSQL)
- Worker configuration (concurrency, timeouts, backoff)
- Celery beat scheduler configuration
- Logging configuration
- Email service configuration
- Task-specific settings (sync batch size, SMTP timeout)
- Security configuration (encryption keys, SSL verification)
- Monitoring and observability (Flower, Prometheus)
- Resource limits (Docker)
- Deployment mode (environment variable)
**61 configurable settings** with descriptions and sensible defaults.
### 7. **manage.sh** (15 KB)
Management script for lifecycle and monitoring commands.
**Command Groups**:
**Lifecycle**:
- `up` - Start all services
- `down` - Stop all services
- `restart` - Restart all services
- `rebuild` - Rebuild Docker images
**Monitoring**:
- `logs [service]` - Show logs (worker, beat, flower, redis, all)
- `stats` - Worker statistics
- `health` - Health check all services
- `ps` - Show running containers
**Task Management**:
- `tasks [state]` - List tasks (active, reserved, registered, failed)
- `task:status <id>` - Check task status
- `task:revoke <id>` - Cancel running task
- `task:purge` - Clear all pending tasks
**Queue Management**:
- `queue:status` - Show queue statistics
- `queue:list` - List all queues
**Worker Operations**:
- `worker:ping` - Check if worker responsive
- `worker:info` - Show worker information
**Flower**:
- `flower:open` - Open Flower in browser
**Development**:
- `dev:logs` - Follow all logs
- `dev:shell` - Open Python shell
- `dev:test` - Run test tasks
**Maintenance**:
- `clean:logs` - Clear log files
- `clean:redis` - Flush Redis
- `clean:all` - Clean all data
**Help**:
- `help` - Show usage guide
- `version` - Show version
## Quick Start
### 1. Build and Start
```bash
cd /path/to/metabuilder
# Start with main compose + Celery
docker-compose -f deployment/docker/docker-compose.development.yml \
-f deployment/docker/celery-worker/docker-compose.yml \
up -d
```
### 2. Verify
```bash
# Check containers
docker ps | grep metabuilder
# Check health
docker-compose exec celery-worker celery -A tasks.celery_app inspect ping
```
### 3. Monitor
```bash
# Open Flower dashboard
http://localhost:5556
# Check logs
docker-compose logs -f celery-worker
```
## Configuration Summary
### Default Settings
```yaml
concurrency: 4 # 4 concurrent worker processes
task_timeout: 300 seconds # 5 minutes hard limit
task_soft_timeout: 280 seconds # 4m 40s soft limit
redis_broker: redis://redis:6379/0 # Task queue
redis_result: redis://redis:6379/1 # Task results
database: postgresql://metabuilder:password@postgres:5432/metabuilder_dev
pool: prefork # Process-based (not threaded)
queues: sync,send,delete,spam,periodic # 5 task queue types
```
### Memory Overhead
```
Per worker process: 100-150 MB
4 workers base: 400-600 MB
Docker limit: 512 MB
Recommended: Reserve 256 MB
Total stack (postgres, redis, workers, beat, flower):
~1.5-2 GB with all services running
```
## Files Modified
None. All files are new in `/deployment/docker/celery-worker/` directory.
## Dependencies
### External Services
- **PostgreSQL 16**: Database (metadata, credentials, email messages)
- **Redis 7**: Broker (task queue DB 0) + Result backend (DB 1)
- **Docker**: Container runtime
- **docker-compose**: Service orchestration
### Python Packages (from services/email_service/requirements.txt)
- `celery[redis]==5.3.4` - Task queue framework
- `redis==5.0.1` - Redis client
- `kombu==5.3.4` - Message broking library
- `sqlalchemy==2.0.23` - Database ORM
- `psycopg2-binary==2.9.9` - PostgreSQL driver
- `celery-beat==2.5.0` - Task scheduler
- `flower==2.0.1` - Monitoring dashboard (in separate image)
### Base Images
- `python:3.11-slim` - Worker and beat containers (385 MB)
- `mher/flower:2.0.1` - Flower monitoring (Official, lightweight)
## Security Considerations
### Multi-Tenant
- Every task validates `tenant_id` and `user_id` parameters
- Cannot operate across tenant boundaries
- ACL checks before task execution
### Credentials
- Email passwords encrypted in Credential entity
- Decrypted at runtime, never logged
- Encryption: SHA-512 + salt
### Network
- All services on internal Docker network
- Only Flower (port 5556) exposed for monitoring
- Worker and Beat isolated from external access
### User
- Non-root user `celeryworker` (UID 1000) in container
- Cannot write to system directories
- Limited filesystem access
## Performance Characteristics
### Throughput
- 4 concurrent workers × multiple tasks = High throughput
- Prefork pool: No GIL (Global Interpreter Lock) blocking
- Expected: 100-1000 tasks/hour depending on task complexity
### Latency
- Queue to execution: <100ms (typical)
- Email sync: 5-30 seconds per mailbox
- Email send: 5-10 seconds per message
### Scalability
- Horizontal: Run multiple worker containers
- Vertical: Increase concurrency per container
- Load balancing: Auto via Redis broker
## Monitoring Integration
### Built-in
- Flower web UI: http://localhost:5556
- Health checks: 30-second intervals
- Logging: Structured JSON format
- Task tracking: Result storage (1 hour TTL)
### Optional
- Prometheus metrics: Can be added via prometheus-client
- Log aggregation: Use docker json-file driver with log aggregator
- APM: Integrate with DataDog, New Relic, etc.
## Next Steps
1. **Start Services**: `docker-compose up -d`
2. **Access Dashboard**: http://localhost:5556
3. **Monitor Tasks**: `docker-compose logs -f celery-worker`
4. **Review Code**: `services/email_service/tasks/celery_app.py`
5. **Test Manually**: `docker exec ... celery tasks`
6. **Production**: See SETUP.md Production Deployment section
## Support
- **Documentation**: README.md, SETUP.md, ARCHITECTURE.md
- **Logs**: `/app/logs/celery-worker.log`, `/app/logs/celery-beat.log`
- **Monitoring**: Flower UI at http://localhost:5556
- **Email Service Code**: `services/email_service/`
- **Email Client Plan**: `docs/plans/2026-01-23-email-client-implementation.md`
## Version Information
- **Phase**: Phase 8 (Email Service Background Tasks)
- **Created**: January 24, 2026
- **Python**: 3.11
- **Celery**: 5.3.4
- **Docker**: Compose format 3.8
- **Status**: Production-ready