Files
rainblogweb/README.md
T
miaomiao 20deb09dbd P6: 集成上线 - dist 切换/后台路由/Setup+Embed/v1 退役/文档更新
- server.js: serveIndex 改读构建产物 dist/index.html(占位符替换保留);新增 /admin* → dist/admin.html;/forum/manage/:id 改 302 重定向
- Setup 初始化向导三步迁移;Embed 面板嵌入迁移(proxy 代理)
- v1 前端全部退役(12 html + public/js/ 12 文件 + deploy 脚本)
- README/AGENTS.md 更新为 v2 架构(React+Vite、better-sqlite3、构建流程)
2026-08-06 23:16:18 +08:00

241 lines
7.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 🌧️ RainWeb - 个人云管理平台
[![License](https://img.shields.io/badge/license-MIT-green)](LICENSE)
一体化个人云平台,集成博客、论坛、密码管理器、管理后台聚合等功能,Material Design 3 风格,支持深色/浅色切换。
## 功能概览
| 功能 | 说明 |
|------|------|
| 📝 **博客** | 瀑布流布局,支持 Markdown 渲染,响应式设计 |
| 💬 **论坛** | 多分类,发帖/回复,用户权限管理 |
| 🔒 **密码管理器** | AES-256-GCM 加密存储,PIN 码解锁,密码生成/复制 |
| 📋 **管理面板聚合** | 在 iframe 中嵌入多个管理后台,统一入口 |
| 🌓 **深浅色主题** | Material Design 3 色彩系统,一键切换 |
| 🖼️ **壁纸背景** | 上传自定义壁纸,多种缩放方式,自动半透叠加提升可读性 |
| 🧊 **磨砂玻璃效果** | 导航栏/卡片磨砂玻璃样式,可调模糊强度和透明度 |
| 📧 **邮箱验证注册** | SMTP 邮件发送,Material 风格邮件模板 |
| 🔐 **验证码系统** | 内置扭曲文字验证码 / Google reCAPTCHA V2,支持登录/注册/发帖场景 |
| 🛠️ **CLI 工具** | 命令行管理:修改密码、端口、验证码规则、一键升级 |
| 🔑 **首次初始化向导** | 首次启动自动引导设置管理员密码和站点信息 |
## 快速开始
### 环境要求
- **Node.js** 22 或更高版本(推荐 22 LTS)
- **npm** 随 Node.js 安装
### 下载安装
| 方式 | 文件 | 说明 |
|------|------|------|
| 🪟 Windows 开箱即用 | `rainweb-win.zip` | 含 node_modules,解压双击 `start.bat` 即可 |
| 📦 源码版 | `rainweb-source.zip` | 需 `npm install` 安装依赖,适用于宝塔/Linux |
**Windows**
```bash
解压 rainweb-win.zip → 双击 start.bat → 访问 http://localhost:3001
```
**Linux / 宝塔面板:**
```bash
unzip rainweb-source.zip -d rainweb
cd rainweb
npm install
npm run build
npm start
```
首次访问会自动跳转 `http://localhost:3001/setup.html` 完成初始化。
### 宝塔面板部署
1. 上传 `rainweb-baota.zip` 到服务器并解压
2. 宝塔面板 → 网站 → Node项目 → 添加Node项目
- **启动文件**: `server.js`
- **端口**: `3001`
3. 提交后宝塔自动 `npm install` 并启动
4. 若未自动构建,手动执行 `npm run build`(构建 React 前端到 `public/dist/`
5. 如需域名访问,配置 Nginx 反向代理:
```nginx
server {
listen 80;
server_name 你的域名.com;
location / {
proxy_pass http://127.0.0.1:3001;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_cache_bypass $http_upgrade;
}
}
```
### Docker 部署(可选)
```bash
# 使用 Node.js 官方镜像
docker run -d -p 3001:3001 -v $(pwd)/data:/app/data node:22 bash -c "
cd /app && npm install && node server.js
"
```
## 默认账号
| 用户名 | 密码 | 角色 |
|--------|------|------|
| `admin` | `admin123` | 管理员 |
**首次启动后请及时修改密码。**
## CLI 命令
```bash
node cli.js <command>
# 或
npm run cli -- <command>
```
| 命令 | 说明 |
|------|------|
| `status` | 查看运行状态 |
| `start` | 启动服务器 |
| `stop` | 停止服务器 |
| `restart` | 重启服务器 |
| `port [number]` | 查看/修改端口 |
| `password [new-pass]` | 修改管理员密码 |
| `captcha` | 交互式配置验证码 |
| `config` | 查看所有配置 |
| `upgrade` | 一键升级(git pull + npm install + 重启) |
## 技术栈
- **后端**: Node.js + Express
- **数据库**: SQLite (better-sqlite3)
- **前端**: React + Vite + React Router(前台原生样式 / 后台 MUI)
- **加密**: AES-256-GCM, PBKDF2, bcrypt
- **验证码**: SVG 扭曲文字 / Google reCAPTCHA V2
- **文件上传**: multer
- **邮件**: nodemailer
- **Markdown**: marked
## 项目结构
```
rainweb/
├── server.js # 主入口
├── vite.config.js # Vite 构建配置
├── cli.js # CLI 工具
├── db.js # 数据库层
├── middleware/
│ └── auth.js # JWT 认证中间件
├── routes/ # API 路由
│ ├── auth.js # 登录/注册/用户管理
│ ├── blog.js # 博客 CRUD
│ ├── forum.js # 论坛/帖子/回复
│ ├── passwords.js # 密码管理器
│ ├── admin-links.js # 管理面板链接
│ ├── captcha.js # 验证码生成/验证
│ ├── settings.js # 站点设置
│ ├── email.js # SMTP 邮件
│ ├── upload.js # 壁纸上传
│ ├── setup.js # 初始化向导
│ ├── announcements.js # 公告
│ └── profile.js # 个人资料
├── frontend/ # React 前端源码(Vite 根目录)
│ ├── index.html # 前台入口(含 ${site_name} 占位符)
│ ├── admin.html # 后台入口
│ └── src/
│ ├── main.jsx # 前台入口
│ ├── App.jsx # 前台布局 + 路由表
│ ├── admin/ # 后台入口(MUI)
│ ├── api/ # fetch 封装
│ ├── lib/ # 工具函数
│ ├── theme.jsx # 主题切换(data-theme
│ └── pages/ # 前台页面
├── public/
│ ├── dist/ # Vite 构建产物(npm run build 生成,serveIndex 读取)
│ ├── css/style.css # 全局样式 + 主题
│ └── wallpaper/ # 上传的壁纸
└── package.json
```
## 站点设置
管理后台提供以下配置项:
### 基本设置
- 网站名称、描述
- 主题色
- reCAPTCHA V2 (Site Key / Secret Key)
### 验证码设置
- 类型:关闭 / 内置验证码 / Google reCAPTCHA
- 应用范围:登录、注册、发帖、失败次数过多
### 主题设置
- 主题色
- 壁纸上传 / URL / 缩放方式
- 导航栏样式:默认 / 磨砂玻璃 / 胶囊
- 卡片样式:实色 / 磨砂玻璃
- 玻璃效果:模糊强度、透明度
### SMTP 邮件
- 主机、端口、用户名、密码
- 发件人邮箱、名称
- 支持测试发送
## 开发
```bash
# 开发模式(Vite dev server,端口 5173/api 与 /uploads 代理到本地后端 3101
npm run dev
# 构建生产产物到 public/dist/
npm run build
# 预览构建产物
npm run preview
# 生产运行(Express 服务 public/ 与构建产物)
npm start
```
前端为 React + Vite,开发时前端改动由 Vite 热更新,无需刷新;生产部署必须先在服务器执行 `npm run build` 生成 `public/dist/`
## 升级
```bash
# 方法1: 一键升级(推荐)
node cli.js upgrade
# 方法2: 手动
git pull
npm install
npm run build
node cli.js restart
```
## 版本
当前版本记录在项目根目录的 `VERSION` 文件中,导航栏标题右侧会显示当前版本号。
## Releases
| 文件 | 说明 |
|------|------|
| `rainweb-win.zip` | Windows 开箱即用版,包含 node_modules,解压即运行 |
| `rainweb-source.zip` | 源码版,需 `npm install`,适用于 Linux / 宝塔面板 |
## License
MIT