251 lines
8.7 KiB
Markdown
251 lines
8.7 KiB
Markdown
# 🌧️ RainWeb - 个人云管理平台
|
||
|
||
[](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 [--json]` | 查看版本、服务、数据库和备份状态 |
|
||
| `health [--json]` | HTTP 健康检查和 SQLite 完整性检查;不健康时返回非 0 |
|
||
| `db-check [--json]` | 只读检查数据库完整性和关键表 |
|
||
| `start` | 校验 PID 后启动服务器,已运行时不会重复启动 |
|
||
| `stop` | 只停止确认属于本项目的 `server.js`,优雅等待退出 |
|
||
| `restart` | 优雅停止并等待后启动服务器 |
|
||
| `port [number]` | 查看/修改端口 |
|
||
| `password` | 交互式修改管理员密码(兼容旧的末尾参数写法) |
|
||
| `captcha` | 交互式配置验证码;也支持 `--type`、`--login`、`--register`、`--forum`、`--failed`、`--threshold` |
|
||
| `config [--json]` | 查看配置,敏感值统一脱敏 |
|
||
| `backup` | 创建数据库备份并立即做完整性检查 |
|
||
| `backup list [--json]` | 列出备份并检查 SQLite 完整性 |
|
||
| `backup prune --keep N [--yes]` | 预览清理旧备份;只有显式 `--yes` 才删除 |
|
||
| `backup restore <file> --yes` | 服务停止后恢复指定备份;显式确认才覆盖,旧库会保留 |
|
||
| `upgrade` | 升级前备份,检查干净工作区,`git pull --ff-only`、安装、构建并在服务原本运行时重启验活 |
|
||
|
||
通用选项:`--yes` 跳过确认,`--json` 输出 JSON,HTTP 检查可用 `--timeout 100-60000` 设置毫秒超时。密码默认交互输入,不建议在命令行中传递明文密码。
|
||
|
||
## 技术栈
|
||
|
||
- **后端**: 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 --ff-only
|
||
npm install
|
||
npm run build
|
||
node cli.js restart
|
||
```
|
||
|
||
`upgrade` 要求 git 工作区干净,只执行 fast-forward 更新;失败会返回非 0,不会假报成功。`backup prune` 默认只预览不删除,`backup restore` 必须同时满足服务已停止和 `--yes`。
|
||
|
||
## 版本
|
||
|
||
当前版本记录在项目根目录的 `VERSION` 文件中,导航栏标题右侧会显示当前版本号。
|
||
|
||
## Releases
|
||
|
||
| 文件 | 说明 |
|
||
|------|------|
|
||
| `rainweb-win.zip` | Windows 开箱即用版,包含 node_modules,解压即运行 |
|
||
| `rainweb-source.zip` | 源码版,需 `npm install`,适用于 Linux / 宝塔面板 |
|
||
|
||
## License
|
||
|
||
MIT
|