Files
lingxi/.env.example
T
Stev_Wang 4f8f7c587d
ci / 质量门禁 (push) Canceled after 0s
fix(api): 允许 localhost 开发源访问 API
背景:
- 开发环境从 http://localhost:5173 打开页面时,用户与组织页报
  「成员加载失败 / Failed to fetch」;
- 复现确认:API 的 WEB_ORIGIN 仅含 http://127.0.0.1:5173,
  浏览器以 localhost 为 Origin 的预检响应缺少 Access-Control-Allow-Origin,
  请求被浏览器拦截。

改动:
- config/env.ts 的 WEB_ORIGIN 默认值同时包含 127.0.0.1 与 localhost;
- .env.example 同步为逗号分隔的两个开发源。

影响面:
- 仅开发环境 CORS 白名单,生产仍由部署环境变量显式配置;
- 其他来源仍需按 WEB_ORIGIN 显式加入。

回滚方式:
- 回滚本提交并重启 API,即恢复仅允许 127.0.0.1:5173。

验证证据:
- OPTIONS /api/v1/users 对两个 Origin 均返回对应 Access-Control-Allow-Origin;
- 浏览器从 localhost / 127.0.0.1 发起 /me 均返回 401(网络可达,不再 Failed to fetch);
- pnpm --filter @lingxi/api typecheck / test(10 files / 60 tests)通过。
2026-11-03 09:36:16 +08:00

55 lines
2.0 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 灵犀 · 环境变量示例(入库,禁止写真实密钥)
# 使用:cp .env.example .env.local(工程规范 09 ENV-09)
# 注意:本地 PostgreSQL/Redis 复用本机已有 Docker 服务(127.0.0.1:5432 / 6379);
# 对象存储为公网 RustFS,本地真实值只写入 .env.local / .env(已 gitignore)。
# ---------- 运行环境 ----------
NODE_ENV=development
LOG_LEVEL=debug
# ---------- 数据库(PostgreSQL 18) ----------
DATABASE_URL=postgresql://postgres:postgres@127.0.0.1:5432/lingxi?schema=public
# ---------- Redis(7.4) ----------
REDIS_URL=redis://127.0.0.1:6379
# ---------- 对象存储(RustFS,S3 协议;A0 统一使用 lingxi-dev 桶) ----------
S3_ENDPOINT=https://oss.xinsenidea.com
S3_REGION=us-east-1
S3_BUCKET_ASSETS=lingxi-dev
S3_BUCKET_RENDERS=lingxi-dev
S3_BUCKET_TEMP=lingxi-dev
S3_ACCESS_KEY=<rustfs-access-key>
S3_SECRET_KEY=<rustfs-secret-key>
# ---------- 认证(本地 dev 值,生产由密钥管理注入;密钥至少 32 位) ----------
JWT_ACCESS_SECRET=dev-only-jwt-access-secret-change-me-32
JWT_REFRESH_SECRET=dev-only-jwt-refresh-secret-change-me-32
# access / refresh 有效期(秒):15 分钟 / 7 天
JWT_ACCESS_TTL_SECONDS=900
JWT_REFRESH_TTL_SECONDS=604800
# 登录失败阈值与锁定时长(分钟内累计失败达阈值即锁定)
AUTH_MAX_LOGIN_FAILURES=5
AUTH_LOCK_MINUTES=15
# ---------- API ----------
PORT=3000
HOST=0.0.0.0
WEB_ORIGIN=http://127.0.0.1:5173,http://localhost:5173
MAX_UPLOAD_MB=500
# ---------- Worker ----------
QUEUE=default
WORKER_CONCURRENCY=2
# ---------- 前端(只能暴露 VITE_PUBLIC_* 前缀,ENV-07) ----------
VITE_PUBLIC_API_BASE_URL=http://127.0.0.1:3000/api/v1
# A0 登录壳没有接后端鉴权,置 true 时登录页写入本地演示会话以便查看布局;A1 接入真实登录后删除。
VITE_PUBLIC_DEMO_SESSION=true
# ---------- 可观测 ----------
OTEL_EXPORTER_OTLP_ENDPOINT=
# ---------- 功能开关 ----------
FEATURE_VIDEO=false