# Gemini CLI, Slack 연결, 네트워크 통합 문제 해결 **날짜**: 2025-07-16 **작업자**: Claude & happybell ## 개요 rb8001과 rb10508_test 컨테이너에서 발생한 여러 문제들을 해결하는 과정 ## 1. Gemini CLI 실행 문제 ### 증상 - rb8001: "Gemini CLI가 설치되지 않았습니다" 에러 - rb10508_test (test-api-container): 정상 작동 - 에러: `exec: "gemini": executable file not found in $PATH` ### 원인 분석 - Docker 컨테이너는 Python 기반으로 Node.js가 포함되지 않음 - 서버에는 이미 설치되어 있지만 컨테이너 내부에서 접근 불가 - test-api-container는 Node.js를 마운트하여 사용 중 ### 해결 방법 #### 1. docker-compose.yml에 Node.js 마운트 추가 ```yaml volumes: # 기존 볼륨들... # Node.js 및 Gemini CLI 마운트 - /home/admin/.nvm/versions/node/v24.4.0:/usr/local/node:ro environment: # 기존 환경변수들... # Node.js PATH 추가 - PATH=/usr/local/node/bin:$PATH ``` #### 2. gemini_service.py에서 절대 경로 사용 ```python # 기존 cmd = ["gemini", "-m", "gemini-2.5-flash", "-p", full_prompt] # 수정 cmd = ["/usr/local/node/bin/gemini", "-m", "gemini-2.5-flash", "-p", full_prompt] ``` ## 2. Slack 연결 문제 ### 증상 - rb10508_test 컨테이너 시작은 성공하지만 Slack 대화 불가 - 에러: `AttributeError: 'Settings' object has no attribute 'USE_ASYNC_RESPONSE'` ### 원인 - app/api/slack.py에서 settings.USE_ASYNC_RESPONSE 참조 - app/core/config.py의 Settings 클래스에 해당 속성 미정의 ### 해결 방법 config.py의 Settings 클래스에 추가: ```python # Application Configuration DEBUG: bool = True LOG_LEVEL: str = "INFO" MAX_MEMORY_SIZE: int = 1000 USE_ASYNC_RESPONSE: bool = True # 추가 ``` ## 3. 네트워크 통합 문제 ### 배경 - 로빙들이 frontend-backend와 상태를 주고받아야 함 - Docker 네트워크 격리로 인해 통신 불가 ### 현황 - frontend-backend-1: appnet 네트워크 - rb8001: host 네트워크 (보안 취약) - rb10508_test: 자체 bridge 네트워크 (격리됨) ### 해결 방법 #### rb10508_test/docker-compose.yml ```yaml services: test-api: # ... networks: - default - appnet networks: appnet: external: true ``` #### rb8001/docker-compose.yml ```yaml services: rb8001: # network_mode: host 제거 networks: - appnet ports: - "8001:8001" networks: appnet: external: true ``` ### 장점 - 보안 향상 (host 네트워크 제거) - 선택적 컨테이너 간 통신 - backend와 안전한 상태 공유 가능 ## 4. CI/CD 경로 문제 ### 증상 - GitHub Actions 실패: `/home/admin/test_api: 그런 파일이나 디렉터리가 없습니다` ### 원인 - 디렉토리 구조 변경: test_api → rb10508_test - CI/CD 워크플로우가 구 경로 참조 ### 해결 방법 .gitea/workflows/cicd.yml 수정: - `/home/admin/test_api` → `/home/admin/rb10508_test` - 코드 복사 경로를 rb8001과 동일하게 변경: ```bash cp -r /home/admin/.cache/act/*/hostexecutor/* /home/admin/rb10508_test/ ``` ## 적용 순서 1. 로컬에서 코드 수정 및 푸시 2. 서버에서 .env 파일 확인/생성 3. 기존 컨테이너 정리: ```bash docker stop test-api-container docker rm test-api-container ``` 4. 새 컨테이너 시작: ```bash cd /home/admin/rb8001 docker-compose down && docker-compose up -d cd /home/admin/rb10508_test docker-compose up -d ``` ## 검증 ```bash # Gemini CLI 확인 docker exec rb8001 /usr/local/node/bin/gemini --version docker exec rb10508_test /usr/local/node/bin/gemini --version # 네트워크 확인 docker network inspect appnet # Slack 대화 테스트 # Slack에서 @Ro-being, @Ro-being_test로 대화 ``` ## 교훈 1. **컨테이너 환경 고려**: 서버에 설치된 도구가 컨테이너에서는 없을 수 있음 2. **설정 동기화**: 새 기능 추가 시 모든 관련 파일 업데이트 필요 3. **네트워크 설계**: 초기부터 컨테이너 간 통신 고려 4. **경로 일관성**: CI/CD 설정 시 디렉토리 구조 변경 반영