diff --git a/docs/troubleshooting/20250716_auth_server_setup.md b/docs/troubleshooting/20250716_auth_server_setup.md new file mode 100644 index 0000000..7b2e45d --- /dev/null +++ b/docs/troubleshooting/20250716_auth_server_setup.md @@ -0,0 +1,133 @@ +# 중앙 인증 서버(auth.ro-being.com) 구축 + +**날짜**: 2025-07-16 +**관련 서비스**: auth-server, nginx-deploy +**작성자**: Claude AI Assistant + +## 작업 개요 + +로빙 프로젝트의 모든 외부 서비스(Gmail, Slack, Notion 등) OAuth 인증을 중앙에서 관리하기 위한 auth.ro-being.com 서버를 구축했습니다. + +## 주요 작업 내용 + +### 1. 인증 서버 아키텍처 설계 + +**문제 상황**: +- Gmail OAuth 리디렉션 URI 설정 필요 +- 각 로빙 컨테이너가 개별적으로 인증을 관리하면 복잡도 증가 +- 토큰 관리의 중앙화 필요 + +**해결 방안**: +- auth.ro-being.com을 중앙 인증 허브로 구축 +- 모든 OAuth 토큰을 중앙 DB에 저장 +- 로빙 컨테이너는 API를 통해 토큰 조회 + +### 2. auth-server 저장소 생성 + +```bash +# 저장소 생성 +git.ro-being.com/ivada_Ro-being/auth-server + +# 기본 구조 +auth-server/ +├── app/ +│ ├── main.py # FastAPI 메인 +│ ├── providers/ # OAuth 제공자별 모듈 +│ │ └── gmail.py # Gmail OAuth (구현 예정) +│ └── api/ # API 엔드포인트 +│ └── tokens.py # 토큰 관리 API +├── docker-compose.yml # 포트 9000 설정 +├── Dockerfile +└── requirements.txt +``` + +### 3. Nginx 리버스 프록시 설정 + +**nginx-deploy/default.conf 수정**: +```nginx +# Auth server configuration +server { + listen 80; + server_name auth.ro-being.com; + + location / { + proxy_pass http://192.168.219.45:9000/; # 끝에 / 중요! + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + + # OAuth 콜백 타임아웃 늘리기 + proxy_read_timeout 300s; + proxy_connect_timeout 75s; + } +} +``` + +**주의사항**: +- `proxy_pass` 끝에 `/` 필수 - 없으면 하위 경로 전달 안됨 +- 기존 서버 블록에 `server_name` 패턴 추가하여 auth 제외 + +### 4. Docker 구성 + +**docker-compose.yml**: +```yaml +services: + auth-server: + build: . + container_name: auth-server + ports: + - "9000:9000" + environment: + - PORT=9000 + - DATABASE_URL=${DATABASE_URL} + - JWT_SECRET_KEY=${JWT_SECRET_KEY} + - GOOGLE_CLIENT_ID=${GOOGLE_CLIENT_ID} + - GOOGLE_CLIENT_SECRET=${GOOGLE_CLIENT_SECRET} + networks: + - appnet +``` + +## 전체 인증 플로우 + +``` +1. 사용자 요청: "Gmail 읽어줘" + ↓ +2. 로빙 컨테이너: 토큰 확인 + ↓ +3. 토큰 없음 → auth.ro-being.com/auth/gmail/login 링크 전송 + ↓ +4. 사용자: 링크 클릭 → Google 로그인 + ↓ +5. Google → auth.ro-being.com/auth/gmail/callback + ↓ +6. auth-server: 토큰 저장 (PostgreSQL) + ↓ +7. 로빙: API로 토큰 조회하여 Gmail 접근 +``` + +## 다음 단계 + +1. **서버 작업**: + - auth-server 클론 및 빌드 + - `.env` 파일 설정 + - `docker-compose up -d` 실행 + - nginx reload + +2. **개발 작업**: + - Gmail OAuth provider 구현 + - PostgreSQL 토큰 저장 모델 + - JWT 기반 API 인증 + - rb10508_test에 Gmail 스킬 통합 + +## 관련 파일 + +- `/home/happybell/projects/ivada/auth-server/` - 인증 서버 +- `/home/happybell/projects/ivada/nginx-deploy/default.conf` - Nginx 설정 +- `/home/happybell/projects/ivada/skill_email/` - Gmail 스킬 (통합 예정) + +## 교훈 + +1. **Nginx proxy_pass 설정**: 끝에 `/` 유무가 경로 전달에 중요한 영향 +2. **중앙 인증의 장점**: 토큰 관리 일원화, 보안 강화, 확장성 +3. **마이크로서비스 구조**: 각 서비스(인증, API, 로빙)를 독립적으로 관리 \ No newline at end of file