# 원격 워커 설치 및 실행 가이드 이 가이드는 별도의 서버/컴퓨터에서 워커를 실행하여 메인서버와 연결하는 방법을 설명합니다. ## 1. 메인서버 설정 (이미 완료) ### Redis 포트 열기 ```bash # 메인서버에서 실행 sudo ufw allow 6379/tcp ``` ### Docker Redis 외부 접속 확인 ```bash docker ps | grep redis # 출력: 0.0.0.0:6379->6379/tcp 확인 ``` ## 2. 원격지 서버 설정 ### 2.1 저장소 클론 ```bash git clone https://github.com/your-repo/worker-system.git cd worker-system ``` ### 2.2 Python 가상환경 생성 ```bash # Python 3.8+ 필요 python3 -m venv . source bin/activate # 또는 기존 가상환경이 있다면 source bin/activate ``` ### 2.3 패키지 설치 ```bash # 기본 패키지 설치 pip install -r requirements.txt # 누락된 패키지가 있다면 개별 설치 pip install simple-lama-inpainting translatepy celery redis ``` ### 2.4 GPU 환경 설정 (선택사항) ```bash # CUDA 사용 가능한 경우 pip install torch torchvision --index-url https://download.pytorch.org/whl/cu118 # 또는 시스템에 맞는 PyTorch 설치 ``` ## 3. 워커 실행 ### 3.1 메인서버 IP 확인 메인서버의 실제 IP 주소를 확인하세요: - 내부 네트워크: `192.168.x.x`, `10.x.x.x` 등 - 외부 네트워크: 공인 IP 주소 ### 3.2 네트워크 연결 테스트 ```bash # Redis 서버 연결 테스트 redis-cli -h 메인서버IP -p 6379 ping # 응답: PONG # 또는 telnet으로 테스트 telnet 메인서버IP 6379 ``` ### 3.3 워커 시작 #### 방법 1: 자동 스크립트 사용 (권장) ```bash # 메인서버 IP를 실제 IP로 변경 MAIN_SERVER_IP=192.168.1.100 ./start_worker.sh # 동시 처리 수 조정 MAIN_SERVER_IP=192.168.1.100 CONCURRENCY=4 ./start_worker.sh # 원격 모드로 명시적 실행 MAIN_SERVER_IP=192.168.1.100 WORKER_MODE=remote ./start_worker.sh ``` #### 방법 2: 직접 실행 ```bash # 가상환경 활성화 source bin/activate # 워커 실행 python worker.py \ --redis-url redis://메인서버IP:6379/0 \ --main-server 메인서버IP \ --worker-name worker-원격서버명 \ --concurrency 2 ``` #### 방법 3: Docker 실행 ```bash # docker-compose.yml의 Redis URL 수정 후 MAIN_SERVER_IP=192.168.1.100 WORKER_MODE=docker ./start_worker.sh ``` ## 4. 워커 상태 확인 ### 4.1 메인서버에서 확인 ```bash # 메인서버에서 실행 python test_worker_client.py --test-type status # 출력 예시: # 활성 워커: # celery@메인서버: 0개 작업 실행 중 # worker-원격서버@hostname: 0개 작업 실행 중 ``` ### 4.2 Flower 대시보드 확인 메인서버에서 Flower가 실행 중이라면: ``` http://메인서버IP:5555 ``` ## 5. 설정 예시 ### 환경별 설정 예시 #### 같은 네트워크 내 서버 ```bash # 메인서버: 192.168.1.100 # 워커서버: 192.168.1.200 MAIN_SERVER_IP=192.168.1.100 \ WORKER_NAME=worker-gpu-server \ CONCURRENCY=4 \ ./start_worker.sh ``` #### 클라우드 환경 ```bash # 메인서버: 퍼블릭 IP 또는 도메인 MAIN_SERVER_IP=your-server.com \ WORKER_NAME=worker-cloud-gpu \ CONCURRENCY=2 \ ./start_worker.sh ``` #### 다중 워커 실행 ```bash # 서버1 MAIN_SERVER_IP=192.168.1.100 WORKER_NAME=worker-gpu1 ./start_worker.sh & # 서버2 MAIN_SERVER_IP=192.168.1.100 WORKER_NAME=worker-gpu2 ./start_worker.sh & ``` ## 6. 문제 해결 ### 6.1 연결 실패 ```bash # Redis 연결 확인 redis-cli -h 메인서버IP -p 6379 ping # 방화벽 확인 (메인서버) sudo ufw status | grep 6379 # 네트워크 연결 확인 ping 메인서버IP ``` ### 6.2 워커가 등록되지 않음 ```bash # 워커 로그 확인 tail -f worker.log # Redis 연결 상태 확인 python -c " import redis r = redis.Redis(host='메인서버IP', port=6379, db=0) print(r.ping()) " ``` ### 6.3 패키지 오류 ```bash # 가상환경 재생성 rm -rf bin lib include pyvenv.cfg python3 -m venv . source bin/activate pip install -r requirements.txt ``` ### 6.4 GPU 메모리 부족 ```bash # 동시 처리 수 줄이기 CONCURRENCY=1 ./start_worker.sh # GPU 메모리 모니터링 nvidia-smi ``` ## 7. 보안 고려사항 ### 7.1 Redis 보안 - 프로덕션 환경에서는 Redis에 비밀번호 설정 권장 - 방화벽에서 특정 IP만 허용하도록 설정 ### 7.2 네트워크 보안 ```bash # 특정 IP만 허용 (메인서버에서 설정) sudo ufw allow from 워커서버IP to any port 6379 sudo ufw delete allow 6379/tcp ``` ## 8. 성능 최적화 ### 8.1 동시 처리 수 조정 - **CPU 기반**: CPU 코어 수 - **GPU 기반**: GPU 메모리에 따라 1-2개 - **메모리 제한**: 이미지 크기 × 동시 처리 수 고려 ### 8.2 네트워크 최적화 - 메인서버와 워커 간 네트워크 지연 최소화 - 가능한 같은 데이터센터/네트워크 사용 ### 8.3 모니터링 ```bash # 시스템 리소스 모니터링 htop nvidia-smi # GPU 사용 시 ``` 이제 원격지에서 `git clone` 후 메인서버 IP만 설정하면 워커를 쉽게 실행할 수 있습니다! 🚀