Repository navigation
Expand file tree
/
Copy path.env.docker.dev.example
More file actions
182 lines (170 loc) · 7.94 KB
/
Copy path.env.docker.dev.example
File metadata and controls
182 lines (170 loc) · 7.94 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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
# =============================================================================
# Aido 도커 개발 env 예시 — cp .env.docker.dev.example .env.docker.dev
# 운영과 같은 구성·같은 기능 플래그, DB·URL·CORS·비밀만 개발 값
# =============================================================================
# --- App ---
# 런타임 모드. 운영·도커 운영 production, 로컬·도커 개발 development
NODE_ENV=development
# 배포 환경 (development | staging | production). Sentry 발송 등 '실제 운영' 판단의 기준
APP_ENV=development
# 컨테이너 내부 포트. 운영 compose는 8080으로 고정한다
PORT=8080
# 헬스 체크에 보이는 인스턴스 식별자 (선택, 미설정 시 기동마다 임의 값)
# INSTANCE_ID=
# 로그 레벨 (silent | fatal | error | warn | info | debug | trace, 선택)
# LOG_LEVEL=
# 외부에서 이 API에 닿는 기준 주소 (선택). 신고 접수 이메일의 관리자 처리 링크에 쓰고, 미설정 시 경로만 적는다
# API_PUBLIC_URL=http://localhost:8080
# --- Database ---
# PostgreSQL 연결 문자열. 운영은 RDS(sslmode=require), 개발은 로컬 컨테이너
DATABASE_URL=postgresql://postgres:postgres@db:5432/aido
# 도커 개발 DB의 호스트 포트 (docker-compose.dev.yml 전용, 로컬 5432와 충돌 방지)
DB_PORT=5433
# --- Durable jobs ---
# 잡 백엔드 (postgres | redis). 운영·개발 모두 postgres(pg-boss)
JOB_BACKEND=postgres
# pg-boss 스키마 이름
JOB_SCHEMA=pgboss
# Redis 잡 큐 drain 경로 (전환 검증 때만 true)
JOB_REDIS_DRAIN_ENABLED=false
# --- Redis · Cache ---
# Redis/Valkey 주소 (redis:// 또는 rediss://, 선택)
REDIS_URL=redis://redis:6379
# Redis 명령 타임아웃 ms (선택, 기본 1500)
# REDIS_COMMAND_TIMEOUT_MS=
# Redis 연결 타임아웃 ms (선택, 기본 5000)
# REDIS_CONNECT_TIMEOUT_MS=
# 캐시 저장소 (memory | redis). 운영과 같이 memory (도커 개발 compose는 memory로 고정)
CACHE_TYPE=memory
# 캐시 기본 TTL ms
CACHE_DEFAULT_TTL_MS=60000
# --- Auth · 암호화 ---
# 액세스 토큰 서명 키 (32자 이상, 운영·개발 다른 값). 생성: openssl rand -base64 48
JWT_SECRET=dev-jwt-secret-key-minimum-32-characters-long-for-security
# 리프레시 토큰 서명 키 (32자 이상, JWT_SECRET과 다른 값)
JWT_REFRESH_SECRET=dev-refresh-secret-key-minimum-32-characters-long-here
# 액세스 토큰 만료
JWT_EXPIRES_IN=15m
# 리프레시 토큰 만료
JWT_REFRESH_EXPIRES_IN=7d
# 저장 토큰 암호화 키 (32자 이상). 바꾸면 기존 암호문을 못 읽는다
TOKEN_ENCRYPTION_KEY=dev-token-encryption-key-minimum-32-characters-long
# 암호화 salt (선택, 8자 이상). 운영은 미설정(기본 salt) — 바꾸면 기존 암호문을 못 읽는다
# TOKEN_ENCRYPTION_SALT=
# --- Security ---
# 허용 Origin (쉼표 구분). 운영은 실제 도메인, 개발은 localhost·Expo
CORS_ORIGINS=http://localhost:3000,http://localhost:8081,exp://localhost:8081
# 요청 제한 창 ms
THROTTLE_TTL=60000
# 창당 최대 요청 수. 운영 100, 개발 1000
THROTTLE_LIMIT=1000
# --- OAuth (production은 provider 하나 이상 필수) ---
# Google OAuth 클라이언트 ID (모바일 id 토큰 audience 겸용)
# GOOGLE_CLIENT_ID=
# Google OAuth 클라이언트 secret (웹 콜백 코드 교환)
# GOOGLE_CLIENT_SECRET=
# Google 웹 콜백 URL. 운영 https 도메인, 개발 localhost
GOOGLE_CALLBACK_URL=http://localhost:8080/v1/auth/google/web-callback
# Apple 로그인 id 토큰 audience (번들 ID). 개발 빌드는 .dev 등 별도 값
# APPLE_CLIENT_ID=
# Apple 팀 ID (production OAuth 구성 검사에 쓰임)
# APPLE_TEAM_ID=
# Apple Sign in 키 ID (production OAuth 구성 검사에 쓰임)
# APPLE_KEY_ID=
# Apple Sign in 개인 키 (\n 이스케이프 한 줄, production OAuth 구성 검사에 쓰임)
# APPLE_PRIVATE_KEY=
# Kakao REST API 키
# KAKAO_CLIENT_ID=
# Kakao client secret
# KAKAO_CLIENT_SECRET=
# Kakao 웹 콜백 URL. 운영 https 도메인, 개발 localhost
KAKAO_CALLBACK_URL=http://localhost:8080/v1/auth/kakao/web-callback
# Naver client ID
# NAVER_CLIENT_ID=
# Naver client secret
# NAVER_CLIENT_SECRET=
# Naver 웹 콜백 URL. 운영 https 도메인, 개발 localhost
NAVER_CALLBACK_URL=http://localhost:8080/v1/auth/naver/web-callback
# --- Email (Resend) ---
# Resend API 키 (production 필수, 개발도 실제 발송)
# RESEND_API_KEY=
# 발신 주소 (기본 noreply@aido.kr)
EMAIL_FROM=noreply@aido.kr
# 발신자 이름
EMAIL_FROM_NAME=Aido
# 문의·신고 수신 주소 (기본 support@aido.kr)
SUPPORT_EMAIL=support@aido.kr
# --- External services ---
# Gemini API 키. 1.13.0은 AIza…·AQ.… 모두, 1.12.x 이하는 AIza…만 받는다 (새 형식은 1.13.0 기동 뒤에만)
# GOOGLE_GENERATIVE_AI_API_KEY=
# 공공데이터포털 서비스키 (기상청 예보·생활기상지수·출몰시각·에어코리아)
# KMA_API_KEY=
# RevenueCat 웹훅 Authorization 검증 비밀
# REVENUECAT_WEBHOOK_SECRET=
# 서버에서 RevenueCat API를 호출할 때 쓰려고 남겨 둔 키(현재 미사용)
# REVENUECAT_SECRET_API_KEY=
# 가입 알림 Discord 웹훅 (https://discord.com/api/webhooks/…)
# DISCORD_SIGNUP_WEBHOOK_URL=
# 결제 알림 Discord 웹훅 (https://discord.com/api/webhooks/…)
# DISCORD_PAYMENT_WEBHOOK_URL=
# Expo Push 액세스 토큰 (Enhanced Push Security 사용 시만)
# EXPO_ACCESS_TOKEN=
# 푸시 빈도 제한 저장소 (postgres | redis | memory, 선택, 기본 postgres)
# PUSH_RATE_LIMIT_BACKEND=
# --- Monitoring ---
# API Sentry DSN (https). 전송은 APP_ENV=production일 때만
# SENTRY_DSN=
# 트레이스 샘플링 0~1 (선택, 기본 운영 0.2·그 외 1.0)
# SENTRY_TRACES_SAMPLE_RATE=
# --- AI 작업 설정 (선택, 미설정 시 ai.schema.ts 기본값 — 롤백·실험할 때만 설정) ---
# 할 일 파싱 Gemini 모델 ID (기본 gemini-3.1-flash-lite)
# AI_MODEL_PARSE_TODO=
# 메모 파싱 Gemini 모델 ID
# AI_MODEL_PARSE_MEMO=
# 리포트 Gemini 모델 ID
# AI_MODEL_REPORT=
# 추천 Gemini 모델 ID
# AI_MODEL_SUGGESTION=
# 할 일 파싱 프롬프트 (v1 | v2, 기본 v2, v1은 롤백용)
# AI_PROMPT_VERSION_PARSE_TODO=
# 메모 파싱 프롬프트 (v1 | v2)
# AI_PROMPT_VERSION_PARSE_MEMO=
# 리포트 프롬프트 (v1 | v2)
# AI_PROMPT_VERSION_REPORT=
# 추천 프롬프트 (v1 | v2)
# AI_PROMPT_VERSION_SUGGESTION=
# 할 일 파싱 thinking (minimal | low | medium)
# AI_THINKING_PARSE_TODO=
# 메모 파싱 thinking (minimal | low | medium)
# AI_THINKING_PARSE_MEMO=
# 리포트 thinking (minimal | low | medium)
# AI_THINKING_REPORT=
# 추천 thinking (minimal | low | medium)
# AI_THINKING_SUGGESTION=
# --- 기능 플래그 (개발은 운영과 같은 값으로 모든 기능을 켠다) ---
# 앱 업데이트 안내 사용 여부 (켜면 두 플랫폼 버전 필수)
APP_VERSION_CHECK_ENABLED=true
# App Store에 실제 공개된 최신 버전 (MAJOR.MINOR.PATCH)
APP_VERSION_CHECK_IOS_LATEST_VERSION=1.12.0
# Google Play에 실제 공개된 최신 버전 (MAJOR.MINOR.PATCH)
APP_VERSION_CHECK_ANDROID_LATEST_VERSION=1.12.0
# 콕 찌르기 답장·감사 (1.11.0)
NUDGE_INTERACTIONS_ENABLED=true
# 신규 가입자 리텐션 온보딩 V2 실험 (신규 가입자만 등록)
RETENTION_ONBOARDING_V2_ENABLED=true
# V2 실험군 비율 0~100
RETENTION_ONBOARDING_V2_TREATMENT_PERCENT=50
# 친구 초대 링크·수락·보상 API (1.13.0, 꺼지면 INVITE_2105, 지급 원장은 유지)
INVITE_ENABLED=true
# 중복 보상 판단 HMAC 키 (production에서 켜면 32자 이상 필수, 한 번 정하면 유지). 생성: openssl rand -base64 48
# INVITE_CLAIM_HASH_SECRET=
# 새 기능 소개 캠페인 (켜면 아래 세 값 필수)
FEATURE_DISCOVERY_ENABLED=true
# 캠페인 ID (1.13.0 친구 초대)
FEATURE_DISCOVERY_CAMPAIGN_ID=feature-discovery-2026-11
# 소개를 보여 줄 최소 앱 버전 (semver)
FEATURE_DISCOVERY_MIN_APP_VERSION=1.13.0
# UTC ISO(끝이 Z). 이후 가입자는 소개 대신 활성화 흐름 — 운영은 1.13.0 배포 시각
FEATURE_DISCOVERY_LAUNCHED_AT=2026-11-01T00:00:00.000Z
# 앱 실행 시 소개 자동 열기
FEATURE_DISCOVERY_AUTO_OPEN=true