能聚合各站热点的DailyHot

在这里插入图片描述

什么是 DailyHot ?

今日热榜(DailyHot)是一个获取各大热门网站热门头条的聚合网站,能追踪全网热点、实现简单高效阅读。项目分为前、后端,其中后端提供了一个聚合热门数据的 API 接口。

🚩 后端 API 特性

  • 极快响应,便于开发
  • 支持 RSS 模式和 JSON 模式
  • 支持多种部署方式
  • 简明的路由目录,便于新增

官方提供了示例网站:https://hot.imsyy.top

构建镜像

官方只提供了后端 API 镜像,但没有前端的,可以通过 vercel 实现无服务器部署。老苏想通过 Docker 部署在群晖上,只能自己动手了

如果你不想自己构建,可以跳过,直接阅读下一章节

这是一个标准的前端项目,对老苏来说,难点在于后端的地址是不确定的,所以还是采用了惯用的占位符的方式,这种方式的缺点是,只有在创建容器的时候,环境变量才起作用,中途修改是不生效的。

首先要准备一个 Dockerfile 文件,采用了分层构建,这样镜像会比较小一点

FROM node:18-alpine as build-depsWORKDIR /app
COPY . ./
RUN npm i -g pnpm
RUN pnpm install
RUN pnpm buildFROM nginx:1.12-alpine    
MAINTAINER laosu<wbsu2003@gmail.com>    # 环境变量    
ENV VITE_GLOBAL_API "https://api-hot.efefee.cn"  
ENV VITE_ICP "豫ICP备2022018134号-1" # 拷贝静态文件    
COPY --from=build-deps /app/dist /usr/share/nginx/htmlCOPY replace_apiurl.sh ./replace_apiurl.sh
RUN chmod +x replace_apiurl.sh EXPOSE 80    
CMD ["sh", "replace_apiurl.sh"]

还需要一个 replace_apiurl.sh 文件,用于👇

  • 将打包时的占位符,替换为环境变量的值
  • 启动 nginx
#!/bin/bash  find '/usr/share/nginx/html' -name '*.js' -exec sed -i -e 's,vitegloalapi,'"$VITE_GLOBAL_API"',g' {} \;  find '/usr/share/nginx/html' -name '*.js' -exec sed -i -e 's,viteicp,'"$VITE_ICP"',g' {} \;  nginx -g "daemon off;"

在构建之前,还要修改项目中的 .env 文件,修改前是下面这样的,老苏把原来的默认值放入了 Dockerfile 中,这样当你不设置环境变量时,也能连接官网使用

修改后

构建镜像和容器运行的基本命令如下👇

# 拉取源代码
git clone https://github.com/imsyy/DailyHot.git# 如果 github 慢或者访问不了
git clone https://mirror.ghproxy.com/https://github.com/imsyy/DailyHot.git# 进入代码目录
cd DailyHot# 将 Dockerfile、 replace_apiurl 文件放进当前目录中# 修改 .env  文件,切记!切记!切记!否则永远连的都是官方 api 地址# 构建镜像
docker build -t wbsu2003/dailyhot:v1 .# 生成容器
docker run -d \
--name=dailyhot \
-p 6689:80 \
-e VITE_GLOBAL_API="http://192.168.0.197:6688" \
-e VITE_ICP="" \
wbsu2003/dailyhot:v1

安装

在群晖上以 Docker 方式安装。

后端 API

在注册表中搜索 dailyhot-api ,选择第一个 imsyy/dailyhot-api,版本选择 latest

本文写作时, latest 版本对应为 v2.0.0-rc.2

端口

本地端口不冲突就行,不确定的话可以用命令查一下

# 查看端口占用
netstat -tunlp | grep 端口号
本地端口容器端口
66886688

前端

在注册表中搜索 wbsu2003/dailyhot,版本选择 latest

端口

本地端口不冲突就行,不确定的话可以用命令查一下

# 查看端口占用
netstat -tunlp | grep 端口号
本地端口容器端口
668980

环境

可变
VITE_GLOBAL_API后端 API 地址
VITE_ICPICP 信息

因为 Dockerfile 设置了,所以有默认值

后端 API 地址设为 http://群晖IP:6688VITE_ICP 没有的话可以设为空

命令行安装

如果你熟悉命令行,可能用 docker cli 更快捷

# 运行后端容器
docker run -d \--restart unless-stopped \--name dailyhot-api \-p 6688:6688 \imsyy/dailyhot-api# 运行前端容器
docker run -d \
--name=dailyhot-web \
-p 6689:80 \
-e VITE_GLOBAL_API="http://192.168.0.197:6688" \
-e VITE_ICP="" \
wbsu2003/dailyhot

也可以用 docker-compose 安装,将下面的内容保存为 docker-compose.yml 文件

version: '3'services:dailyhot-api:image: imsyy/dailyhot-apicontainer_name: dailyhot-apirestart: unless-stoppedports:- 6688:6688dailyhot-web:image: wbsu2003/dailyhotcontainer_name: dailyhot-webrestart: unless-stoppedports:- 6689:80environment:- VITE_GLOBAL_API=http://192.168.0.197:6688- VITE_ICP=

然后执行下面的命令

# 新建文件夹 dailyhot
mkdir -p /volume1/docker/dailyhot# 进入 dailyhot 目录
cd /volume1/docker/dailyhot# 将 docker-compose.yml 放入当前目录# 一键启动
docker-compose up -d

运行

前端

在浏览器中输入 http://群晖IP:6689 就能看到主界面

手机上的效果

后端

在浏览器中输入 http://群晖IP:6688 就能看到后端界面

