前言

我每天看热点时,最烦的不是信息太少,而是入口太多。微博看一遍、知乎看一遍、B 站再看一遍,技术社区和新闻站点还得继续切,最后真正浪费时间的往往不是阅读,而是不断打开 App、刷新、返回、再换下一个平台。DailyHot 吸引我的地方,不是“又多了一个热榜”,而是把原本分散的榜单重新收进一个页面,我可以先扫一遍标题,再决定哪些内容值得点进去。对我来说,真正想减少的是无意义的切换成本,而不是把所有热点都塞进脑子里;如果一个入口能让我先看全局、再主动选择来源,已经比被不同 App 轮流推着走舒服很多。

这次我先在飞牛 OS 的 Docker 管理界面部署 DailyHot,把本地访问端口设成 5956,实际打开聚合页面并测试热榜跳转和榜单顺序调整;随后又保留了两套命令行部署方式:rehiy/dailyhot 的 6688:6688 单容器方案,以及 liwangsheng/dailyhot-web 的 Compose 方案。最后安装 cpolar,把飞牛上的 5956 Web 页面提供到公网,先验证随机地址,再改成固定二级子域名 dailyhot。我更关心的是“聚合页是否好用、部署方式有没有混淆、外网入口是否稳定”这三件事,而不是简单把它包装成一个完全脱离外部服务的“信息主权”口号。

image-20260306152455259

1. DailyHot 真正省掉的是“来回切平台”

DailyHot 的核心思路很直接:

把多个平台的热门内容放到一个 Web 页面里。

项目功能说明里列出了微博、知乎、V2EX、Hacker News、豆瓣、少数派、微信公众号热门等来源。

对我来说,它最大的价值不是替我决定“什么值得看”,而是先把入口集中起来。

这样每天打开一次页面,就能先扫:

  • 哪个平台今天在讨论什么;
  • 哪些标题值得继续点进去;
  • 哪些榜单我根本不关心,可以往后放。

我更愿意把它理解成:

热榜入口整理器,而不是内容推荐算法。

2. 先在飞牛 OS 的 Docker 里部署

这次主线先走图形界面。

进入 NAS 的 Docker 管理页面,搜索:

DailyHot

然后下载对应镜像。

9a1e295e5c0eefbcdcdb1c83704c2399

确认下载。

c41d33debaca2c0d6837d4d8ea748cfd

创建容器时,可以按需要开启:

开机自启动

c2ab77cef67ecbeddfc3c4380fc0d623

接着设置宿主机访问端口。

这次使用:

5956

a765cc40e8dcb82b93d512be4eabb654

创建完成以后,可以看到 DailyHot 已经启动。

bbe966afe9de2e385b4d161e7112dd0a

浏览器通过:

飞牛IP:5956

访问。

当前示例地址是:

http://192.168.42.147:5956

到这里先确认第一层:

Docker 容器已经运行,DailyHot 页面能在局域网打开。

3. 还有一套单命令 Docker 部署方式

如果不是在飞牛 OS 的图形界面里部署,只要设备有 Docker,也可以直接执行:

docker run --restart unless-stopped --name dailyhot -p 6688:6688 rehiy/dailyhot

74738d07d4b9ad41cc08834b1439a992

这一套命令使用的是:

  • 镜像:rehiy/dailyhot
  • 容器名:dailyhot
  • 端口:6688:6688
  • 重启策略:unless-stopped

这里和前面的飞牛 5956 不是同一个端口方案。

所以后面做公网映射时,要先确认自己到底采用了哪种部署方式。

4. Docker Compose 方案又是另一套配置

除了单命令方式,还可以用 Docker Compose。

先创建目录:

mkdir /docker/dailyhot && cd /dockerdailyhot

这里有一个路径细节需要留意。

命令前半段创建的是:

/docker/dailyhot

后半段进入的却是:

/dockerdailyhot

两者并不一致。

命令按当前步骤保留,真正执行时需要先确认实际工作目录,避免后面的 Compose 文件落到错误位置。

接着创建:

docker-compose.yml

vim docker-compose.yml

配置内容:

version: '3'
services:
  dailyhot-web:
    image: liwangsheng/dailyhot-web
    container_name: dailyhot-web
    ports:
      - "5956:80"
    environment:
      - API=https://hot-api.bbit.fun
    restart: always

这套 Compose 和前面的单命令方案又不一样:

  • 镜像:liwangsheng/dailyhot-web
  • 容器名:dailyhot-web
  • 宿主机端口:5956
  • 容器端口:80
  • API:https://hot-api.bbit.fun
  • 重启策略:always

最后启动:

docker-compose up -d

这一段我会特别把边界说清楚。

功能介绍里把 DailyHot 描述成“所有数据在自己的服务器上运行、不依赖第三方服务”,但这份 Compose 示例又明确配置了:

API=https://hot-api.bbit.fun

所以至少按这套 Compose 配置运行时,Web 前端仍然依赖这个 API 地址。

这两种表述不能直接合并成“完全不依赖外部服务”。

5. 页面真正怎么用?

进入 DailyHot 首页以后,可以看到多个平台的热榜入口。

0a47548f48096ae72133a69c70f926cf

例如点进哔哩哔哩热榜。

页面会继续跳转到对应内容。

225715c22c3427076dab090b977bf315

其他平台也可以按同样方式进入。

c93ddaa21ddcbaa2882029f0afee39a9

