https://github.com/handong-app/cms-transcode-worker
Transcode worker for CMS
https://github.com/handong-app/cms-transcode-worker
celery docker ffmpeg python3 rabbitmq redis transcode
Last synced: 14 days ago
JSON representation
Transcode worker for CMS
- Host: GitHub
- URL: https://github.com/handong-app/cms-transcode-worker
- Owner: handong-app
- License: mit
- Created: 2025-05-25T11:24:52.000Z (11 months ago)
- Default Branch: main
- Last Pushed: 2025-06-06T14:45:40.000Z (11 months ago)
- Last Synced: 2025-06-06T15:21:20.580Z (11 months ago)
- Topics: celery, docker, ffmpeg, python3, rabbitmq, redis, transcode
- Language: Python
- Homepage:
- Size: 6.38 MB
- Stars: 1
- Watchers: 0
- Forks: 0
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README









-storage-red?logo=minio)

# π¦ CMS Transcode Worker
**cms-transcode-worker**λ CMS μμ€ν
μ **λΉλμ€ νΈλμ€μ½λ©**μ λ΄λΉνλ νμ΄μ¬ Celery μ컀μ
λλ€.
μ¬μ©μκ° μ
λ‘λν λΉλμ€λ₯Ό HLSλ‘ λ³ν(480p/1080p)νκ³ , μ§ν μν©μ μ€μκ°μΌλ‘ μ λ¬ν©λλ€.
---
## π¨ μν€ν
μ² λ€μ΄μ΄κ·Έλ¨

