在群晖上部署omnivore

这份指南将带你从零开始,利用官方标准配置文件,在群晖 (NAS)FRP (内网穿透)宝塔面板 (VPS) 上搭建起完整的 Omnivore 私有化阅读平台。


准备工作:获取官方文件

  1. 从官方 GitHub 仓库的 self-hosting/docker-compose 目录获取核心文件。
  2. 核心文件docker-compose.yml
  3. 配置文件:复制 env.example.env

第一步:配置环境变量 (.env)

这是实现公网访问最关键的一步。官方明确指出,使用 Nginx 时必须修改这些变量。

打开 .env 文件,将以下 localhost 链接全部替换为你的 HTTPS 公网域名

  • BASE_URL: https://omnivore.sunyang.cc
  • CLIENT_URL: https://omnivore.sunyang.cc
  • HIGHLIGHTS_BASE_URL: https://omnivore.sunyang.cc
  • SERVER_BASE_URL: https://omnivore.sunyang.cc
  • IMAGE_PROXY_URL: https://omnivore.sunyang.cc/images(注意此处需匹配下文 Nginx 路径)

注意:请同时设置 IMAGE_PROXY_SECRETJWT_SECRET 为随机长字符串,以保障系统安全。


第二步:群晖容器启动

  1. 在群晖 Container Manager 中,选择“项目” -> “新增”,上传修改好的 docker-compose.yml.env
  2. 等待初始化:首次启动时,omnivore-migrate 容器会自动创建数据库表。
  3. 验证本地端口:确保群晖本地的 3000 (Web), 4000 (API), 7070 (Image), 1010 (MinIO) 端口已正常开启。

第三步:FRP 内网穿透配置

FRP 负责将公网流量通过隧道运送回 NAS。

修改你的 frpc.ini (确保保存为 UTF-8 无 BOM 格式)

[omnivore-web]
localPort = 3000
remotePort = 30001

[omnivore-api]
localPort = 4000
remotePort = 40001

[omnivore-image]
localPort = 7070
remotePort = 57070

[omnivore-bucket]
localPort = 1010
remotePort = 10101

第四步:宝塔面板 Nginx 反向代理

这是整个系统的“交警”,负责根据请求路径分发流量。

  1. 在宝塔面板创建站点 omnivore.sunyang.cc开启 SSL (HTTPS)
  2. 进入站点“设置” -> “配置文件”,粘贴以下配置(覆盖或插入 PROXY-START 选段):
# 1. 前端特定路径 (必须发给 Web 30001)
location ^~ /api/client/auth { proxy_pass http://127.0.0.1:30001; }
location ^~ /api/save { proxy_pass http://127.0.0.1:30001; }

# 2. 通用后端 API (发给 API 40001)
location ^~ /api {
    proxy_pass http://127.0.0.1:40001;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-Proto $scheme; # 必须传递协议
}

# 3. 图片代理 (需要重写路径并转发至 57070)
location ^~ /images {
    rewrite ^/images/(.*)$ /$1 break; # 官方要求的重写逻辑
    proxy_pass http://127.0.0.1:57070;
}

# 4. 存储 MinIO (需要重写路径并转发至 10101)
location ^~ /bucket {
    rewrite ^/bucket/(.*)$ /$1 break;
    proxy_pass http://127.0.0.1:10101;
}

# 5. 前端 Web 主程序
location / {
    proxy_pass http://127.0.0.1:30001;
    proxy_set_header Host $host;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade"; # 开启 WebSocket 支持
}

第五步:登录与扩展配置

  1. 访问域名:打开 https://omnivore.sunyang.cc
  2. 初始登录:使用账号 demo@omnivore.work,密码 demo_password
  3. 设置浏览器插件
    • 在插件选项 (Options) 中,Server URL 填入 https://omnivore.sunyang.cc
    • 在网页版 Settings -> API Keys 生成一个 Key 并填入插件。

💡 维护锦囊

  • 修改变量后必须重启:如果你修改了 .env 文件,必须在群晖中重新构建项目或重启相关容器,配置才会生效。
  • 图片不显示?:检查宝塔 Nginx 的 /images 重写规则是否正确,以及 .env 中的 IMAGE_PROXY_URL 是否是以 https 开头。
  • 插件无法保存?:确保 /api/save 路径准确地指向了前端 30001 端口,而非后端 API 端口。

恭喜!你现在拥有了一个完全自主掌控的阅读实验室。如果你对如何接入 OpenAI 自动总结视频 (YouTube Transcripts) 感兴趣,可以在 .env 中填入你的 OPENAI_API_KEY 试试看。

分享您的喜爱

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注