DOCS/journey/troubleshooting/250728_happybell80_nginx프록시및CI배포문제해결.md
Claude-51124 22557e7132 docs: 오래된 트러블슈팅 아카이브 및 구조 정리
- 7-8월 초기 구축 문서 12개를 _archive/troubleshooting/2025_07-08_initial_setup/로 이동
- book/300_architecture/390_human_in_the_loop_intent_learning.md를 journey/research/intent_classification/로 이동 (개발 여정 문서)
- 빈 폴더 제거 (journey/assets/*)
2025-11-17 14:06:05 +09:00

5.2 KiB

nginx 프록시 설정 및 CI/CD 배포 문제 해결

날짜: 2025-07-28
작업자: happybell80 & Claude & 51123/51124 서버팀
관련 서버: 51123 (nginx 프록시), 51124 (로빙 컨테이너 호스팅)

배경

로빙 서비스들이 51124 서버로 이전된 후 nginx 프록시 설정과 CI/CD 배포 과정에서 여러 문제가 발생하여 해결함.

오후 10시 30분 - nginx HTTP 프록시 문제 해결

문제 상황

  • 내부망에서 http://localhost/rb10508/health 접근 시 API 응답 대신 React 프론트엔드 HTML 반환
  • HTTPS는 정상 작동하나 HTTP localhost 요청만 문제

원인 분석

  • nginx default_server 블록(포트 80)에 프록시 설정이 없어서 location /의 try_files가 작동
  • HTTPS 블록(포트 443)에만 프록시 설정 존재

해결 과정

  1. 옵션 1 선택: default_server 블록에도 동일한 프록시 설정 추가

    • 내부망 HTTP 통신 허용 (Zero-trust는 아직 옵션)
    • 외부 도메인은 이미 HTTPS로 301 리다이렉트됨
  2. nginx 설정 수정 (nginx-deploy/server-nginx-default):

    # default_server 블록에 추가
    location ^~ /rb10508/ {
        proxy_pass http://192.168.219.52:10508/;
        # ... proxy headers
    }
    
  3. 실제 해결: nginx reload로 해결 (설정은 이미 올바름)

결과

HTTP/HTTPS 모두 정상 프록시 동작

오후 10시 45분 - CI/CD SSH 인증 실패 문제

문제 상황

  • Gitea Actions에서 51124 서버로 SSH 연결 시 publickey 인증 실패
  • "Permission denied (publickey,password)" 에러

원인 분석

# Actions가 사용한 키 fingerprint
SHA256:rqa/0Htz9cQ8yNCtmTYv/JsGIoJoUHqgi15pM08tdvQ

# 실제 필요한 키 fingerprint  
SHA256:JUkHOnnx+fYpjbxfuIs/NUYL6bhT2zOZA+u//xykYHQ
  • 조직 시크릿 SSH_PRIVATE_KEY_51124에 잘못된 키가 저장됨

해결 과정

  1. 올바른 SSH 키 확인: /home/admin/.ssh/id_rsa_51123_to_51124
  2. Gitea 조직 시크릿 업데이트
  3. CI/CD 워크플로우 개선:
    • 두 개의 job을 하나로 통합
    • SSH 포트 51124 명시
    • 경로 수정: /home/admin/ivada_project/rb10508_test

결과

SSH 인증 성공, 배포 프로세스 정상 동작

오후 11시 15분 - Actions exit status 1 문제

문제 상황

  • 배포는 성공했지만 Actions가 실패로 표시 (exit status 1)
  • SSH 명령 실행 후 비정상 종료

원인 분석

  • SSH heredoc 내부에서 exit 0 사용 시 전체 SSH 연결 종료
  • verbose 디버그 로그로 인한 가독성 저하

해결 과정

  1. exit 0break로 변경
  2. SSH verbose 모드(-v, -vvv) 제거
  3. 불필요한 디버그 출력 제거
  4. SSH 명령 끝에 성공 메시지 추가

결과

Actions 정상 완료, 깔끔한 로그 출력

오후 11시 45분 - ChromaDB 초기화 실패 문제 (51124 서버)

문제 상황

  • "Module 'sentence_transformers' not found" 에러
  • ChromaDB 벡터 임베딩 기능 사용 불가

원인 분석

  • sentence-transformers 패키지가 2GB+ 크기로 빌드 시간 단축을 위해 제거됨
  • 컨테이너는 /opt/models:/models 볼륨으로 모델 참조

해결 과정 (51124 서버에서 수행)

  1. Python 환경 설정:

    sudo apt install python3-pip
    pip3 install sentence-transformers
    
  2. 모델 다운로드:

    • all-MiniLM-L6-v2 (88MB)
    • paraphrase-multilingual-MiniLM-L12-v2 (458MB)
  3. 권한 설정:

    sudo chown -R 999:999 /opt/models
    
  4. 컨테이너 재시작

결과

ChromaDB 정상 초기화, 벡터 임베딩 기능 활성화

최종 상태

모든 문제 해결 완료

  1. nginx 프록시: HTTP/HTTPS 모두 정상 작동
  2. CI/CD 파이프라인: SSH 인증 성공, 정상 배포
  3. rb10508 서비스: 정상 작동 (healthy)
  4. ChromaDB: 벡터 검색 기능 활성화

📊 서비스 구성

  • 51123 서버: nginx 프록시, Gitea, CI/CD runner
  • 51124 서버: 모든 로빙 서비스 (rb8001, rb10508, rb10408)
  • 포트 매핑: network_mode: host 사용 (별도 포트 매핑 불필요)

교훈

  1. nginx 설정 디버깅

    • server 블록별로 location 설정이 독립적
    • default_server의 영향 범위 이해 필요
    • 설정 변경 후 반드시 reload
  2. SSH 키 관리

    • Gitea Actions 시크릿의 키 fingerprint 확인 필수
    • 서버 간 SSH 키 교환 시 문서화 중요
    • 커스텀 SSH 포트 사용 시 명시적 지정
  3. CI/CD 최적화

    • 단순한 구조가 디버깅에 유리
    • exit code 관리 주의 (heredoc 내부)
    • 필요한 로그만 출력하여 가독성 향상
  4. 대용량 패키지 관리

    • ML/AI 패키지는 서버에 사전 설치
    • 볼륨 마운트로 컨테이너와 공유
    • 권한 설정 확인 (999:999)
  5. network_mode: host 이해

    • 포트 매핑 설정이 무시됨
    • docker-compose ps에 포트가 표시되지 않음
    • 실제로는 지정된 포트로 직접 리스닝

참고 사항

  • SSH 키 위치: /home/admin/.ssh/id_rsa_51123_to_51124
  • 모델 저장 위치: /opt/models (546MB)
  • ChromaDB 캐시: /models (컨테이너 내부)
  • 서비스 포트: 10508 (network_mode: host)