130 lines
2.8 KiB
Markdown
130 lines
2.8 KiB
Markdown
# 이미지 처리 워커 시스템
|
|
|
|
메인서버와 분리된 독립적인 이미지 처리 워커 시스템입니다.
|
|
|
|
## 🏗️ 아키텍처
|
|
|
|
```
|
|
클라이언트 → 메인서버 (FastAPI) → Redis → 워커 시스템 (ImageProcessor)
|
|
```
|
|
|
|
- **메인서버**: 클라이언트 요청 중계, 인증, API 제공
|
|
- **워커**: 실제 OCR, 번역, 인페인팅 작업 처리
|
|
- **Redis**: 작업 큐 및 결과 저장소
|
|
|
|
## 🚀 실행 방법
|
|
|
|
### 1. Docker 모드 (권장)
|
|
```bash
|
|
cd ~/work/worker-system
|
|
WORKER_MODE=docker ./start_worker.sh
|
|
```
|
|
|
|
### 2. 로컬 모드
|
|
```bash
|
|
cd ~/work/worker-system
|
|
WORKER_MODE=local ./start_worker.sh
|
|
```
|
|
|
|
### 3. 원격 모드
|
|
```bash
|
|
cd ~/work/worker-system
|
|
REDIS_URL="redis://메인서버IP:6379/0" WORKER_MODE=remote ./start_worker.sh
|
|
```
|
|
|
|
## ⚙️ 환경 변수
|
|
|
|
| 변수 | 설명 | 기본값 |
|
|
|------|------|--------|
|
|
| `REDIS_URL` | Redis 서버 주소 | `redis://localhost:6379/0` |
|
|
| `MAIN_SERVER_HOST` | 메인 서버 주소 | `localhost` |
|
|
| `CONCURRENCY` | 동시 처리 작업 수 | `2` |
|
|
| `WORKER_MODE` | 실행 모드 | `docker` |
|
|
|
|
## 📋 사용 예시
|
|
|
|
### 로컬에서 실행
|
|
```bash
|
|
# 기본 설정으로 실행
|
|
./start_worker.sh
|
|
|
|
# 동시 처리 수 조정
|
|
CONCURRENCY=4 ./start_worker.sh
|
|
|
|
# 원격 메인서버에 연결
|
|
REDIS_URL="redis://192.168.1.100:6379/0" MAIN_SERVER_HOST="192.168.1.100" ./start_worker.sh
|
|
```
|
|
|
|
### 원격 서버에서 실행
|
|
```bash
|
|
# 원격 서버에 워커 시스템 배포
|
|
scp -r ~/work/worker-system user@remote-server:~/
|
|
|
|
# 원격 서버에서 실행
|
|
ssh user@remote-server
|
|
cd ~/worker-system
|
|
REDIS_URL="redis://메인서버IP:6379/0" WORKER_MODE=docker ./start_worker.sh
|
|
```
|
|
|
|
## 🔧 개발 모드
|
|
|
|
### 직접 실행
|
|
```bash
|
|
python worker.py --concurrency 2 --redis-url redis://localhost:6379/0
|
|
```
|
|
|
|
### 특정 큐만 처리
|
|
```bash
|
|
python worker.py --concurrency 1 --redis-url redis://localhost:6379/0
|
|
```
|
|
|
|
## 📊 모니터링
|
|
|
|
Flower를 통해 워커 상태를 모니터링할 수 있습니다:
|
|
- 메인서버의 Flower: http://메인서버:5555
|
|
|
|
## 🔄 자동 재시작
|
|
|
|
systemd를 사용한 자동 재시작 설정:
|
|
|
|
```bash
|
|
# /etc/systemd/system/image-worker.service
|
|
[Unit]
|
|
Description=Image Processing Worker
|
|
After=docker.service
|
|
|
|
[Service]
|
|
Type=forking
|
|
User=ckh08045
|
|
WorkingDirectory=/home/ckh08045/work/worker-system
|
|
Environment=WORKER_MODE=docker
|
|
Environment=REDIS_URL=redis://localhost:6379/0
|
|
ExecStart=/home/ckh08045/work/worker-system/start_worker.sh
|
|
Restart=always
|
|
|
|
[Install]
|
|
WantedBy=multi-user.target
|
|
```
|
|
|
|
```bash
|
|
sudo systemctl enable image-worker
|
|
sudo systemctl start image-worker
|
|
```
|
|
|
|
## 🐛 문제 해결
|
|
|
|
### Redis 연결 오류
|
|
- 메인서버의 Redis가 실행 중인지 확인
|
|
- 포트 6379가 열려있는지 확인
|
|
- 방화벽 설정 확인
|
|
|
|
### Docker 권한 오류
|
|
```bash
|
|
sudo usermod -aG docker $USER
|
|
newgrp docker
|
|
```
|
|
|
|
### 의존성 오류
|
|
```bash
|
|
pip install -r requirements.txt
|
|
``` |