# DEV: 개발 | PROD: 운영(임직원 이메일 로그인, 구 REAL) | SUPER: 데모·제한 완화 OPS_STATE=DEV PORT=8030 # HTTP 수신 주소 (기본 0.0.0.0 = 모든 인터페이스, 로컬만이면 127.0.0.1) HOST=0.0.0.0 ADMIN_TOKEN=xavis-admin # --- OPS_STATE=PROD: 매직 링크 이메일 (앱 서버가 아웃바운드로 TCP 연결 가능한 SMTP만 동작) # BASE_URL=https://실제-도메인 # AUTH_SECRET=운영용-비밀값 # 사내 전용 게이트웨이(gw.* 등)는 클라우드에서 587이 ECONNREFUSED로 막히는 경우가 많음 → # Google Workspace SMTP 릴레이(smtp-relay.gmail.com + 발신 IP 허용), SendGrid, SES 등 사용 권장. # SMTP_HOST=smtp-relay.gmail.com # SMTP_PORT=587 # SMTP_SECURE=0 # SMTP_USER= # SMTP_PASS= # SMTP_FROM=noreply@xavis.co.kr # 선택: 587에서 STARTTLS 강제(기본 on). 특수 서버만 0 # SMTP_REQUIRE_TLS=1 # 이메일 로그인 세션: 로그인한 달력일(OPS_SESSION_TZ) + OPS_SESSION_TTL_DAYS일의 23:59:59까지(기본 15일) # OPS_SESSION_TZ=Asia/Seoul # OPS_SESSION_TTL_DAYS=15 PAGE_SIZE=9 # 학습센터 동영상 파일 업로드 최대 크기(MB, 기본 500). 리버스 프록시(Nginx 등)의 client_max_body_size도 같이 늘려야 합니다. LECTURE_VIDEO_MAX_MB=500 # 1=PostgreSQL 단일 소스, 0=data/lectures.json 사용 ENABLE_POSTGRES=1 DB_HOST=your-db-host DB_PORT=5432 DB_DATABASE=your_database DB_USERNAME=your_user DB_PASSWORD=your_password # DB 연결이 없거나 실패하면 회의록 AI는 data/meeting-ai.json에 저장됩니다(로컬 개발에 유용). # 회의 음성 업로드 최대 크기(MB, 기본 300). OpenAI 전사 API는 요청당 약 25MB이므로 초과분은 서버에서 ffmpeg로 분할 후 전사합니다. MEETING_AUDIO_MAX_MB=300 # 회의록 저장 후 OpenAI JSON으로 체크리스트 추출 → 업무 체크리스트 자동 반영 (1=기본, 0=비활성) MEETING_AUTO_CHECKLIST=1 # 추출 시 회의록 본문 최대 길이(문자). 긴 경우 끝부분(체크리스트가 뒤에 있을 때)만 사용 MEETING_CHECKLIST_EXTRACT_MAX_CHARS=24000 ENABLE_PPT_THUMBNAIL=1 THUMBNAIL_WIDTH=1000 THUMBNAIL_MAX_RETRY=2 THUMBNAIL_RETRY_DELAY_MS=5000 THUMBNAIL_EVENT_KEEP=200 THUMBNAIL_EVENT_PAGE_SIZE=50 # 채팅 기능용 API 키 # OpenAI: https://platform.openai.com/api-keys OPENAI_API_KEY= # 선택: UI의 gpt-5.4 / gpt-5-mini에 대응하는 실제 Chat Completions 모델 ID (미설정 시 gpt-4o / gpt-4o-mini) # OPENAI_MODEL_DEFAULT=gpt-4o # OPENAI_MODEL_MINI=gpt-4o-mini # OpenAI Responses API 내장 웹 검색(기본 on). 끄려면 아래 주석 해제 후 0 # OPENAI_WEB_SEARCH=0 # 웹 검색 위치 힌트(선택) # OPENAI_WEB_SEARCH_COUNTRY=KR # OPENAI_WEB_SEARCH_CITY= # OPENAI_WEB_SEARCH_REGION= # OPENAI_WEB_SEARCH_TIMEZONE=Asia/Seoul # Anthropic Claude (claude-*): https://console.anthropic.com/ CLAUDE_API_KEY= # Google Gemini (gemini-*): https://aistudio.google.com/apikey GENAI_API_KEY= # OPS_STATE=DEV + 관리자 토큰일 때 회의록 AI 등에 쓸 가상 사용자 이메일 (미설정 시 dev@xavis.co.kr) # MEETING_DEV_EMAIL=you@example.com # SUPER 모드에서 회의록·체크리스트용 데모 사용자 이메일 (미설정 시 MEETING_DEV_EMAIL 또는 demo@xavis.local) # MEETING_SUPER_EMAIL=demo@xavis.local # 회의록 음성 전사 기본 모델 (미설정 시 gpt-4o-mini-transcribe) # OPENAI_WHISPER_MODEL=gpt-4o-mini-transcribe # gpt-4o 전사 API: 요청당 오디오 토큰 한도 → ffmpeg 분할 길이(초, 15~600, 기본 120). 한도 오류 시 30 또는 15 # OPENAI_TRANSCRIBE_SEGMENT_SEC=30