feat(image-lab): Dockerfile + compose entry + scripts 6위치 + nginx 차단
Task 5 of Video Studio backend plan. Wires image-lab Python code (T1-T4)
into NAS Docker infrastructure on port 18802.
- image-lab/Dockerfile (python:3.12-slim + uvicorn)
- image-lab/requirements.txt (fastapi, redis, httpx)
- image-lab/env.example (INTERNAL_API_KEY, IMAGE_DATA_DIR, REDIS_URL, CORS)
- docker-compose.yml: image-lab service block (port 18802, redis depends_on,
healthcheck, volume ${RUNTIME_PATH}/image-data:/app/data) + frontend
depends_on entry
- scripts/deploy-nas.sh: SERVICES += image-lab
- scripts/deploy.sh: BUILD_TARGETS/CONTAINER_NAMES/HEALTH_ENDPOINTS += image-lab,
DATA_DIRS += image
- nginx/default.conf: /api/internal/image/ 3-layer block (IP allowlist +
deny all + X-Internal-Key forward) mirroring /api/internal/video/
Plan-B-Video lesson: 6-location registration enforced per
feedback_nas_deploy_paths.md rule 3 to avoid 'transferring dockerfile: 2B'
deploy failure.
Tests: image-lab pytest 11 passed (no regression).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -276,6 +276,26 @@ server {
|
||||
proxy_pass http://$video_internal_backend$request_uri;
|
||||
}
|
||||
|
||||
# Video Studio — Windows image-render → NAS image-lab internal webhook
|
||||
# Layer 1·2: nginx IP 화이트리스트 (LAN + Tailscale)
|
||||
# Layer 3: X-Internal-Key (FastAPI dependency)
|
||||
location /api/internal/image/ {
|
||||
allow 192.168.45.0/24; # LAN 화이트리스트
|
||||
allow 100.64.0.0/10; # Tailscale CGNAT
|
||||
allow 127.0.0.1; # NAS 내부
|
||||
deny all;
|
||||
|
||||
resolver 127.0.0.11 valid=10s;
|
||||
set $image_internal_backend image-lab:8000;
|
||||
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Internal-Key $http_x_internal_key;
|
||||
proxy_pass http://$image_internal_backend$request_uri;
|
||||
}
|
||||
|
||||
# portfolio API (Stock) — trailing slash 유무 모두 매칭
|
||||
location /api/portfolio {
|
||||
proxy_http_version 1.1;
|
||||
|
||||
Reference in New Issue
Block a user