文档目录
安装验证

简介

本指南面向首次部署 DouPHP 的运维与实施人员,提供“安装后验证”的完整流程:系统健康检查(PHP 版本、扩展、文件权限)、后台管理系统基本功能测试、前端页面验证(首页加载、数据库连接、模板渲染)、API 接口可用性检查、性能基准与负载测试建议,以及安装完成后的安全检查(删除安装脚本、修改默认密码等)。所有步骤均基于仓库中实际代码逻辑进行说明。

项目结构

DouPHP 采用多入口架构:前台、后台、API 各自独立入口,统一由核心引导程序初始化环境、加载配置、注册路由与中间件,并处理异常响应。

graph TB
A["浏览器"] --> B["前台入口 index.php"]
A --> C["后台入口 admin/index.php"]
A --> D["API 入口 api/index.php"]
B --> E["核心引导 core/bootstrap.php"]
C --> E
D --> E
E --> F["配置文件 config/config.php"]
E --> G["运行时存储 storage/*"]
E --> H["路由与调度"]
H --> I["业务控制器/服务"]
I --> J["ORM/数据库"]

核心组件

  • 入口与引导
    • 前台入口负责语言前缀解析、Init 启动、路由分发与异常兜底。
    • 核心引导在极早期进行 PHP 版本检测、路径常量定义、未安装时跳转安装程序、加载站点配置、注册自动加载与门面、初始化容器与请求对象。
  • 配置与运行时
    • 站点配置包含数据库连接、表前缀、字符集、应用密钥、调试开关等。
    • 运行时存储用于安装锁、状态文件、缓存与上传数据。
  • 工具与健康检查
    • 后台工具服务提供关键目录可写性检测,覆盖 storage、images、theme 等目录。
    • 文件权限检测通过尝试写入临时文件判断读写能力。

架构总览

下图展示从浏览器到核心引导、配置、路由与响应的整体流程,突出安装阶段的关键分支。

sequenceDiagram
participant U as "用户"
participant FE as "前台入口 index.php"
participant BS as "核心引导 bootstrap.php"
participant CFG as "配置 config.php"
participant RT as "路由/调度"
participant SVC as "业务服务"
participant DB as "数据库"
U->>FE : 访问站点根
FE->>BS : 引入引导
BS->>BS : 检测 PHP 版本
BS->>BS : 定义路径常量
BS->>BS : 若未安装则跳转 install
BS->>CFG : 加载站点配置
FE->>RT : 设置委托路由并分发
RT->>SVC : 调用业务逻辑
SVC->>DB : 查询/写入数据
DB-->>SVC : 返回结果
SVC-->>RT : 构建响应
RT-->>FE : 返回 Response
FE-->>U : 输出 HTML/JSON

详细组件分析

系统健康检查(PHP 版本、扩展、文件权限)

  • PHP 版本检测
    • 核心引导在启动时强制要求 PHP 版本不低于指定最低版本,不满足将直接终止执行。
  • 文件权限验证
    • 后台工具服务会收集需要检查的目录列表(storage 及其子目录、images、theme 等),对每个目录尝试写入临时文件以判定是否可写。
    • 文件权限检测通过“尝试打开/写入/删除临时文件”的方式得出 write/no_write/no_exist 三种状态。
  • 安装锁定标志
    • 若运行时存储中不存在安装锁定文件,且当前请求不是安装流程,则会自动跳转到安装入口,确保先完成安装再使用。
flowchart TD
Start(["开始"]) --> CheckPHP["检查 PHP 版本"]
CheckPHP --> |不满足| Stop["终止执行并提示升级"]
CheckPHP --> |满足| LoadCfg["加载站点配置"]
LoadCfg --> CheckInstall{"是否存在安装锁定文件?"}
CheckInstall --> |否| Redirect["跳转到安装入口"]
CheckInstall --> |是| CheckDirs["收集需检查目录"]
CheckDirs --> ForEachDir{"遍历目录"}
ForEachDir --> TryWrite["尝试写入临时文件"]
TryWrite --> Result{"写入成功?"}
Result --> |是| MarkOK["标记为可写"]
Result --> |否| MarkFail["标记为不可写/不存在"]
MarkOK --> NextDir["下一个目录"]
MarkFail --> NextDir
NextDir --> |还有| ForEachDir
NextDir --> |结束| Report["输出检测结果"]

后台管理系统基本功能测试

  • 访问方式
    • 根据配置中的后台目录常量,访问后台入口;若未安装,会被引导至安装流程。
  • 登录与鉴权
    • 登录后进入管理界面,可通过“工具/杂项”查看目录权限检测结果,确认 storage、images、theme 等目录可写。
  • 基础操作
    • 创建或编辑一条内容(如文章/产品),触发图片上传与模板编译,验证写入与渲染链路。

前端页面验证(首页加载、数据库连接、模板渲染)

  • 首页加载
    • 访问站点根,前台入口会解析语言前缀、启动 Init、分发路由并渲染页面。
  • 数据库连接测试
    • 通过后台工具或任意读取数据的页面(如文章列表)触发 ORM 查询,若数据库配置正确即可正常返回数据。
  • 模板渲染
    • 模板位于 theme 目录,若该目录可写,支持在线下载模板与编译缓存;渲染失败时可结合错误日志定位。
