fix: 51123 서버 IP 주소 업데이트 (성수 이전)
192.168.219.45 → 192.168.0.100 일괄 변경 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
2d1503921d
commit
0252dd1a7f
@ -2,7 +2,7 @@
|
||||
|
||||
## 서버 구성
|
||||
|
||||
### 51123 서버 (192.168.219.45)
|
||||
### 51123 서버 (192.168.0.100)
|
||||
**역할**: 프록시, CI/CD, 관리, 로그 저장
|
||||
|
||||
```
|
||||
|
||||
@ -26,7 +26,7 @@
|
||||
### 서버 구성
|
||||
| 서버 | IP | 역할 | 주요 서비스 |
|
||||
|------|-----|------|------------|
|
||||
| 51123 | 192.168.219.45 | 메인 서버 | Gitea, nginx, auth-server, PostgreSQL |
|
||||
| 51123 | 192.168.0.100 | 메인 서버 | Gitea, nginx, auth-server, PostgreSQL |
|
||||
| 51124 | 192.168.219.52 | 로빙/스킬 서버 | rb8001, rb10508_micro, skill-email, ChromaDB |
|
||||
|
||||
### 기본 구조
|
||||
|
||||
@ -55,7 +55,7 @@ async def get_user_uuid(slack_user_id: str) -> str:
|
||||
"""51123 매핑 API를 통해 UUID 조회"""
|
||||
async with httpx.AsyncClient() as client:
|
||||
response = await client.get(
|
||||
f"http://192.168.219.45:9000/api/slack/mapping/{slack_user_id}"
|
||||
f"http://192.168.0.100:9000/api/slack/mapping/{slack_user_id}"
|
||||
)
|
||||
if response.status_code == 200:
|
||||
return response.json()["user_id"]
|
||||
|
||||
@ -14,7 +14,7 @@
|
||||
|
||||
| 서버 | IP | 주요 서비스 | 포트 | 역할 |
|
||||
|------|----|------------|------|------|
|
||||
| 51123 | 192.168.219.45 | nginx, Gitea, auth-server, robeing-gateway | 80, 443, 3000, 8100 | 외부 진입, 인증, 프록시 |
|
||||
| 51123 | 192.168.0.100 | nginx, Gitea, auth-server, robeing-gateway | 80, 443, 3000, 8100 | 외부 진입, 인증, 프록시 |
|
||||
| 51124 | 192.168.219.52 | rb8001, rb10508_micro, robeing-monitor, skill-* | 8001, 10508, 9024, 85xx | 로빙/스킬/모니터링 실행 |
|
||||
|
||||
> 상세 구조: `310_전체_시스템_구조_컨테이너와_마이크로서비스.md`,
|
||||
|
||||
@ -55,7 +55,7 @@ sudo pkill -f "ssh.*5433"
|
||||
|
||||
### 1. 연결 정보
|
||||
```
|
||||
Host: localhost (SSH 터널 사용시) 또는 192.168.219.45 (직접 연결)
|
||||
Host: localhost (SSH 터널 사용시) 또는 192.168.0.100 (직접 연결)
|
||||
Port: 5433 (터널 로컬 포트) 또는 5432 (직접 연결)
|
||||
Database: main_db (기존 auth_db는 더 이상 사용 안함)
|
||||
Username: robeings
|
||||
@ -473,7 +473,7 @@ crontab에 추가 (5분마다 체크):
|
||||
|
||||
## 서버별 DB 연결 상태 (2025-08-26 현재)
|
||||
|
||||
### 51123 서버 (192.168.219.45)
|
||||
### 51123 서버 (192.168.0.100)
|
||||
- **PostgreSQL**: 로컬 실행 중 (포트 5432)
|
||||
- **데이터베이스**: main_db
|
||||
- **직접 연결**: `postgresql://robeings:robeings@localhost:5432/main_db`
|
||||
@ -481,7 +481,7 @@ crontab에 추가 (5분마다 체크):
|
||||
### 51124 서버 (192.168.219.52)
|
||||
- **PostgreSQL**: 없음 (51123 서버 DB 사용)
|
||||
- **연결 방법**: SSH 터널
|
||||
- **터널 설정**: `ssh -N -L 5433:localhost:5432 admin@192.168.219.45`
|
||||
- **터널 설정**: `ssh -N -L 5433:localhost:5432 admin@192.168.0.100`
|
||||
- **연결 문자열**: `postgresql://robeings:robeings@localhost:5433/main_db`
|
||||
|
||||
### 주요 서비스별 DB 연결
|
||||
|
||||
@ -21,7 +21,7 @@
|
||||
- `naming_conventions.md` - 명명 규칙
|
||||
|
||||
## 데이터베이스 정보
|
||||
- **Host**: 192.168.219.45 (51123 서버)
|
||||
- **Host**: 192.168.0.100 (51123 서버)
|
||||
- **Port**: 5432
|
||||
- **Database**: main_db (~~auth_db는 더 이상 사용 안함~~)
|
||||
- **User**: robeings
|
||||
@ -36,7 +36,7 @@ psql postgresql://robeings:robeings@localhost:5432/main_db
|
||||
### 51124 서버 (SSH 터널 사용)
|
||||
```bash
|
||||
# SSH 터널 생성
|
||||
ssh -N -L 5433:localhost:5432 admin@192.168.219.45
|
||||
ssh -N -L 5433:localhost:5432 admin@192.168.0.100
|
||||
|
||||
# DB 연결
|
||||
psql postgresql://robeings:robeings@localhost:5433/main_db
|
||||
|
||||
@ -97,7 +97,7 @@ collection_name = f"{settings.ROBEING_ID}_{username if username else 'default'}_
|
||||
- rb10408_test: 포트 10408
|
||||
|
||||
#### 환경변수 현황
|
||||
- AUTH_SERVER_URL: `http://192.168.219.45:9000` (설정됨)
|
||||
- AUTH_SERVER_URL: `http://192.168.0.100:9000` (설정됨)
|
||||
- JWT_SECRET_KEY: `your-jwt-secret-key` (기본값, 변경 필요)
|
||||
|
||||
## 주요 문제점
|
||||
|
||||
@ -23,8 +23,8 @@
|
||||
|
||||
**Neo4j 설치 완료** (51123 서버):
|
||||
- 버전: 2025.06.2 Community
|
||||
- Bolt: neo4j://192.168.219.45:7687
|
||||
- HTTP: http://192.168.219.45:7474
|
||||
- Bolt: neo4j://192.168.0.100:7687
|
||||
- HTTP: http://192.168.0.100:7474
|
||||
|
||||
### 스키마 설계
|
||||
|
||||
|
||||
@ -97,7 +97,7 @@
|
||||
- `GET /api/self-improvement/runs?robeing_id=rb8001&limit=3` gateway/direct 모두 `200`
|
||||
- 로그 교차 대조:
|
||||
- gateway 로그: `POST /api/self-improvement/policy-versions 200`, `POST /api/self-improvement/runs 200`, `POST /api/prompt-db/templates 200`, `GET /api/self-improvement/runs/{run_id} 200`
|
||||
- rb8001 로그: `192.168.219.45` 소스에서 동일 경로/시각대 요청 확인
|
||||
- rb8001 로그: `192.168.0.100` 소스에서 동일 경로/시각대 요청 확인
|
||||
- direct 500 원인 로그: `Key (run_id)=(8670eee3-d60e-4ac2-9fd2-42dfa1220dde) already exists` (재삽입 충돌)
|
||||
|
||||
## 4. 완료 조건
|
||||
|
||||
@ -39,7 +39,7 @@
|
||||
- [x] 포트 9024로 변경
|
||||
- [x] requirements.txt 확인
|
||||
- [x] .env 파일 생성
|
||||
- [x] PostgreSQL 연결 설정 (192.168.219.45)
|
||||
- [x] PostgreSQL 연결 설정 (192.168.0.100)
|
||||
|
||||
### 2.2 아이템 매니저 구현
|
||||
- [x] app/monitor 디렉토리 생성
|
||||
@ -197,7 +197,7 @@
|
||||
- [ ] .env 파일 수정
|
||||
- [ ] MONITOR_SERVICE_URL=http://192.168.219.52:9024
|
||||
- [ ] SKILL_EMAIL_URL=http://192.168.219.52:8501
|
||||
- [x] AUTH_SERVER_URL=http://192.168.219.45:9000 (이미 설정됨)
|
||||
- [x] AUTH_SERVER_URL=http://192.168.0.100:9000 (이미 설정됨)
|
||||
- [ ] 환경변수 로드 확인
|
||||
|
||||
### 4-1.2 Gmail 의도 분류 수정
|
||||
|
||||
@ -330,7 +330,7 @@ POSTGRES_HOST=localhost
|
||||
POSTGRES_PORT=5432
|
||||
|
||||
# 51124 서버에서
|
||||
POSTGRES_HOST=192.168.219.45
|
||||
POSTGRES_HOST=192.168.0.100
|
||||
POSTGRES_PORT=5432
|
||||
|
||||
# 공통
|
||||
@ -344,16 +344,16 @@ POSTGRES_PASSWORD=robeings
|
||||
# rb8001 (51124 서버)
|
||||
SKILL_EMAIL_URL=http://localhost:8501 # host 모드이므로 localhost
|
||||
STATE_SERVICE_URL=http://localhost:9024
|
||||
DATABASE_URL=postgresql://robeings:robeings@192.168.219.45:5432/main_db
|
||||
DATABASE_URL=postgresql://robeings:robeings@192.168.0.100:5432/main_db
|
||||
|
||||
# skill-email (51124 서버)
|
||||
TOKEN_PROVIDER=database # file → database
|
||||
POSTGRES_CONNECTION_STRING=postgresql://robeings:robeings@192.168.219.45:5432/main_db
|
||||
POSTGRES_CONNECTION_STRING=postgresql://robeings:robeings@192.168.0.100:5432/main_db
|
||||
|
||||
# robeing-monitor (51124 서버)
|
||||
PORT=9024
|
||||
SERVICE_NAME=robeing-monitor
|
||||
DATABASE_URL=postgresql://robeings:robeings@192.168.219.45:5432/main_db
|
||||
DATABASE_URL=postgresql://robeings:robeings@192.168.0.100:5432/main_db
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
@ -53,9 +53,9 @@
|
||||
### 0) 현재 Neo4j 위치 확인 (기반 코드 재사용)
|
||||
- **클라이언트**: `rb8001/app/services/memory/neo4j_client.py:1-200`
|
||||
- **환경변수**: `rb8001/.env:NEO4J_URI, NEO4J_USER, NEO4J_PASSWORD` (기본값 포함)
|
||||
- **연결 위치 확인**: Neo4j는 **51123 서버(192.168.219.45)**에서 운영
|
||||
- Bolt: `neo4j://192.168.219.45:7687` (DOCS 아이디어/검증 문서 동일)
|
||||
- HTTP: `http://192.168.219.45:7474`
|
||||
- **연결 위치 확인**: Neo4j는 **51123 서버(192.168.0.100)**에서 운영
|
||||
- Bolt: `neo4j://192.168.0.100:7687` (DOCS 아이디어/검증 문서 동일)
|
||||
- HTTP: `http://192.168.0.100:7474`
|
||||
- **기존 사용처**: `rb8001/app/services/memory_hybrid_retrieval.py`, `rb8001/app/services/startup_valuation.py`
|
||||
|
||||
### 1) 데이터 구조 (Neo4j)
|
||||
|
||||
@ -36,14 +36,14 @@ tags: [coldmail, skill-rag-file, rb8001, scheduler, postgres, research]
|
||||
- 이 시점 업로드 실패는 콜드메일 후보 수집 이후, 첨부파일 문서화 단계에서 발생했다.
|
||||
|
||||
### 3-3. `skill-rag-file`의 데이터베이스 주소는 stale 값이었다
|
||||
- 컨테이너 환경변수에서 `DATABASE_URL=postgresql://robeings:robeings@192.168.219.45:5432/main_db`가 확인됐다.
|
||||
- 현재 호스트 IP는 `192.168.0.100`, `172.17.0.1` 등으로 확인됐고 `192.168.219.45`는 현재 서버 유효 주소가 아니었다.
|
||||
- 호스트에서 `192.168.219.45:5432` 연결은 timeout이 발생했다.
|
||||
- 컨테이너 환경변수에서 `DATABASE_URL=postgresql://robeings:robeings@192.168.0.100:5432/main_db`가 확인됐다.
|
||||
- 현재 호스트 IP는 `192.168.0.100`, `172.17.0.1` 등으로 확인됐고 `192.168.0.100`는 현재 서버 유효 주소가 아니었다.
|
||||
- 호스트에서 `192.168.0.100:5432` 연결은 timeout이 발생했다.
|
||||
- 반대로 컨테이너 내부에서 `127.0.0.1:5432`와 `172.17.0.1:5432` 연결은 성공했다.
|
||||
|
||||
### 3-4. stale 값의 근거는 로컬 오버라이드 `.env`였다
|
||||
- `skill-rag-file/.env`에 `DATABASE_URL=postgresql://robeings:robeings@192.168.219.45:5432/main_db`가 남아 있었다.
|
||||
- `2026-03-04` 임시복구 문서에는 `192.168.219.45` 임시 IP 경로를 사용한 조치가 남아 있다.
|
||||
- `skill-rag-file/.env`에 `DATABASE_URL=postgresql://robeings:robeings@192.168.0.100:5432/main_db`가 남아 있었다.
|
||||
- `2026-03-04` 임시복구 문서에는 `192.168.0.100` 임시 IP 경로를 사용한 조치가 남아 있다.
|
||||
- 따라서 현재 서비스는 SSOT 런타임 환경이 아니라 과거 임시 오버라이드 값을 우선 사용하고 있었다.
|
||||
|
||||
### 3-5. 실패은닉은 `rb8001` 상위 흐름에서 발생했다
|
||||
@ -65,7 +65,7 @@ tags: [coldmail, skill-rag-file, rb8001, scheduler, postgres, research]
|
||||
|
||||
## 5. 해석(Interpretation)
|
||||
### 5-1. 09:05 운영 실패의 직접 원인
|
||||
- 직접 원인은 `skill-rag-file`이 오래된 DB 호스트 `192.168.219.45`를 사용한 것이다.
|
||||
- 직접 원인은 `skill-rag-file`이 오래된 DB 호스트 `192.168.0.100`를 사용한 것이다.
|
||||
- 이 값 때문에 첨부 저장용 DB insert가 timeout으로 실패했고, 콜드메일 후보 3건 모두 문서화에 실패했다.
|
||||
|
||||
### 5-2. 사용자가 "안 돌았다"고 체감한 이유
|
||||
@ -83,7 +83,7 @@ tags: [coldmail, skill-rag-file, rb8001, scheduler, postgres, research]
|
||||
- 운영 기준 최종 판정은 "실행은 됐고, 첨부 업로드 실패로 결과 생성에 실패"다.
|
||||
|
||||
### 결론 B. `skill-rag-file` 500의 단일 직접 원인은 stale DB 호스트다
|
||||
- `192.168.219.45`는 과거 임시복구 경로의 잔존값이었다.
|
||||
- `192.168.0.100`는 과거 임시복구 경로의 잔존값이었다.
|
||||
- 현재 정상 경로는 컨테이너에서 접근 가능한 `172.17.0.1:5432`다.
|
||||
|
||||
### 결론 C. 실패은닉의 단일 직접 원인은 `None` 기반 누락 처리다
|
||||
|
||||
@ -51,7 +51,7 @@ server {
|
||||
server_name auth.ro-being.com;
|
||||
|
||||
location / {
|
||||
proxy_pass http://192.168.219.45:9000/; # 끝에 / 중요!
|
||||
proxy_pass http://192.168.0.100: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;
|
||||
|
||||
@ -45,9 +45,9 @@ sudo vim /etc/neo4j/neo4j.conf
|
||||
|
||||
# 다음 설정 추가/수정
|
||||
server.default_listen_address=0.0.0.0
|
||||
server.default_advertised_address=192.168.219.45
|
||||
server.default_advertised_address=192.168.0.100
|
||||
dbms.default_listen_address=0.0.0.0
|
||||
dbms.default_advertised_address=192.168.219.45
|
||||
dbms.default_advertised_address=192.168.0.100
|
||||
|
||||
# Neo4j 재시작
|
||||
sudo systemctl restart neo4j
|
||||
|
||||
@ -44,7 +44,7 @@ CREATE TABLE slack_user_mapping (
|
||||
#### 3. rb10508_micro 통합
|
||||
- Auth API 호출 구현
|
||||
- 5분 캐싱 추가
|
||||
- 환경변수: `AUTH_SERVER_URL=http://192.168.219.45:9000`
|
||||
- 환경변수: `AUTH_SERVER_URL=http://192.168.0.100:9000`
|
||||
|
||||
### 발생한 문제들
|
||||
|
||||
@ -64,7 +64,7 @@ ALTER TABLE slack_user_mapping OWNER TO robeings;
|
||||
#### 2. 환경변수 설정 오류
|
||||
**문제**: rb10508_micro가 잘못된 Auth 서버 주소 사용
|
||||
**원인**: `AUTH_SERVER_URL=http://localhost:8001` (구버전)
|
||||
**해결**: `AUTH_SERVER_URL=http://192.168.219.45:9000`
|
||||
**해결**: `AUTH_SERVER_URL=http://192.168.0.100:9000`
|
||||
|
||||
#### 3. 서버 역할 혼동
|
||||
**문제**: 51124 서버에 코드 수정 지시
|
||||
|
||||
@ -114,7 +114,7 @@ useEffect(() => {
|
||||
async def get_stats(robeing_id: str):
|
||||
# PostgreSQL 직접 연결
|
||||
conn = await asyncpg.connect(
|
||||
host='192.168.219.45',
|
||||
host='192.168.0.100',
|
||||
port=5432,
|
||||
user='robeings',
|
||||
password='robeings',
|
||||
|
||||
@ -142,7 +142,7 @@ CREATE TABLE robeing.conversations (
|
||||
```python
|
||||
# app/api/endpoints.py
|
||||
conn = await asyncpg.connect(
|
||||
host='192.168.219.45',
|
||||
host='192.168.0.100',
|
||||
port=5432,
|
||||
user='robeings',
|
||||
password='robeings',
|
||||
|
||||
@ -224,7 +224,7 @@ def _get_gmail_service(self, user_id: str) -> Result[Any, EmailError]:
|
||||
# docker-compose.yml
|
||||
environment:
|
||||
- TOKEN_PROVIDER=database
|
||||
- POSTGRES_CONNECTION_STRING=${POSTGRES_CONNECTION_STRING:-postgresql://robeings:robeings@192.168.219.45:5432/main_db}
|
||||
- POSTGRES_CONNECTION_STRING=${POSTGRES_CONNECTION_STRING:-postgresql://robeings:robeings@192.168.0.100:5432/main_db}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
@ -137,7 +137,7 @@ ALTER TABLE gmail_token ALTER COLUMN token_data DROP NOT NULL;
|
||||
**문제**: `host.docker.internal` vs 실제 IP
|
||||
**해결**: 환경변수 기반으로 동적 설정
|
||||
```python
|
||||
database_url = os.getenv("DATABASE_URL", "postgresql://robeings:robeings@192.168.219.45:5432/main_db")
|
||||
database_url = os.getenv("DATABASE_URL", "postgresql://robeings:robeings@192.168.0.100:5432/main_db")
|
||||
```
|
||||
|
||||
### 4.5 Gmail 토큰 테이블 구조 개선
|
||||
|
||||
@ -221,7 +221,7 @@ sequenceDiagram
|
||||
### 7.4 현재 구조
|
||||
```bash
|
||||
# rb8001이 직접 DB 연결 (51124 서버)
|
||||
DATABASE_URL=postgresql://robeings:robeings@192.168.219.45:5432/main_db
|
||||
DATABASE_URL=postgresql://robeings:robeings@192.168.0.100:5432/main_db
|
||||
# State Service 없이 직접 연결
|
||||
```
|
||||
|
||||
|
||||
@ -40,7 +40,7 @@ grep -r "save_conversation\|store_memory" rb8001/
|
||||
### 2. 서버 상태 확인 (51124)
|
||||
```bash
|
||||
# PostgreSQL 연결 테스트
|
||||
PGPASSWORD=robeings psql -h 192.168.219.45 -U robeings -d main_db -c "\dt"
|
||||
PGPASSWORD=robeings psql -h 192.168.0.100 -U robeings -d main_db -c "\dt"
|
||||
|
||||
# 결과:
|
||||
# - conversation_log 테이블 존재 ✅
|
||||
@ -51,7 +51,7 @@ PGPASSWORD=robeings psql -h 192.168.219.45 -U robeings -d main_db -c "\dt"
|
||||
### 3. 데이터베이스 연결 설정
|
||||
```bash
|
||||
# 직접 연결 설정
|
||||
192.168.219.45:5432/main_db ✅
|
||||
192.168.0.100:5432/main_db ✅
|
||||
```
|
||||
|
||||
---
|
||||
@ -62,7 +62,7 @@ PGPASSWORD=robeings psql -h 192.168.219.45 -U robeings -d main_db -c "\dt"
|
||||
```diff
|
||||
# rb8001/.env
|
||||
- DATABASE_URL=postgresql://robeings:<비밀번호>@localhost/rb8001_db
|
||||
+ DATABASE_URL=postgresql://robeings:<비밀번호>@192.168.219.45:5432/main_db
|
||||
+ DATABASE_URL=postgresql://robeings:<비밀번호>@192.168.0.100:5432/main_db
|
||||
```
|
||||
|
||||
### 2. 직접 DB 저장 구현
|
||||
|
||||
@ -91,10 +91,10 @@ print(f'Token expiry: {creds.expiry if creds else None}')
|
||||
"
|
||||
|
||||
# 2. auth-server의 토큰 상태 확인 API (이미 구현됨)
|
||||
curl http://192.168.219.45:3000/api/gmail/check/U0925SXQFDK
|
||||
curl http://192.168.0.100:3000/api/gmail/check/U0925SXQFDK
|
||||
|
||||
# 3. auth-server의 토큰 갱신 API 테스트 (이미 구현됨)
|
||||
curl -X POST http://192.168.219.45:3000/api/gmail/refresh/U0925SXQFDK
|
||||
curl -X POST http://192.168.0.100:3000/api/gmail/refresh/U0925SXQFDK
|
||||
```
|
||||
|
||||
## 개선 방향
|
||||
|
||||
@ -67,7 +67,7 @@ docker restart skill-email
|
||||
# 변경:
|
||||
async def get_uuid_from_slack(slack_id: str):
|
||||
response = await httpx.get(
|
||||
f"http://192.168.219.45:9000/api/slack/mapping/{slack_id}"
|
||||
f"http://192.168.0.100:9000/api/slack/mapping/{slack_id}"
|
||||
)
|
||||
return response.json()["user_id"]
|
||||
```
|
||||
@ -97,7 +97,7 @@ await http_client.post(url, json=data, headers=headers)
|
||||
### API 매핑 테스트
|
||||
```bash
|
||||
# 51123에서 Slack → UUID 매핑 확인
|
||||
curl http://192.168.219.45:9000/api/slack/mapping/U0925SXQFDK
|
||||
curl http://192.168.0.100:9000/api/slack/mapping/U0925SXQFDK
|
||||
# 응답: {"user_id": "1e16e9d5-59f3-54da-a661-8abeabff4230", ...}
|
||||
```
|
||||
|
||||
|
||||
@ -25,7 +25,7 @@
|
||||
|
||||
### 미해결 사항 (별도 이슈로 분리)
|
||||
- **하드코딩 URL 제거**: → [250915_hardcoded_url_removal.md](./250915_hardcoded_url_removal.md)로 이관
|
||||
- `rb8001/app/skills/email_integration.py:39-47`의 `http://192.168.219.45:9000` 하드코딩
|
||||
- `rb8001/app/skills/email_integration.py:39-47`의 `http://192.168.0.100:9000` 하드코딩
|
||||
- 전체 서비스 환경변수화 프로젝트의 일부로 처리 예정
|
||||
|
||||
- **감정 분석 시스템**: → [250916_로빙_감정_분석_시스템_구현_계획.md](../ideas/250916_로빙_감정_분석_시스템_구현_계획.md)로 이관
|
||||
@ -35,7 +35,7 @@
|
||||
|
||||
### 증상
|
||||
```
|
||||
INFO:httpx:HTTP Request: GET http://192.168.219.45:9000/api/slack/mapping/1e16e9d5-59f3-54da-a661-8abeabff4230 "HTTP/1.1 200 OK"
|
||||
INFO:httpx:HTTP Request: GET http://192.168.0.100:9000/api/slack/mapping/1e16e9d5-59f3-54da-a661-8abeabff4230 "HTTP/1.1 200 OK"
|
||||
INFO:app.skills.email_integration:Slack ID 1e16e9d5-59f3-54da-a661-8abeabff4230 mapped to UUID default_user
|
||||
ERROR:app.skills.email_integration:DB 조회 실패: invalid input syntax for type uuid: "default_user"
|
||||
```
|
||||
|
||||
@ -8,7 +8,7 @@
|
||||
## 1. 데이터베이스 연결 정보
|
||||
|
||||
### 메인 데이터베이스
|
||||
- **main_db**: `postgresql://robeings:robeings@192.168.219.45:5432/main_db`
|
||||
- **main_db**: `postgresql://robeings:robeings@192.168.0.100:5432/main_db`
|
||||
- **robeing_metrics**: `postgresql://postgres:@172.17.0.1:5432/robeing_metrics`
|
||||
|
||||
### 사용 라이브러리
|
||||
|
||||
@ -8,7 +8,7 @@
|
||||
- **서버**: 51124 (192.168.219.52)
|
||||
- **포트**: 9024
|
||||
- **컨테이너**: robeing_monitor (38시간 가동 중, healthy)
|
||||
- **DB 연결**: postgresql://robeings:robeings@192.168.219.45:5432/main_db
|
||||
- **DB 연결**: postgresql://robeings:robeings@192.168.0.100:5432/main_db
|
||||
|
||||
## 문제 증상
|
||||
Gateway에서 stats API 호출 시 매분마다 500 에러 발생
|
||||
|
||||
@ -19,7 +19,7 @@
|
||||
- Line 203: `https://auth.ro-being.com/auth/slack/login/callback` (확인 필요)
|
||||
|
||||
**app/providers/gmail_passport.py**
|
||||
- Line 54: `postgresql://robeings:robeings@192.168.219.45:5432/main_db`
|
||||
- Line 54: `postgresql://robeings:robeings@192.168.0.100:5432/main_db`
|
||||
- Line 26: `https://auth.ro-being.com/auth/gmail/passport/callback`
|
||||
|
||||
**app/providers/gmail.py**
|
||||
@ -46,7 +46,7 @@
|
||||
- 하드코딩: `localhost:8502`, `localhost:8505` URL (확인 필요)
|
||||
|
||||
**app/skills/email_integration.py**
|
||||
- Line 37: `http://192.168.219.45:9000/api/slack/mapping/{slack_id}`
|
||||
- Line 37: `http://192.168.0.100:9000/api/slack/mapping/{slack_id}`
|
||||
- Line 253: `http://localhost:8001/api/llm/extract` (콜백 URL)
|
||||
- Line 17-18: `localhost:8501`, `localhost:9024` (기본값)
|
||||
|
||||
@ -82,7 +82,7 @@
|
||||
- `https://auth.ro-being.com` 포함
|
||||
|
||||
**docker-compose.yml**
|
||||
- DB 호스트 `192.168.219.45`
|
||||
- DB 호스트 `192.168.0.100`
|
||||
|
||||
### skill-email
|
||||
**main.py**
|
||||
@ -117,7 +117,7 @@
|
||||
|
||||
### rb10508_micro
|
||||
**app/api/endpoints.py**
|
||||
- DB 접속: `host='192.168.219.45', port=5432, user='robeings'` 하드코딩
|
||||
- DB 접속: `host='192.168.0.100', port=5432, user='robeings'` 하드코딩
|
||||
|
||||
### skill-embedding
|
||||
**http_embedding_function.py / 테스트/컴포즈**
|
||||
|
||||
@ -18,8 +18,8 @@
|
||||
### 파일 저장 구조 설정
|
||||
- **51123 디렉토리**: /mnt/hdd/data/documents/
|
||||
- **51124 마운트**: /mnt/51123data/ (SSHFS)
|
||||
- **SSHFS 명령 (초기)**: `sshfs -o IdentityFile=/home/admin/.ssh/id_rsa_deploy,reconnect,uid=$(id -u),gid=$(id -g) admin@192.168.219.45:/mnt/hdd/data /mnt/51123data -p 51123`
|
||||
- **SSHFS 명령 (2025-10-14 수정)**: `sshfs -o allow_other,default_permissions,IdentityFile=/home/admin/.ssh/id_rsa_deploy,reconnect,uid=1001,gid=1000 admin@192.168.219.45:/mnt/hdd/data /mnt/51123data -p 51123`
|
||||
- **SSHFS 명령 (초기)**: `sshfs -o IdentityFile=/home/admin/.ssh/id_rsa_deploy,reconnect,uid=$(id -u),gid=$(id -g) admin@192.168.0.100:/mnt/hdd/data /mnt/51123data -p 51123`
|
||||
- **SSHFS 명령 (2025-10-14 수정)**: `sshfs -o allow_other,default_permissions,IdentityFile=/home/admin/.ssh/id_rsa_deploy,reconnect,uid=1001,gid=1000 admin@192.168.0.100:/mnt/hdd/data /mnt/51123data -p 51123`
|
||||
- **권한**: admin:xusers (읽기/쓰기 가능)
|
||||
- **주의**: allow_other 사용 시 /etc/fuse.conf에 user_allow_other 필요
|
||||
|
||||
@ -47,7 +47,7 @@
|
||||
## 3. 확인된 시스템 정보
|
||||
|
||||
### 51124 서버 환경
|
||||
- **SSHFS 마운트**: /mnt/51123data → 192.168.219.45:/mnt/hdd/data
|
||||
- **SSHFS 마운트**: /mnt/51123data → 192.168.0.100:/mnt/hdd/data
|
||||
- **documents 디렉토리**: /mnt/51123data/documents/ 존재
|
||||
- **ChromaDB**: 0.5.20 설치됨
|
||||
|
||||
|
||||
@ -92,7 +92,7 @@ brain_service/llm_service (파일 처리 없이 텍스트만 처리)
|
||||
- **원인**: team_document 테이블이 51123 PostgreSQL에 있고 권한 없음
|
||||
- **해결**:
|
||||
1. skill-rag-file .env에 51123 PostgreSQL 연결 정보 추가
|
||||
- `DATABASE_URL=postgresql+asyncpg://robeings:password@192.168.219.45:5432/main_db`
|
||||
- `DATABASE_URL=postgresql+asyncpg://robeings:password@192.168.0.100:5432/main_db`
|
||||
2. PostgreSQL 권한 부여: `GRANT ALL PRIVILEGES ON TABLE team_document TO robeings;`
|
||||
3. 테이블 소유자 변경: `ALTER TABLE team_document OWNER TO robeings;`
|
||||
4. 모든 주요 테이블 소유자 robeings로 통일 (company, team, user, slack_workspace, team_document)
|
||||
|
||||
@ -64,7 +64,7 @@ log-pipeline:
|
||||
destination: "@message"
|
||||
sink:
|
||||
- opensearch:
|
||||
hosts: ["http://192.168.219.45:9200"]
|
||||
hosts: ["http://192.168.0.100:9200"]
|
||||
index: "dataprepper-%{yyyy.MM.dd}"
|
||||
document_type: "_doc"
|
||||
```
|
||||
@ -141,12 +141,12 @@ curl -s http://localhost:2021/health
|
||||
|
||||
### OpenSearch 인덱스 확인
|
||||
```bash
|
||||
curl -s "http://192.168.219.45:9200/_cat/indices?v" | grep dataprepper
|
||||
curl -s "http://192.168.0.100:9200/_cat/indices?v" | grep dataprepper
|
||||
```
|
||||
|
||||
### 문서 수 확인
|
||||
```bash
|
||||
curl -s "http://192.168.219.45:9200/dataprepper-*/_count"
|
||||
curl -s "http://192.168.0.100:9200/dataprepper-*/_count"
|
||||
```
|
||||
|
||||
## 구현 현황 (2025-09-18 업데이트)
|
||||
|
||||
@ -86,7 +86,7 @@ def get_credentials(self, user_id: str) -> Optional[Credentials]:
|
||||
**파일**: `/home/admin/ivada_project/skill_email/.env`
|
||||
```env
|
||||
TOKEN_PROVIDER=database # api에서 database로 변경
|
||||
POSTGRES_CONNECTION_STRING=postgresql://robeings:robeings@192.168.219.45:5432/main_db
|
||||
POSTGRES_CONNECTION_STRING=postgresql://robeings:robeings@192.168.0.100:5432/main_db
|
||||
```
|
||||
|
||||
## 테스트 결과
|
||||
|
||||
@ -72,7 +72,7 @@ curl -s "http://localhost:9200/dataprepper-*/_search" | \
|
||||
|
||||
### 수행된 조치
|
||||
1. **data-prepper 설정 수정**
|
||||
- pipelines.yaml: `hosts: ["http://localhost:9200"]` → `hosts: ["http://192.168.219.45:9200"]`
|
||||
- pipelines.yaml: `hosts: ["http://localhost:9200"]` → `hosts: ["http://192.168.0.100:9200"]`
|
||||
- 51123 서버의 OpenSearch에 정상 연결
|
||||
|
||||
2. **Actions orphan 문제 해결**
|
||||
|
||||
@ -60,7 +60,7 @@ git reset --hard origin/main
|
||||
|
||||
```env
|
||||
# .env 파일 생성
|
||||
OPENSEARCH_HOST=192.168.219.45 # 51124서버용
|
||||
OPENSEARCH_HOST=192.168.0.100 # 51124서버용
|
||||
```
|
||||
|
||||
### 4단계: 컨테이너 재시작
|
||||
|
||||
@ -75,7 +75,7 @@
|
||||
- fluent-bit.conf: `Host ${OPENSEARCH_HOST}`
|
||||
- docker-compose.yaml: `OPENSEARCH_HOST=${OPENSEARCH_HOST:-127.0.0.1}`
|
||||
- 51123 서버 .env: `OPENSEARCH_HOST=127.0.0.1`
|
||||
- 51124 서버 .env: `OPENSEARCH_HOST=192.168.219.45`
|
||||
- 51124 서버 .env: `OPENSEARCH_HOST=192.168.0.100`
|
||||
|
||||
### 2. debug 로그 무한루프 문제
|
||||
**문제**: Log_Level debug로 Fluent Bit 자기 자신 로그를 수집하는 무한루프
|
||||
|
||||
@ -29,7 +29,7 @@
|
||||
|
||||
**해결**: 51123 PostgreSQL 직접 접속하여 삭제
|
||||
```bash
|
||||
ssh -i ~/.ssh/id_rsa_deploy -p 51123 admin@192.168.219.45 \
|
||||
ssh -i ~/.ssh/id_rsa_deploy -p 51123 admin@192.168.0.100 \
|
||||
"PGPASSWORD=robeings psql -h localhost -U robeings -d main_db -c \
|
||||
\"DELETE FROM team_document WHERE id IN (...);\""
|
||||
```
|
||||
|
||||
@ -174,7 +174,7 @@ final_score = (vector_score * 0.4) + (normalized_graph * 0.6)
|
||||
},
|
||||
"neo4j": {
|
||||
"connected": true,
|
||||
"uri": "neo4j://192.168.219.45:7687",
|
||||
"uri": "neo4j://192.168.0.100:7687",
|
||||
"database": "neo4j",
|
||||
"event_count": 42
|
||||
}
|
||||
@ -201,7 +201,7 @@ final_score = (vector_score * 0.4) + (normalized_graph * 0.6)
|
||||
|
||||
**결과**:
|
||||
- ChromaDB 저장: ✅ 정상
|
||||
- Neo4j 연결: ⚠️ 실패 (localhost → 192.168.219.45로 변경 필요)
|
||||
- Neo4j 연결: ⚠️ 실패 (localhost → 192.168.0.100로 변경 필요)
|
||||
- Fallback 동작: ✅ 정상 (Neo4j 연결 실패 시 ChromaDB 단독 모드)
|
||||
|
||||
---
|
||||
@ -221,7 +221,7 @@ final_score = (vector_score * 0.4) + (normalized_graph * 0.6)
|
||||
**.env 파일 추가 필요**:
|
||||
```bash
|
||||
# Neo4j 연결 설정
|
||||
NEO4J_URI=neo4j://192.168.219.45:7687
|
||||
NEO4J_URI=neo4j://192.168.0.100:7687
|
||||
NEO4J_USER=neo4j
|
||||
NEO4J_PASSWORD=<비밀번호>
|
||||
```
|
||||
@ -314,7 +314,7 @@ app.include_router(memory_router)
|
||||
|
||||
### 즉시 필요
|
||||
- [ ] **.env 파일에 Neo4j 환경변수 추가**
|
||||
- NEO4J_URI=neo4j://192.168.219.45:7687
|
||||
- NEO4J_URI=neo4j://192.168.0.100:7687
|
||||
- NEO4J_PASSWORD=<비밀번호>
|
||||
- [ ] **Docker 재시작 후 재테스트**
|
||||
|
||||
@ -344,7 +344,7 @@ app.include_router(memory_router)
|
||||
- **교훈**: 외부 의존성은 항상 fallback 준비
|
||||
|
||||
### 3. 환경변수 기본값의 함정
|
||||
- **문제**: NEO4J_URI 기본값 localhost:7687 (51123 서버는 192.168.219.45)
|
||||
- **문제**: NEO4J_URI 기본값 localhost:7687 (51123 서버는 192.168.0.100)
|
||||
- **교훈**: 기본값은 문서에 명시, 배포 시 환경변수 체크리스트 필수
|
||||
|
||||
---
|
||||
|
||||
@ -31,18 +31,18 @@ Phase 2 하이브리드 기억 회상 시스템 (ChromaDB + Neo4j)의 Neo4j 연
|
||||
**수정 후**:
|
||||
```yaml
|
||||
# Neo4j (51123 서버에 설치됨)
|
||||
- NEO4J_URI=neo4j://192.168.219.45:7687
|
||||
- NEO4J_URI=neo4j://192.168.0.100:7687
|
||||
- NEO4J_USER=neo4j
|
||||
- NEO4J_PASSWORD=${NEO4J_PASSWORD}
|
||||
```
|
||||
|
||||
**수정 사항**:
|
||||
- URI: `bolt://localhost:7687` → `neo4j://192.168.219.45:7687`
|
||||
- 이유: Neo4j는 51123 서버 (192.168.219.45)에 설치됨
|
||||
- URI: `bolt://localhost:7687` → `neo4j://192.168.0.100:7687`
|
||||
- 이유: Neo4j는 51123 서버 (192.168.0.100)에 설치됨
|
||||
- 프로토콜: neo4j_client.py 코드와 일치 (`neo4j://`)
|
||||
- PASSWORD: 환경변수 참조로 변경 (`.env` 파일에서 설정, 하드코딩 금지)
|
||||
|
||||
**커밋**: 40a0553 "Phase 2: Neo4j 연결 설정 업데이트 (192.168.219.45:7687)"
|
||||
**커밋**: 40a0553 "Phase 2: Neo4j 연결 설정 업데이트 (192.168.0.100:7687)"
|
||||
|
||||
### 2. Neo4j 메타데이터 타입 에러 수정
|
||||
|
||||
@ -108,7 +108,7 @@ Phase 2: 하이브리드 기억 회상 테스트
|
||||
|
||||
2. 통계 확인
|
||||
ChromaDB: {'collection_name': 'rb8001_test_user_ontology_memory', 'user_id': 'test_user_ontology'}
|
||||
Neo4j: {'connected': True, 'uri': 'neo4j://192.168.219.45:7687', 'database': 'neo4j', 'event_count': 0}
|
||||
Neo4j: {'connected': True, 'uri': 'neo4j://192.168.0.100:7687', 'database': 'neo4j', 'event_count': 0}
|
||||
|
||||
3. 테스트 사건 저장 (ChromaDB + Neo4j)
|
||||
✅ [1] 프레젠테이션을 성공적으로 마쳤다. 청중 반응이 좋았다.... → f1ba2bbf
|
||||
@ -164,7 +164,7 @@ curl -X GET http://localhost:8001/api/v1/memory/stats \
|
||||
},
|
||||
"neo4j": {
|
||||
"connected": true,
|
||||
"uri": "neo4j://192.168.219.45:7687",
|
||||
"uri": "neo4j://192.168.0.100:7687",
|
||||
"database": "neo4j",
|
||||
"event_count": 4
|
||||
}
|
||||
@ -251,7 +251,7 @@ curl -X POST http://localhost:8001/api/v1/memory/recall \
|
||||
- **상태**: Running (healthy)
|
||||
|
||||
### 서버
|
||||
- **51123 서버**: Neo4j (192.168.219.45:7687)
|
||||
- **51123 서버**: Neo4j (192.168.0.100:7687)
|
||||
- 버전: Neo4j 2025.06.2 Community Edition
|
||||
- 상태: Active (running)
|
||||
- 데이터베이스: neo4j
|
||||
|
||||
@ -146,7 +146,7 @@ LLM Service (응답 생성)
|
||||
2. Memory (Phase 2) ✅ 활성화
|
||||
- ChromaDB + Neo4j 하이브리드
|
||||
- 3단계 회상 알고리즘
|
||||
- Neo4j 연결: 192.168.219.45:7687
|
||||
- Neo4j 연결: 192.168.0.100:7687
|
||||
|
||||
3. Ethics (Phase 3) ✅ 활성화
|
||||
- 감정-우도 조정 (11 규칙)
|
||||
|
||||
@ -18,7 +18,7 @@
|
||||
- default:245-246: `proxy_pass http://localhost:8501/;` → `proxy_pass http://192.168.219.52:8501/;`
|
||||
- 검증 절차:
|
||||
- `nginx -t` 구성 테스트 통과 → `systemctl reload nginx`
|
||||
- HTTPS 호스트 헤더로 헬스 체크: `curl -k -H 'Host: ro-being.com' https://192.168.219.45/skill-email/health` → 200 OK
|
||||
- HTTPS 호스트 헤더로 헬스 체크: `curl -k -H 'Host: ro-being.com' https://192.168.0.100/skill-email/health` → 200 OK
|
||||
|
||||
## 구현 완료
|
||||
- 적용 시각: 2025-10-20 00:06 KST
|
||||
|
||||
@ -14,7 +14,7 @@
|
||||
- rb8001
|
||||
- 커밋: `b8901ae` (main)
|
||||
- 내용: 추적 중인 변경만 커밋(Coldmail 워크플로/스크립트 경미 수정). 로컬의 미추적 스크립트(`scripts/debug_email_detail.py`, `scripts/find_pdf_emails.py`)와 임시 파일(`state/_write_test`)은 푸시 제외.
|
||||
- 원격: `http://192.168.219.45:3000/ivada_Ro-being/rb8001.git`
|
||||
- 원격: `http://192.168.0.100:3000/ivada_Ro-being/rb8001.git`
|
||||
- skill-rag-file
|
||||
- 커밋: `cfb012c` (main)
|
||||
- 내용: 로컬에서 1커밋 선행 상태를 원격으로 동기화(추가 변경 없음).
|
||||
|
||||
@ -20,7 +20,7 @@
|
||||
## 확인 방법
|
||||
```bash
|
||||
# 실DB 읽기 전용 쿼리 예시 (23 서버 main_db)
|
||||
PGPASSWORD=robeings psql -h 192.168.219.45 -U robeings -d main_db -c \
|
||||
PGPASSWORD=robeings psql -h 192.168.0.100 -U robeings -d main_db -c \
|
||||
"SELECT word, coldmail_count, normal_count FROM coldmail_classifier WHERE word IN ('투자','ir','deck');"
|
||||
```
|
||||
|
||||
|
||||
@ -54,12 +54,12 @@
|
||||
**원칙**:
|
||||
- Docker API는 같은 서버의 컨테이너만 조회 가능 (다른 서버의 컨테이너는 조회 불가)
|
||||
- Docker API 체크 실패 시(`not_found`, `error`) HTTP 헬스체크로 자동 폴백
|
||||
- 서버 간 접근 시 URL 폴백: `172.17.0.1` 실패 시 `192.168.219.45`로 재시도
|
||||
- 서버 간 접근 시 URL 폴백: `172.17.0.1` 실패 시 `192.168.0.100`로 재시도
|
||||
|
||||
**이유**:
|
||||
- Docker API는 로컬 Docker 데몬에만 접근 가능하여 원격 서버 컨테이너 조회 불가
|
||||
- 서버 간 서비스 체크는 HTTP 헬스체크로만 가능
|
||||
- Docker 네트워크 IP(`172.17.0.1`)는 같은 서버 내부에서만 유효, 서버 간 접근은 실제 IP(`192.168.219.45`) 필요
|
||||
- Docker 네트워크 IP(`172.17.0.1`)는 같은 서버 내부에서만 유효, 서버 간 접근은 실제 IP(`192.168.0.100`) 필요
|
||||
|
||||
---
|
||||
|
||||
|
||||
@ -50,7 +50,7 @@ StoreHub 스타트업 데이터가 Neo4j에 정상적으로 추가되었습니
|
||||
|
||||
**실행 환경**:
|
||||
- rb8001 Docker 컨테이너 내부에서 실행
|
||||
- Neo4j 연결: neo4j://192.168.219.45:7687 (51123 서버)
|
||||
- Neo4j 연결: neo4j://192.168.0.100:7687 (51123 서버)
|
||||
- 환경변수: NEO4J_PASSWORD 설정됨 (.env 파일)
|
||||
|
||||
**실행 결과**:
|
||||
|
||||
@ -13,7 +13,7 @@
|
||||
**원인 3가지**:
|
||||
1. Docker API 제한: 51124에서 51123 컨테이너를 Docker API로 조회 불가 (같은 서버 컨테이너만 조회 가능)
|
||||
2. 폴백 로직 없음: Docker API 실패 시 HTTP 헬스체크로 폴백하지 않음
|
||||
3. 서버 간 접근 불가: 172.17.0.1은 Docker bridge IP로 같은 서버에서만 접근 가능, 51124에서 51123 서비스 접근 시 192.168.219.45 필요
|
||||
3. 서버 간 접근 불가: 172.17.0.1은 Docker bridge IP로 같은 서버에서만 접근 가능, 51124에서 51123 서비스 접근 시 192.168.0.100 필요
|
||||
|
||||
## 해결 방안
|
||||
|
||||
@ -21,21 +21,21 @@
|
||||
- `system_service.py:458-468`: Docker API 체크 성공 시만 즉시 반환, 실패 시 HTTP 체크로 진행
|
||||
|
||||
### 2. 서버 간 접근 URL 폴백
|
||||
- `system_service.py:475-500`: 172.17.0.1 사용하는 51123 서버 서비스는 192.168.219.45로 폴백 시도
|
||||
- `system_service.py:475-500`: 172.17.0.1 사용하는 51123 서버 서비스는 192.168.0.100로 폴백 시도
|
||||
|
||||
### 3. opensearch_9600 제거
|
||||
- `system_service.py:25,38,422`: Performance Analyzer 비활성화로 헬스체크 불가하여 제거
|
||||
|
||||
**코드 변경**:
|
||||
- Docker API 성공 체크 후 HTTP 폴백 가능하도록 조건 변경
|
||||
- HTTP 체크 시 172.17.0.1 실패 시 192.168.219.45로 재시도
|
||||
- HTTP 체크 시 172.17.0.1 실패 시 192.168.0.100로 재시도
|
||||
- opensearch_9600 서비스 제거 (SERVER_51123_SERVICES, BASE_SERVICES, docker_services에서 제거)
|
||||
|
||||
## 교훈
|
||||
|
||||
### 서버 간 접근 시 Docker bridge IP 한계
|
||||
- 172.17.0.1은 Docker bridge IP로 같은 호스트에서만 유효
|
||||
- 서버 간 접근 시 실제 서버 IP(192.168.219.45/52) 사용 필요
|
||||
- 서버 간 접근 시 실제 서버 IP(192.168.0.100/52) 사용 필요
|
||||
|
||||
### 폴백 로직 필수
|
||||
- Docker API는 같은 서버 컨테이너만 조회 가능
|
||||
|
||||
@ -79,7 +79,7 @@
|
||||
- 기존처럼 `500`으로 재매핑되지 않음
|
||||
|
||||
3. **실유입 로그 확인**
|
||||
- `docker logs rb8001` 최근 구간에서 `192.168.219.45 -> POST /api/slack/events`가 `200 OK` 다건 확인
|
||||
- `docker logs rb8001` 최근 구간에서 `192.168.0.100 -> POST /api/slack/events`가 `200 OK` 다건 확인
|
||||
- `could not convert string to float` 및 `/api/slack/events 500` 재발 로그 미확인
|
||||
|
||||
## 아직 남은 조치 (최종 운영 확인)
|
||||
|
||||
@ -20,7 +20,7 @@ tags: [coldmail, skill-rag-file, rb8001, postgres, scheduler, troubleshooting]
|
||||
- `rb8001` 상위 흐름은 이 실패를 예외로 올리지 않아 APScheduler에는 성공처럼 보였다.
|
||||
|
||||
## 근본 원인
|
||||
- `skill-rag-file/.env`가 과거 임시복구용 DB 주소 `192.168.219.45:5432`를 계속 우선 사용하고 있었다.
|
||||
- `skill-rag-file/.env`가 과거 임시복구용 DB 주소 `192.168.0.100:5432`를 계속 우선 사용하고 있었다.
|
||||
- 현재 서버에서 해당 주소는 더 이상 유효하지 않아 DB insert 시 timeout이 발생했다.
|
||||
- `rb8001`은 첨부 처리 실패를 `None`으로 흡수해 "0건 처리"로만 닫는 구조였다.
|
||||
|
||||
|
||||
@ -58,7 +58,7 @@
|
||||
{
|
||||
"parameters": {
|
||||
"method": "GET",
|
||||
"url": "=http://192.168.219.45:9000/api/slack/mapping/{{$json.user_id}}",
|
||||
"url": "=http://192.168.0.100:9000/api/slack/mapping/{{$json.user_id}}",
|
||||
"options": {
|
||||
"response": {
|
||||
"response": {
|
||||
@ -86,7 +86,7 @@
|
||||
{
|
||||
"parameters": {
|
||||
"method": "POST",
|
||||
"url": "=http://192.168.219.45:8100/api/chat",
|
||||
"url": "=http://192.168.0.100:8100/api/chat",
|
||||
"sendHeaders": true,
|
||||
"headerParameters": {
|
||||
"parameters": [
|
||||
|
||||
@ -94,7 +94,7 @@
|
||||
"resource": "message",
|
||||
"operation": "post",
|
||||
"channel": "C07...",
|
||||
"text": "=📜 *로빙 일기 ({{ $json.date }})*\\n\\n{{ $json.summary }}\\n\\n지배적 감정: {{ $json.dominant_emotion }}\\n\\n[대시보드에서 자세히 보기](http://192.168.219.45:3000/diary)",
|
||||
"text": "=📜 *로빙 일기 ({{ $json.date }})*\\n\\n{{ $json.summary }}\\n\\n지배적 감정: {{ $json.dominant_emotion }}\\n\\n[대시보드에서 자세히 보기](http://192.168.0.100:3000/diary)",
|
||||
"otherOptions": {}
|
||||
},
|
||||
"id": "diary-006",
|
||||
|
||||
@ -20,7 +20,7 @@
|
||||
},
|
||||
{
|
||||
"parameters": {
|
||||
"jsCode": "return [\n { name: 'robeing-gateway', url: 'http://192.168.219.45:8100/health' },\n { name: 'auth-server', url: 'http://192.168.219.45:9000/health' },\n { name: 'rb8001', url: 'http://192.168.219.52:8001/health' },\n { name: 'skill-email', url: 'http://192.168.219.52:8501/healthz' },\n { name: 'skill-news', url: 'http://192.168.219.52:8505/healthz' },\n { name: 'skill-rag-file', url: 'http://192.168.219.52:8508/healthz' },\n { name: 'skill-calendar', url: 'http://192.168.219.52:8512/health' }\n];"
|
||||
"jsCode": "return [\n { name: 'robeing-gateway', url: 'http://192.168.0.100:8100/health' },\n { name: 'auth-server', url: 'http://192.168.0.100:9000/health' },\n { name: 'rb8001', url: 'http://192.168.219.52:8001/health' },\n { name: 'skill-email', url: 'http://192.168.219.52:8501/healthz' },\n { name: 'skill-news', url: 'http://192.168.219.52:8505/healthz' },\n { name: 'skill-rag-file', url: 'http://192.168.219.52:8508/healthz' },\n { name: 'skill-calendar', url: 'http://192.168.219.52:8512/health' }\n];"
|
||||
},
|
||||
"id": "health-002",
|
||||
"name": "Service List",
|
||||
|
||||
@ -22,8 +22,8 @@ Every 10 mins → Service List → Check Health → Assess Status → Is Down?
|
||||
## 감시 대상
|
||||
| 서비스 | URL |
|
||||
|---|---|
|
||||
| robeing-gateway | `http://192.168.219.45:8100/health` |
|
||||
| auth-server | `http://192.168.219.45:9000/health` |
|
||||
| robeing-gateway | `http://192.168.0.100:8100/health` |
|
||||
| auth-server | `http://192.168.0.100:9000/health` |
|
||||
| rb8001 | `http://192.168.219.52:8001/health` |
|
||||
| skill-email | `http://192.168.219.52:8501/healthz` |
|
||||
| skill-news | `http://192.168.219.52:8505/healthz` |
|
||||
|
||||
@ -14,7 +14,7 @@
|
||||
|
||||
| 서버 | 역할 | IP | 주요 포트 |
|
||||
|------|------|----|-----------|
|
||||
| 51123 | 메인/인증/DB | 192.168.219.45 | Gateway(8100), Auth(9000), DB(5432) |
|
||||
| 51123 | 메인/인증/DB | 192.168.0.100 | Gateway(8100), Auth(9000), DB(5432) |
|
||||
| 51124 | 로빙/스킬 | 192.168.219.52 | rb8001(8001), Email(8501), News(8505), RAG(8508), Calendar(8512) |
|
||||
|
||||
## 주요 워크플로우 가이드
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user