docs: skill-email DB 통합 및 Actions 배포 트러블슈팅 문서 추가
- DBCredentialsProvider 활성화 과정 - Gitea Actions 51124 서버 SSH 배포 설정 - Actions 중복 실행 문제 해결 - 교훈 및 시스템 아키텍처 정리
This commit is contained in:
parent
fe9f80d02d
commit
b9c03a282c
218
troubleshooting/250820_happybell80_skill-email_DB통합및Actions배포.md
Normal file
218
troubleshooting/250820_happybell80_skill-email_DB통합및Actions배포.md
Normal file
@ -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 중복 실행 방지
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**문서 끝**
|
||||||
Loading…
x
Reference in New Issue
Block a user