예전 배포본(HEAD)의 상세 기능을 새 아키텍처(인증=.NET 백엔드, 데이터=Supabase) 위에 실데이터로 복원. 예전 HEAD는 서명 쿠키를 거부하고 위조 쿠키는 통과시키는 인증 결함이 있었고, 삭제된 페이지 다수는 백엔드 호출 0인 하드코딩 목업이었음. 인증/세션 - 로그인 이메일 전용화(username 폐지), 에러 키별 안내 메시지 - ADMIN_COOKIE_SECURE 옵션: TLS 없는 LAN HTTP 배포에서 Secure 쿠키 유실로 로그인이 유지되지 않던 문제 해결 (login/logout route, admin-session, compose, .env.example) - Supabase 미설정 시 우아한 저하: isSupabaseAdminConfigured + UnavailableAdminPanel 기능 복원 (실데이터) - Release Hub: Forgejo API 실데이터(다운로드 수/SHA-256 체크섬/릴리스 이력) - Ad Monetization: 데스크톱 미디에이션 10개 어댑터 로스터(fail-closed) + ad_reward_claims 통계 - License Issuer: 서버사이드 Ed25519 서명(/api/admin/license, super_admin 전용), 개인키는 ADMIN_LICENSE_PRIVATE_KEY env로만, 발급 감사를 .NET AdminAuditEntries에 기록 - Service Models: STT 7종/LLM 5종 프리셋 드롭다운 + 자동채움 - 대시보드 ARR/MRR KPI: Supabase 구독 실집계(티어 월단가 기반) - 사용자 상세 티어별 기능 배지(pro_plus 조건부) .NET - SuperAdminOnly 정책 추가, /api/admin/license-audit 엔드포인트, LicenseAuditDto
82 lines
2.8 KiB
YAML
82 lines
2.8 KiB
YAML
services:
|
|
# ============================================================================
|
|
# D3RO Voice — Core Cloud API Server & Official Promotion Landing Site
|
|
# ============================================================================
|
|
d3ro-api-server:
|
|
build:
|
|
context: ./apps/api-server
|
|
dockerfile: Dockerfile
|
|
image: d3ro-voice-api:latest
|
|
container_name: d3ro_voice_api
|
|
restart: unless-stopped
|
|
ports:
|
|
- "${PORT:-5050}:5000"
|
|
environment:
|
|
- ASPNETCORE_ENVIRONMENT=Production
|
|
- ASPNETCORE_URLS=http://+:5000
|
|
- DATA_DIR=/app/data
|
|
- JWT_SECRET=${JWT_SECRET:?JWT_SECRET is required}
|
|
- JWT_ISSUER=${JWT_ISSUER:?JWT_ISSUER is required}
|
|
- JWT_AUDIENCE=${JWT_AUDIENCE:?JWT_AUDIENCE is required}
|
|
- ADMIN_BOOTSTRAP_TOKEN=${ADMIN_BOOTSTRAP_TOKEN:?ADMIN_BOOTSTRAP_TOKEN is required}
|
|
- D3RO_API_TOKEN=${D3RO_API_TOKEN:?D3RO_API_TOKEN is required}
|
|
- CORS_ALLOWED_ORIGINS=${CORS_ALLOWED_ORIGINS:?CORS_ALLOWED_ORIGINS is required}
|
|
- ALLOWED_HOSTS=${ALLOWED_HOSTS:?ALLOWED_HOSTS is required}
|
|
- TZ=${TZ:-Asia/Seoul}
|
|
volumes:
|
|
- ${DATA_PATH:-./data}:/app/data
|
|
logging:
|
|
driver: "json-file"
|
|
options:
|
|
max-size: "10m"
|
|
max-file: "3"
|
|
|
|
# ============================================================================
|
|
# D3RO Voice — Full Next.js 15 Admin CRM Portal (@d3ro/admin)
|
|
# ============================================================================
|
|
d3ro-admin:
|
|
build:
|
|
context: .
|
|
dockerfile: apps/admin/Dockerfile
|
|
image: d3ro-voice-admin:latest
|
|
container_name: d3ro_voice_admin
|
|
restart: unless-stopped
|
|
ports:
|
|
- "${ADMIN_PORT:-3001}:3001"
|
|
environment:
|
|
- NODE_ENV=production
|
|
- PORT=3001
|
|
- NEXT_PUBLIC_API_URL=${PUBLIC_URL:-https://d3ro.chanpaca.net}
|
|
- API_SERVER_URL=${API_SERVER_URL:?API_SERVER_URL is required}
|
|
- ADMIN_SESSION_SECRET=${ADMIN_SESSION_SECRET:?ADMIN_SESSION_SECRET is required}
|
|
- ADMIN_COOKIE_SECURE=${ADMIN_COOKIE_SECURE:-true}
|
|
depends_on:
|
|
- d3ro-api-server
|
|
logging:
|
|
driver: "json-file"
|
|
options:
|
|
max-size: "10m"
|
|
max-file: "3"
|
|
|
|
# ============================================================================
|
|
# Optional: Local AI Engine on NAS (Ollama)
|
|
# Run with: docker compose --profile ai up -d
|
|
# ============================================================================
|
|
ollama:
|
|
image: ollama/ollama:latest
|
|
container_name: d3ro_ollama
|
|
restart: unless-stopped
|
|
profiles:
|
|
- ai
|
|
ports:
|
|
- "11434:11434"
|
|
volumes:
|
|
- ${OLLAMA_DATA_PATH:-./ollama_data}:/root/.ollama
|
|
logging:
|
|
driver: "json-file"
|
|
options:
|
|
max-size: "10m"
|
|
max-file: "3"
|
|
|
|
volumes:
|
|
d3ro_data:
|