🔥 我的开源项目火了!竟被各个公众号转发

前言🌟

两个月前我写了个摸鱼岛摸鱼网站,从 10 个小功能到现在 20~30个功能,少了不了摸鱼岛的用户的支持以及 pr ,大家的开源精神给我摸鱼岛加了很多助力,还被 DeepSeek 收录以及各个公众号转发,今天也是重新排版,带来摸鱼岛 2.0 的介绍文档,此项目开源,只希望获取各位的小小 star 🌟即是给我的最大鼓励。

!NOTE\] 本项目为开源项目,使用者必须在网站标注作者名称以及指向本项目的链接。如果不想保留署名,必须首先获得授权。不得用于非法用途。 \[!NOTE

在线体验地址🔗

最新版(域名 2025.09 过期):fish.codebug.icu/ 稳定版:yucoder.cn/

后端地址🌈:github.com/lhccong/fis...

前端地址🏖️:github.com/lhccong/fis...

!WARNING\] 私部署时记得修改后端接口地址路径指向。

✨ 开源🌟一站式摸鱼网 ✨

部署教程 · 目前现状 · 意见反馈 · 截图展示 · 在线演示 · 开源与贡献 · 相关项目 · 赞赏支持

  • DeepSeek

  • 小红书

  • 微信公众号

功能

  1. 支持多种数据源聚合:

    • ✅\] 知乎热榜

    • ✅\] 虎扑步行街热榜

    • ✅\] CSDN 热榜

    • ✅\] B 站热门

    • ✅\] 网易云热歌榜(支持网站点击播放)

    • ✅\] 待补充...

  2. 摸鱼聊天室:

    • ✅\] 发送 emoji 表情包

    • ✅\] 支持网站链接解析

    • ✅\] 支持 AI 助手回答(接入硅基流动模型)

    • ✅\] 用户地理位置显示功能

    • ✅\] 五子棋、象棋对战邀请功能

    • ✅\] 支持用户 CV 发送图片功能

    • ✅\] 在线搜书功能

    • ✅\] 支持自定义书源

    • ✅\] 五子棋(人机/在线对战)

    • ✅\] 2048

    • ✅\] JSON 格式化

    • ✅\] 聚合翻译

    • ✅\] AI 智能体

  3. 头像框兑换功能。

  4. 其他:

    • ✅\] 音乐播放器

    • ✅\] 修改网站图标

    • ✅\] 摸鱼初始页

信息聚合

每日待办

摸鱼室

摸鱼阅读

小游戏

  • 五子棋
  • 象棋
  • 2048

工具箱

  • JSON 格式化工具
  • 文本比对

头像框兑换

目前现状

  • 各大公众号转发。
  • 用户突破 1k 的个人网站。

  • 最高峰实时在线人数达 80 +。

部署教程

后端

  • 执行初始化 SQL create_table.sql

  • 更改 MySQL 地址、Redis 地址、Minio 地址、邮箱发送配置

  • Maven 打包

  • docker 部署

  • dockerfile 文件

    bash 复制代码
    FROM openjdk:8
    ENV workdir=/cong/fish
    COPY . ${workdir}
    WORKDIR ${workdir}
    EXPOSE 8123
    CMD ["java","-jar","-Duser.timezone=GMT+08","fish-island-backend-0.0.1-SNAPSHOT.jar"]
  • 打包命令

    ini 复制代码
    docker build -f ./dockerfile -t fish .
    ​
    启动命令:docker run -d -e TZ=CST -p 8123:8123 -p 8090:8090 --name "fish" fish:latest
  • nginx 配置

    ini 复制代码
    server {
        listen       80;
        listen  [::]:80;
        server_name  moyuapi.codebug.icu;
    ​
        rewrite ^(.*) https://$server_name$1 permanent;
    }
    ​
    server {
        listen       443 ssl;
        server_name  moyuapi.codebug.icu;
    ​
        ssl_certificate      /etc/nginx/ssl/cert.pem;
        ssl_certificate_key  /etc/nginx/ssl/key.pem;
        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;
    ​
        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;
    ​
        location / {
             root /usr/share/nginx/fish;
             index index.html;
              try_files $uri $uri/ /index.html;
        }
    ​
    ​
       location /fish/ {
             proxy_pass http://fish:8123/;    
        }
    ​
    # WebSocket代理配置,处理 wss:// 请求
        location /ws/ {
            proxy_pass http://fish:8090/;  # 后端 WebSocket 服务地址
            proxy_http_version 1.1;  # 使用 HTTP/1.1 协议,WebSocket 需要这个版本
            proxy_set_header Upgrade $http_upgrade;  # 必须设置这些头来支持 WebSocket 协议的升级
            proxy_set_header Connection 'upgrade';  # 维持 WebSocket 连接
            proxy_set_header Host $host;  # 确保 Host 头部传递正确
            proxy_cache_bypass $http_upgrade;  # 禁用缓存
        }
    ​
    location /sogou-api/ {
            proxy_pass https://pic.sogou.com/;
            proxy_set_header Host pic.sogou.com;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_ssl_server_name on;
    ​
            # 解决 CORS 问题
            add_header Access-Control-Allow-Origin *;
            add_header Access-Control-Allow-Methods "GET, POST, OPTIONS";
            add_header Access-Control-Allow-Headers "DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range";
            add_header Access-Control-Expose-Headers "Content-Length,Content-Range";
    ​
            # 处理 OPTIONS 预检请求
            if ($request_method = OPTIONS) {
                return 204;
            }
        }
    ​
    location /holiday/ {
        proxy_pass https://date.appworlds.cn/;
        
        # 保持目标 API 的 Host,避免返回默认网页
        proxy_set_header Host date.appworlds.cn;
    ​
        # 伪装成浏览器,防止服务器根据 User-Agent 返回 HTML
        proxy_set_header User-Agent "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36";
    ​
        # 强制服务器返回 JSON,而不是 HTML
        proxy_set_header Accept "application/json";
    ​
        # CORS 允许跨域
        add_header Access-Control-Allow-Origin *;
        add_header Access-Control-Allow-Methods "GET, POST, OPTIONS";
        add_header Access-Control-Allow-Headers "DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range";
        add_header Access-Control-Expose-Headers "Content-Length,Content-Range";
    ​
        # 处理 OPTIONS 预检请求
        if ($request_method = OPTIONS) {
            return 204;
        }
    }
    ​
    ​
    location /img-api/ {
            proxy_pass https://i.111666.best/;
            proxy_set_header Host pic.sogou.com;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_ssl_server_name on;
    ​
            # 解决 CORS 问题
            add_header Access-Control-Allow-Origin *;
            add_header Access-Control-Allow-Methods "GET, POST, OPTIONS";
            add_header Access-Control-Allow-Headers "DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range";
            add_header Access-Control-Expose-Headers "Content-Length,Content-Range";
    ​
            # 处理 OPTIONS 预检请求
            if ($request_method = OPTIONS) {
                return 204;
            }
        }
    ​
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }
    }

