- hub-web: Vite + React + Tailwind + React Router - Dashboard: 백엔드 상태 카드, GPU 모니터, 모델 테이블 (15초 자동 갱신) - Chat: 모델 선택 드롭다운 + SSE 스트리밍 + Markdown 렌더링 - Login: 비밀번호 인증 (httpOnly 쿠키) - Docker: nginx 기반 정적 서빙 + Caddy 연동 - Caddyfile: flush_interval -1 (SSE 버퍼링 방지) - proxy_ollama: embed usage 더미값 0→1 (SDK 호환) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
56 lines
1.2 KiB
YAML
56 lines
1.2 KiB
YAML
services:
|
|
caddy:
|
|
image: caddy:2-alpine
|
|
container_name: gpu-caddy
|
|
restart: unless-stopped
|
|
ports:
|
|
- "80:80"
|
|
- "443:443"
|
|
volumes:
|
|
- ./caddy/Caddyfile:/etc/caddy/Caddyfile
|
|
- caddy_data:/data
|
|
depends_on:
|
|
- hub-api
|
|
- hub-web
|
|
networks:
|
|
- gateway-net
|
|
|
|
hub-web:
|
|
build: ./hub-web
|
|
container_name: gpu-hub-web
|
|
restart: unless-stopped
|
|
networks:
|
|
- gateway-net
|
|
|
|
hub-api:
|
|
build: ./hub-api
|
|
container_name: gpu-hub-api
|
|
restart: unless-stopped
|
|
environment:
|
|
- OWNER_PASSWORD=${OWNER_PASSWORD}
|
|
- GUEST_PASSWORD=${GUEST_PASSWORD}
|
|
- JWT_SECRET=${JWT_SECRET}
|
|
- BACKENDS_CONFIG=/app/config/backends.json
|
|
- CORS_ORIGINS=${CORS_ORIGINS:-http://localhost:5173}
|
|
- DB_PATH=/app/data/gateway.db
|
|
volumes:
|
|
- hub_data:/app/data
|
|
- ./backends.json:/app/config/backends.json:ro
|
|
extra_hosts:
|
|
- "host.docker.internal:host-gateway"
|
|
healthcheck:
|
|
test: ["CMD", "curl", "-f", "http://localhost:8000/health"]
|
|
interval: 15s
|
|
timeout: 5s
|
|
retries: 3
|
|
networks:
|
|
- gateway-net
|
|
|
|
volumes:
|
|
caddy_data:
|
|
hub_data:
|
|
|
|
networks:
|
|
gateway-net:
|
|
name: gpu-gateway-network
|