docs: 중앙 인증 서버(auth.ro-being.com) 구축 트러블슈팅
- auth-server 저장소 생성 및 기본 구조 설정 - nginx 리버스 프록시 설정 (포트 9000) - OAuth 인증 플로우 설계 문서화 - proxy_pass 끝 슬래시(/) 중요성 명시
This commit is contained in:
parent
53e1410ca9
commit
f2b4e09b1c
133
docs/troubleshooting/20250716_auth_server_setup.md
Normal file
133
docs/troubleshooting/20250716_auth_server_setup.md
Normal file
@ -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, 로빙)를 독립적으로 관리
|
||||
Loading…
x
Reference in New Issue
Block a user