> μ΄ν΄λ₯Ό μν΄ RabbitMQ λ₯Ό λΆν νμμ΅λλ€.
> μ€μ μλμμ RabbitMQ λ λ
립λ 컨ν
μ΄λμ μμΉν©λλ€.
---
## π λͺ©μ°¨
1. [π κ°μ](#-κ°μ)
2. [π οΈ μ£Όμ κΈ°λ₯](#-μ£Όμ-κΈ°λ₯)
3. [π§ μ€ν λ°©λ²](#-μ€ν-λ°©λ²)
4. [π νΈλμ€μ½λ© νμ΄νλΌμΈ](#-νΈλμ€μ½λ©-νμ΄νλΌμΈ)
5. [βοΈ μ£Όμ κΈ°μ λ° κ΅¬μ± μμ](#-μ£Όμ-κΈ°μ -λ°-ꡬμ±-μμ)
6. [βΈοΈ μΏ λ²λ€ν°μ€ λ°°ν¬](#-μΏ λ²λ€ν°μ€-λ°°ν¬)
7. [π λλ ν 리 ꡬ쑰](#-λλ ν 리-ꡬ쑰)
8. [π κΈ°μ¬ λ° λΌμ΄μ μ€](#-κΈ°μ¬-λ°-λΌμ΄μ μ€)
---
## π κ°μ
- **CMS BE(Spring Boot)** μμ **Transcode.Request MQ**λ‘ **νΈλμ€μ½λ© μμ²**μ λ°ν
- **Transcode Consumer**κ° μμ²μ λ°μμ **Transcode broker**(Celery with RabbitMQ)μ **enqueue**
- **Transcode Worker**κ° **FFmpeg**λ‘ **λΉλμ€λ₯Ό HLSλ‘ λ³ν**
- μ§νλ₯ κ³Ό μνλ **Redis / RabbitMQ**λ‘ CMS BEμ μ λ¬
- μ΅μ’
κ²°κ³Όλ **S3(Minio)** μ μ
λ‘λ
- μ΅κ·Όμλ **μΏ λ²λ€ν°μ€ νκ²½μΌλ‘ μ΄μ **νμ¬ μμ μ±κ³Ό μ μ°μ±μ κ°ννμ΅λλ€.
---
## π οΈ μ£Όμ κΈ°λ₯
β
**480p / 1080p HLS λ³ν**
β
**μ§νλ₯ μ€μκ° μ
λ°μ΄νΈ (Redis / RabbitMQ)**
β
**νΈλμ€μ½λ© μν μ
λ°μ΄νΈ (Success / Fail)**
β
**S3μ HLS μΈκ·Έλ¨ΌνΈ μ
λ‘λ**
---
## π§ μ€ν λ°©λ²
```bash
# 1. νκ²½ λ³μ νμΌ λ³΅μ¬ λ° μμ
cp .env.example .env
# .env νμΌμμ RabbitMQ, Redis, S3 λ± μ°κ²° μ 보 μ€μ
# 2. Docker Composeλ‘ μλΉμ€ μ€ν
docker-compose up --build
```
## π νΈλμ€μ½λ© νμ΄νλΌμΈ
1οΈβ£ **μ¬μ©μ μμ² β CMS BE**
- μ¬μ©μκ° CMS FE(React)μμ νμΌ μ
λ‘λλ₯Ό μλ£νλ©΄, CMS BE(Spring Boot)λ‘ "S3 μ
λ‘λ μλ£" μμ²μ΄ μ μ‘λ©λλ€.
2οΈβ£ **νΈλμ€μ½λ© μμ² β Transcode.Request MQ**
- CMS BEλ νΈλμ€μ½λ© μμ²μ **Transcode.Request MQ(RabbitMQ)**λ‘ λ°ν(PUB)ν©λλ€.
- μ΄ λ©μμ§μλ S3 κ²½λ‘, νμΌλͺ
, νμΌνμ
λ±μ λ©νλ°μ΄ν°κ° λ΄κΉλλ€.
3οΈβ£ **Transcode Consumer β λΈλ‘컀 β μ컀**
- **Transcode Consumer**(Python)λ Transcode.Request MQλ₯Ό ꡬλ
(SUB)νμ¬ μλ‘μ΄ μμ²μ μμ ν©λλ€.
- μμ²μ Celery κΈ°λ°μ **Transcode broker**λ‘ enqueue(λ±λ‘)ν©λλ€.
- **Transcode Worker**(Celery Worker)λ νμμ μμ
μ κΊΌλ΄μ **FFmpeg**λ‘ HLS λ³νμ μνν©λλ€.
- λ³ν μ€ **Redis**λ‘ μ§νλ₯ μ μ€μκ° μ
λ°μ΄νΈν©λλ€.
- μ§νλ₯ κ³Ό μνλ **Transcode.Status MQ**λ‘ λ°νλ©λλ€.
> `transcode_service` μμ redis μ rabbitMQ λ λ€ μ¬μ©ν΄ μ§νλ₯ μ 보λ΄μ£Όκ³ μμ΅λλ€.
> μ¬μ©νμ§ μλ Notifire λ μ£Όμμ²λ¦¬ν΄λ 무κ΄ν©λλ€.
4οΈβ£ **μ§ν μν μ μ‘ β CMS BE**
- CMS BEλ **Transcode.Status MQ**λ₯Ό ꡬλ
(SUB)νμ¬ νΈλμ€μ½λ©μ μν λ° μ§νλ₯ μ μ€μκ°μΌλ‘ νμΈν©λλ€.
5οΈβ£ **νΈλμ€μ½λ© κ²°κ³Ό β S3 & FE**
- λ³νλ HLS μΆλ ₯(m3u8, ts νμΌλ€)μ **S3**μ μ
λ‘λλ©λλ€.
- μ΅μ’
μ μΌλ‘, CMS BEλ λ³νλ HLS κ²½λ‘ μ 보λ₯Ό **CMS FE**λ‘ μ λ¬νμ¬ μ¬μ©μμκ² μλ €μ€λλ€.
---
## βοΈ μ£Όμ κΈ°μ λ° κ΅¬μ± μμ
- **Spring Boot (CMS BE)**: API μλ², MQ μ°λ
- **React (CMS FE)**: μ¬μ©μ μΈν°νμ΄μ€
- **RabbitMQ**: νΈλμ€μ½λ© μμ²/μν μ²λ¦¬μ© λ©μμ§ ν
- **Celery Worker**: νΈλμ€μ½λ© νμ€ν¬ μ²λ¦¬
- **FFmpeg**: λΉλμ€λ₯Ό HLS(480p/1080p)λ‘ λ³ν
- **S3(MinIO)**: μμ νμΌ μ μ₯μ
- **Redis**: νΈλμ€μ½λ© μ§νλ₯ μ€μκ° μ
λ°μ΄νΈ
- **Kubernetes**: 컨ν
μ΄λ μ€μΌμ€νΈλ μ΄μ
, λ°°ν¬ μλν
---
## βΈοΈ μΏ λ²λ€ν°μ€ λ°°ν¬
λ³Έ νλ‘μ νΈλ νμ¬ **μΏ λ²λ€ν°μ€(Kubernetes)** νκ²½μμ λ°°ν¬ λ° μ΄μλ©λλ€.
μ΄λ₯Ό ν΅ν΄ 컨ν
μ΄λ κΈ°λ°μ μλΉμ€λ₯Ό λ³΄λ€ μ μ°νκ³ μμ μ μΌλ‘ κ΄λ¦¬νκ³ μμ΅λλ€.
---
## π λλ ν 리 ꡬ쑰
```plaintext
.
βββ Architecture_Diagram_v3.png
βββ Dockerfile
βββ docker-compose.yml
βββ k8s/ # μΏ λ²λ€ν°μ€ λ§€λνμ€νΈ
β βββ namespace.yaml
β βββ configmap.yaml
β βββ secret.yaml
β βββ cms-transcode-consumer/
β β βββ deployment.yaml
β βββ cms-transcode-worker/
β β βββ deployment.yaml
β βββ redis/
β βββ deployment.yaml
β βββ service.yaml
βββ requirements.txt
βββ src/ # μμ€ μ½λ
β βββ consumer/ # RabbitMQ 컨μλ¨Έ
β β βββ request_consumer.py
β βββ core/ # μ€μ λ° κ³΅ν΅ λͺ¨λ
β β βββ config.py
β β βββ s3.py
β βββ notifiers/ # MQ λ° Redis μλ¦Ό
β β βββ rabbitmq_notifier.py
β β βββ redis_notifier.py
β βββ services/ # νΈλμ€μ½λ© μλΉμ€ λ‘μ§
β β βββ transcode_service.py
β βββ tasks/ # Celery νμ€ν¬
β β βββ transcode_video_task.py
β βββ tests/ # ν
μ€νΈ μ νΈλ¦¬ν°
β β βββ redis_subscriber.py
β β βββ send_transcode_request.py
β βββ utils/ # μ νΈλ¦¬ν°
β β βββ date_utils.py
β β βββ io_utils.py
β β βββ logging_utils.py
β βββ worker/
β βββ celery_worker.py
βββ README.md
```
## π κΈ°μ¬ λ° λΌμ΄μ μ€
μ΄ νλ‘μ νΈλ [MIT License](LICENSE)λ‘ λ°°ν¬λ©λλ€.
μ΄μλ PRμ μΈμ λ νμν©λλ€! π
λ¬Έμλ μμ²μ¬νμ [Issues](https://github.com/handong-app/cms-transcode-worker/issues)μ λ¨κ²¨μ£ΌμΈμ.
---
π **κ°μ¬ν©λλ€!** π