摸鱼岛 : 自建信息聚合站点

AI智能摘要
摸鱼岛是一个开源的信息聚合站点,前端基于React + Antd开发,后端采用爬虫结合Netty、SpringBoot、Redis和MySQL技术栈。项目支持多数据源聚合、每日待办、摸鱼阅读、在线工具箱及音乐播放器等功能。提供完整的部署方案,包括Docker镜像构建、Nginx反向代理配置及前后端分离部署流程,便于本地搭建与扩展。
— 此摘要由AI分析文章内容生成,仅供参考。

项目前端地址:lhccong/fish-island-frontend: 摸鱼岛🎣前端基于 React + Antd 开发的开源

项目后端地址:lhccong/fish-island-backend: 摸鱼岛🎣后端 基于爬虫 ➕ Netty ➕ SpringBoot ➕Redis➕ MySQL 开源

项目介绍

一个聚合每日热点信息、待办工作和小游戏的开源摸鱼站点

功能特性

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

2.每日待办功能;

3.摸鱼阅读;

4.在线工具箱;

5.音乐播放器等

截图预览

  • 摸鱼岛 : 自建信息聚合站点

安装部署

前端

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

后端

  • 执行初始化 SQL create_table.sql
  • 更改 MySQL 地址、Redis 地址、Minio 地址、邮箱发送配置
  • Maven 打包
  • docker 部署
  • dockerfile 文件
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"]

打包命令

docker build -f ./dockerfile -t fish .

启动命令:docker run -d -e TZ=CST -p 8123:8123 -p 8090:8090 --name "fish" fish:latest

nginx 配置

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;
    }
}

发布者:木木,转载请注明出处:https://blog.huzz.cn/9788.html

Like (0)
Donate 微信 微信 支付宝 支付宝
木木的头像木木VIP用户
Previous 2025 年 9 月 22 日 下午2:08
Next 2025 年 10 月 15 日 下午4:53

相关推荐

发表回复

Please Login to Comment
SHARE
TOP
🔈Hi,朋友。欢迎来到木木的博客小站!