-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path.env.example
More file actions
108 lines (92 loc) · 5.95 KB
/
Copy path.env.example
File metadata and controls
108 lines (92 loc) · 5.95 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
# =============================================================================
# 배포 타깃 & DB 방언 선택
# =============================================================================
# BUILD_TARGET: cloudflare(기본) | node
# - cloudflare: Cloudflare Workers (adapter-cloudflare). D1/Hyperdrive 바인딩 사용 가능.
# - node: 순수 Node 서버 (adapter-node). platform 바인딩 없음 → pg/mysql 은
# DATABASE_URL 로 직결, 설정값은 process.env 로 읽는다. (D1 은 Workers 전용)
# 예) BUILD_TARGET=node DB_DIALECT=postgres bun run build && node build
#
# 레이트 리밋 저장소(RateLimitStore)는 배포 타깃에 따라 자동 선택된다:
# - cloudflare(Workers): 요청 간 상태를 공유할 수 없는 isolate 특성상 DB(rate_limits 테이블)
# 기반 공유 저장소를 사용한다.
# - node(adapter-node) : 프로세스 내 in-memory 저장소를 사용한다(핫패스 DB write 없음).
# ⚠️ in-memory 는 "단일 프로세스" 가정이다. 같은 앱을 여러 인스턴스로 수평 확장하면
# 각 인스턴스가 자기 카운터만 보므로 실질 한도가 인스턴스 수만큼 완화된다.
# 다중 인스턴스 Node 배포에서 엄격한 전역 한도가 필요하면 공유 저장소(Redis 등)로
# RateLimitStore 를 교체해야 한다(인터페이스는 열려 있으나 이번 버전엔 미포함).
BUILD_TARGET="cloudflare"
# DB_DIALECT: d1(기본) | sqlite | postgres | mysql — 배포 단위로 하나만 사용
# - d1 : Cloudflare D1 (Workers 전용)
# - sqlite : libSQL — 로컬 파일(file:) 또는 Turso (순수 Node 등)
# - postgres / mysql : Hyperdrive(Cloudflare) 또는 DATABASE_URL 직결
# - 빌드/타입체크/마이그레이션 생성 시에도 참조된다:
# DB_DIALECT=postgres bun run build
# bun run db:generate:pg # 또는 db:generate:mysql / db:generate:sqlite
DB_DIALECT="d1"
# DB 연결 문자열. 방언별 의미:
# postgres : postgres://user:pass@host:5432/dbname
# mysql : mysql://user:pass@host:3306/dbname
# sqlite : file:./keystone.db (또는 경로만: ./keystone.db, Turso: libsql://...)
# (런타임 연결 + drizzle-kit migrate/generate 에서 사용. 커밋하지 마세요.)
DATABASE_URL=""
# Turso 등 원격 libSQL 인증 토큰 (sqlite + 원격일 때만)
# DATABASE_AUTH_TOKEN=""
# =============================================================================
# 스킨 캐시 스토리지 (선택) — R2 또는 S3 호환
# =============================================================================
# Cloudflare 에서는 R2 바인딩(SKIN_CACHE)이 있으면 자동 사용.
# R2 가 없거나 Node 환경이면 아래 S3 호환 설정으로 폴백(미설정 시 캐시 없이 동작).
# AWS S3 / MinIO / Ceph / R2 의 S3 endpoint 모두 사용 가능.
# S3_ENDPOINT="" # 예: https://s3.us-east-1.amazonaws.com, http://minio:9000, https://<acct>.r2.cloudflarestorage.com
# S3_BUCKET=""
# S3_REGION="auto" # AWS 는 리전(us-east-1 등), R2 는 auto
# S3_ACCESS_KEY_ID=""
# S3_SECRET_ACCESS_KEY=""
# S3_FORCE_PATH_STYLE="true" # MinIO/R2 는 true 권장, AWS 가상호스트 방식이면 false
# =============================================================================
# Cloudflare
# =============================================================================
# Cloudflare 계정 ID (대시보드 우측 하단에서 확인)
CLOUDFLARE_ACCOUNT_ID=""
# D1 데이터베이스 ID (`wrangler d1 create` 명령 결과값)
CLOUDFLARE_D1_DATABASE_ID=""
# 프리뷰용 D1 데이터베이스 ID (선택, 없으면 위와 동일하게 설정)
CLOUDFLARE_D1_PREVIEW_DATABASE_ID=""
# Cloudflare D1 API 토큰 (db:migrate 스크립트에서 사용, 커밋하지 마세요)
CLOUDFLARE_D1_TOKEN=""
# =============================================================================
# IDP 설정
# 초기 관리자 계정은 `bun run setup` 실행 시 활성 DB(방언 무관)에 생성됩니다.
# 수동/CI 시드: IDP_BOOTSTRAP_ADMIN_USERNAME/EMAIL/PASSWORD(+NAME) 설정 후
# bun run db:seed (방언별: db:seed:pg 등). 비대화 환경은 SEED_RESET=0|1 로 초기화 지정.
# =============================================================================
# 기본 테넌트 이름
IDP_DEFAULT_TENANT_NAME="My Organization"
# =============================================================================
# IDP 핵심 설정
# =============================================================================
# 서명 키 암호화 KEK — 최소 32자 랜덤 문자열
# 생성: openssl rand -base64 32
# ⚠️ 프로덕션 필수: 미설정 시 요청 초기에 오류로 차단(fail-fast). dev 에서는 생략 가능.
# ⚠️ 프로덕션에서는 wrangler secret put IDP_SIGNING_KEY_SECRET 사용
IDP_SIGNING_KEY_SECRET="your-very-long-random-secret-at-least-32-chars"
# OIDC/SAML issuer URL (배포 도메인과 일치시킬 것)
# ⚠️ 프로덕션 필수: 미설정 시 요청 초기에 503 으로 차단(fail-closed). Host 헤더 주입으로
# iss 클레임/SAML Issuer 가 오염되는 것을 막는다.
# dev 에서만 미설정 시 요청 origin 으로 자동 대체(로컬 http://localhost:5173).
IDP_ISSUER_URL="http://localhost:5173"
# SAML SP 인증서 유효기간(notBefore/notAfter) 강제 검증. 기본 on(강제).
# self-signed SP cert 를 만료 무시 키 컨테이너로 쓰는 SP 와의 상호운용이 필요하면
# "false" 로 완화한다(그 외 값/미설정은 강제 on).
# IDP_ENFORCE_SP_CERT_VALIDITY="false"
# 유출 비밀번호(HIBP) 스크리닝. 기본 off(opt-in). "true" 로 켜면 회원가입/비번재설정/초대수락 시
# api.pwnedpasswords.com 에 k-anonymity 조회로 유출 비밀번호를 거부한다(원문 미전송). API
# 오류/타임아웃은 fail-open(가입을 막지 않음). 외부 서비스 의존을 감수할 때만 켠다.
# PASSWORD_BREACH_CHECK="true"
SMTP_HOSTNAME=""
SMTP_PORTNUMB=
SMTP_USERNAME=""
SMTP_PASSWORD=""
SMTP_SENDMAIL=""
SMTP_ENC_TYPE=""