测试接口,在浏览器中输入 http://群晖IP:6688/all

获取榜单数据,例如:51cto,可以在浏览器中输入 http://群晖IP:6688/51cto

获取 RSS,可以在浏览器中输入 http://群晖IP:6688/51cto?rss=true

可以用于 RSS 阅读器中订阅

参考文档

imsyy/DailyHotApi: 🔥 今日热榜 API,一个聚合热门数据的 API 接口,支持 Vercel 部署 | 前端页面:https://github.com/imsyy/DailyHot
地址:https://github.com/imsyy/DailyHotApi

imsyy/DailyHot: DailyHot 今日热榜前端页面 | API:https://github.com/imsyy/DailyHotApi
地址:https://github.com/imsyy/DailyHot

今日热榜 - 汇聚全网热点,热门尽览无余
地址:https://hot.imsyy.top/#/

关于 DailyHotApi 的重构 | 無名小栈
地址:https://blog.imsyy.top/posts/2024/0408

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/687760.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一些Webshell-Bypass的思路

—— 经过这一段时间的研究&#xff0c;针对webshell-Bypass我也有了一些自己的技巧&#xff0c;于是决定写下这篇文章&#xff0c;阅读前提是需要有一点PHP的语言基础。 在讲解代码之前&#xff0c;需要简单了解一下不同查杀平台webshell查杀的查杀原理。对于一些较传统的We…

GEE数据集——高分辨率全球树冠高度地图(1 米)Meta 公司

高分辨率 1 米全球树冠高度地图 简介 全球树冠高度地图数据集提供了对全球树冠高度的全面了解,有助于对森林生态系统、碳固存和气候变化减缓工作进行精确监测。该数据集由 Meta 和世界资源研究所合作开发,是了解森林结构和动态的基石。通过融合最先进的卫星图像和先进的人工…

Springboot+Vue项目-基于Java+MySQL的车辆管理系统(附源码+演示视频+LW)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;Java毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计 &…

下载源代码并交叉编译riscv FreeBSD系统和内核

RISCV系统曾经让人神秘到无法接触&#xff0c;交叉编译更是只有耳闻&#xff0c;现在随着RISCV的普及&#xff0c;它们神秘的面纱已经被慢慢揭开。 交叉编译作为RISCV系统中的一个重要环节&#xff0c;也随着RISCV的普及而变得更加容易理解和操作。交叉编译允许开发者在一个平…

F. Circle Perimeter

思路&#xff1a;线性时间复杂度就可以解决&#xff0c;不用二分&#xff0c;我们枚举横坐标&#xff0c;然后看当前横坐标情况下多少个纵坐标满足条件。 代码&#xff1a; void solve(){int r;cin >> r;int y r, ans 0;for(int x 0;x < r;x ){ //枚举横坐标x&am…

【深度学习】Diffusion扩散模型原理解析1

1、前言 diffusion&#xff0c;这几年一直很火的模型&#xff0c;比如这段时间在网上的文生图大模型——Stable diffusion。就是以diffusion作为基底模型&#xff0c;但由于该模型与VAE那边&#xff0c;都涉及了较多了概率论知识&#xff0c;实在让人望而却步。所以&#xff0…

Linux 磁盘分区工具 gdisk / fdisk

fdisk 是传统的 Linux 磁盘分区工具&#xff0c;磁盘容量有2T的大小限制&#xff1b;gdisk 又叫 GPT fdisk, 作为 fdisk 的升级版&#xff0c;主要使用的是GPT分区类型&#xff0c;用来划分容量大于2T的硬盘&#xff0c;本文介绍使用方法。 简介 早期的磁盘使用 fdisk 工具分区…

计算机视觉中的计算几何

计算几何领域出现于 20 世纪 70 年代&#xff0c;研究解决几何问题的数据结构和算法。这尤其包括确定图像内的拓扑结构&#xff0c;或者实际上是更高维的表示&#xff0c;例如点邻域&#xff0c;这可以帮助从数字图像数据等中导出几何意义[1]。 计算机视觉主要涉及静态或动态图…

【Web后端】servlet基本概念

1.ServletAPI架构 HttpServlet继承GenericServletGenericServlet实现了Servlet接口&#xff0c;ServletConfig接口,Serializable接口自定义Servlet继承HttpServlet 2.Servlet生命周期 第一步&#xff1a;容器加载Servlet第二步&#xff1a;调用Servlet的无参构造方法&#xf…

智能助手上线,大模型提供云服务专属顾问

业务背景 在使用云服务的时候&#xff0c;当您遇到复杂问题&#xff0c;如配置、关联或计费方式不明确时&#xff0c;可能需要向客服提交工单进行技术沟通。在漫长的工作过程中&#xff0c;耗费了宝贵的时间和精力。 2024 年 4 月&#xff0c;百度智能云正式推出了融合文心大…

数据库SQL语言实战(八)

目录 练习题 题目一 题目二 题目三 题目四 题目五 题目六 题目七 题目八 题目九 题目十 练习题 题目一 找出年龄小于20岁且是“物理学院”的学生的学号、姓名、院系名称,按学号排序 create or replace view test6_01 as select S.sid,S.name,S.dname fr…

【基础算法总结】二分查找一

二分查找一 1. 二分查找2.在排序数组中查找元素的第一个和最后一个位置3.x 的平方根4.搜索插入位置 点赞&#x1f44d;&#x1f44d;收藏&#x1f31f;&#x1f31f;关注&#x1f496;&#x1f496; 你的支持是对我最大的鼓励&#xff0c;我们一起努力吧!&#x1f603;&#x1…