能聚合各站热点的DailyHot

devtools/2024/10/23 4:32:43/

在这里插入图片描述

什么是 DailyHot ?

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

🚩 后端 API 特性

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

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

构建镜像

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

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

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

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

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.ppmy.cn/devtools/39386.html

相关文章

npm -v : 无法加载文件 C:\Users\hp\AppData\Roaming\npm\cnpm.ps1,因为在此系统上禁止运行脚本

解决方式&#xff1a; 1、在系统中搜索框 输入 Windos PowerShell 2、右键菜单&#xff0c;点击“以管理员身份运行” 3、输入“ set-ExecutionPolicy RemoteSigned”回车 4、根据提示&#xff0c;输入A&#xff0c;回车 5、再npm -v执行成功。

MySQL获取某一天(例如 ‘2023-10-23‘)的非重复 shopid 值

如果你只想获取某一天&#xff08;例如 2023-10-23&#xff09;的非重复 shopid 值&#xff0c;而不计算它们的数量&#xff0c;你可以使用 DISTINCT 关键字结合 WHERE 子句来查询。以下是相应的 SQL 查询&#xff1a; SELECT DISTINCT shopid FROM your_table_name WHERE…

draw.io-24-windows-no-installer.exe是一个自解压文件

draw.io-24-windows-no-installer.exe是一个自解压文件&#xff0c;每次启动都会执行解压操作&#xff0c;在以下两个位置产生程序主体文件draw.io.exe&#xff0c;大约170M&#xff0c;程序关闭后再删除解压后的文件&#xff0c;给硬盘增加不必要的读写操作。 C:\Users\AAA\Ap…

VMware虚拟机中ubuntu使用记录(7)—— 如何在Ubuntu18.04中安装opencv4.5.2

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、opencv的下载二、opencv4的安装(1) 安装依赖项(2) 编译安装 前言 OpenCV&#xff08;Open Source Computer Vision Library&#xff09;是一个开源的计算机…

AOP底层实现原理

一、JDK 核心思想&#xff1a; 原始类和代理类实现相同的接口 使用JDK自带api创建动态代理 public class JDKTest{public static void main(String[] args){// 获取原始对象UserService userService new UserServiceImpl();ClassLoader classLoader JDKTest.class.getClas…

idea 新建spring maven项目、ioc和依赖注入

文章目录 一、新建Spring-Maven项目二、在Spring-context使用IOC和依赖注入 一、新建Spring-Maven项目 在pom.xml文件中添加插件管理依赖 <build><plugins><plugin><artifactId>maven-compiler-plugin</artifactId><version>3.1</ver…

前后端分离遇到CORS问题的解决办法

用一个简单的前后端分离项目中讲解CORS 前端代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0">&…

Unity TileMap入门

概述 相信很多同学学习制作游戏都是从2D游戏开始制作的吧&#xff0c;瓦片地图相信大家都有接触&#xff0c;那接下来让我们学习一下这部分的内容吧&#xff01; Tilemap AnimationFrameRate:设置每帧动画的播放速率。Color:瓦片地图的颜色TileAnchor:锚点&#xff0c;&#x…