# ════════════════════════════════════════════ # Outline Wiki + Dex OIDC 部署状态 # 服务器:BS-SG-001 (新加坡) # 时间:2026-06-04 D123 # ════════════════════════════════════════════ ## 容器状态 ``` outline → port 3090 (内部 3000) image: outlinewiki/outline:0.80.2 outline-dex → port 5556 image: dexidp/dex:latest outline-postgres → 内部网络 image: postgres:16-alpine outline-redis → 内部网络 image: redis:7-alpine ``` 状态:全部 healthy ✅ ## 配置路径 - Docker Compose: `/opt/outline/docker-compose.yml` - Dex 配置: `/opt/outline/dex-config.yml` - 数据目录: `/opt/outline/outline-data/`, `postgres-data/`, `redis-data/` ## 关键配置项 - Outline URL: `https://guanghubingshuo.com/outline` - Dex Issuer: `https://guanghubingshuo.com/dex` - OIDC Redirect: `https://guanghubingshuo.com/outline/auth/oidc.callback` - OIDC Provider: `光湖登录` - 管理员: `bingshuo` (静态密码,Dex mockCallback) ## Nginx 新增代理块 | 路径 | 后端 | 用途 | |------|------|------| | `/outline/` | port 3090 | Outline Wiki | | `/dex/` | port 5556 | Dex OIDC | | `/static/` | port 3090 | Outline JS/CSS 静态资源 | | `/fonts/` | port 3090 | Outline 字体 | | `/auth/oidc` | port 3090 | OIDC 登录跳转 | | `/brain-db/` | port 3914 | 人格体数据库 | ## Nginx 关键机制 1. **API 条件路由**:`map $http_referer` 按 Referer 来源选择 /api/ 后端 - 来源包含 "outline" → port 3090 - 其他 → port 3998(原服务不受影响) 2. **Referrer-Policy 重写**:/outline/ 覆盖 `no-referrer` → `same-origin` - Outline 默认禁止浏览器发送 Referer,导致 map 路由失效 ## ⚠️ 当前卡点 — 未解决 Outline 页面显示 "Failed to load configuration"。 ### 已完成排查 - ✅ 静态资源(/static/, /fonts/)正常加载 - ✅ /outline/ 页面正常返回 - ✅ /outline/api/auth.config 直接请求返回正确数据 - ✅ OIDC 跳转链路打通(/outline/auth/oidc → /dex/auth → redirect) - ✅ Nginx 语法通过并 reload ### 推测原因 1. **Referer 路由仍失效**:虽然修改了 referrer-policy 为 same-origin, 但 Service Worker (`/static/sw.js`) 可能拦截 fetch 请求且不透传 Referer 2. **SW 干扰**:Outline 使用的 Service Worker 可能自己的 fetch handler 中 使用了 `no-referrer` 策略,覆盖了页面级的 referrer-policy 3. **建议方向**: - 方案 A:禁用 SW(拦截 /static/sw.js 返回空)测试是否修复 - 方案 B:用子域名 `outline.guanghubingshuo.com` 完全避免子路径问题 - 方案 C:Nginx 层注入自定义 header(如 X-Outline-Proxy: 1)并在 map 中使用 ### 验证方法 ```bash # 检查 Nginx 日志确认 Referer 是否已发送 tail -f /var/log/nginx/access.log | grep "/api/" # 直接测试(带 Referer) curl -X POST https://guanghubingshuo.com/api/auth.config \ -H "Referer: https://guanghubingshuo.com/outline/" \ -H "Content-Type: application/json" -d '{}' # 预期:{"data":{"providers":[...]},"status":200,"ok":true} ``` ## 首页卡片 已添加第5张卡片「🧠 语言层数据库」→ `/outline/` 文件位置:`/var/www/html/index.html`