From 87683ca000710b6f37a0e1dc00b989731ac42ee6 Mon Sep 17 00:00:00 2001 From: Hyungi Ahn Date: Fri, 3 Apr 2026 08:25:07 +0900 Subject: [PATCH] =?UTF-8?q?security:=20NAS=20=EB=A7=88=EC=9A=B4=ED=8A=B8?= =?UTF-8?q?=20=EA=B2=80=EC=A6=9D=20+=20AI=20=EC=84=9C=EB=B9=84=EC=8A=A4=20?= =?UTF-8?q?=ED=8F=AC=ED=8A=B8=20=EC=A0=9C=ED=95=9C=20+=20deploy=20?= =?UTF-8?q?=EB=AC=B8=EC=84=9C=20=EA=B0=B1=EC=8B=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - NAS fail-fast: 시작 시 /documents/PKM 존재 확인, NFS 미마운트 방지 - ollama/ai-gateway 포트를 127.0.0.1로 제한 (외부 무인증 접근 차단) - deploy.md: Caddy HTTPS 자동발급 → 앞단 프록시 HTTPS 종료 구조 반영 Co-Authored-By: Claude Opus 4.6 (1M context) --- app/main.py | 9 +++++++++ docker-compose.yml | 4 ++-- docs/deploy.md | 6 +++--- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/app/main.py b/app/main.py index cad2429..72ed2f4 100644 --- a/app/main.py +++ b/app/main.py @@ -30,6 +30,15 @@ async def lifespan(app: FastAPI): # 시작: DB 연결 확인 await init_db() + # NAS 마운트 확인 (NFS 미마운트 시 로컬 빈 디렉토리에 쓰는 것 방지) + from pathlib import Path + nas_check = Path(settings.nas_mount_path) / "PKM" + if not nas_check.is_dir(): + raise RuntimeError( + f"NAS 마운트 확인 실패: {nas_check} 디렉토리 없음. " + f"NFS 마운트 상태를 확인하세요." + ) + # APScheduler: 백그라운드 작업 scheduler = AsyncIOScheduler(timezone="Asia/Seoul") # 상시 실행 diff --git a/docker-compose.yml b/docker-compose.yml index 6700ccd..41dca5c 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -42,13 +42,13 @@ services: count: 1 capabilities: [gpu] ports: - - "11434:11434" + - "127.0.0.1:11434:11434" restart: unless-stopped ai-gateway: build: ./gpu-server/services/ai-gateway ports: - - "8081:8080" + - "127.0.0.1:8081:8080" environment: - PRIMARY_ENDPOINT=http://100.76.254.116:8800/v1/chat/completions - FALLBACK_ENDPOINT=http://ollama:11434/v1/chat/completions diff --git a/docs/deploy.md b/docs/deploy.md index 809d5ff..d5bc1ca 100644 --- a/docs/deploy.md +++ b/docs/deploy.md @@ -64,11 +64,11 @@ curl http://localhost:3100/health ### 2-6. 외부 접근 (Caddy) -Caddy가 자동으로 HTTPS 인증서를 발급한다. -- `document.hyungi.net` → FastAPI (:8000) +HTTPS는 앞단 프록시(Mac mini nginx)에서 처리하고, Caddy는 HTTP only로 동작한다. +- `document.hyungi.net` → Mac mini nginx (HTTPS 종료) → GPU 서버 Caddy (:8080) → FastAPI/Frontend - `office.hyungi.net` → Synology Office (NAS 프록시) -DNS 레코드가 Mac mini의 공인 IP를 가리켜야 한다. +DNS 레코드가 Mac mini의 공인 IP를 가리켜야 한다. Caddy는 `auto_https off` 설정. ## 3. GPU 서버 배포