跳到主要内容

参考

环境变量​

配置分层(约定)​

场景模板文件读者
deploy(自托管)主仓库 .env.example自托管用户
dev(本地开发)前端 .env.example / 后端 .env.example开发者
  • 环境变量唯一事实源为各项目 .env。
  • 后端实际读取逻辑以 Beancount-Trans-Backend/project/settings/settings.py 为准;下表用于按场景检索变量。

字段说明:

  • 必填级别:必填 / 条件必填 / 可选
  • 模板:deploy(仅主仓自托管模板出现)/ dev(仅后端开发模板出现)/ both(两套模板均出现,或文档约定两处需同步关注)

核心与网络​

变量名必填级别默认值(示例)说明模板
DJANGO_SETTINGS_MODULE可选project.settings.settingsDjango 设置模块both
DJANGO_SECRET_KEY必填示例占位Django 密钥,生产必须替换both
DJANGO_DEBUG可选True调试模式both
DJANGO_ALLOWED_HOSTS条件必填注释示例DEBUG=False 时配置允许域名both
CSRF_TRUSTED_ORIGINS条件必填注释示例DEBUG=False 时配置 CSRF 来源both
CORS_ALLOWED_ORIGINS条件必填注释示例或本地示例跨域来源列表(逗号分隔)both

PostgreSQL​

变量名必填级别默认值(示例)说明模板
TRANS_POSTGRESQL_DATABASE可选beancount-trans数据库名both
TRANS_POSTGRESQL_USER可选root数据库用户名both
TRANS_POSTGRESQL_PASSWORD必填root数据库密码both
TRANS_POSTGRESQL_HOST可选beancount-trans-postgres(deploy)/127.0.0.1(dev)数据库主机both
TRANS_POSTGRESQL_PORT可选5432数据库端口both

Redis​

变量名必填级别默认值(示例)说明模板
TRANS_REDIS_HOST可选beancount-trans-redis(deploy)/127.0.0.1(dev)Redis 主机both
TRANS_REDIS_PORT可选6379Redis 端口both
TRANS_REDIS_PASSWORD必填rootRedis 密码both

存储(MinIO / OSS / S3)​

变量名必填级别默认值(示例)说明模板
STORAGE_TYPE可选minio存储类型:minio / oss / s3both
MINIO_ENDPOINT条件必填beancount-trans-minio:9000(deploy)/127.0.0.1:9000(dev)STORAGE_TYPE=minio 时使用both
MINIO_ACCESS_KEY条件必填minioadminSTORAGE_TYPE=minio 时使用both
MINIO_SECRET_KEY条件必填minioadminSTORAGE_TYPE=minio 时使用both
MINIO_BUCKET_NAME条件必填beancount-transSTORAGE_TYPE=minio 时使用both
MINIO_USE_HTTPS可选FalseMinIO 是否 HTTPSboth
OSS_ENDPOINT条件必填oss-cn-hangzhou.aliyuncs.comSTORAGE_TYPE=oss 时使用dev
OSS_ACCESS_KEY_ID条件必填空STORAGE_TYPE=oss 时使用dev
OSS_ACCESS_KEY_SECRET条件必填空STORAGE_TYPE=oss 时使用dev
OSS_BUCKET_NAME条件必填beancount-transSTORAGE_TYPE=oss 时使用dev
OSS_REGION可选cn-hangzhouSTORAGE_TYPE=oss 时使用dev
S3_ENDPOINT_URL条件必填https://s3.amazonaws.comSTORAGE_TYPE=s3 时使用dev
S3_ACCESS_KEY_ID条件必填空STORAGE_TYPE=s3 时使用dev
S3_SECRET_ACCESS_KEY条件必填空STORAGE_TYPE=s3 时使用dev
S3_BUCKET_NAME条件必填beancount-transSTORAGE_TYPE=s3 时使用dev
S3_REGION可选us-east-1STORAGE_TYPE=s3 时使用dev
S3_USE_SSL可选TrueSTORAGE_TYPE=s3 时使用dev
S3_VERIFY_SSL可选TrueSTORAGE_TYPE=s3 时使用dev