前端

  • 修改 src/constants/index.ts 的接口地址。
  • max build --打包命令。
  • 部署 dist 文件。

开源与贡献

项目支持者 🔥

前端贡献者 🌟

后端贡献者 🌟:

📌 贡献方式

如果你也有希望聚合的数据源不妨来参加一下贡献,将你的数据源爬取出来放入其中。

1️⃣ 页面元素抓取

📌 适用于:目标网站未提供 API,数据嵌入在 HTML 结构中。

✅ 贡献要求

  • 推荐使用

    • Jsoup(Java)
    • BeautifulSoup(Python)
    • Cheerio(Node.js)
  • 选择器精准:避免因页面结构变化导致抓取失败。

  • 减少 HTTP 请求:优化抓取效率,避免重复请求。

  • 遵守网站爬取规则robots.txt )。

💡 示例代码

ini 复制代码
Document doc = Jsoup.connect("https://example.com").get();
String title = doc.select("h1.article-title").text();

2️⃣ 页面接口返回数据抓取

📌 适用于:目标网站提供 API,可直接调用接口获取 JSON/XML 数据。

✅ 贡献要求

  • 推荐使用

    • HttpClient(Java)
    • axios(Node.js)
    • requests(Python)
  • 分析 API 请求 :确保请求参数完整(headerscookiestoken)。

  • 减少不必要的请求:优化调用频率,避免触发反爬机制。

  • 异常处理:确保代码稳定运行。

💡 示例代码

ini 复制代码
String apiUrl = "https://api.example.com/data";
String response = HttpRequest.get(apiUrl).execute().body();
JSONObject json = JSON.parseObject(response);

🔗 数据源注册

数据抓取完成后,需要注册数据源,以便系统能够正确使用。

🚀 注册流程

  1. 添加数据源 Key/src/main/java/com/cong/fishisland/model/enums/HotDataKeyEnum.java 定义新的数据源 Key。

  2. 更新数据源映射

    • /src/main/java/com/lhccong/fish/backend/config/DatabaseConfig.java 文件中,添加新的数据源配置。
  3. 创建数据源类

    • src/main/java/com/cong/fishisland/datasource 目录下,新建数据源类,继承 DataSource,实现 getHotPost 方法。
  4. 实现数据获取逻辑

    • 按照 HotPostDataVO 格式返回数据。
    • 使用 @Builder 注解,确保数据能正确解析。

💡 示例代码

scss 复制代码
HotPostDataVO.builder()
            .title(title)
            .url(url)
            .followerCount(followerCount)
            .excerpt(excerpt)
            .build();

🚀 贡献流程

  1. Fork 仓库 ➜ 点击 GitHub 右上角 Fork 按钮。
  2. 创建分支 ➜ 推荐使用有意义的分支名,如 feature/data-scraper-optimization
  3. 提交代码 ➜ 确保代码可读性高,符合规范。
  4. 提交 Pull Request(PR) ➜ 详细描述您的更改内容,并关联相关 issue(如有)。
  5. 等待审核 ➜ 维护者会进行代码审核并合并。

以上讲解如果对你有帮助,不妨给我的项目点个小小的 star 🌟,成为一下我的精神股东呢

🎉 感谢您的贡献!

您的每一份贡献都让 fish-island 变得更好!💪

相关推荐
卸任几秒前
Electron霸屏功能总结
前端·react.js·electron
fengci.几秒前
ctfshow黑盒测试前半部分
前端
喵个咪4 分钟前
go-wind-cms 微服务架构设计:为什么基于 Kratos?
后端·微服务·cms
神奇小汤圆10 分钟前
百度面试官:Redis 内存满了怎么办?你有想过吗?
后端
喵个咪12 分钟前
Headless 架构优势:内容与展示解耦,一套 API 打通全端生态
前端·后端·cms
开心就好202513 分钟前
HTTPS超文本传输安全协议全面解析与工作原理
后端·ios
小江的记录本15 分钟前
【JEECG Boot】 JEECG Boot——数据字典管理 系统性知识体系全解析
java·前端·spring boot·后端·spring·spring cloud·mybatis
神奇小汤圆16 分钟前
Spring Batch实战
后端
喵个咪18 分钟前
传统 CMS 太笨重?试试 Headless 架构的 GoWind,轻量又强大
前端·后端·cms