这份指南将带你从零开始,利用官方标准配置文件,在群晖 (NAS)、FRP (内网穿透) 和 宝塔面板 (VPS) 上搭建起完整的 Omnivore 私有化阅读平台。
准备工作:获取官方文件
- 从官方 GitHub 仓库的
self-hosting/docker-compose目录获取核心文件。 - 核心文件:
docker-compose.yml。 - 配置文件:复制
env.example为.env。
第一步:配置环境变量 (.env)
这是实现公网访问最关键的一步。官方明确指出,使用 Nginx 时必须修改这些变量。
打开 .env 文件,将以下 localhost 链接全部替换为你的 HTTPS 公网域名:
BASE_URL:https://omnivore.sunyang.ccCLIENT_URL:https://omnivore.sunyang.ccHIGHLIGHTS_BASE_URL:https://omnivore.sunyang.ccSERVER_BASE_URL:https://omnivore.sunyang.ccIMAGE_PROXY_URL:https://omnivore.sunyang.cc/images(注意此处需匹配下文 Nginx 路径)
注意:请同时设置
IMAGE_PROXY_SECRET和JWT_SECRET为随机长字符串,以保障系统安全。
第二步:群晖容器启动
- 在群晖 Container Manager 中,选择“项目” -> “新增”,上传修改好的
docker-compose.yml和.env。 - 等待初始化:首次启动时,
omnivore-migrate容器会自动创建数据库表。 - 验证本地端口:确保群晖本地的
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 反向代理
这是整个系统的“交警”,负责根据请求路径分发流量。
- 在宝塔面板创建站点
omnivore.sunyang.cc并开启 SSL (HTTPS)。 - 进入站点“设置” -> “配置文件”,粘贴以下配置(覆盖或插入
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 支持
}
第五步:登录与扩展配置
- 访问域名:打开
https://omnivore.sunyang.cc。 - 初始登录:使用账号
demo@omnivore.work,密码demo_password。 - 设置浏览器插件:
- 在插件选项 (Options) 中,
Server URL填入https://omnivore.sunyang.cc。 - 在网页版 Settings -> API Keys 生成一个 Key 并填入插件。
- 在插件选项 (Options) 中,
💡 维护锦囊
- 修改变量后必须重启:如果你修改了
.env文件,必须在群晖中重新构建项目或重启相关容器,配置才会生效。 - 图片不显示?:检查宝塔 Nginx 的
/images重写规则是否正确,以及.env中的IMAGE_PROXY_URL是否是以https开头。 - 插件无法保存?:确保
/api/save路径准确地指向了前端 30001 端口,而非后端 API 端口。
恭喜!你现在拥有了一个完全自主掌控的阅读实验室。如果你对如何接入 OpenAI 自动总结视频 (YouTube Transcripts) 感兴趣,可以在 .env 中填入你的 OPENAI_API_KEY 试试看。