docs: define 51123 legacy ip ssot issue
This commit is contained in:
parent
aaf44821db
commit
949663fe2c
@ -19,6 +19,8 @@
|
||||
- 실행 중 문제가 생기면 `worklog`가 아니라 `troubleshooting`으로 기록합니다.
|
||||
|
||||
## 현재 문서
|
||||
- [51123 구 IP 하드코딩과 런타임 SSOT 불일치 이슈](./troubleshooting/260309_51123_구IP하드코딩_런타임SSOT불일치_이슈.md)
|
||||
- [24서버 우분투 터미널 불가, 네트워크 대역 오류, python3-apt 복구 기록](./troubleshooting/260309_24서버_우분투터미널불가_네트워크대역오류_python3apt복구.md)
|
||||
- [23서버 워크스페이스 인프라 구조정리 이슈](./troubleshooting/260307_23서버_워크스페이스_인프라_구조정리_이슈.md)
|
||||
- [외부 NAS -> 내부 NAS 컴퍼니엑스 파일 동기화 아이디어](./ideas/260307_external_nas_companyx_sync_아이디어.md)
|
||||
- [컴퍼니엑스 직원용 모바일 파일 포털 아이디어](./ideas/260307_companyx_mobile_file_portal_아이디어.md)
|
||||
|
||||
@ -0,0 +1,90 @@
|
||||
---
|
||||
tags: [infra, 51123, ip, ssot, runtime, troubleshooting]
|
||||
---
|
||||
|
||||
# 51123 구 IP 하드코딩과 런타임 SSOT 불일치 이슈
|
||||
|
||||
## 상위 원칙
|
||||
- [Infra Project Identity](../../00_Philosophy/00_IDENTITY/Infra_Project_Identity.md)
|
||||
- [Core Infrastructure Principles](../../00_Philosophy/01_PRINCIPLES/Core_Infrastructure_Principles.md)
|
||||
- [Operational Guardrails](../../00_Philosophy/02_GUARDRAILS/Operational_Guardrails.md)
|
||||
- 공통 작성 원칙: `/home/admin/0_VALUE/02_Governance/writing-principles.md`
|
||||
|
||||
## 관련 문서
|
||||
- [Infra Journey](../README.md)
|
||||
- [23서버 워크스페이스-인프라 구조정리 이슈](./260307_23서버_워크스페이스_인프라_구조정리_이슈.md)
|
||||
- [24서버 우분투 터미널 불가, 네트워크 대역 오류, python3-apt 복구 기록](./260309_24서버_우분투터미널불가_네트워크대역오류_python3apt복구.md)
|
||||
|
||||
## 문제 정의
|
||||
- 2026-03-09 현재 23 서버(51123)의 실제 운영 IP는 `192.168.0.100/24`이다.
|
||||
- 그러나 일부 운영 설정과 코드 기본값에는 과거 IP `192.168.219.45`가 아직 남아 있다.
|
||||
- 이 상태는 "문서가 오래됨" 수준의 문제가 아니라, 환경변수 누락 또는 fallback 경로 진입 시 서비스가 과거 주소로 접속을 시도할 수 있는 런타임 SSOT 불일치다.
|
||||
|
||||
## 확인된 사실
|
||||
### 1. 현재 23 서버 실주소
|
||||
- 호스트명: `robeing-brains`
|
||||
- NIC: `enp6s0`
|
||||
- IPv4: `192.168.0.100/24`
|
||||
- 기본 게이트웨이: `192.168.0.1`
|
||||
|
||||
### 2. 현재 SSOT에 반영된 운영 기준값
|
||||
- `/home/admin/infra-config/runtime.env`
|
||||
- `HOST_51123=192.168.0.100`
|
||||
- `ROBEING_DEFAULT_HOST=192.168.0.100`
|
||||
- `MONITOR_URL=http://192.168.0.100:9024`
|
||||
- `/home/admin/infra-config/secrets.env`
|
||||
- `ROBEING_MONITOR_DATABASE_URL=postgresql://robeings:robeings@192.168.0.100:5432/main_db`
|
||||
|
||||
### 3. 과거 IP `192.168.219.45`가 남아 있는 실행 경로
|
||||
- `auth-server/app/providers/gmail_passport.py`
|
||||
- `DATABASE_URL` 기본값이 `192.168.219.45:5432`
|
||||
- `robeing/skill-email/docker-compose.yml`
|
||||
- `AUTH_SERVER_URL` fallback이 `http://192.168.219.45:9000`
|
||||
- `robeing/skill-calendar/docker-compose.yml`
|
||||
- `DATABASE_URL` fallback이 `192.168.219.45:5432`
|
||||
- `robeing/skill-calendar/services/google_calendar_service.py`
|
||||
- `DATABASE_URL` 기본값이 `192.168.219.45:5432`
|
||||
- `fluent-bit/data-prepper/pipelines.yaml`
|
||||
- OpenSearch 호스트가 `http://192.168.219.45:9200`
|
||||
- `robeing/admin-dashboard/backend/services/system_service.py`
|
||||
- 서버 간 fallback 주소가 `192.168.219.45`
|
||||
- `ivada_project/robeing-monitor/*`
|
||||
- 구 경로 쪽 `DATABASE_URL` 기본값이 여전히 `192.168.219.45:5432`
|
||||
|
||||
## 왜 문제인가
|
||||
- 현재는 일부 서비스가 `runtime.env`를 먼저 읽어 우연히 정상 동작할 수 있다.
|
||||
- 그러나 새 컨테이너, 누락된 env, 임시 실행, 개별 스크립트, 테스트 경로에서는 과거 IP fallback이 다시 살아날 수 있다.
|
||||
- 즉 장애가 "지금은 안 보이는 상태"일 뿐이고, 재배포나 복구 시점에 같은 문제가 재발할 조건이 남아 있다.
|
||||
|
||||
## 직접 원인
|
||||
- 23 서버 IP 기준이 `infra-config/runtime.env`로 단일화되기 전에, 서비스별 코드 기본값과 compose fallback에 과거 주소가 개별적으로 박혀 있었다.
|
||||
|
||||
## 근본 원인
|
||||
- 서버 주소를 코드/컨테이너/문서마다 별도로 들고 있던 구조 때문에, SSOT가 생긴 뒤에도 기존 fallback과 하드코딩이 제거되지 않았다.
|
||||
|
||||
## 근본 해결 기준
|
||||
- 51123 주소는 `/home/admin/infra-config/runtime.env`의 `HOST_51123=192.168.0.100`만 기준값으로 사용한다.
|
||||
- 코드 기본값과 compose fallback에 IP literal을 직접 넣지 않는다.
|
||||
- 서비스는 `HOST_51123`, `DATABASE_URL`, `AUTH_SERVER_URL`, `MONITOR_URL`처럼 의미 있는 환경변수만 참조한다.
|
||||
- 과거 IP `192.168.219.45`는 운영 실행 경로에서 0건이어야 한다.
|
||||
|
||||
## 우회가 아닌 해결 조건
|
||||
- `192.168.219.45`를 새 값과 병행 허용하지 않는다.
|
||||
- "안 되면 과거 IP로 재시도" 같은 폴백을 추가하지 않는다.
|
||||
- 남아 있는 하드코딩/기본값을 제거하고, SSOT 값만 주입되도록 구조를 정리한다.
|
||||
|
||||
## 우선 정리 대상
|
||||
1. 런타임 env 없이도 실행될 수 있는 코드 기본값
|
||||
2. `docker-compose.yml`의 fallback 주소
|
||||
3. 서버 간 호출 URL, DB URL, Neo4j/OpenSearch 같은 인프라 의존값
|
||||
4. 구 경로(`ivada_project`)처럼 현재 운영과 분리되지 않은 잔존 실행본
|
||||
|
||||
## 완료 판단 기준
|
||||
- 실행 경로 파일에서 `192.168.219.45` 검색 결과가 0건이다.
|
||||
- 23 서버 기동 서비스가 모두 `192.168.0.100` 또는 명시 env만 참조한다.
|
||||
- 24 서버에서 23 서버 DB/인증/모니터 호출을 실제로 재검증해 과거 IP 경로가 다시 나오지 않는다.
|
||||
|
||||
## 상위 원칙/근거 문서 연결
|
||||
- [Infra Project Identity](../../00_Philosophy/00_IDENTITY/Infra_Project_Identity.md)
|
||||
- [Core Infrastructure Principles](../../00_Philosophy/01_PRINCIPLES/Core_Infrastructure_Principles.md)
|
||||
- [Operational Guardrails](../../00_Philosophy/02_GUARDRAILS/Operational_Guardrails.md)
|
||||
Loading…
x
Reference in New Issue
Block a user