DOO 项目开发文档与系统架构

DOO
DOO(Simple Server)是一个轻量级 PHP RESTful API 服务框架 + uni-app (Vue 3) 跨端内容社交应用。本文为项目开发文档与系统架构说明。 ![DOO](/assets/img/doo-hero.svg) ## 一、项目概述 DOO 采用**中间件链 + 服务-仓库分层架构**,内置 80+ API、频率限制、RBAC 权限管理、考勤/加班/薪资计算、公告与文章系统及自动化爬虫等完整功能模块。配套 uni-app(Vue 3)跨端 App 和原生双版本管理后台。 - 后端:PHP 7.2+ / MySQL 5.7+ / PDO 全量预处理 - 前端:uni-app (Vue 3) + Vite + Vuex,Capacitor 6 原生封装 - 管理后台:admin-vue(Vue 3 SPA,主力版)+ admin-web(原生 HTML/JS/CSS) - 线上部署:Ubuntu 22.04 + Nginx + PHP-FPM,App 全量包发布 ## 二、系统架构 ![DOO 系统架构](/assets/img/doo-architecture.svg) ``` 请求(HTTP Request) │ ▼ ┌──────────────────┐ │ CORS 中间件 │ 跨域白名单 + OPTIONS 预检 └────────┬─────────┘ ▼ ┌──────────────────┐ │ 日志中间件 │ 请求/响应 JSON 日志 + 毫秒计时 └────────┬─────────┘ ▼ ┌──────────────────┐ │ 错误中间件 │ try/catch 全局异常捕获 └────────┬─────────┘ ▼ ┌──────────────────┐ │ 路由层 │ URI 解析 → 分发到处理器 └────────┬─────────┘ ▼ ┌──────────────────┐ │ 服务层 │ 业务逻辑、权限验证、流程编排 └────────┬─────────┘ ▼ ┌──────────────────┐ │ 仓库层 │ SQL 构建、PDO 执行 └────────┬─────────┘ ▼ MySQL 数据库 ``` ### 统一路由入口(v2.2.0) 所有 `/api/*` 请求通过 `.htaccess` rewrite 进入 `index.php`(86+ 路由): ``` /api/login.php ──→ index.php?__route=login.php /api/auth/login ──→ index.php?__route=auth/login /api/content.php?id=1 ──→ index.php?__route=content.php&id=1 ``` 路由分发策略: | 路由类型 | 示例 | 处理方式 | |----------|------|----------| | RESTful 核心路由 | auth/login, users/1, content | 直接调用 Service 层(无重复 DB 连接) | | 传统文件路由 | login.php, feedback.php 等 | require 原文件(中间件已就绪) | | RESTful + query fallback | /users.php?id=1 | $_GET['id'] 自动兼容 | ## 三、后端目录结构 ``` server/ ├── api/ # API 端点(90+ 接口文件) │ ├── index.php # 集中式路由入口 │ ├── login.php # 用户登录(含频率限制) │ ├── register.php # 用户注册(邮箱验证 + 频率限制) │ ├── content.php # 内容 CRUD │ ├── announcements.php # 公告列表 │ ├── get_articles.php # 文章列表(支持分类筛选) │ ├── upload_article.php # 发布文章 │ ├── overtime.php # 加班记录 + 薪资计算(五险一金 + 个税) │ ├── admin_*.php # 管理后台模块(用户/内容/轮播/统计/日志/文章/反馈/加班/RBAC) │ ├── crawl_hotsearch.php # 通用热榜抓取 → 自动发布 │ ├── crawl_images.php # 自动抓图 → 发布 │ ├── ai_proxy.php # AI 代理转发 │ ├── system_monitor.php # 系统监控(需管理员) │ └── ... ├── config/ # Config.php(.env)+ Database.php(PDO)+ RateLimiter.php ├── middleware/ # CORS / 日志 / 错误 / 认证 — 链式中间件 ├── services/ # UserService / ContentService — 业务逻辑 ├── repositories/ # UserRepository / ContentRepository — 数据访问 ├── sql/ # 数据库结构脚本 ├── uploads/ # 上传文件目录 ├── downloads/ # APK 下载目录 └── mail.php # 邮件发送(PHPMailer) ``` ## 四、前端(uni-app) ![DOO 移动端](/assets/img/doo-mobile.svg) - **页面**:21 个页面,4 个 Tab(首页/工时/消息/我),覆盖启动、认证、内容、公告、文章、个人中心、管理后台 - **目录**:pages/(splash/auth/tabbar/content/info/user/article/admin 等)、components/、store/(Vuex)、utils/ - **跨平台**:iOS / Android 原生 App、H5 网页版、微信小程序,一套代码四端编译 - **管理后台入口**:APP 内 system-settings → goAdmin 进入原生后台(pages/admin/,13 页),无需 webview ## 五、数据库设计(27 张表) ![DOO 数据库](/assets/img/doo-database.svg) ### 核心业务表 **users — 用户**:id PK、username UNIQUE、password(bcrypt 哈希)、nickname、email、avatar、role(user/admin)、level/experience/points(等级积分)、followers、following、likes、时间戳 **content — 内容**:id PK、user_id FK、title、content、image_url/video_url、tags、category、type、status(draft/published/deleted)、likes/comments、recommended **articles — 文章**:id PK、title、content、excerpt、author、tags、category、status、cover、top、user_id、created_at ### 社交与内容辅助表 | 表名 | 说明 | 关键字段 | |------|------|----------| | follows | 关注关系 | follower_id → following_id (UNIQUE) | | collections | 收藏 | user_id + content_id (UNIQUE) | | carousels | 轮播图 | title, image_url, sort_order, is_active | | announcements | 公告 | title, content, is_active | | feedback / feedback_replies | 用户反馈 + 回复 | user_id, type, content, status(0未读/1已读/2已处理) | | images / files | 图片与文件管理 | 上传路径、类型、大小 | ### 考勤/薪资表 | 表名 | 说明 | |------|------| | attendance | 考勤打卡 (user_id, date, check_in, check_out, duration) | | overtime | 加班记录 (user_id, date, hours, rate, multiplier, salary, type: overtime/comp) | | overtime_config | 加班费率 (normal_rate, weekend_rate, holiday_rate) | | salary_config | 薪资配置 (底薪/奖金/绩效/五险一金费率/加班时薪,按月) | ### RBAC 权限表(admin_permissions.php 自动创建) roles(super_admin/admin/editor/user)、permissions(12 项)、role_permissions、user_roles ### 系统与辅助表 logs(操作日志)、rate_limits(频率限制)、user_behaviors(行为记录)、email_verifications(邮箱验证)、password_resets(密码重置)、splash_config(开屏页)、app_versions(版本管理)、env_monitor(环境监控) ## 六、核心 API 模块 | 模块 | 端点示例 | 说明 | |------|---------|------| | 认证 | login / register / forgot_password / change_password / delete_account | 频率限制 + Session/Token 双机制 | | 用户 | get_users / update_user / user_level | 用户信息与等级积分 | | 内容 | content.php (CRUD) / feed.php / get_carousels.php | 内容 + 视频流 + 轮播 | | 收藏 | add_collection / get_collections | 收藏管理 | | 文章 | get_articles / upload_article / delete_article / simple_articles | 文章系统 | | 公告 | announcements / get_announcement_detail | 公告列表与详情 | | 考勤薪资 | overtime.php(加班/调休 + 薪资总览) | 五险一金个税计算 | | 反馈 | feedback / feedback_answer / get_my_feedback | 反馈闭环 | | 文件 | upload / upload_image / files / files_preview / files_upload / download_proxy | 上传/预览/APK 代理 | | 管理 | admin_users / admin_content / admin_articles / admin_feedback / admin_overtime / admin_permissions 等 15 个 | 均需管理员 Session/Token | | 爬虫 | crawl_hotsearch / crawl_images / crawl_douyin_hotsearch / crawl_toutiao_hotsearch | 自动抓取发布 | | 系统 | system_monitor / deploy / check_update / get_versions / upload_version / wgt_manager | 监控 + 版本管理 | | AI | ai_proxy | 转发到本地 LLM 服务 | 所有接口统一响应格式: ```json { "code": 200, "message": "操作成功", "data": { ... } } ``` ## 七、安全机制 | 措施 | 实现位置 | |------|----------| | bcrypt 密码加密 | login.php, register.php, UserService | | 全量 PDO 预处理 | 所有 SQL 查询均使用 prepare + bind | | 频率限制 | RateLimiter — login(5/5min), register(3/10min) | | 管理员 Session 验证 | 所有 admin_*.php 统一检查会话/Token | | 文件上传白名单 | 类型 + 大小限制 | | 路径穿越防护 | basename() 防护 (download_proxy.php) | | CORS 白名单 | cors_headers.php + Config.php .env 配置 | | Token 认证 | 登录成功返回随机 hex token | | 错误信息脱敏 | ErrorMiddleware 仅 api.debug=true 时暴露堆栈 | ## 八、部署指南 ![DOO 管理后台](/assets/img/doo-admin.svg) ### 环境要求 - PHP 7.2+ / MySQL 5.7+ / MariaDB 10.2+ - Apache 2.4+ (mod_rewrite) 或 Nginx 1.16+ - PHP 扩展:PDO_MySQL, fileinfo, gd, curl, openssl ### 安装步骤 ```bash # 1. 克隆 git clone git@github.com:jackchenjiufu/Simple.git cd Simple # 2. 安装依赖 composer install # 3. 配置 .env(数据库信息) cp server/config/.env.example server/config/.env # 4. 导入数据库 mysql -u root -p < server/sql/doo-app.sql # 5. 目录权限 chmod 755 server/uploads/ server/downloads/ server/logs/ chmod 600 server/config/.env # 6. 初始化 curl http://localhost/server/api/init_database.php curl http://localhost/server/api/reset_admin.php # 管理员密码 → admin123 ``` ### 访问地址 - 用户端:http://your-domain.com/ - 管理后台(Vue 3 SPA):http://your-domain.com/admin-vue-dist/ - 管理后台(原生版):http://your-domain.com/admin-web/ - 管理入口(线上):http://139.196.185.197:7070/admin - API 接口:http://your-domain.com/server/api/ ## 九、版本历程 | 版本 | 日期 | 关键内容 | |------|------|----------| | v2.4.0 | 2026-07-18 | 反馈系统闭环、轮播上传、admin-vue 重构(Vue 3 SPA)、Token 鉴权 | | v2.3.0 | 2026-06-21 | api-bridge.php 修复 401、反馈管理完整可用 | | v2.2.0 | 2026-06-20 | 统一路由系统(.htaccess → index.php,86+ 路由) | | v2.1.0 | 2026-06-20 | 分页总数修复、错误脱敏、CORS 全覆盖 | | v2.0.0 | 2026-06-20 | 更名 Simple Server,考勤薪资/RBAC/爬虫 | ## 十、已废弃功能说明 以下功能曾在上线早期版本中存在,当前版本已移除或不再维护: | 功能 | 现状 | |------|------| | 私信/聊天(messages 表 + send_message/get_chat_history API) | 已废弃,API 与数据表均已移除;「消息」Tab 现展示公告 | | 关注 API(follow/check_follow.php) | 已废弃,API 文件移除;follows 表保留 | | 推荐引擎(recommend.php + 推荐/A-B 测试 7 张表) | 已废弃,API 与表均已移除;首页降级为文章/内容列表 | | 用户画像/行为推荐(user_profile.php 推荐接口) | 已废弃,前端有默认列表回退 | | 行为上报(user_behavior.php) | 已废弃 | | WebSocket 实时推送(Node.js 1884/1885) | 已废弃,服务未部署 | | 在线人数统计(online_count.php) | 已废弃 | --- **项目地址**: https://github.com/jackchenjiufu/Simple