fix(env): 本机启动读取根目录 .env,监听地址兼容 BIND_ADDR

- study_tool/__init__.py 用 python-dotenv 加载根目录 .env,位置早于
  store / config 读环境变量;已有环境变量优先,Docker 注入的不受影响
- app.py 监听地址改为 HOST -> BIND_ADDR -> 127.0.0.1 依次回退
- 新增依赖 python-dotenv>=1.0(pyproject.toml / requirements.txt / uv.lock)
- README 环境变量表补充 .env 说明与 BIND_ADDR / TZ 两行
- CHANGELOG / docs/OPTIMIZATION.md 记录本次修复,版本号 0.0.6 -> 0.0.7
This commit is contained in:
study-tool
2026-10-31 16:12:52 +08:00
parent cfa960221e
commit 8e8d6b83f1
14 changed files with 100 additions and 50 deletions
+7 -2
View File
@@ -37,6 +37,9 @@ set PORT=8849 && python app.py
set HOST=0.0.0.0 && python app.py
```
也可以不 set:把 `.env.example` 复制成根目录 `.env` 再改(`cp .env.example .env`),本机启动同样读它。
同名系统环境变量优先于 `.env`;注意 `.env` 里 `AUTH_TOKEN` 非空时,本机访问也要 `http://127.0.0.1:8848/?token=<值>`。
### 方式二:Docker(推荐用于远程管理)
```bash
@@ -59,17 +62,19 @@ docker compose logs -f # 看启动日志
| 进容器 | `docker compose exec study-tool bash` |
| 换端口 | `.env` 里改 `PORT`,再 `docker compose up -d` |
环境变量:
环境变量(写在根目录 `.env` 里,本机启动和 Docker 都读;同名的系统环境变量优先):
| 变量 | 默认 | 说明 |
| --- | --- | --- |
| `HOST` | `127.0.0.1` | 监听地址;Docker 里是 `0.0.0.0` |
| `BIND_ADDR` | 同 `HOST` | `HOST` 的别名(docker compose 用它绑宿主机端口),本机启动也认 |
| `PORT` | `8848` | 端口 |
| `DB_PATH` | `<项目>/data/study.db` | SQLite 库文件 |
| `AUTH_TOKEN` | 空 | 非空 = 页面/接口需要 `?token=` 或 cookie;`/api/health` 永远放行 |
| `RUN_LOG_KEEP` | `2000` | 每个账号保留的日志行数 |
| `SNAPSHOT_KEEP` | `200` | 课程页快照保留条数 |
| `NODE_BIN` | 自动找 | node.exe 路径(算登录表单的 DES) |
| `TZ` | `Asia/Shanghai` | 只对 Docker(Linux 容器)有效,Windows 本机忽略 |
镜像默认装 Chromium(直链视频要真播到结尾)。不需要就用
`docker compose build --build-arg WITH_PLAYWRIGHT=0`,镜像能小一大截。
@@ -186,7 +191,7 @@ script/reference/ 不参与运行的参考脚本:油猴 dgjy-toolkit.
start.bat 一键启动(Windows)
Dockerfile Docker 镜像(python:3.12-slim + nodejs + chromium)
docker-compose.yml Docker 编排:端口、数据卷、AUTH_TOKEN、健康检查
.env.example 远程管理用的环境变量样例(复制成 .env)
.env.example 环境变量样例(复制成 .env;本机启动与 Docker 都读)
requirements.txt 依赖
data/study.db SQLite 库(账号/设置/日志/快照)
docs/architecture.md 分层说明 + 平台插件怎么加