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:
happybell80 2026-03-21 11:52:26 +09:00
parent 2d1503921d
commit 0252dd1a7f
52 changed files with 98 additions and 98 deletions

View File

@ -2,7 +2,7 @@
## 서버 구성
### 51123 서버 (192.168.219.45)
### 51123 서버 (192.168.0.100)
**역할**: 프록시, CI/CD, 관리, 로그 저장
```

View File

@ -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 |
### 기본 구조

View File

@ -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"]

View File

@ -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`,

View File

@ -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 연결

View File

@ -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

View File

@ -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` (기본값, 변경 필요)
## 주요 문제점

View File

@ -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
### 스키마 설계

View File

@ -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. 완료 조건

View File

@ -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 의도 분류 수정

View File

@ -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
```
---

View File

@ -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)

View File

@ -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` 기반 누락 처리다

View File

@ -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;

View File

@ -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

View File

@ -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 서버에 코드 수정 지시

View File

@ -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',

View File

@ -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',

View File

@ -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}
```
---

View File

@ -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 토큰 테이블 구조 개선

View File

@ -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 없이 직접 연결
```

View File

@ -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 저장 구현

View File

@ -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
```
## 개선 방향

View File

@ -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", ...}
```

View File

@ -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"
```

View File

@ -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`
### 사용 라이브러리

View File

@ -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 에러 발생

View File

@ -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 / 테스트/컴포즈**

View File

@ -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 설치됨

View File

@ -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)

View File

@ -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 업데이트)

View File

@ -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
```
## 테스트 결과

View File

@ -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 문제 해결**

View File

@ -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단계: 컨테이너 재시작

View File

@ -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 자기 자신 로그를 수집하는 무한루프

View File

@ -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 (...);\""
```

View File

@ -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)
- **교훈**: 기본값은 문서에 명시, 배포 시 환경변수 체크리스트 필수
---

View File

@ -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

View File

@ -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 규칙)

View File

@ -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

View File

@ -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커밋 선행 상태를 원격으로 동기화(추가 변경 없음).

View File

@ -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');"
```

View File

@ -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`) 필요
---

View File

@ -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 파일)
**실행 결과**:

View File

@ -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는 같은 서버 컨테이너만 조회 가능

View File

@ -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` 재발 로그 미확인
## 아직 남은 조치 (최종 운영 확인)

View File

@ -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건 처리"로만 닫는 구조였다.

View File

@ -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": [

View File

@ -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",

View File

@ -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",

View File

@ -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` |

View File

@ -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) |
## 주요 워크플로우 가이드