diff --git a/troubleshooting/250915_hardcoded_url_removal.md b/troubleshooting/250915_hardcoded_url_removal.md index c4fbcf6..6495938 100644 --- a/troubleshooting/250915_hardcoded_url_removal.md +++ b/troubleshooting/250915_hardcoded_url_removal.md @@ -3,9 +3,14 @@ ## 작성일: 2025-09-15 ## 작성자: 51123 서버 관리자 +## 정정 사항 (문서 vs 코드 불일치) +- ROBEING_HOST 변수명은 실제 코드에서 사용되지 않음. robeing-gateway는 `DEFAULT_ROBEING_HOST`/`DEFAULT_ROBEING_PORT`/`DEFAULT_ROBEING_ID`를 사용함. +- SLACK_CALLBACK_URL, GMAIL_CALLBACK_URL은 코드에 없음. auth-server는 `SLACK_REDIRECT_URI`, `GOOGLE_REDIRECT_URI`, `GOOGLE_PASSPORT_REDIRECT_URI`를 사용함. +- FRONTEND_URL은 코드에서 직접 사용하지 않음. 프론트는 `VITE_AUTH_SERVER_URL`을 사용하고, CORS 도메인은 코드에 상수로 정의되어 있음. + ## 발견된 하드코딩 현황 -### auth-server (/home/admin/auth-server) +### auth-server **app/providers/slack.py** - Line 79, 187, 189: `http://localhost:3000` - Line 158, 165, 177: `http://localhost:3000/login?error=` @@ -22,7 +27,7 @@ **app/main.py** - Line 28-32: `http://localhost:3000`, `5173`, `5174`, `8000`, `10508` -### frontend-customer (/home/admin/frontend-customer) +### frontend-customer **src/contexts/auth-context.tsx** - Line 22: `https://auth.ro-being.com` (기본값) - Line 79: `https://auth.ro-being.com/auth/verify` @@ -31,24 +36,103 @@ - Line 361: `https://auth.ro-being.com/auth/gmail/passport` - Line 432: `https://auth.ro-being.com/auth/slack/passport/install` -### robeing-gateway (/home/admin/robeing-gateway) +### rb8001 +**app/commands/skill_commands.py** +- 하드코딩: `localhost:8502`, `localhost:8505` URL + +**app/skills/email_integration.py** +- Line 37: `http://192.168.219.45:9000/api/slack/mapping/{slack_id}` +- Line 253: `http://localhost:8001/api/llm/extract` (콜백 URL) +- Line 17-18: `localhost:8501`, `localhost:9024` (기본값) + +**app/memory/embedding_client.py** +- 임베딩 서비스 URL 하드코딩 + +**app/core/emotion/base.py** +- Line 13: `http://localhost:8015` (SKILL_EMBEDDING_URL 기본값) + +**app/brain/state_client.py** +- Line 17: `http://localhost:8507` (STATE_SERVICE_URL 기본값) + +### robeing-gateway **app/main.py** - Line 128-129: `http://localhost:5173`, `http://localhost:3000` -- Line 157: `http://192.168.219.52:9024` -- Line 304: `http://192.168.219.52:9024/api/stats/{robeing_id}` +- Line 157: `http://192.168.219.52:9024` (MONITOR_URL로 부분 환경변수화됨) +- Line 304: `http://192.168.219.52:9024/api/stats/{robeing_id}` (하드코딩) - Line 383: `http://192.168.219.52:9024` - Line 567: `http://192.168.219.52:8001/api/slack/events` - Line 620: `http://192.168.219.52:8001/api/slack/interactive` **app/database.py** - Line 20: `postgresql+asyncpg://postgres:postgres@localhost:5432/main_db` -- Line 24: `192.168.219.52` (DEFAULT_ROBEING_HOST) +- Line 24: `192.168.219.52` (DEFAULT_ROBEING_HOST로 환경변수화됨) -## 필요한 환경변수 -- AUTH_SERVER_URL -- FRONTEND_URL -- DATABASE_URL -- ROBEING_HOST (51124 서버) -- MONITOR_URL -- SLACK_CALLBACK_URL -- GMAIL_CALLBACK_URL \ No newline at end of file +### robeing-monitor +**app/core/config.py** +- DB 및 서비스 URL 다수 하드코딩 + +**app/api/monitor.py** +- `rb10508_micro` 등 localhost URL 배열 + +**app/api/items.py** +- `https://auth.ro-being.com` 포함 + +**docker-compose.yml** +- DB 호스트 `192.168.219.45` + +### skill-email +**main.py** +- Monitor 기본값: `http://localhost:9024` + +**services/api_credentials_provider.py** +- Monitor URL 하드코딩 + +### skill-slack +**app/core/config.py** +- `LLM_GATEWAY_URL`, `STATE_SERVICE_URL`, `MEMORY_SERVICE_URL` localhost + +**services/slack_data_client_impl.py** +- `rb10408`, `rb10409`, `rb10410` localhost 매핑 + +**워크플로우/배포문서** +- `redis://localhost:6379` + +### skill-publish +**app/config.py** +- Squarespace, 뉴스 URL 하드코딩 + +**services/** +- 외부 서비스 URL 하드코딩 + +**Dockerfile/docker-compose.yml** +- 헬스체크: `http://localhost:8511` + +### frontend-base +**backend/main.py, backend/admin_routes.py** +- CORS 허용 도메인 및 헬스체크 대상에 `http://localhost:*`, `http://172.17.0.1:*` 고정 + +### rb10508_micro +**app/api/endpoints.py** +- DB 접속: `host='192.168.219.45', port=5432, user='robeings'` 하드코딩 + +### skill-embedding +**http_embedding_function.py / 테스트/컴포즈** +- 기본 URL 및 헬스체크: `http://localhost:8515` 하드코딩 + +### nginx-infra +**server-nginx-default** +- proxy_pass에 `http://localhost:*`, `http://192.168.219.52:*` 다수 고정 + +## 실제 사용되는 환경변수 +- VITE_AUTH_SERVER_URL (frontend-customer) +- DATABASE_URL (여러 서비스 공통) +- DEFAULT_ROBEING_HOST, DEFAULT_ROBEING_PORT, DEFAULT_ROBEING_ID (robeing-gateway) +- MONITOR_URL (robeing-gateway) +- SLACK_REDIRECT_URI, GOOGLE_REDIRECT_URI, GOOGLE_PASSPORT_REDIRECT_URI (auth-server) +- SKILL_EMAIL_URL, SKILL_NEWS_URL, SKILL_SLACK_URL, SKILL_EMBEDDING_URL, STATE_SERVICE_URL (rb8001 및 관련 스킬) + +## 교체 가이드 (요약) +- 코드 상수에 직접 박힌 URL/IP/포트를 전부 환경변수로 치환한다. 이미 존재하는 키를 우선 사용하고, 미존재 시 새 키를 정의한다. +- robeing-gateway Stats 프록시는 `MONITOR_URL`만 참조하도록 통일하고(현재 304행), Slack 프록시 대상도 환경변수 또는 DB의 `robeing_url`을 사용한다. +- auth-server의 모든 리다이렉트/콜백 URL은 `*_REDIRECT_URI` 계열 변수만 사용한다. `http://localhost:3000`로의 에러 리다이렉트는 state의 `redirect_uri` 또는 별도 `FRONTEND_ORIGIN` 변수로 대체한다. +- CORS 허용 도메인과 헬스체크 대상은 코드 상수 대신 ENV(.env, compose, workflow)에서 주입하고 코드의 하드코딩을 제거한다.