DailyHot 全网热榜:NAS 上 Docker 部署一个自己的热榜看板
作者
小编
发布时间

项目介绍
DailyHot(今日热榜)是一个开源的榜单聚合看板:把 B 站、抖音、知乎、少数派、IT之家、36氪这些站点的热榜抓下来,排成一面墙铺在同一个页面里。不用一个个 App 切过去,也不用注册账号。
首页是一排排卡片,每张卡是一个站点,卡里是它当前的前几条热榜,标题按名次排好,底部写着更新时间。想看某一个站点的完整榜单,点卡片上的站名,就进到详情页:条数更多,每条带一段摘要和热度值,长的能翻好几页。
顶上还有一排站点标签,B站、微博、抖音、知乎、36氪、百度、少数派、IT之家、澎湃新闻、今日头条、豆瓣电影、NGA……点哪个就切到哪个。右上角可以切浅色 / 深色主题,卡片右下角有刷新按钮。全程没有登录,打开就能看。
项目地址:点我跳转
部署安装
只要能跑 Docker 的 NAS 都能装,下面用飞牛 NAS 演示:先用 帕斯内网穿透 拿到一个公网地址,再用 Docker Compose 把看板装起来。装完手机打开同一个地址就能刷热榜,不用守着家里的电脑。
这个项目本身分前端和接口两个仓库,社区有一体镜像把两边合在一个容器里,下面用的就是一体镜像:不用再单独配一个接口地址,一个容器、一个端口就够。
一、先用帕斯内网穿透拿到公网地址
飞牛的「应用中心」里搜 PassNAT,装上这个穿透插件,打开它,点「创建隧道」。隧道名字随便起(不超过 12 个字符),接入节点和传输协议留默认,本地 IP 留默认的 127.0.0.1,本地端口填 6688(就是下面编排里冒号左边那个端口)。
建好之后点开这条隧道,按一下电源,状态变成运行中,详情里就能看到分配好的公网地址(形如 IP:端口),先记下来。
不是飞牛的系统,PassNAT 文档的「连接使用」里有其他系统的连接教程:点我跳转。
二、新建 Compose 项目
打开飞牛的「Docker」应用,切到「Compose」标签,点右上角的新增项目。项目名称填 dailyhot,路径在「我的文件」下面挑一个空文件夹,没有就当场新建一个。来源选「创建 docker-compose.yml」,把下面这段整个贴进去:
1services:2 dailyhot:3 image: rehiy/dailyhot:latest4 container_name: dailyhot5 ports:6 - "6688:80"7 environment:8 - TZ=Asia/Shanghai9 restart: unless-stopped
整段编排里只有一处按自己情况改:
端口:左边 6688 是宿主机端口,和上面隧道里的本地端口保持一致;被别的服务占了就一起换一个。右边 80 是容器里的网页端口,不要改。
这个看板不存用户数据,热榜结果缓存在容器自己的 Redis 里,所以不需要挂数据卷。重新拉镜像、重启项目,配置都还在。勾上「创建项目后立即启动」,镜像下完容器就起来了。
为什么用一体镜像: 只用前端镜像的话,前端页面会去连一个固定的接口地址,那个地址不通就整页都显示「加载失败」;一体镜像把接口一起装进容器,页面和接口同源,不依赖外面的服务。
三、打开看板
用公网地址打开,第一屏就是热榜墙。等几秒让各个站点的数据回来,卡片会一张张出现,底部显示「刚刚更新」。页面会记住上次看到哪儿,重新打开还是同一面墙。
想只看某一个站点,点卡片上的站名,进详情页。详情页的条数比首页卡片多,每条下面有摘要,摘要底下是热度值。左上角一排标签可以随时换站,不用退回首页。
个别站点偶尔会加载失败。 热榜数据来自各站点公开页面,对方改版或者限流的时候,那一张卡会显示「哎呀,加载失败了」。点卡片上的重试,或者先看别的站点,过一会儿再回来,不用重装。
四、把它用得顺手
切主题。 右上角的月亮 / 太阳按钮在浅色和深色之间切。晚上躺床上刷,深色不刺眼;截图发群里,浅色更好看。
手动刷新。 卡片右下角的转圈按钮只刷这一张卡;页面顶部的刷新按钮刷整面墙。
手机上看。 手机浏览器打开同一个地址,布局自动变成单列,卡片一张接一张往下排,字和间距都是按手机放大过的,不用横向拖。
发给家里人。 地址是公开的,谁拿到都能看,不用账号。想给家里人用就直接发地址;不想让外人看,用完在插件里把隧道关掉。
几点说明
数据从哪来。 各站点的公开热榜页面,接口按站点分路由,服务端抓取后缓存一段时间。看板本身不生产内容,只是把公开榜单换个地方排好。
升级。 镜像标签用的是 latest,升级时在 Docker 里重新拉取镜像、重启项目即可;没有数据卷,不用担心迁移数据库。
明文 HTTP 访问。 内网穿透给的是 http 地址,看板本身不需要 HTTPS 才能用;但它没有登录,公网地址等于把看板公开,别往公开群里贴,用完可以把隧道关掉。
站点增减。 镜像里已经带好支持的站点列表,页面上能点到的基本都能用;想改默认显示哪些站点,需要自己改前端重新构建,这篇不展开。