From aa237868c1c2719245fb213ada70e8096d6fdeea Mon Sep 17 00:00:00 2001 From: JianFeeeee Date: Fri, 11 Sep 2026 11:09:33 +0800 Subject: [PATCH] feat(deploy): let data volume override SearXNG settings MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 补充配置优先级与数据卷备份清单。 --- README.md | 16 ++++++++++++---- supervisord.conf | 9 ++++++++- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 0cbcdeb..7e1ae1b 100644 --- a/README.md +++ b/README.md @@ -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 " \ ``` 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` 绕开该重定向。 diff --git a/supervisord.conf b/supervisord.conf index 79b5e34..6e628b9 100644 --- a/supervisord.conf +++ b/supervisord.conf @@ -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