From b9c03a282c3d7ee352216ca5f9aecff4f1a46c6e Mon Sep 17 00:00:00 2001 From: happybell80 Date: Wed, 20 Aug 2025 09:44:17 +0900 Subject: [PATCH] =?UTF-8?q?docs:=20skill-email=20DB=20=ED=86=B5=ED=95=A9?= =?UTF-8?q?=20=EB=B0=8F=20Actions=20=EB=B0=B0=ED=8F=AC=20=ED=8A=B8?= =?UTF-8?q?=EB=9F=AC=EB=B8=94=EC=8A=88=ED=8C=85=20=EB=AC=B8=EC=84=9C=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - DBCredentialsProvider 활성화 과정 - Gitea Actions 51124 서버 SSH 배포 설정 - Actions 중복 실행 문제 해결 - 교훈 및 시스템 아키텍처 정리 --- ...80_skill-email_DB통합및Actions배포.md | 218 ++++++++++++++++++ 1 file changed, 218 insertions(+) create mode 100644 troubleshooting/250820_happybell80_skill-email_DB통합및Actions배포.md diff --git a/troubleshooting/250820_happybell80_skill-email_DB통합및Actions배포.md b/troubleshooting/250820_happybell80_skill-email_DB통합및Actions배포.md new file mode 100644 index 0000000..99184e0 --- /dev/null +++ b/troubleshooting/250820_happybell80_skill-email_DB통합및Actions배포.md @@ -0,0 +1,218 @@ +# skill-email DB 통합 및 Gitea Actions 51124 서버 배포 설정 + +## 작성일: 2025-08-20 +## 작성자: happybell80 +## 관련 서비스: skill-email, Gitea Actions + +--- + +## 오전 9시 00분 + +### DBCredentialsProvider 구현 상태 확인 + +#### 초기 혼란 +- 처음에는 DBCredentialsProvider가 구현되지 않았다고 판단 +- `grep` 검색으로 찾을 수 없었음 +- 트러블슈팅 문서에도 "skill-email이 여전히 파일 기반 토큰 사용 중"이라고 기록 + +#### 실제 상태 (heejae PR 머지 후) +- ✅ `services/db_credentials_provider.py` 파일 존재 +- ✅ DBCredentialsProvider 클래스 완전 구현 +- ✅ psycopg2 의존성 추가됨 +- ⚠️ 환경변수 미설정으로 활성화되지 않은 상태 + +--- + +## 오전 9시 10분 + +### Gitea Actions 배포 경로 문제 + +#### 문제 상황 +- Actions 실행 시 `/home/admin/ivada_project/skill-email: 그런 파일이나 디렉터리가 없습니다` 오류 +- 51123 서버의 runner가 로컬 경로 접근 시도 + +#### 첫 번째 시도 (실패) +```yaml +# 잘못된 접근 - 로컬 경로 사용 +cd /home/admin/ivada_project/skill-email +docker compose down +``` + +#### 원인 분석 +- skill-email은 51124 서버에서 실행되어야 함 +- 51123 서버의 runner는 51124 서버로 SSH 접속 필요 +- 트러블슈팅 문서 참고 필요 + +--- + +## 오전 9시 20분 + +### 트러블슈팅 문서 학습 및 SSH 방식 적용 + +#### 핵심 교훈 (기존 문서에서) +1. **51124 서버 배포 방식**: + - 51123 runner → 51124 서버 SSH 접속 + - Organization secrets 사용: `SSH_PRIVATE_KEY_51124`, `SSH_HOST_51124` + - SSH 포트: 51124 (커스텀 포트) + +2. **정확한 경로**: + - 51124 서버: `/home/admin/ivada_project/skill-email` + - git pull 방식으로 코드 업데이트 + +#### 수정된 워크플로우 +```yaml +- name: Setup SSH + run: | + echo "🔑 Setting up SSH..." + mkdir -p ~/.ssh + echo "${{ secrets.SSH_PRIVATE_KEY_51124 }}" > ~/.ssh/deploy_key + chmod 600 ~/.ssh/deploy_key + ssh-keyscan -p 51124 -H ${{ secrets.SSH_HOST_51124 }} >> ~/.ssh/known_hosts + +- name: Deploy to 51124 Server + run: | + ssh -p 51124 -i ~/.ssh/deploy_key admin@${{ secrets.SSH_HOST_51124 }} << 'EOF' + cd /home/admin/ivada_project/skill-email + git pull origin main --rebase + docker compose down || echo "Container was not running" + docker compose up -d --build + EOF +``` + +--- + +## 오전 9시 25분 + +### SSH 키 삭제 순서 문제 + +#### 문제 상황 +- Health check 단계에서 `Identity file /root/.ssh/deploy_key not accessible` 오류 +- Health check가 1분 이상 대기 + +#### 원인 +- Cleanup SSH 단계가 Health check보다 먼저 실행됨 +- Health check도 SSH 연결이 필요한데 키가 이미 삭제됨 + +#### 해결 +- 순서 변경: Deploy → Health check → Cleanup SSH + +--- + +## 오전 9시 30분 + +### DBCredentialsProvider 활성화 + +#### docker-compose.yml 수정 +```yaml +environment: + - TOKEN_BASE=/app/auth-server/tokens + - TOKEN_PROVIDER=database # 추가 + - POSTGRES_CONNECTION_STRING=${POSTGRES_CONNECTION_STRING} # 추가 +``` + +#### 브랜치 전략 +- main 브랜치에서 작업 +- happybell80 브랜치로 푸시 +- PR 생성 후 머지 + +--- + +## 오전 9시 35분 + +### Actions 중복 실행 문제 + +#### 문제 상황 +- PR 머지 시 Actions가 2개 동시 실행 +- 동일한 배포가 두 번 수행됨 + +#### 원인 +```yaml +on: + push: + branches: [main] + pull_request: + types: [closed] + branches: [main] +``` +- PR 머지 시 두 이벤트 발생: + 1. pull_request (closed) 이벤트 + 2. push 이벤트 (머지 커밋) + +#### 해결 +```yaml +on: + push: + branches: [main] +# PR 이벤트 제거 - push만으로 충분 +``` + +--- + +## 최종 결과 + +### ✅ 완료된 작업 +1. **DBCredentialsProvider 활성화** + - TOKEN_PROVIDER=database 환경변수 추가 + - POSTGRES_CONNECTION_STRING 설정 + - 파일 기반에서 DB 기반으로 전환 완료 + +2. **Gitea Actions 51124 서버 배포** + - SSH 방식으로 올바르게 설정 + - 포트 51124 사용 + - git pull 방식으로 코드 업데이트 + +3. **Actions 최적화** + - 중복 실행 문제 해결 + - SSH 키 관리 순서 정정 + +### 📊 시스템 아키텍처 +``` +사용자 → rb10508_micro → skill-email(DB 연동) → Gmail API + ↓ ↓ + PostgreSQL (gmail_tokens 테이블) + ↑ + robeing-monitor (아이템 관리) +``` + +### 🔄 배포 플로우 +``` +git push → Gitea Actions (51123) → SSH (포트 51124) → 51124 서버 + → git pull → docker-compose up -d --build +``` + +--- + +## 교훈 + +### 1. 트러블슈팅 문서 활용의 중요성 +- 기존 문서에 이미 해결책이 있는 경우가 많음 +- 특히 서버 간 SSH 연결, 배포 경로 등은 이미 검증된 패턴 사용 + +### 2. 환경변수 설정 확인 +- 코드가 구현되어 있어도 환경변수가 없으면 활성화되지 않음 +- docker-compose.yml과 .env 파일 모두 확인 필요 + +### 3. Actions 이벤트 이해 +- PR 머지는 두 개의 이벤트를 발생시킴 +- 단순하게 push 이벤트만 사용하는 것이 효율적 + +### 4. SSH 작업 순서 +- SSH 키는 모든 SSH 작업이 끝난 후에 삭제 +- Health check도 SSH를 사용한다면 키 필요 + +### 5. 서버 역할 분리 이해 +- 51123: nginx 프록시, Gitea, Actions runner +- 51124: 로빙 및 스킬 서비스 실행 +- 각 서버의 역할과 경로 구조 명확히 파악 + +--- + +## 관련 커밋 +- skill-email: `8a9403c` - SSH 방식으로 51124 서버 배포 수정 +- skill-email: `3f85138` - SSH 키 삭제 순서 수정 +- skill-email: `d377af9` - DBCredentialsProvider 환경변수 추가 +- skill-email: `7137c4f` - Actions 중복 실행 방지 + +--- + +**문서 끝** \ No newline at end of file