docs: nginx 프록시 및 CI/CD 배포 문제 해결 트러블슈팅
- nginx HTTP 프록시 설정 문제 해결 - SSH 키 인증 실패 및 해결 과정 - Actions exit status 1 문제 해결 - ChromaDB sentence-transformers 초기화 문제 해결 - 51123, 51124 서버팀과 협업 내용 포함
This commit is contained in:
parent
3d8d0d6bf7
commit
4d41e3c789
162
docs/troubleshooting/250728_happybell80_nginx프록시및CI배포문제해결.md
Normal file
162
docs/troubleshooting/250728_happybell80_nginx프록시및CI배포문제해결.md
Normal file
@ -0,0 +1,162 @@
|
||||
# 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):
|
||||
```nginx
|
||||
# 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)" 에러
|
||||
|
||||
### 원인 분석
|
||||
```bash
|
||||
# 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 0`를 `break`로 변경
|
||||
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 환경 설정**:
|
||||
```bash
|
||||
sudo apt install python3-pip
|
||||
pip3 install sentence-transformers
|
||||
```
|
||||
|
||||
2. **모델 다운로드**:
|
||||
- all-MiniLM-L6-v2 (88MB)
|
||||
- paraphrase-multilingual-MiniLM-L12-v2 (458MB)
|
||||
|
||||
3. **권한 설정**:
|
||||
```bash
|
||||
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)
|
||||
Loading…
x
Reference in New Issue
Block a user