Repository navigation
Expand file tree
/
Copy path.env.example
More file actions
101 lines (92 loc) · 4.28 KB
/
Copy path.env.example
File metadata and controls
101 lines (92 loc) · 4.28 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
# 포트번호는 38XXX
# PostgreSQL
POSTGRES_DB=stackup
POSTGRES_USER=stackup
POSTGRES_PASSWORD=stackup
POSTGRES_PORT=38040
# RabbitMQ
RABBITMQ_USER=stackup
RABBITMQ_PASSWORD=stackup
RABBITMQ_PORT=38050
RABBITMQ_MANAGEMENT_PORT=38051
# MinIO
MINIO_ROOT_USER=minioadmin
MINIO_ROOT_PASSWORD=minioadmin
MINIO_API_PORT=38060
MINIO_CONSOLE_PORT=38061
MINIO_BUCKET=stackup
# AI server
#
# 여기에 `KEY=값` 으로 적은 줄은 deploy-app.yml 이 운영 .env 에 **영구 복사**하고,
# 그 값이 ai/src/ai_server/config/settings.py 의 기본값을 이긴다. 그래서 코드 기본값과
# 같은 값을 여기 적으면 나중에 코드를 고쳐도 운영에 도달하지 못한다 —
# 실제로 LLM_PRO_TIMEOUT_SEC 를 30→60 으로 올린 변경이 이렇게 무효가 됐다.
#
# 규칙: **환경마다 달라야 하는 것만** 적는다(시크릿·운영 전용 선택). 나머지는
# 주석으로 남겨 "이런 노브가 있다"만 알리고, 값의 주인은 settings.py 로 둔다.
AI_PORT=38030
LLM_API_KEY=
DEEPGRAM_API_KEY=
# 코드 기본값은 mock(로컬에서 키 없이 돌리기 위함) — 운영은 반드시 gemini 여야 한다.
# 이 줄이 없으면 신규 배포가 가짜 임베딩으로 조용히 뜨고 RAG 검색이 무의미해진다.
EMBEDDING_PROVIDER=gemini
STORAGE_LOCAL_ROOT=/var/lib/stackup-ai/storage
# ── 아래는 전부 settings.py 가 기본값을 가진다. 바꿀 때만 주석을 풀어 적는다. ──
# STORAGE_BACKEND=s3
# S3_REGION=us-east-1
# LLM_BASE_URL=https://factchat-cloud.mindlogic.ai/v1/gateway
# LLM_PRO_MODEL=gemini-3.1-pro-preview
# LLM_PRO_TIMEOUT_SEC=60.0
# LLM_FLASH_MODEL=gemini-3.5-flash-lite
# LLM_FLASH_TEMPERATURE=0.4
# LLM_FLASH_MAX_TOKENS=512
# LLM_FLASH_TIMEOUT_SEC=10.0
# QUESTIONS_RAG_TIMEOUT_SEC=1.5
# 티어별 엔드포인트 오버라이드(OpenAI 호환). 비우면 위 게이트웨이 공유.
# 예) 꼬리질문만 로컬 Ollama: LLM_FLASH_BASE_URL=http://ollama:11434/v1 + LLM_FLASH_MODEL=exaone3.5:7.8b
# 오버라이드한 티어는 LLM_API_KEY(학교 키)를 물려받지 않는다.
# LLM_PRO_BASE_URL=
# LLM_PRO_API_KEY=
# LLM_FLASH_BASE_URL=
# LLM_FLASH_API_KEY=
# 음성 STT. auto=DEEPGRAM_API_KEY 있으면 deepgram, 없으면 mock.
# STT_PROVIDER=auto
# DEEPGRAM_MODEL=nova-2
# DEEPGRAM_LANGUAGE=ko
# DEEPGRAM_TIMEOUT_SEC=20
# DEEPGRAM_CONNECT_TIMEOUT_SEC=5
# STT_MAX_ATTEMPTS=3
# STT_RETRY_BACKOFF_SEC=0.5
# EMBEDDING_MODEL=gemini-embedding-001
# EMBEDDING_DIM=1536
# RealTime server
REALTIME_PORT=38020
REALTIME_LOG_LEVEL=info
# 호스트에 공개하는 포트의 바인드 주소. 기본 127.0.0.1 — nginx 와 SSH 터널만 닿으면 되고,
# 서비스끼리는 도커 네트워크로 통신한다. LAN 에 열어야 할 때만 0.0.0.0 으로 바꾼다.
# (도커는 ufw 를 우회해 publish 한 포트를 그대로 연다 — 0.0.0.0 은 곧 인터넷 공개다.)
# BIND_ADDR=127.0.0.1
# Backend Core (Spring)
BACKEND_PORT=38010
SPRING_PROFILES_ACTIVE=local
# JWT/암호화는 base64 32바이트. 운영은 반드시 GitHub Secrets(JWT_SECRET, ENCRYPTION_KEY)로 덮어쓸 것.
JWT_SECRET=c3RhY2t1cC1zcHJpbnQxLWxvY2FsLWp3dC1zZWNyZXQtMzItYnl0ZXMtbG9uZw==
ENCRYPTION_KEY=c3RhY2t1cC1zcHJpbnQxLWVuY3J5cHRpb24ta2V5QUI=
# 액세스 토큰 수명(초). 기본 3600(1시간) — 면접 진행 중 토큰 만료로 튕기는 문제 방지.
JWT_ACCESS_TTL_SECONDS=3600
# @Scheduled 스레드 수. Spring 기본값 1이면 모든 스위퍼가 한 줄로 서고, 느린 작업 하나가
# 멈춘 면접을 푸는 스위퍼까지 멈춘다.
# SCHEDULING_POOL_SIZE=4
# AI 서버와 공유. 운영은 GitHub Secrets(CORE_INTERNAL_API_KEY)로 덮어쓸 것.
CORE_INTERNAL_API_KEY=local-development-internal-api-key
# GitHub OAuth (운영은 GitHub Secrets(GH_OAUTH_CLIENT_ID/SECRET)로 덮어쓸 것)
GITHUB_OAUTH_CLIENT_ID=
GITHUB_OAUTH_CLIENT_SECRET=
GITHUB_OAUTH_REDIRECT_URI=http://localhost:5173/auth/callback
# Google OAuth (선택) — 비워 두면 Google 로그인 버튼만 비활성되고 나머지는 정상 동작.
# Google Cloud Console > API 및 서비스 > 사용자 인증 정보 > OAuth 2.0 클라이언트 ID
# 승인된 리디렉션 URI 에 아래 GOOGLE_OAUTH_REDIRECT_URI 값을 그대로 등록해야 한다.
GOOGLE_OAUTH_CLIENT_ID=
GOOGLE_OAUTH_CLIENT_SECRET=
GOOGLE_OAUTH_REDIRECT_URI=http://localhost:5173/auth/google/callback
CORS_ALLOWED_ORIGINS=*