认证、OAuth、短信、JWT​

变量名必填级别默认值(示例)说明模板
PHONE_BINDING_REQUIRED可选False(deploy 建议)是否强制手机号绑定deploy
SMS_ENABLED可选False(deploy 建议)是否启用短信流程deploy
JWT_ACCESS_TOKEN_HOURS可选720(deploy)/72(dev 示例)Access Token 有效小时both
JWT_REFRESH_TOKEN_DAYS可选30Refresh Token 有效期(天),也是滑动续期窗口both
GITHUB_CLIENT_ID可选示例占位GitHub OAuth Client IDdev
GITHUB_CLIENT_SECRET可选示例占位GitHub OAuth Client Secretdev
GOOGLE_CLIENT_ID可选示例占位Google OAuth Client IDdev
GOOGLE_CLIENT_SECRET可选示例占位Google OAuth Client Secretdev
ALIYUN_SMS_ACCESS_KEY_ID可选示例占位阿里云短信 AccessKey IDdev
ALIYUN_SMS_ACCESS_KEY_SECRET可选示例占位阿里云短信 AccessKey Secretdev
ALIYUN_SMS_SIGN_NAME可选示例占位短信签名dev
ALIYUN_SMS_TEMPLATE_CODE可选示例占位短信模板代码dev

邮箱(完整字段)​

变量名必填级别默认值(示例)说明模板
DEFAULT_FROM_EMAIL可选示例占位发件人地址both
EMAIL_BIND_SUBJECT可选邮箱绑定验证码邮件主题(绑定场景)dev
EMAIL_BACKEND可选SMTP 或控制台后端Django 邮件后端both
EMAIL_HOST可选smtp.qq.com(示例)SMTP 主机both
EMAIL_PORT可选465(示例)SMTP 端口both
EMAIL_HOST_USER可选示例占位SMTP 用户both
EMAIL_HOST_PASSWORD可选示例占位SMTP 密码/授权码both
EMAIL_USE_SSL可选true(示例)SSL 开关both
EMAIL_USE_TLS可选false(示例)TLS 开关dev
EMAIL_TIMEOUT可选15SMTP 超时秒数dev
EMAIL_CODE_EXPIRE_SECONDS可选300邮件验证码有效期dev
EMAIL_CODE_RESEND_INTERVAL可选60邮件验证码重发间隔dev

Fava / 路由 / 资产路径​

变量名必填级别默认值(示例)说明模板
FAVA_DEPLOY_MODE可选static(deploy)/见后端默认Fava 部署模式both
FAVA_STATIC_USER_MAP条件必填admin=http://127.0.0.1:5001静态模式用户到 URL 映射deploy
FAVA_IMAGE可选dhr2333/beancount-trans-assets:latestFava 镜像both
TRAEFIK_NETWORK可选shared-network动态模式网络名dev
BASE_URL可选localhost基础域名(回调/路由)dev
CERTRESOLVER可选alicloud-dns证书解析器dev
ASSETS_HOST_PATH可选示例路径宿主机 Assets 绝对路径dev

Git / Gitea / GitHub Token​

变量名必填级别默认值(示例)说明模板
GITEA_BASE_URL可选示例地址Gitea 服务地址both
GITEA_ADMIN_TOKEN可选空管理员 Tokenboth
GITEA_ORG_NAME可选beancount-transGitea 组织名both
GITEA_WEBHOOK_SECRET可选空平台托管仓库 Webhook 验签密钥both
GITEA_SSH_BASE可选ssh://git@gitea.dhr2333.cn:30022SSH 克隆基址(无尾斜杠)dev
GIT_WEBHOOK_STRICT可选FalseWebhook 严格校验开关dev
GIT_REPO_SIZE_LIMIT可选20971520仓库大小限制(字节)both
GITHUB_TOKEN可选空GitHub PAT(模板仓库访问)dev

AI 账本助手​

