# ============================================ # BADA docs — Air-Gapped Production Deployment # ============================================ # v2.0 (2026-03-10) # 에어갭(인터넷 차단) 환경 전용 구성 # Ollama: 외부 별도 서버에서 운영 # # 사전 요구사항: # docker load < presenton-airgap.tar.gz # docker load < postgres16-alpine-amd64.tar # # 실행: # cp .env.example .env # 환경변수 설정 (OLLAMA_URL 수정 필수) # docker compose up -d # open http://localhost:5050 # # 중지: # docker compose down # # 데이터 완전 초기화 (주의!): # docker compose down -v # ============================================ services: presenton: image: presenton:latest # 에어갭: build 없이 사전 빌드 이미지 사용 platform: linux/amd64 container_name: presenton-app ports: - "${APP_PORT:-5050}:80" volumes: - presenton_data:/app_data environment: # --- LLM Provider --- # Docker 이미지에 Ollama 미포함 → 외부 LLM 서비스 필수 # ⚠️ OLLAMA_URL을 실제 Ollama 서버 IP로 설정하세요 - CAN_CHANGE_KEYS=${CAN_CHANGE_KEYS:-true} - LLM=${LLM:-ollama} # 외부 Ollama 서버 (별도 GPU 서버) - OLLAMA_URL=${OLLAMA_URL:-http://192.168.1.100:11434} - OLLAMA_MODEL=${OLLAMA_MODEL:-qwen2.5:3b,qwen3-vl:8b,llama3.2:3b} # OpenAI-호환 LLM (vLLM, LM Studio 등) - CUSTOM_LLM_URL=${CUSTOM_LLM_URL:-} - CUSTOM_LLM_API_KEY=${CUSTOM_LLM_API_KEY:-} - CUSTOM_MODEL=${CUSTOM_MODEL:-} # 외부 API 키 (인터넷 연결 시에만) - OPENAI_API_KEY=${OPENAI_API_KEY:-} - OPENAI_MODEL=${OPENAI_MODEL:-} - GOOGLE_API_KEY=${GOOGLE_API_KEY:-} - GOOGLE_MODEL=${GOOGLE_MODEL:-} - ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY:-} - ANTHROPIC_MODEL=${ANTHROPIC_MODEL:-} # --- Image --- - IMAGE_PROVIDER=${IMAGE_PROVIDER:-pexels} - DISABLE_IMAGE_GENERATION=${DISABLE_IMAGE_GENERATION:-true} - PEXELS_API_KEY=${PEXELS_API_KEY:-} - PIXABAY_API_KEY=${PIXABAY_API_KEY:-} - COMFYUI_URL=${COMFYUI_URL:-} - COMFYUI_WORKFLOW=${COMFYUI_WORKFLOW:-} # --- Database --- - DATABASE_URL=postgresql://presenton:${DB_PASSWORD:-presenton_secure_2026}@presenton-db:5432/presenton # --- Storage --- - STORAGE_BACKEND=${STORAGE_BACKEND:-local} - STORAGE_LOCAL_PATH=/app_data/documents - STORAGE_EXTERNAL_URL=${STORAGE_EXTERNAL_URL:-http://localhost:5050} # --- Misc --- - DISABLE_ANONYMOUS_TRACKING=true - WEB_GROUNDING=false - EXTENDED_REASONING=${EXTENDED_REASONING:-} - TOOL_CALLS=${TOOL_CALLS:-} - DISABLE_THINKING=${DISABLE_THINKING:-} - CODEX_MODEL=${CODEX_MODEL:-} # --- Security --- - API_SECRET_KEY=${API_SECRET_KEY:-presenton_ext_api_2026} - MAX_CONCURRENT_JOBS=${MAX_CONCURRENT_JOBS:-3} depends_on: presenton-db: condition: service_healthy restart: unless-stopped healthcheck: test: [ "CMD-SHELL", "curl -sf http://localhost:80/ || exit 1" ] interval: 30s timeout: 10s retries: 5 start_period: 90s presenton-db: hostname: presenton-db image: postgres:16-alpine platform: linux/amd64 container_name: presenton-db volumes: - pg_data:/var/lib/postgresql/data - ./scripts/init-db.sh:/docker-entrypoint-initdb.d/init-db.sh:ro environment: POSTGRES_DB: presenton POSTGRES_USER: presenton POSTGRES_PASSWORD: ${DB_PASSWORD:-presenton_secure_2026} healthcheck: test: [ "CMD-SHELL", "pg_isready -U presenton -d presenton" ] interval: 10s timeout: 10s retries: 10 start_period: 30s restart: unless-stopped volumes: presenton_data: pg_data: