# ============================================================ # nowen-note 环境变量模板(可选) # ------------------------------------------------------------ # 绝大多数用户不需要这个文件 —— 容器首次启动时会自动生成并持久化 # 一个随机 JWT_SECRET 到 data 卷(/app/data/.jwt_secret),下次启动 # 自动复用。 # # 什么时候你需要手动维护 .env: # · 多实例部署要共用同一个 JWT_SECRET(如负载均衡后的水平扩容) # · 希望统一用企业的密钥管理平台签发 # · 想要自己控制密钥轮换节奏 # · 需要启用默认关闭的 Docker 在线升级代理 # # 使用方式: # 1. 复制本文件为同目录下的 .env (cp .env.example .env) # 2. 填入下方各项真实值 # 3. docker compose up -d # # .env 已在 .gitignore 中,绝不会被提交到仓库。 # ============================================================ # JWT 登录 / sudo token 的签名密钥,长度 >= 16 # 生成方式:openssl rand -base64 48 # JWT_SECRET= # 分享 token 的独立签名密钥(未设置时从 JWT_SECRET 派生) # SHARE_JWT_SECRET= # Ollama 服务地址(AI 能力)。不使用 AI 时留空。 # Docker 内访问宿主机:http://host.docker.internal:11434 # OLLAMA_URL= # Attachment object storage (optional) # Leave ATTACHMENT_STORAGE empty/local to keep the default local data/attachments directory. # Compatible with S3, Cloudflare R2, and MinIO path-style endpoints. # ATTACHMENT_STORAGE=s3 # S3_ENDPOINT=https://.r2.cloudflarestorage.com # S3_REGION=auto # S3_BUCKET=nowen-note # S3_ACCESS_KEY_ID= # S3_SECRET_ACCESS_KEY= # S3_PREFIX=attachments # # Migration check: # npm run migrate:attachments:object -- --dry-run # npm run migrate:attachments:object -- --apply # 日历 S3 镜像导出凭据加密密钥(可选) # 用于加密存储日历导出目标的 secretAccessKey。 # 生产环境必须配置 CALENDAR_EXPORT_ENCRYPTION_KEY 或 JWT_SECRET 其中之一。 # 不建议长期复用 JWT_SECRET,因为用途不同(认证签名 vs 配置加密)。 # 生成方式:openssl rand -base64 48 # CALENDAR_EXPORT_ENCRYPTION_KEY= # WebDAV 备份凭据加密密钥(可选但生产环境推荐独立配置) # 用于 AES-256-GCM 加密保存在数据库中的 WebDAV 密码或应用密码。 # 未配置时依次回退 JWT_SECRET 和持久化目录中的 .jwt_secret。 # 多实例部署时所有实例必须使用相同密钥,否则无法解密已保存的凭据。 # 生成方式:openssl rand -base64 48 # BACKUP_WEBDAV_ENCRYPTION_KEY= # ============================================================ # 安全加固配置(SEC-CORS-01 / SEC-AUTH-01 / SEC-UPLOAD-01 等) # ============================================================ # JWT 有效期(默认 14d,支持 7d/14d/30d/24h 等格式) # JWT_EXPIRES_IN=14d # CORS 白名单(逗号分隔) # 生产环境默认已允许原生客户端来源: # https://localhost,http://localhost,capacitor://localhost,ionic://localhost,null # Android / Electron / macOS 客户端连接公网服务时通常无需额外配置。 # 如果还有独立网页前端或自定义域名,请加入对应 Origin: # CORS_ORIGINS=https://note.example.com,https://app.note.example.com,http://localhost:5173 # 单个附件最大大小 MB(默认 100) # MAX_ATTACHMENT_SIZE_MB=100 # 附件签名 URL 密钥(可选,默认从 JWT_SECRET 派生) # ATTACHMENT_SIGNING_SECRET= # 是否允许无签名的旧版公开附件 URL(默认 true,公网建议 false) # ATTACHMENT_LEGACY_PUBLIC_URL=true # 空 scopes API Token 是否等于 full access(默认 false,仅旧数据迁移兼容) # LEGACY_EMPTY_SCOPE_FULL_ACCESS=false # ============================================================ # Docker 在线升级(默认关闭) # ============================================================ # 仅官方 docker-compose.yml 部署支持。生成至少 32 字符的独立随机密钥: # openssl rand -hex 32 # 设置后通过以下命令显式启动更新代理: # docker compose --profile updater up -d # 主应用不会挂载 Docker Socket;只有内部网络中的 updater 容器拥有该权限。 # NOWEN_UPDATER_TOKEN= # 多套 Compose 实例共用同一 Docker Engine 时必须保证实例标识唯一。 # NOWEN_INSTANCE_ID=nowen-note