Containers — ODL Video Service
Generated 2026-06-24 17:02 UTC · c4gen dev
The runtime/deployable units inside ODL Video Service and how data moves between them and adjacent systems.
Containers
| Container | Technology | Responsibility |
|---|---|---|
| React Frontend | React 15 / Redux / Video.js 8 (Webpack 5, Node 24) | Browser SPA for collection/video management and playback. Initiates Dropbox Chooser uploads and plays HLS streams served from CloudFront. |
| Nginx | Nginx | Reverse proxy in front of the Django app; serves static assets and bounds upload body size. |
| Django Web / API | Django 4.2 + DRF (uWSGI, Python 3.13) | REST API, admin, OIDC login, upload/replace/subtitle endpoints, the public videos API, the MediaConvert SNS webhook, and the edX sync trigger. |
| Celery Worker + Beat | Celery + celery-redbeat (Python 3.13) | Runs upload streaming, transcode/retranscode orchestration, YouTube sync, edX posting, Keycloak migration, and janitor sweeps. Beat (-B) schedules periodic tasks via RedBeat. |
| PostgreSQL | PostgreSQL 18 (RDS in prod) | System of record for Collections, Videos, VideoFiles, KeycloakGroups, EdxEndpoints, EncodeJobs. |
| Redis | Redis 8 (ElastiCache in prod) | Celery broker + result backend, RedBeat schedule store, Django cache, and per-video upload locks. |
| S3 Buckets | AWS S3 (upload / transcode / thumbnail / subtitle / watch) | Five buckets — source uploads, transcoded HLS+MP4, thumbnails, subtitles, and a watch bucket polled for lecture-capture drops. |