diff --git a/README.md b/README.md index a31332a..d5d732a 100644 --- a/README.md +++ b/README.md @@ -102,8 +102,8 @@ LogVar 弹幕 API 服务器 3. **配置应用**(可选): 本项目支持三种配置方式,优先级从高到低: - 1. **.env 文件**(最高优先级)- 复制 `.env.example` 为 `.env` 并修改 - 2. **config.yaml 文件**(中等优先级)- 复制 `config.yaml.example` 为 `config.yaml` 并修改 + 1. **.env 文件**(最高优先级)- 复制 `config/.env.example` 为 `config/.env` 并修改 + 2. **config.yaml 文件**(中等优先级)- 复制 `config/config.yaml.example` 为 `config/config.yaml` 并修改 3. **系统环境变量**(最低优先级) 如果某个系统无法编辑 `.env` 文件,可以使用 `config.yaml` 文件替代。 @@ -114,7 +114,7 @@ LogVar 弹幕 API 服务器 ``` 服务器将在 `http://{ip}:9321` 运行,默认token是`87654321`。 - **热更新支持**:修改 `.env` 或 `config.yaml` 文件后,应用会自动检测并重新加载配置(无需重启应用)。 + **热更新支持**:修改 `config/.env` 或 `config/config.yaml` 文件后,应用会自动检测并重新加载配置(无需重启应用)。 或者使用下面的命令 ```bash @@ -173,9 +173,9 @@ LogVar 弹幕 API 服务器 - 使用`-e TOKEN=87654321`设置`TOKEN`环境变量。 - 或使用 `--env-file .env` 加载 .env 文件中的所有环境变量:`docker run -d -p 9321:9321 --name danmu-api --env-file .env logvar/danmu-api:latest` - **热更新支持**:如需支持环境变量热更新(修改 `.env` 或 `config.yaml` 文件后无需重启容器),请使用 Volume 挂载: + **热更新支持**:如需支持环境变量热更新(修改 `config/.env` 或 `config/config.yaml` 文件后无需重启容器),请使用 Volume 挂载: ```bash - docker run -d -p 9321:9321 --name danmu-api -v $(pwd)/.env:/app/.env -v $(pwd)/config.yaml:/app/config.yaml --env-file .env logvar/danmu-api:latest + docker run -d -p 9321:9321 --name danmu-api -v $(pwd)/config:/app/config --env-file .env logvar/danmu-api:latest ``` 或使用 docker compose 部署(**推荐,支持环境变量热更新**): @@ -185,10 +185,9 @@ LogVar 弹幕 API 服务器 image: logvar/danmu-api:latest ports: - "9321:9321" - # 热更新支持:挂载 .env 和 config.yaml 文件,修改后容器会自动重新加载配置(无需重启容器) + # 热更新支持:挂载 config/.env 和 config/config.yaml 文件,修改后容器会自动重新加载配置(无需重启容器) volumes: - - ./.env:/app/.env - - ./config.yaml:/app/config.yaml + - ./config:/app/config # config目录下需要创建.env或config.yaml - ./.chche:/app/.cache # 配置.chche目录,会将缓存实时保存在本地文件 restart: unless-stopped ``` @@ -444,9 +443,10 @@ danmu_api/ │ └── workflows/ │ ├── docker-image.yml # Docker镜像构建和推送工作流 │ └── sync_fork.yml # Fork同步上游仓库工作流(vercel自动同步配置文件) -├── .env.example # .env 配置文件示例 +├── config/ +│ ├── .env.example # .env 配置文件示例 +│ └── config.yaml.example # YAML 配置文件示例(无法编辑 .env 时使用) ├── .gitignore -├── config.yaml.example # YAML 配置文件示例(无法编辑 .env 时使用) ├── Dockerfile ├── edgeone.json # edgeone pages 配置文件 ├── LICENSE @@ -532,8 +532,8 @@ danmu_api/ ## 注意事项 ### 热更新相关 -- **本地运行**:修改 `.env` 或 `config.yaml` 文件后,应用会自动检测并重新加载配置(无需重启应用)。 -- **Docker 部署**:需要使用 Volume 挂载 `.env` 和/或 `config.yaml` 文件才能支持热更新。推荐使用 docker compose 部署(见"Docker 一键启动"部分),配置 Volume 后修改配置文件容器会自动重新加载配置。 +- **本地运行**:修改 `config/.env` 或 `config/config.yaml` 文件后,应用会自动检测并重新加载配置(无需重启应用)。 +- **Docker 部署**:需要使用 Volume 挂载 `config/.env` 和/或 `config/config.yaml` 文件才能支持热更新。推荐使用 docker compose 部署(见"Docker 一键启动"部分),配置 Volume 后修改配置文件容器会自动重新加载配置。 - **Vercel/Netlify/Cloudflare**:需要在平台的环境变量设置中修改,然后重新部署才能生效。 - **配置优先级**:系统环境变量 > .env 文件 > config.yaml 文件 diff --git a/.env.example b/config/.env.example similarity index 100% rename from .env.example rename to config/.env.example diff --git a/config.yaml.example b/config/config.yaml.example similarity index 100% rename from config.yaml.example rename to config/config.yaml.example diff --git a/danmu_api/configs/globals.js b/danmu_api/configs/globals.js index 63ea9c1..0477a33 100644 --- a/danmu_api/configs/globals.js +++ b/danmu_api/configs/globals.js @@ -13,7 +13,7 @@ export const Globals = { accessedEnvVars: {}, // 静态常量 - VERSION: '1.9.1', + VERSION: '1.9.2', MAX_LOGS: 500, // 日志存储,最多保存 500 行 MAX_ANIMES: 100, diff --git a/danmu_api/configs/handlers/node-handler.js b/danmu_api/configs/handlers/node-handler.js index 5b5a28e..f4b6dc4 100644 --- a/danmu_api/configs/handlers/node-handler.js +++ b/danmu_api/configs/handlers/node-handler.js @@ -17,8 +17,8 @@ export class NodeHandler extends BaseHandler { const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); - const envPath = path.join(__dirname, '..', '..', '..', '.env'); - const yamlPath = path.join(__dirname, '..', '..', '..', 'config.yaml'); + const envPath = path.join(__dirname, '..', '..', '..', 'config', '.env'); + const yamlPath = path.join(__dirname, '..', '..', '..', 'config', 'config.yaml'); const envExists = fs.existsSync(envPath); const yamlExists = fs.existsSync(yamlPath); diff --git a/danmu_api/server.js b/danmu_api/server.js index c141695..be7d0ae 100644 --- a/danmu_api/server.js +++ b/danmu_api/server.js @@ -7,8 +7,8 @@ const dotenv = require('dotenv'); const yaml = require('js-yaml'); // 配置文件路径在项目根目录(server.js 的上一级目录) -const envPath = path.join(__dirname, '..', '.env'); -const yamlPath = path.join(__dirname, '..', 'config.yaml'); +const envPath = path.join(__dirname, '..', 'config', '.env'); +const yamlPath = path.join(__dirname, '..', 'config', 'config.yaml'); /** * 从 YAML 文件加载配置 diff --git a/danmu_api/sources/bilibili.js b/danmu_api/sources/bilibili.js index 00b38e5..3f92211 100644 --- a/danmu_api/sources/bilibili.js +++ b/danmu_api/sources/bilibili.js @@ -413,7 +413,7 @@ export default class BilibiliSource extends BaseSource { const links = eps.map((ep, index) => ({ name: `${index + 1}`, url: ep.link, - title: `【bilibili】 ${ep.title}` + title: `【bilibili1】 ${ep.title}` })); const numericAnimeId = convertToAsciiSum(anime.mediaId); diff --git a/danmu_api/sources/iqiyi.js b/danmu_api/sources/iqiyi.js index 310ff3b..525733f 100644 --- a/danmu_api/sources/iqiyi.js +++ b/danmu_api/sources/iqiyi.js @@ -650,7 +650,7 @@ export default class IqiyiSource extends BaseSource { links.push({ "name": ep.order.toString(), "url": fullUrl, - "title": `【iqiyi】 ${ep.title}` + "title": `【qiyi】 ${ep.title}` }); } diff --git a/danmu_api/ui/js/main.js b/danmu_api/ui/js/main.js index 1d12bc3..81ea8a3 100644 --- a/danmu_api/ui/js/main.js +++ b/danmu_api/ui/js/main.js @@ -299,6 +299,13 @@ function switchSection(section) { event.target.classList.add('active'); addLog(\`切换到\${section === 'env' ? '环境变量' : section === 'preview' ? '配置预览' : section === 'logs' ? '日志查看' : section === 'push' ? '推送弹幕' : '接口调试'}模块\`, 'info'); + + // 如果切换到日志查看页面,则立即刷新日志 + if (section === 'logs') { + if (typeof fetchRealLogs === 'function') { + fetchRealLogs(); + } + } } } else { // 对于非受保护页面(如配置预览),正常切换