sequenceDiagram
participant B as "浏览器"
participant FE as "前台入口"
participant INIT as "Init 启动"
participant RT as "路由"
participant CTRL as "控制器/服务"
participant VIEW as "视图/模板"
participant DB as "数据库"
B->>FE : GET /
FE->>INIT : 启动前台环境
INIT->>RT : 准备路由上下文
RT->>CTRL : 匹配首页路由
CTRL->>DB : 读取必要数据
DB-->>CTRL : 返回数据
CTRL->>VIEW : 传入数据渲染
VIEW-->>B : 返回 HTML

API 接口可用性检查

  • 入口行为
    • API 入口启动后会初始化环境、分发路由,并对未捕获异常统一返回 JSON 500 或在调试模式下输出详细错误。
  • 快速验证
    • 调用一个公开或无需鉴权的接口(例如健康检查或基础信息接口),观察是否返回 JSON 结构与预期状态码。
  • 错误处理
    • 业务规则违例会返回 422 并附带错误详情;服务器错误返回 500。
sequenceDiagram
participant C as "客户端"
participant API as "API 入口"
participant INIT as "API Init"
participant RT as "路由"
participant CTRL as "控制器"
participant SVC as "服务"
participant DB as "数据库"
C->>API : HTTP 请求
API->>INIT : 启动 API 环境
INIT->>RT : 分发路由
RT->>CTRL : 调用控制器
CTRL->>SVC : 执行业务逻辑
SVC->>DB : 查询/写入
DB-->>SVC : 返回结果
SVC-->>CTRL : 组装响应
CTRL-->>C : JSON 响应

性能基准测试与负载测试指导

  • 基准测试
    • 使用压测工具对首页与若干热点 API 发起并发请求,记录 QPS、P95/P99 延迟与错误率。
    • 关注数据库连接数、慢查询与模板编译耗时。
  • 负载测试
    • 逐步提升并发,观察 CPU、内存、磁盘 IO 与网络带宽瓶颈。
    • 针对图片上传与模板编译场景,重点验证 storage 与 theme 目录的写入吞吐。
  • 优化建议
    • 开启合适的缓存策略(如模板编译缓存、查询缓存)。
    • 调整 PHP-FPM/进程池与数据库连接池参数。
    • 对静态资源启用 CDN 与压缩。

安装完成后的安全检查

  • 删除安装脚本
    • 若存在安装相关脚本或目录,应在安装完成后移除或限制访问,避免被恶意利用。
  • 修改默认密码
    • 立即修改管理员默认密码,并遵循强密码策略。
  • 关闭调试模式
    • 生产环境应关闭调试开关,避免敏感信息泄露。
  • 最小化权限
    • 仅对 storage、images、theme 等必要目录授予写入权限,其他目录保持只读。
  • 隐藏/重命名后台目录
    • 可通过后台工具提供的“自定义后台目录”功能,将默认后台目录更改为非默认名称,降低被扫描风险。

依赖关系分析

  • 入口与引导
    • 前台与 API 入口均依赖核心引导进行环境初始化与异常处理。
  • 配置与运行时
    • 站点配置决定数据库连接与应用密钥;运行时存储承载安装锁与状态文件。
  • 工具与权限
    • 工具服务依赖文件辅助类进行权限检测,并通过后台界面反馈结果。
graph LR
FE["前台入口"] --> BS["核心引导"]
API["API 入口"] --> BS
BS --> CFG["站点配置"]
BS --> ST["运行时存储"]
ADMIN["后台工具"] --> FS["文件权限检测"]
FS --> ST

性能考虑

  • 合理设置 PHP 版本与扩展,确保运行环境与最低版本要求一致。
  • 对高频页面与 API 启用缓存,减少数据库压力。
  • 监控 storage 与 theme 目录的写入性能,必要时迁移到高性能存储。
  • 在生产环境关闭调试模式,减少额外开销与信息泄露风险。

故障排查指南

  • 无法进入安装流程
    • 检查是否缺少安装锁定文件或请求路径是否正确;核心引导会在非安装路径下自动跳转安装入口。
  • 页面空白或 500 错误
    • 前台与 API 入口会将未捕获异常记录到日志,并在调试模式下输出详细错误;生产环境统一返回 JSON 500。
  • 目录权限不足
    • 使用后台工具的目录权限检测功能,逐一修复 storage、images、theme 等目录的写入权限。
  • 数据库连接失败
    • 核对站点配置中的数据库主机、用户名、密码与表前缀;通过任意数据读取页面验证连通性。

结论

通过本指南,您可以按步骤完成 DouPHP 的安装后验证:确保 PHP 版本与文件权限满足要求,完成后台基本功能测试,验证前端页面与 API 接口的可用性,并进行必要的性能与安全加固。建议在上线前完成全部检查项,并将调试模式关闭、默认密码修改、安装脚本清理等安全措施落实到位。

附录

  • 常用验证清单
    • PHP 版本满足最低要求
    • storage/images/theme 目录可写
    • 数据库连接正常
    • 前台首页与后台工具页可访问
    • API 接口返回 JSON 且状态码正确
    • 关闭调试模式、修改默认密码、删除安装脚本
添加日期:2026-10-05