Files
HomeDash/docker-compose.yml
HomeDash Bot 994d93cc98 feat(gateway): 一体化统一入口——路由与 Dashy 导航同一份数据、内置登录、原自定义错误页
目标:一个 HomeDash 容器取代 navi + portal-nginx + portal-auth。

- Route 扩展为"反代 + 导航"一条记录:kind(proxy/portal/auth)、streaming、
  insecureTls、bypassPaths、injectBeian,以及 navEnabled/navSection/navName/
  navDescription/navUrl/navIcon/navAutoIcon
- 保存路由时**同时**写 gateway.yml 与 conf.yml 的导航项(gateway_nav.go):
  同 host 接管而不是重复、未勾选导航的会被清理、无关手工项与系统「历史访问」分组
  一律不动;两步任一步失败都回滚(避免后台显示与导航页各说各话)
- 未知域名与上游故障改用**内置自定义 404/500 页面**(portal/ 目录),
  不再是一行纯文本;HTTP→HTTPS 跳转段用 RedirectPort 复刻原 3081 设计
- 内置统一登录(auth.go):HMAC 签名 cookie、恒定时间比较、登录跳转白名单校验,
  portal-auth 容器可以退场
- 自动抓图标对托管导航项同样生效(history-server 识别 naviGatewayAutoIcon)
- 后台卡片补齐"加入导航/分组/名称/描述/图标/自动抓图标/服务类型"字段
- 内部入口端口 8080 → 18080:为一体化 host 模式让开宿主机 blog(:8080)
- 修掉上一轮编辑写坏的 deploy/zd.sh 一行(会让脚本直接失败)

测试:新增自定义错误页、portal 类型、导航字段校验、导航同步(接管/清理/保留)、
分组不存在必须报错等用例;admin-server 与 history-server 全绿。
2026-09-11 21:27:40 +08:00

57 lines
1.9 KiB
YAML
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.

version: "3.8"
services:
navi:
build: .
container_name: jianf-navi
image: jianf-navi:latest
restart: unless-stopped
ports:
# 宿主机端口:容器内 nginx 端口(Dashy/搜索/管理 统一入口)
- "${NAVI_PORT:-3003}:18080"
volumes:
# 持久化:导航配置 conf.yml + 历史 history.json + 图标 item-icons/
- ./data:/app/data
environment:
# ---- 鉴权令牌(强烈建议设置)----
# 浏览器扩展同步历史用
- NAVI_SYNC_TOKEN=${NAVI_SYNC_TOKEN:-}
# 管理后台/API 写操作用
- NAVI_ADMIN_TOKEN=${NAVI_ADMIN_TOKEN:-}
# ---- 对外访问地址(公网域名,影响搜索结果页链接)----
# 例如 https://nav.example.com (不含 /search 子路径)
- SEARXNG_BASE_URL=${SEARXNG_BASE_URL:-http://localhost:3003}
# ---- 历史条目图标抓取(可选)----
# 留空则自动复用 searxng-settings.yml 里 outgoing.proxies 的代理
- NAVI_FAVICON_PROXY=${NAVI_FAVICON_PROXY:-}
# ---- 一体化统一登录(gateway 模式)----
- PORTAL_USERNAME=${PORTAL_USERNAME:-admin}
- PORTAL_PASSWORD=${PORTAL_PASSWORD:-changeme}
- PORTAL_SESSION_SECRET=${PORTAL_SESSION_SECRET:-}
- PORTAL_COOKIE_DOMAIN=${PORTAL_COOKIE_DOMAIN:-.example.com}
healthcheck:
test: ["CMD", "curl", "-fs", "http://localhost:18080/healthz"]
interval: 30s
timeout: 5s
start_period: 30s
retries: 3
deploy:
resources:
limits:
memory: 512M
# ── 使用方式 ──
# 1. cp .env.example .env,编辑令牌与域名
# 2. docker compose up -d --build
# 3. 访问 http://<ip>:<NAVI_PORT>
#
# ── 国内网络注意 ──
# SearXNG 需访问 Google/Bing 等引擎。若服务器出不了外网,
# 编辑 searxng-settings.yml 的 outgoing.proxies 填你的代理:
# proxies:
# all://: http://<proxy-ip>:<port>
# 再 docker compose up -d --build 重新构建。