自托管
配置参考
API 读取的全部 TM_* 环境变量,含默认值与作用说明。
服务端的所有配置都通过带 TM_ 前缀的环境变量完成。可以在 shell、Compose 的
environment:,或本地开发用的 api/.env 中设置。修改后需重启 API 生效。
| 变量 | 默认值 | 用途 |
|---|
TM_HTTP_PORT | 8080 | API 监听端口。仅当 TM_HTTP_PORT 未设置时,才会采用 PORT(Railway/Heroku 风格) |
TM_DATABASE_URL | (未设置 → SQLite) | 统一数据库连接串 —— sqlite:///data/tradermemos.db 或 postgres://user:pass@host:5432/db?sslmode=require。设置为空字符串会导致启动报错 |
TM_DB_PATH | data/tradermemos.db | 旧版 SQLite 路径,仅在 TM_DATABASE_URL 未设置时生效 |
TM_ATTACH_DIR | (自动推导) | 附件 / 媒体文件的磁盘根目录。SQLite 默认为 <数据库目录>/attachments,Postgres 默认为 data/attachments —— Postgres 建议显式设置 |
TM_DEFAULT_CURRENCY | USD | 账户默认货币 |
TM_LOG_LEVEL | info | 日志级别(debug、info、warn、error) |
| 变量 | 默认值 | 用途 |
|---|
TM_JWT_SECRET | dev-insecure-change-me | JWT 签名密钥,至少 32 个字符。检测到已知弱密钥时服务端会拒绝启动,除非设置 TM_ALLOW_INSECURE_JWT=true。生成方式:openssl rand -hex 32 |
TM_ALLOW_INSECURE_JWT | false(随附的 Compose 为方便首次运行设为 true) | 允许使用弱 / 过短的 JWT 密钥。公网主机上切勿开启 |
TM_ALLOW_REGISTRATION | false | 初始化完成后开放 POST /auth/register。默认关闭 —— 除非主动开启,否则只存在 owner 账户 |
TM_CORS_ORIGINS | (空 —— 禁用 CORS) | CDN + API 分离部署时的来源白名单,逗号分隔。支持 https://*.vercel.app 之类的通配符主机。同源部署留空即可 |
| 变量 | 默认值 | 用途 |
|---|
TM_ATTACH_MAX_BYTES | 10485760(10 MiB) | 交易截图与笔记媒体的单文件上限 |
TM_IMPORT_MAX_BYTES | 10485760(10 MiB) | CSV / JSON 导入文件的上限 |
TM_OCR_MAX_BYTES | 10485760(10 MiB) | 截图扫描图片的上限(≤ 0 时回退到附件上限) |
随附的 nginx 允许 client_max_body_size 20m。若将任一上限提高到 20 MiB 以上,nginx
的该值(以及上游反向代理的限制)也要一并调高。
这些变量仅作为默认值:一旦在设置 → AI 中保存过设置,数据库中的值优先。密钥只保存在
服务端,不会下发到浏览器。详见 AI 功能。
| 变量 | 默认值 | 用途 |
|---|
TM_OCR_ENABLED | false | 开启截图成交提取 |
TM_OCR_VISION_BASE_URL | https://api.openai.com/v1 | 视觉模型的 OpenAI 兼容端点 |
TM_OCR_VISION_API_KEY | (空) | 视觉 API 密钥 |
TM_OCR_VISION_MODEL | gpt-4o-mini | 视觉模型 |
TM_OCR_VISION_TIMEOUT_SEC | 90 | 视觉请求超时(秒) |
TM_COACH_ENABLED | false | 开启 AI 交易教练 |
TM_COACH_BASE_URL | https://api.openai.com/v1 | 教练的 OpenAI 兼容端点 |
TM_COACH_API_KEY | (空) | 教练 API 密钥 |
TM_COACH_MODEL | gpt-4o-mini | 教练模型 |
| 变量 | 默认值 | 用途 |
|---|
TM_MARKET_DATA_ENABLED | true | 启用行情数据服务 |
TM_MARKET_DATA_PROVIDER | yahoo | 数据源名称 |
TM_MARKET_DATA_API_KEY | (空) | 数据源 API 密钥(如需要) |
TM_ECON_CALENDAR_ENABLED | true | 启用财经事件日历数据源 |
TM_ECON_CALENDAR_FEED_URL | (内置) | 覆盖事件数据源 URL |
TM_ECON_CALENDAR_REFRESH_MIN | 60 | 数据源刷新间隔(分钟) |
| 变量 | 默认值 | 用途 |
|---|
TM_SHARE_LINKS_ENABLED | false | 开启公开分享页。默认关闭 —— 分享链接会让日志的一部分无需登录即可访问 |
TM_PUBLIC_WEB_URL | (空) | 生成分享链接时使用的公开 Web 应用地址。若 API 与 Web 同源部署(自带 nginx),留空即可 |
TM_JOBS_ENABLED | true | 后台任务总开关。多副本部署时只在一个实例上开启 |
TM_JOB_EXCURSION_INTERVAL_MIN | 360 | MAE/MFE 回填间隔(分钟,0 为禁用) |
TM_JOB_EXCURSION_LIMIT | 10 | 每次回填处理的交易数(0 为禁用) |
TM_JOB_FLEX_SYNC_INTERVAL_MIN | 360 | IBKR Flex 自动同步间隔(分钟,0 为禁用) |
TM_JOB_ALERTS_INTERVAL_MIN | 60 | 警报规则评估间隔(分钟,0 为禁用) |
TM_ALERTS_ALLOW_PRIVATE_WEBHOOKS | false | 允许警报 Webhook 指向内网 / 回环地址(SSRF 防护 —— 仅当接收端在你的局域网内时开启) |
SPA 是静态的 —— 以下变量在构建时打包进产物,服务端不会读取:
| 变量 | 用途 |
|---|
VITE_API | 固定的 API 基址(如 https://api.example.com/api/v1),编译进构建产物。留空则使用相对路径 /api/v1,或由用户在登录时填写 Server 字段 |
由 docker compose 从根目录 .env 读取,不会传入容器:
| 变量 | 默认值 | 用途 |
|---|
DOCKERHUB_USERNAME | sinhong2011 | tradermemos-api / tradermemos-web 镜像所在的 Docker Hub 命名空间 |
TM_IMAGE_TAG | latest | 镜像标签 —— 生产环境建议锁定具体版本,如 0.1.6 |