feat(deploy): let data volume override SearXNG settings

SearXNG 的配置原本只能靠镜像内置的 /etc/searxng/settings.yml,
于是代理(outgoing.proxies)这类部署相关配置每次重建容器都会丢,
改配置也必须重建镜像。

改为:容器启动时若存在 /app/data/searxng-settings.yml 就用它,
否则回退到镜像内置配置。用 sh -c 包一层是因为 supervisord 的
environment= 不支持条件判断。

注意必须带 [ -f ] 判断:实测 SEARXNG_SETTINGS_PATH 指向不存在的
文件时 SearXNG 会直接报错退出(PermissionError: ... not exists!)。

已验证:SEARXNG_SETTINGS_PATH 指向自造配置能正确覆盖端口与实例名。
README 补充配置优先级与数据卷备份清单。
This commit is contained in:
JianFeeeee
2026-09-11 11:09:33 +08:00
parent 73396cd5d4
commit aa237868c1
2 changed files with 20 additions and 5 deletions

View File

@ -39,6 +39,11 @@ Dashy / SearXNG(→Clash 代理出网) / 历史 API / 管理 UI
└─────────────────────────────────────────────────────┘
```
**SearXNG 配置优先级**:容器启动时如果发现数据卷里有
`data/searxng-settings.yml`,就用它;否则用镜像内置的
`/etc/searxng/settings.yml`。所以代理这类**部署相关**配置应放在数据卷:
改完只需重启容器,**不需要重建镜像,重建容器也不会丢**。
**技术栈**:Go(历史 API + 管理 API)· SearXNG(Python) · Dashy/Vue · Nginx · Supervisord · frp/webui4frpc
## 快速开始
@ -495,9 +500,10 @@ curl -H "Authorization: Bearer <NAVI_ADMIN_TOKEN>" \
```
data/
├── conf.yml # 导航配置
├── history.json # 浏览历史
└── item-icons/ # 自定义图标
├── conf.yml # 导航配置
├── history.json # 浏览历史
├── item-icons/ # 自定义图标 + 历史站点 favicon 缓存
└── searxng-settings.yml # (可选)覆盖内置 SearXNG 配置,如代理
```
```bash
@ -528,7 +534,9 @@ data/
**搜索无结果**:确认容器能访问搜索引擎。
- 国内服务器通常需要代理才能出网:SearXNG 不读 `http_proxy` 环境变量,
必须在 `searxng-settings.yml` 的 `outgoing.proxies` 里配置(见文件内注释)。
必须在 `outgoing.proxies` 里配置(见文件内注释)。
推荐把配置放到**数据卷**:`cp searxng-settings.yml data/searxng-settings.yml`
改完后编辑 `data/searxng-settings.yml` 并重启容器即可,无需重建镜像。
- **Bing 结果异常少**:`www.bing.com` 会 302 跳到 `cn.bing.com`,而 SearXNG
引擎请求不跟随重定向,只会解析跳转页得到 0 条且不报错。已在默认配置里把
bing 的 `base_url` 指向 `https://cn.bing.com` 绕开该重定向。

View File

@ -14,7 +14,14 @@ stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
[program:searxng]
command=/app/searxng-venv/bin/python -m searx.webapp
# 配置优先级:data 卷里的 /app/data/searxng-settings.yml 存在则用它,
# 否则用镜像内置的 /etc/searxng/settings.yml。
#
# 这样代理(outgoing.proxies)这类**部署相关**配置就落在数据卷里,
# 重建容器不会再丢;同时也免去“改配置必须重建镜像”。
# 注意:不能用 supervisord 的 environment= 做条件判断,它不支持逻辑,
# 所以这里用 sh -c 包一层(/bin/sh 是 dash,语法保持最小)。
command=/bin/sh -c 'if [ -f /app/data/searxng-settings.yml ]; then export SEARXNG_SETTINGS_PATH=/app/data/searxng-settings.yml; fi; exec /app/searxng-venv/bin/python -m searx.webapp'
# 不设 environment:继承 docker run -e SEARXNG_BASE_URL 等父进程环境变量
autostart=true
autorestart=true