자체 호스팅된 Discourse 인스턴스에서 내부 AI API 엔드포인트(예: LiteLLM)를 사용할 때 올바른 접근 방식이 무엇일지 궁금합니다.
Docker 브리지, 컨테이너 IP, 그리고 적절한 SSL 종료 엔드포인트(Discourse가 호스팅되는 것과 동일한 공개 IP)를 활성화해 보았지만, 아무것도 작동하지 않습니다. 내부 호스트를 허용했지만, Discourse 내 LLM-AI UI에서 테스트할 때 500 오류가 발생합니다.
이 문제는 제 설정과 관련이 있을 가능성이 높고, 제가 몇 가지 실수를 저질렀을 것이라고 생각합니다. 따라서 커뮤니티의 도움으로 이 문제를 해결하길 바랍니다
우리의 주요 사용 사례는 Discourse에서 기본적으로 작동하지 않아 지원되지 않는 Vertex AI(OpenAI) 엔드포인트를 시도하는 것입니다. 또한 LiteLLM이 워크플로에 추가하는 레이어도 필요합니다.
로그:
FinalDestination::SSRFDetector::DisallowedIpError (FinalDestination: all resolved IPs were disallowed)
Falco
(Falco)
6월 22, 2026, 6:56오후
2
같은 서버에서 실행 중이라면 DISCOURSE_ALLOWED_INTERNAL_HOSTS 환경 변수를 통해 허용해야 합니다.
UI에서 이전 유사한 게시물 에서 본 것과 같은 방식으로 설정을 진행했습니다. app.yml 파일에 변수를 추가해 보았지만 여전히 오류가 발생합니다.
자격 증명이 정상적이고 호스트에서 API 엔드포인트를 사용할 수 있는 상황에서 무엇이 문제일까요? 더 자세한 디버깅이 가능한가요?
Falco
(Falco)
6월 22, 2026, 8:45오후
4
app.yml에 정확히 어떻게 추가하셨나요? IP 또는 호스트네임을 기대하고 있습니다.
음, Discourse(app 컨테이너) 내에서 SSL로 엔드포인트를 테스트해 보니 작동은 하지만, Discourse AI UI 테스트에서는 작동하지 않습니다.
'https://llm.mydomain.tld/v1/chat/completions’를 URL로 사용하여 ‘OpenAI’ 제공자를 사용 중입니다. 자격 증명은 정상입니다:
/var/www/discourse/plugins/discourse-ai/lib/completions/endpoints/base.rb:182:in 'DiscourseAi::Completions::Endpoints::Base#perform_completion!'
/var/www/discourse/plugins/discourse-ai/lib/completions/endpoints/open_ai_shared.rb:28:in 'DiscourseAi::Completions::Endpoints::OpenAiShared#perform_completion!'
/var/www/discourse/plugins/discourse-ai/lib/completions/llm.rb:214:in 'DiscourseAi::Completions::Llm#generate'
pitchfork-0.18.2/lib/pitchfork/soft_timeout.rb:46:in 'Pitchfork::SoftTimeout::Request#interrupt'
pitchfork-0.18.2/lib/pitchfork/soft_timeout.rb:94:in 'block (2 levels) in Pitchfork::SoftTimeout#create_timeout_thread'
pitchfork-0.18.2/lib/pitchfork/soft_timeout.rb:93:in 'Array#each'
pitchfork-0.18.2/lib/pitchfork/soft_timeout.rb:93:in 'block in Pitchfork::SoftTimeout#create_timeout_thread'
이상한 일이네요. 몇 주째 해결하려고 노력하고 있습니다.
이미 시도해 본 것:
수정 1: DISCOURSE_ALLOWED_INTERNAL_HOSTS: 172.16.X.X (LiteLLM 컨테이너 IP, 127.0.0.1 및 SSL이 종료된 LLM 도메인 호스트는 여기에 요청되지 않는 것으로 이해하고 있습니다)
수정 2: MCP 서버를 구성하려고 진입할 때(MCP discourse-ai 탭 구성) 동일한 500 오류가 발생합니다.
Falco
(Falco)
6월 23, 2026, 1:39오후
6
대신 DISCOURSE_ALLOWED_INTERNAL_HOSTS: llm.mydomain.tld를 사용해 보세요.
전에 말씀드린 대로 이미 시도해 보았지만, 아무것도 작동하지 않습니다. 이상한 문제인 것 같으니 더 자세히 디버깅하는 방법을 정중히 부탁드립니다.
이 엔드포인트는 Discourse 컨테이너 앱 내부에서는 작동하지만, Discourse UI에서는 작동하지 않습니다.
DISCOURSE_ALLOWED_INTERNAL_HOSTS: localhost를 환경 변수로 설정하여 localhost:4000에 호스팅된 LiteLLM 사이드카에 연결함으로써 이 문제를 해결했습니다. 또한 vertex AI 인증을 추가하기 위한 풀 리퀘스트를 여기서 제출했습니다: FEATURE: add Google Vertex AI LLM provider - Pull Request #41350 - discourse/discourse - GitHub
DISCOURSE_ALLOWED_INTERNAL_HOSTS에 Docker Internal Gateway IP를 추가하고, LiteLLM의 docker-compose.yml 파일에서 포트를 노출시켜 문제를 해결했습니다:
ports:
- "4444:4000"
포트 충돌을 방지하기 위해 Nginx는 LITELLM_IP:4000으로, Discourse는 GATEWAY_IP:4444로 설정했습니다.
이후 MCP 관리 UI에서 이전의 작동하지 않던 MCP 추가 도구를 제거하여 오류를 해결했습니다:
# 모든 구성된 MCP 서버 목록 보기
AiMcpServer.all
# 잘못된 서버가 보이면 ID로 삭제 (예: id: 1)
AiMcpServer.find(1).destroy
비슷한 설정을 가진 분들에게 도움이 되길 바랍니다.