变量名必填级别默认值(示例)说明模板
ASSISTANT_DEEPSEEK_API_KEY可选无平台级 DeepSeek API Key;用户未在「输出配置 → BYOK」填写时作为回退(仅 Copilot,不用于云端解析)both
ASSISTANT_BASE_URL可选https://api.deepseek.com平台回退时的助手 API 基址both
ASSISTANT_MODEL可选deepseek-v4-flash助手默认模型;DeepThink 通过 thinking 参数开启,不再切换 reasoner 模型both
ASSISTANT_MAX_BQL_ROWS可选100单次 BQL 查询最大返回行数both
ASSISTANT_MAX_BQL_RUNS可选5单次 BQL 查询最大执行次数both
ASSISTANT_MAX_TOOL_ROUNDS可选8单次对话 LLM 工具调用轮次上限both

用户侧在 输出配置 → BYOK 填写接口地址、模型与密钥。未填写时 Copilot 可回退平台 Key 聊天,云端解析不可用;填写后 Copilot 与账单分类共用这一把密钥。

AI 客户端(MCP)​

变量名必填级别默认值(示例)说明模板
MCP_RESOURCE_SERVER_URL条件必填空MCP 端点对外地址(如 http://<主机>:38001/mcp);留空则不校验访问令牌,生产必须配置deploy
MCP_ISSUER_URL可选空令牌签发方地址;留空时复用 MCP_RESOURCE_SERVER_URLdeploy
MCP_ALLOWED_HOSTS条件必填127.0.0.1:*,localhost:*,[::1]:*端点 Host 白名单;不含客户端实际访问的域名与端口时返回 400 Invalid Host headerdeploy
MCP_ALLOWED_ORIGINS条件必填http://127.0.0.1:*,http://localhost:*,http://[::1]:*端点 Origin 白名单deploy
MCP_OAUTH_REDIRECT_URI_SCHEMES可选http,https允许的 OAuth 回调 URL scheme;使用自定义 scheme 的客户端需追加deploy
MCP_REQUIRED_SCOPES可选ledger:read访问令牌必须具备的 scope(逗号分隔)deploy
MCP_MAX_FILE_BYTES可选1048576read_ledger_file 单文件读取上限(字节)deploy
MCP_AUTH_ENABLED可选true是否要求访问令牌;关闭后仅 MCP_DEV_USERNAME 可用—
MCP_DEV_USERNAME可选空无令牌请求使用的本地开发用户—

标记为 — 的变量未出现在模板中,仅在 settings.py 提供默认值;其余各项的注释见根目录 .env.example 的「MCP 服务(AI 客户端接入)」一节。


HTTP API​

路径说明
/api/docs/ReDoc 交互文档(经前端 Nginx 时与 Web 同源,例如 http://<主机>:38001/api/docs/)
/api/schema/OpenAPI 3 Schema(JSON)
/api/_allauth/allauth headless 接口根路径
/mcpMCP Streamable HTTP 端点(AI 客户端接入,单 JSON 响应、无会话)
/.well-known/oauth-protected-resource/mcpRFC 9728 受保护资源元数据
/.well-known/oauth-authorization-serverRFC 8414 授权服务器元数据
/registerRFC 7591 动态客户端注册(DCR)
/authorize、/token、/revoke_tokenOAuth 2.1 授权码 + PKCE、令牌与撤销

认证请求头:Authorization: Bearer <access_token>。Access Token 有效期见 .env 中 JWT_ACCESS_TOKEN_HOURS(自托管以主仓模板为准)。Refresh Token 有效期与滑动续期窗口见 JWT_REFRESH_TOKEN_DAYS;刷新(POST /api/auth/token/refresh/)时会同时签发新的 refresh(滑动续期),客户端应保存响应中的 refresh 以便长期免登录。

MCP 与 OAuth 相关路径挂在域名根(不带 /api 前缀)。经前端 Nginx 转发时,/mcp 指向 MCP 服务、其余 OAuth 路径指向后端,对外只需暴露 38001 端口;服务部署与配置见 自托管。

线上示例:Beancount-Trans API(ReDoc)