目标:一个 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 全绿。
57 lines
1.9 KiB
YAML
57 lines
1.9 KiB
YAML
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 重新构建。
|