所以这次实际验证到的是:

热榜集中展示 → 点击榜单 → 跳转到对应平台内容。

我不会把它写成“所有平台都已经逐项测试”。

当前截图主要说明的是页面聚合和跳转链路能够工作。

6. 常看的榜单可以往前排

DailyHot 设置里还可以调整榜单顺序。

beee07caa57bfbffb720cf64c224e1fa

这一点对我比“平台数量越多越好”更实用。

如果我每天主要看几个固定榜单,就把它们排在最前面;偶尔才看的平台放到后面。

这样这个页面才真正从“全网热榜集合”变成:

按自己习惯排序的热点入口。

7. 本地聚合页够用了,为什么还要公网访问?

在家里时,直接打开:

http://192.168.42.147:5956

就够了。

但如果这个页面已经被我当成每天固定查看的入口,人离开局域网以后,它就突然失效了。

所以接下来再加入 cpolar。

cpolar 在这套方案里只负责:

把 DailyHot 的 Web 页面提供到公网。

它不抓取热榜,也不决定榜单内容。

8. 在飞牛 NAS 上安装 cpolar

先进入飞牛 NAS 设置,开启 SSH。

默认端口保持:

22

5f4dd052629beae55990037fb1cc7d73

然后通过 NAS 的 IP 地址连接 SSH。

09e2f65ca7688ad8d6791293491c8175

连接完成以后,执行:

sudo curl https://get.cpolar.sh | sh

安装完成后检查服务状态:

sudo systemctl status cpolar

afe8e53fc04d11c1a147129d43332429

如果服务正常,再从浏览器访问飞牛主机 IP + 9200。

这里给出的入口是:

http://localhost:9200

2ada61864d693faaac167c396ef8ad75

登录后开始创建 DailyHot 隧道。

9. 给 5956 创建随机公网地址

进入:

隧道管理 → 创建隧道

当前参数为:

  • 隧道名称:dailyhot
  • 协议:http
  • 本地地址:5956
  • 域名类型:随机域名
  • 地区:China Top

image-20260306162718415

创建成功以后打开:

在线隧道列表

image-20260306162751498

复制生成的公网地址,从其他设备访问。

页面可以正常打开。

这一层真正验证的是:

DailyHot 5956 → cpolar HTTP 公网地址 → 外部浏览器。

这里也再次说明,5956 对应的是这篇飞牛部署和 Compose 示例里的端口;如果你使用的是前面的 6688:6688 单命令方案,公网映射端口就不能照搬 5956。

10. 再切到固定二级子域名

随机地址适合先测试。

如果准备长期把 DailyHot 当作手机书签或浏览器首页,固定入口更方便。

进入 cpolar 预留页面。

image-20250909154450325

选择:

保留二级子域名

这里使用:

  • 地区:china top
  • 二级子域名:dailyhot

image-20260306162940060

保留以后回到:

隧道管理 → 隧道列表

找到需要修改的 DailyHot 隧道。

image-20260306163019189

把:

  • 域名类型改成二级子域名;
  • Sub Domain 填写前面保留成功的名称;
  • 地区选择 China Top。

image-20260306163049318

更新完成以后,再使用固定公网地址访问。

DailyHot 页面可以正常打开。

到这里,固定公网入口已经跑通。

11. 我会怎么理解这套“个人热榜”?

我不太愿意把它写成“摆脱算法”。

因为 DailyHot 展示的内容,本质上仍然来自各个平台自己的热榜和内容排序。

它真正给我的自由是:

我决定去看哪些平台,以及这些入口怎么排列。

所以它更像是在平台算法之外,再加一层属于自己的“入口选择权”。

另外,这篇同时保留了三种部署形态:

飞牛 Docker 图形界面: 本地访问端口 5956。
Docker run: rehiy/dailyhot,端口 6688:6688。
Docker Compose: liwangsheng/dailyhot-web,端口 5956:80,并配置外部 API。

这三套方式不能混成一套参数直接照搬。

总结

DailyHot 对我来说最有价值的地方,不是“全网热点尽在掌握”,而是终于不用每天为了看热榜在十几个 App 之间来回切。

这次真正跑通的主线是:

飞牛 OS → Docker → DailyHot → 5956 → 热榜聚合页 → 榜单跳转 → 顺序调整 → cpolar → 随机公网 → 固定二级子域名 dailyhot。

另外还保留了两套独立部署参考:

rehiy/dailyhot → 6688:6688

以及:

liwangsheng/dailyhot-web → 5956:80 → API=https://hot-api.bbit.fun。

几个细节需要继续留意:

  • 飞牛部署示例实际使用 5956,Docker run 示例使用 6688,不要混用端口;
  • Compose 创建目录命令里 /docker/dailyhot 和 /dockerdailyhot 不一致;
  • 项目介绍强调本地、自托管,但 Compose 示例明确依赖 https://hot-api.bbit.fun;
  • cpolar 只负责 DailyHot Web 页面的公网入口,不参与热榜抓取和排序;
  • 固定二级子域名示例继续使用 dailyhot;
  • DailyHot 能帮我集中入口,但并不意味着平台原本的热榜算法消失了。

如果只是偶尔看一次热搜,我不会专门搭一个服务;但只要每天固定要扫几个平台,能把这些榜单收进一个页面,按自己的顺序排列,再从手机随时打开,这种“小而专”的工具就很容易变成长期常用入口。

更多推荐