{"repo":"xiyou-linuxer/blog-feed","free":true,"listed":false,"github":"https://github.com/xiyou-linuxer/blog-feed","clone":"git clone https://github.com/xiyou-linuxer/blog-feed.git","description":"西邮Linux兴趣小组博客聚合，爬取Atom/RSS订阅源生成群博API。","language":"TypeScript","stars":15,"topics":["blog","api","atom","feed","rss"],"license":"MIT","category":"api-integrations-sdks","readme_excerpt":"博客订阅源聚合 blog-feed 从远程源获取订阅列表 JSON，定时爬取解析其中的 Atom/RSS 订阅源，并以 API 的形式提供文章列表。 项目依赖 核心库： - Nitro：UnJS 家族的 Web 服务器，基于文件路由，支持定时任务 - Mongoose：MongoDB 的 ODM，用于操作数据库 - Fast XML Parser：用于解析 Atom/RSS 运行环境： - Node.js：JavaScript 运行时 - MongoDB：数据库 - Docker：容器化部署 / PM2：进程管理器 项目结构 项目配置 在项目根目录下创建 .env 文件，或配置环境变量： 在 nitro.config.ts 中配置订阅源集合： Docker Compose 部署 DNS 与网络 默认公网 API 域名是 api.xiyoulinux.com 。部署前必须在 DNS 控制台添加解析记录： 主机记录 记录类型 记录值 ---------- ---------- -------- api A 云主机公网 IPv4 同时在云服务器安全组和主机防火墙开放 TCP 80 / 443 。不要开放 3000 或 27017 到公网：API 只在 Docker 网络内暴露 3000 ，MongoDB 只绑定主机 127.0.0.1:27017 。 环境变量 首次部署前从模板创建 .env ，并设置 MongoDB root 和应用用户密码： 首次部署与证书申请 如果服务器上还没有 certbot-certs volume 或证书文件，不要直接 docker compose up 。仓库默认的 nginx/default.conf 是生产 HTTPS 配置，会引用证书路径；首次部署应运行初始化脚本： 脚本会临时把 Nginx 切到 HTTP Webroot 配置，申请 api.xiyoulinux.com 证书，再切回 HTTPS 配置并重启 Nginx。默认邮箱为 root@xiyoulinux.org 。如需更换域名或邮箱： 更新部署 已有证书的生产环境更新时，直接拉取代码、重建应用并重启 Nginx： 如果只更新后端代码，也可以只重建应用容器： 验证 服务架构 容器 端口 说明 ------ ------ ------ nginx 80, 443 反代 + SSL，证书由 certbot 管理 app 3000 (内网) Nitro 后端 API mongo 27017 (本地) MongoDB 数据库 certbot - 每 12 小时检查证书续期 常用命令 PM2 部署 开发 在项目根目录下运行以下命令： 访问 http://localhost:3000/ nitro/tasks/update 即可手动触发更新任务。 配置 PM2 PM2 是一个进程管理器，用于在生产环境中管理 Node.js 应用程序。 PM2 部署 在项目根目录下运行以下命令： 当项目有更新时，直接运行 pnpm hot 即可，无需重新启动项目。 文章更新 在 nitro.config.ts 的 scheduledTasks 中，使用 cron 表达式配置了 update 定时任务，用于文章更新。 项目启动时也会更新文章，要禁用此行为，请设置环境变量或 .env 的 DISABLE STARTUP UPDATE 为 true 。 项目 API GET / 获取服务器统计信息 查询参数（可选） 参数 说明 示例 ----- -------- ------------ ta","default_branch":null,"files":null,"tree":[],"storefront":"/r/xiyou-linuxer","claimed":false,"request_supported":{"post":"https://gitbuyer.com/r/xiyou-linuxer/blog-feed/request-supported","requests":0},"note":"indexed from public GitHub; nothing is for sale on this page. Clone it from GitHub. Paid listings live at /search."}