secubox-openwrt/package/secubox/secubox-app-streamlit-launcher/README.zh.md
CyberMind-FR ccfb58124c docs: Add trilingual documentation (French and Chinese translations)
Add complete French (fr) and Chinese (zh) translations for all documentation:

- Root files: README, CHANGELOG, SECURITY, BETA-RELEASE
- docs/: All 16 core documentation files
- DOCS/: All 19 deep-dive documents including embedded/ and archive/
- package/secubox/: All 123+ package READMEs
- Misc: secubox-tools/, scripts/, EXAMPLES/, config-backups/, streamlit-apps/

Total: 346 translation files created

Each file includes language switcher links for easy navigation between
English, French, and Chinese versions.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-03-20 10:00:18 +01:00

194 lines
4.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

[English](README.md) | [Francais](README.fr.md) | 中文
# SecuBox Streamlit Launcher
带空闲关闭和内存管理的按需 Streamlit 应用启动器。
## 概述
Streamlit Launcher 通过以下方式优化受限设备的资源使用:
- **按需启动应用** - 首次访问时启动(延迟加载)
- **停止空闲应用** - 在可配置的超时后停止默认30 分钟)
- **管理内存压力** - 内存不足时停止低优先级应用
- **优先级系统** - 让关键应用运行更长时间
## 架构
```
+-------------+ +--------------+ +-----------------+
| HAProxy |---->| mitmproxy |---->| Streamlit |
| (vhost) | | (WAF+track) | | Launcher Daemon |
+-------------+ +--------------+ +--------+--------+
| |
跟踪访问 启动/停止
| |
+------v------+ +-----v-----+
| /tmp/access | | slforge |
| (touch) | | start/ |
+-------------+ | stop |
+-----------+
```
## 安装
```bash
opkg install secubox-app-streamlit-launcher
```
## CLI 参考
```bash
# 显示状态
streamlit-launcherctl status
# 列出所有应用及详情
streamlit-launcherctl list
# 手动启动/停止应用
streamlit-launcherctl start <app>
streamlit-launcherctl stop <app>
# 设置应用优先级(越高 = 运行时间越长)
streamlit-launcherctl priority <app> <value>
# 设置始终运行(永不自动停止)
streamlit-launcherctl priority <app> 100 1
# 手动运行空闲检查
streamlit-launcherctl check
# 运行内存压力检查
streamlit-launcherctl check-memory
```
## 配置
编辑 `/etc/config/streamlit-launcher`
```
config global 'global'
# 启用 launcher 守护进程
option enabled '1'
# 启用按需启动(相对于始终运行)
option on_demand '1'
# 停止应用前的不活动分钟数
option idle_timeout '30'
# 空闲检查间隔秒数
option check_interval '60'
# 强制停止应用前的最小可用内存MB
option memory_threshold '100'
# 等待应用启动的最大秒数
option startup_timeout '30'
# 应用优先级(越高 = 运行时间越长)
config priority 'control'
option app 'control'
option value '100'
option always_on '1'
config priority 'ytdownload'
option app 'ytdownload'
option value '30'
```
## 优先级系统
| 优先级 | 行为 |
|--------|------|
| 100 + always_on | 永不自动停止 |
| 80-99 | 内存压力时最后停止 |
| 50默认 | 正常优先级 |
| 1-49 | 内存压力时最先停止 |
## 与 slforge 集成
launcher 与 `slforge`Streamlit Forge协同工作
- `slforge` 管理应用配置、创建和基本启动/停止
- `streamlit-launcherctl` 添加按需和空闲管理
启用按需模式时:
1. 用户访问 `https://app.example.com`
2. HAProxy 路由到 mitmproxy
3. 如果应用已停止mitmproxy 可通过 hook 触发启动
4. Launcher 启动应用并等待就绪
5. 请求被处理
6. 记录访问
7. 空闲超时后,应用被停止
## 访问跟踪
launcher 通过 `/tmp/streamlit-access/` 中的 touch 文件跟踪应用访问:
```bash
# 跟踪访问(重置空闲计时器)
streamlit-launcherctl track <app>
# 或直接
touch /tmp/streamlit-access/<app>
```
可通过以下方式触发:
- mitmproxy 请求 hook
- HAProxy 健康检查脚本
- 解析访问日志的 cron 任务
## 内存管理
当可用内存低于阈值时:
1. 应用按优先级排序(最低优先)
2. 低优先级应用逐个停止
3. 当内存恢复到阈值以上时停止
4. 始终运行的应用永不停止
## 服务控制
```bash
# 启用/启动守护进程
/etc/init.d/streamlit-launcher enable
/etc/init.d/streamlit-launcher start
# 检查守护进程状态
/etc/init.d/streamlit-launcher status
# 查看日志
logread -e streamlit-launcher
```
## 文件
| 路径 | 描述 |
|------|------|
| `/usr/sbin/streamlit-launcherctl` | CLI 工具 |
| `/etc/config/streamlit-launcher` | UCI 配置 |
| `/etc/init.d/streamlit-launcher` | Procd init 脚本 |
| `/tmp/streamlit-access/` | 访问跟踪文件 |
| `/usr/share/streamlit-launcher/loading.html` | 加载页面模板 |
## 示例:优化低内存环境
```bash
# 设置激进的超时10 分钟)
uci set streamlit-launcher.global.idle_timeout='10'
# 降低内存阈值150MB 可用时触发清理)
uci set streamlit-launcher.global.memory_threshold='150'
# 让 dashboard 始终运行
streamlit-launcherctl priority dashboard 100 1
# 降低重型应用的优先级
streamlit-launcherctl priority jupyter 20
streamlit-launcherctl priority analytics 30
uci commit streamlit-launcher
/etc/init.d/streamlit-launcher restart
```