# ============================================================ # Echo 环境变量示例 # 使用方法:复制本文件为 .env.local 并填入真实值 # cp .env.example .env.local # 注意:.env.local 含敏感密钥,已被 .gitignore 忽略,切勿提交到版本库 # ============================================================ # ---------- 数据库(Drizzle ORM + pg 直连) ---------- # 方式一:直接给 PostgreSQL 连接串(本地开发 / 直连部署推荐) # 新库(pg18/5433)形如: # postgresql://postgre:<密码>@<主机>:5433/echo # 部署到 NAS 容器内时主机用服务的 Docker 网络名(如 postgresql),端口用容器内 5432 # DATABASE_URL=postgresql://postgre:your-db-password@your-host:5433/echo # 方式二:使用 1Panel 标准 PANEL_DB_* 字段(v1.5.1 起推荐,部署到 1Panel 时自动注入) # 1Panel 安装 PostgreSQL 应用时会自动注入以下字段,应用无需关心容器名 / IP。 # 与 DATABASE_URL 二选一:优先 DATABASE_URL;若未设置则回退到 PANEL_DB_*。 # PANEL_DB_HOST= # PANEL_DB_PORT= # PANEL_DB_NAME= # PANEL_DB_USER= # PANEL_DB_USER_PASSWORD= # ---------- 认证(静态密码 + API Token,方案B) ---------- # 静态密码(v1.5.1 起支持明文 + 自动 bcrypt): # - 容器启动时(entrypoint.sh)检测到明文会自动 bcrypt 哈希写入 ECHO_STATIC_PASSWORD_HASH, # 并清空 ECHO_STATIC_PASSWORD 明文。 # - 如业务代码未走 entrypoint(如本地 dev),src/lib/auth.ts 也会在模块加载时再做一次 # "明文→hash"自检,保证明文不会在进程内长期留存。 # 推荐使用明文,密码至少 12 位随机字符。 ECHO_STATIC_PASSWORD=your-static-password # 兼容旧部署:仍可直接给 bcrypt hash(与 ECHO_STATIC_PASSWORD 二选一) # 生成:node -e "const b=require('bcryptjs');console.log(b.hashSync('你的密码',10))" # ECHO_STATIC_PASSWORD_HASH=your-bcrypt-hash # 登录成功后下发到 httpOnly Cookie 的令牌(随机长字符串,>=16 字符即可)。 # 推荐使用以下命令生成 32 位随机串: # node -e "console.log(require('crypto').randomBytes(32).toString('hex'))" ECHO_API_TOKEN=your-random-api-token # ---------- Qwen 向量服务(DashScope) ---------- # DashScope API Key(阿里云百炼 / 千问 AI 平台获取:https://platform.qianwenai.com/home/api-keys) # 未配置时搜索将自动降级为关键词 ILIKE 匹配 DASHSCOPE_API_KEY=your-dashscope-api-key # 向量模型名称,默认 qwen3.7-text-embedding DASHSCOPE_EMBEDDING_MODEL=qwen3.7-text-embedding # DashScope 原生 Embedding 接口地址 DASHSCOPE_EMBEDDING_API_URL=https://dashscope.aliyuncs.com/api/v1/services/embeddings/text-embedding/text-embedding # 向量维度(需与数据库 migration 中 VECTOR(2560) 及模型输出维度一致;qwen3.7-text-embedding 支持 256~2560 自定义维度) EMBEDDING_DIMENSION=2560 # 向量检索相似度阈值(0~1,默认 0.35;qwen3.7 模型余弦相似度分布偏低,0.7 会导致漏召回) SEARCH_MATCH_THRESHOLD=0.35 # ---------- 真实数据源(PDD v2) ---------- # 注意:配置以数据库 source_configs 表为准(数据源页面可在线编辑、即时生效); # 环境变量仅在数据库中无对应记录时作为「首次初始化默认值」使用(见 lib/source-config.ts)。 # 配置以下凭据后,同步器将拉取真实数据;未配置时自动降级为 mock 数据。 # # Nextcloud WebDAV(App 专用密码:Nextcloud「设置-安全-设备与会话」生成,不要用主密码) NEXTCLOUD_WEBDAV_URL=https://nextcloud.example.com/remote.php/dav/files/user NEXTCLOUD_USERNAME=user NEXTCLOUD_APP_PASSWORD=your-app-password # 扫描的根目录(默认 /,可限定到某个子目录,如 /Documents) NEXTCLOUD_ROOT_DIR=/ # Gitea API(个人访问 Token:Gitea「设置-应用-生成新令牌」,读取权限即可) GITEA_API_URL=https://gitea.example.com/api/v1 GITEA_TOKEN=your-token # 限定仓库属主(可选;留空则拉取 token 可见的全部仓库) GITEA_OWNER= # ---------- 回收站(v1.4.1) ---------- # 回收站保留天数(0=永不清除,默认 30;数据库 source_configs 配置优先于此环境变量) RECYCLE_BIN_RETENTION_DAYS=30