deploy: 멘토 AI 초안용 ollama-proxy 추가 + backend LLM 설정
Some checks failed
CI / backend-test (push) Failing after 2m22s
CI / frontend-build (push) Successful in 1m5s
CI / backend-dep-scan (push) Successful in 29s

edu(EC2)가 워크스테이션 tailnet의 Ollama를 쓰도록 프록시를 둔다.
Ollama는 DNS-rebinding 방어로 Host를 검증해 tailnet 이름 요청을 403으로
막는데, 이 프록시가 Host를 localhost로 재작성해 통과시킨다.
backend는 JAVA_TOOL_OPTIONS(-Dllm.base-url)로 프록시를 가리킨다.
This commit is contained in:
AWESOMEDEV 2026-07-23 12:23:50 +09:00
parent c26207ee48
commit 0a7f91ba8c
2 changed files with 31 additions and 0 deletions

View File

@ -50,9 +50,31 @@ services:
TELEGRAM_CHAT_ID: ${TELEGRAM_CHAT_ID:-}
# 멘토 최초 비밀번호 (첫 부팅 시드용). 비우면 랜덤 생성돼 로그에 1회 출력된다.
MENTOR_INITIAL_PASSWORD: ${MENTOR_INITIAL_PASSWORD:-}
# 멘토 피드백 AI 초안 — 아래 ollama-proxy 경유로 워크스테이션(tailnet)의 Ollama를 쓴다.
# 학습 포인트: @Value("${llm.base-url:}")는 환경변수 relaxed binding이 약해, LLM_BASE_URL을
# 줘도 안 읽히는 경우가 있다. JVM 시스템 프로퍼티(-D)로 주면 확실하다.
# 이 값이 없으면 초안 기능만 조용히 꺼지고 앱은 정상 동작한다.
JAVA_TOOL_OPTIONS: "-Dllm.base-url=http://ollama-proxy:11434"
depends_on:
postgres:
condition: service_healthy
ollama-proxy:
condition: service_started
restart: unless-stopped
# 로컬 LLM 프록시 — 멘토 피드백 AI 초안이 워크스테이션(tailnet)의 Ollama를 쓰게 한다.
# 왜 프록시가 필요한가: Ollama는 DNS-rebinding 방어로 요청 Host 헤더를 검증해서,
# tailnet 이름(awesomedev.taildc21b5.ts.net)으로 오는 요청을 403으로 막는다.
# 이 프록시가 Host를 localhost로 재작성해 통과시킨다(Caddyfile 참조).
# 워크스테이션 쪽은 `tailscale serve`로 Ollama를 tailnet 전용 노출한다(Ollama는 127.0.0.1 유지).
ollama-proxy:
image: caddy:2-alpine
container_name: ollama-proxy
logging: *logging
extra_hosts:
- "awesomedev.taildc21b5.ts.net:100.67.10.124" # 워크스테이션 tailnet IP
volumes:
- ./ollama-proxy/Caddyfile:/etc/caddy/Caddyfile:ro
restart: unless-stopped
# 프론트 빌드 결과물을 공유 볼륨(webroot)에 복사해 주고 종료하는 일회성 컨테이너

View File

@ -0,0 +1,9 @@
# Ollama 앞단 Host 재작성 프록시.
# Ollama는 DNS-rebinding 방어로 요청 Host를 검증해, tailnet 이름으로 오는 요청을 403으로 막는다.
# 여기서 Host를 localhost로 바꿔 통과시킨다. 업스트림은 워크스테이션의 `tailscale serve`(HTTPS, :8443).
# SNI/인증서는 실제 이름(awesomedev.taildc21b5.ts.net)으로 맺고, HTTP Host 헤더만 localhost로 보낸다.
:11434 {
reverse_proxy https://awesomedev.taildc21b5.ts.net:8443 {
header_up Host localhost:11434
}
}