一款轻量、简洁、无框架依赖的自托管 RSS 阅读器,由夜枫编写开发。
这是一个轻量级 RSS 阅读器,支持 RSS 2.0 和 Atom 1.0 格式。
由夜枫编写开发,相关信息访问 悦·RSS Reader 获取,可自由使用、修改、分发,保留原作者署名即可,既符合MIT License。
<link type="application/rss+xml"> 并提取真实 feed 地址guid → link 两级去重,防止重复入库rss/
├── index.php # 入口文件,渲染页面骨架
│
├── app/
│ ├── api/ # 后端 JSON API
│ │ ├── auth.php # 登录 / 退出
│ │ ├── feeds.php # 订阅源管理(列表、预览、新增、编辑、删除)
│ │ ├── entries.php # 文章列表(分页、按源筛选)
│ │ └── refresh.php # 刷新所有订阅,拉取最新文章
│ │
│ ├── core/ # 核心基础设施
│ │ ├── config.php # 全局配置(数据库、管理员、路径等)
│ │ ├── db.php # PDO 数据库封装(fetch / fetchAll / execute)
│ │ ├── auth.php # Session 鉴权封装
│ │ └── install.php # 首次访问自动建表(feeds / entries)
│ │
│ └── utils/ # 工具函数
│ ├── rss_parser.php # RSS 2.0 / Atom 1.0 解析器,兼容 BOM 和前置空白
│ └── helpers.php # 公共辅助函数(json_ok / json_err 等)
│
└── assets/
├── css/
│ └── main.css # 全部样式(CSS 变量主题、响应式、深色模式)
└── js/
└── app.js # 全部前端逻辑(原生 JS,无任何框架)
| 字段 | 类型 | 说明 |
|---|---|---|
| id | INT UNSIGNED | 主键,自增 |
| title | VARCHAR(200) | 订阅名称 |
| url | VARCHAR(500) | feed 地址(唯一) |
| site_link | VARCHAR(500) | 对应网站主页地址 |
| description | TEXT | 订阅简介 |
| icon | VARCHAR(500) | 图标 URL |
| last_fetch | DATETIME | 最后抓取时间 |
| created_at | DATETIME | 添加时间 |
| 字段 | 类型 | 说明 |
|---|---|---|
| id | INT UNSIGNED | 主键,自增 |
| feed_id | INT UNSIGNED | 所属订阅源 ID |
| title | VARCHAR(500) | 文章标题 |
| link | VARCHAR(1000) | 原文链接 |
| content | MEDIUMTEXT | 正文内容 |
| author | VARCHAR(200) | 作者 |
| pub_date | DATETIME | 发布时间 |
| guid | VARCHAR(1000) | 唯一标识(用于去重) |
| created_at | DATETIME | 入库时间 |
| 依赖 | 版本要求 |
|---|---|
| PHP | ≥ 8.0(推荐 8.2) |
| MySQL / MariaDB | ≥ 5.7 |
| Web 服务器 | Nginx / Apache |
| PHP 扩展 | pdo_mysql、simplexml、mbstring 等基础扩展 |
将 包含index.php及同级目录上传至服务器 Web 目录下,推荐二级目录部署,因为太轻量了,例如:
/www/wwwroot/blog/reader/
编辑 app/core/config.php:
// 数据库连接
define('DB_HOST', 'localhost');
define('DB_PORT', 3306);
define('DB_NAME', 'rss'); // 数据库名
define('DB_USER', 'rss'); // 数据库用户名
define('DB_PASS', 'your_password'); // 数据库密码
// 访问路径(阅读器所在的 URL 前缀,结尾不加斜杠)
define('BASE_URL', '/reader'); // 例如部署在 /rss/目录下 则填 /rss ,注意末尾没有“/”
// 每页文章数
define('PAGE_SIZE', 8);
// RSS 抓取超时(秒)
define('FETCH_TIMEOUT', 15);
默认账号为 admin,默认密码为 admin123。
上线前务必修改密码:
方法一(推荐): 临时在 config.php 末尾添加一行:
echo password_hash("你的新密码", PASSWORD_DEFAULT);
访问首页,在页面源代码最顶部复制生成的哈希值,粘贴替换 ADMIN_PASS_HASH 的值,然后删除该行。
方法二: 在 PHP CLI 中直接生成:
php -r "echo password_hash('你的新密码', PASSWORD_DEFAULT);"
server {
listen 80;
server_name your-domain.com;
root /www/wwwroot;
index index.php index.html;
location /reader {
try_files $uri $uri/ /reader/index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass unix:/tmp/php-cgi.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
浏览器打开 https://myblog.com/reader/,若看到订阅列表页即部署成功。
点击右上角「登录」,使用 admin / admin123(或你设置的密码)登录后即可管理订阅。
鼠标悬停在订阅名称上,点击右侧出现的 ✎ 图标,可修改订阅名称和简介。
鼠标悬停在订阅名称上,点击右侧 × 图标并确认,删除订阅及其全部文章。
点击右上角 ☀/☽ 按钮切换,偏好自动记忆,下次访问恢复。默认跟随系统设置。
MIT License — 自由使用、修改、分发,保留原作者署名即可。
由 夜枫 编写开发 · 悦·RSS Reader v1.0