From c2ab4e1cd6ca058d58387648ee75d822b382ffae Mon Sep 17 00:00:00 2001 From: happybell80 Date: Wed, 16 Jul 2025 01:47:39 +0900 Subject: [PATCH] docs: add rb8001 deployment troubleshooting guide - Document issues encountered during rb8001 deployment - Record solutions for port configuration, env variables, Docker optimization - Include lessons learned from rb10508_test integration --- .../20250716_rb8001_deployment_issues.md | 117 ++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 docs/troubleshooting/20250716_rb8001_deployment_issues.md diff --git a/docs/troubleshooting/20250716_rb8001_deployment_issues.md b/docs/troubleshooting/20250716_rb8001_deployment_issues.md new file mode 100644 index 0000000..95d452f --- /dev/null +++ b/docs/troubleshooting/20250716_rb8001_deployment_issues.md @@ -0,0 +1,117 @@ +# RB8001 배포 문제 해결 과정 + +**날짜**: 2025-07-16 +**작업자**: Claude & happybell + +## 개요 + +rb8001 프로젝트에 rb10508_test의 기능을 통합한 후 Gitea Actions 배포 과정에서 발생한 문제들과 해결 과정 기록 + +## 주요 문제 및 해결 + +### 1. Gitea Actions 포트 설정 문제 + +**문제**: +- Health check가 10508 포트로 시도 (rb8001은 8001 사용) +- 컨테이너 이름이 `test-api-container`로 표시 + +**해결**: +- `.gitea/workflows/cicd.yml`에서 모든 10508 → 8001 변경 +- 컨테이너 이름 및 경로 수정: `/home/admin/test_api` → `/home/admin/rb8001` + +### 2. 환경변수 로딩 실패 + +**문제**: +- Docker Compose에서 `~/.env` 경로 인식 실패 +- LOG_LEVEL 대소문자 충돌 (INFO vs info) + +**해결**: +1. `~/.env` → `/home/admin/.env` (절대 경로로 변경) +2. LOG_LEVEL 환경변수 제거 +3. 최종적으로 `.env`로 변경 (로컬 파일 사용) + +### 3. Gitea Actions 파일 복사 실패 + +**문제**: +- `${{ github.workspace }}` 변수가 Gitea Actions에서 작동하지 않음 +- find 명령어가 .env 파일도 삭제 + +**해결**: +- GitHub Actions 변수를 act 캐시 경로로 변경: `/home/admin/.cache/act/*/hostexecutor/*` +- find 명령에 `! -name '.env'` 추가하여 .env 파일 보존 + +### 4. Docker 빌드 최적화 문제 + +**문제**: +- 매번 torch (2GB+), sentence-transformers 등 거대한 패키지 재설치 +- 불필요한 패키지 설치 (gcc, postgresql-client) +- ARG 변수 사용으로 Docker 캐싱 비효율 + +**해결 (rb10508_test 방식 적용)**: +```dockerfile +# 변경 전 (rb8001 원본) +FROM python:3.12.11-slim-bookworm +ARG UID=1000 +ARG USR=api-user +# ... ARG 변수들 +RUN apt-get install gcc postgresql-client +RUN find ${BASE_PATH} -exec chmod 700 {} \; + +# 변경 후 (rb10508_test 방식) +FROM python:3.13-slim +RUN apt-get install curl # 최소 패키지만 +RUN groupadd -r appuser && useradd -r -g appuser appuser # 단순한 유저 생성 +RUN chmod -R 755 /code # 표준 권한 +``` + +### 5. 네트워크 모드와 포트 충돌 + +**문제**: +- `network_mode: host` + 포트 매핑 `8001:8000` 충돌 +- 내부/외부 포트 불일치 + +**해결**: +- `network_mode: host` 제거 +- 모든 포트를 8001로 통일 (PORT 환경변수, EXPOSE, docker-compose) + +### 6. 사전 다운로드된 모델 활용 + +**문제**: +- 매번 torch와 sentence-transformers 모델 재다운로드 + +**해결**: +```yaml +volumes: + - /opt/models:/models:rw # 서버의 사전 다운로드된 모델 마운트 +``` + +## 최종 상태 + +- 컨테이너는 정상 작동 중 (로그 확인) +- Health check 200 OK 응답 +- 포트 8001에서 정상 실행 + +## 남은 작업 + +1. nginx 설정 적용 (PR 생성됨) +2. 실제 서비스 테스트 + +## 교훈 + +1. **기존 작동하는 시스템 참조**: rb10508_test의 설정을 정확히 분석하고 적용 +2. **단순함이 최선**: ARG 변수, 복잡한 권한 설정보다 단순한 구조가 효율적 +3. **캐싱 고려**: Docker 레이어 순서와 변경 빈도 고려 +4. **환경 차이 인식**: GitHub Actions vs Gitea Actions 문법 차이 + +## 참고 명령어 + +```bash +# 로컬 테스트 +cd rb8001 +docker compose up -d --build + +# 서버 확인 +docker ps | grep robeing-8001 +docker compose logs robeing-8001 +curl http://localhost:8001/health +``` \ No newline at end of file