96 行
3.2 KiB
Bash
96 行
3.2 KiB
Bash
DATABASE_URL="postgresql://hyboa_user:hyboa_password@localhost:5432/hyb_oa?schema=public"
|
||
JWT_SECRET="change_me"
|
||
# ===== 敏感字段加密(F25)=====
|
||
# 用于员工银行卡/身份证等字段的可逆加密(AES-256-GCM)。
|
||
# 生成方式示例:openssl rand -base64 32
|
||
# FIELD_ENCRYPTION_KEY=""
|
||
# APP_ORIGIN="https://oa.hyinda.com"
|
||
# COOKIE_SECURE="true"
|
||
# DEV_SHOW_PASSWORD_RESET_CODE="true"
|
||
APP_TIMEZONE="Asia/Shanghai"
|
||
STORAGE_DIR="generated/storage"
|
||
# STORAGE_DRIVER="local" # local|s3(MinIO/S3 兼容)
|
||
# S3_ENDPOINT="" # 例如:http://127.0.0.1:9000(MinIO)
|
||
# S3_REGION="us-east-1"
|
||
# S3_BUCKET="hyb-oa"
|
||
# S3_ACCESS_KEY_ID=""
|
||
# S3_SECRET_ACCESS_KEY=""
|
||
# S3_FORCE_PATH_STYLE="true" # MinIO 建议 true
|
||
SIGNED_URL_TTL_SECONDS="600"
|
||
MAX_UPLOAD_SIZE_BYTES="10485760"
|
||
|
||
# ===== Metrics(Prometheus & OpenTelemetry)=====
|
||
# METRICS_ENABLED="true"
|
||
# OTEL_TRACES_ENABLED="false"
|
||
|
||
# ===== 单域托管 client/dist(试运行/生产建议)=====
|
||
# SERVE_CLIENT_DIST="true"
|
||
# CLIENT_DIST_DIR="../client/dist"
|
||
# OpenAPI 文档端点(建议仅非生产开启)
|
||
# OPENAPI_DOCS_ENABLED="false"
|
||
|
||
# ===== 安全基线(默认:production=true,其它环境=false,可显式覆盖)=====
|
||
# RATE_LIMIT_ENABLED="true"
|
||
# RATE_LIMIT_LOGIN_MAX="10"
|
||
# RATE_LIMIT_LOGIN_WINDOW="1 minute"
|
||
|
||
# ===== 登录安全(失败锁定/弱密码拦截)=====
|
||
# AUTH_LOGIN_FAIL_WINDOW_SECONDS="900" # 15min
|
||
# AUTH_LOGIN_FAIL_MAX_ATTEMPTS="5"
|
||
# AUTH_LOGIN_LOCK_SECONDS="1800" # 30min
|
||
# WEAK_PASSWORD_CHECK_ENABLED="true"
|
||
# WEAK_PASSWORD_MIN_SCORE="2" # zxcvbn score < 2 -> reject
|
||
|
||
# ===== OIDC/SSO(F23,可选)=====
|
||
# OIDC_ENABLED="true"
|
||
# OIDC_ISSUER_URL=""
|
||
# OIDC_CLIENT_ID=""
|
||
# OIDC_CLIENT_SECRET=""
|
||
# OIDC_REDIRECT_URI="http://127.0.0.1:3000/api/auth/oidc/callback"
|
||
# OIDC_SCOPES="openid profile email"
|
||
|
||
DELEGATION_REVOKE_CRON="0 * * * *"
|
||
|
||
OCR_PROVIDER="off"
|
||
OCR_BATCH_SIZE="10"
|
||
OCR_LOCK_TTL_SECONDS="300"
|
||
OCR_POLL_CRON="* * * * *"
|
||
OCR_MAX_ATTEMPTS="3"
|
||
OCR_TIMEOUT_MS="5000"
|
||
|
||
# ===== 发票验真(P6)=====
|
||
INVOICE_VERIFICATION_ENABLED="false"
|
||
# INVOICE_VERIFICATION_ENABLED 作为Env硬闸;在线灰度由 /api/system/feature-flags 管理
|
||
VERIFICATION_PROVIDER="mock" # mock|tax
|
||
VERIFICATION_POLL_CRON="* * * * *"
|
||
VERIFICATION_MAX_ATTEMPTS="3"
|
||
VERIFICATION_RETRY_COOLDOWN_SECONDS="60"
|
||
VERIFICATION_TIMEOUT_MS="5000"
|
||
|
||
INVOICE_ARCHIVE_CRON="30 2 * * *"
|
||
INVOICE_ARCHIVE_UNUSED_DAYS="90"
|
||
INVOICE_ARCHIVE_BATCH_SIZE="200"
|
||
TENCENT_SECRET_ID=""
|
||
TENCENT_SECRET_KEY=""
|
||
TENCENT_OCR_REGION="ap-beijing"
|
||
|
||
# ===== 预算与集成(P7-P8)=====
|
||
BUDGET_CONTROL_MODE="warn" # warn|block
|
||
ERP_SYNC_ENABLED="false"
|
||
# ERP_SYNC_ENABLED 作为Env硬闸;在线灰度由 /api/system/feature-flags 管理
|
||
ERP_SYNC_PROVIDER="mock" # mock|http
|
||
ERP_SYNC_ENDPOINT=""
|
||
ERP_SYNC_TIMEOUT_MS="5000"
|
||
ERP_SYNC_AUTH_TOKEN=""
|
||
TRAVEL_SYNC_ENABLED="false"
|
||
IM_NOTIFIER_ENABLED="false"
|
||
INTEGRATION_OUTBOX_CRON="* * * * *"
|
||
INTEGRATION_OUTBOX_BATCH_SIZE="20"
|
||
INTEGRATION_OUTBOX_MAX_ATTEMPTS="5"
|
||
INTEGRATION_OUTBOX_RETRY_SECONDS="120"
|
||
|
||
# ===== 试运行引导管理员(E20,可选)=====
|
||
# TRIALRUN_ADMIN_EMAIL="[email protected]"
|
||
# TRIALRUN_ADMIN_PHONE="13800000000"
|
||
# TRIALRUN_ADMIN_PASSWORD=""
|