本文档旨在帮助 AI Agent 快速理解 php-stack 项目的架构设计、代码规范及开发模式。
项目采用 Tauri v2 典型的分层架构:
- Frontend (UI 层): 位于根目录
src/。使用 Vue 3 + TypeScript。App.vue: 主入口,包含侧边栏导航和全局状态管理(如 Docker 可用性、日志流)。style.css: 集成了 Tailwind CSS v4。
- Backend (逻辑层): 位于
src-tauri/src/。使用 Rust。docker/: 封装 Docker 交互逻辑。manager.rs: 使用bollard处理容器列表、启停逻辑。mirror.rs: 处理 Docker 和 PHP 镜像源切换。
engine/: 核心业务引擎。env_parser.rs: .env 文件解析器与格式化器(v0.1.0 新增)config_generator.rs: 可视化配置生成器(v0.1.0 新增)mirror_manager.rs: 统一镜像源管理器(v0.1.0 新增)backup_manifest.rs: 备份清单数据模型(v0.1.0 新增)backup_engine.rs: 增强备份引擎(v0.1.0 新增)restore_engine.rs: 恢复引擎(v0.1.0 新增)export.rs: 旧版导出引擎(保留向后兼容)
commands/: 暴露给前端的#[tauri::command]接口,按业务域拆分为子模块。mod.rs: 模块声明、get_project_root()共享函数、re-export 所有命令。docker.rs: 容器 CRUD 操作(check_docker、list/start/stop/restart_container)。env_config.rs: 环境配置生成、应用、启动/重启/停止环境。mirror.rs: 镜像源预设管理、自定义配置、连接测试。backup.rs: 备份创建、恢复预览/验证/执行、路径转换。workspace.rs: 工作区管理、版本映射查询、用户覆盖、日志导出。
lib.rs: 插件注册与指令分发中心。
- 需求覆盖: 需求 1.1-1.9
- 实现状态: ✅ 完成
- 核心功能:
- GUI 界面选择服务类型(PHP、MySQL、Redis、Nginx)及版本
- 端口配置与实时冲突检测
- PHP 扩展多选配置
- 自动生成
.env文件和docker-compose.yml - 保留用户自定义变量
- 支持多 PHP 版本独立服务
- 需求覆盖: 需求 2.1-2.7
- 实现状态: ✅ 完成
- 核心功能:
- 5 个预设方案(阿里云、清华、腾讯云、中科大、官方默认)
- 4 类镜像源独立配置(Docker Registry、APT、Composer、NPM)
- 连接测试功能(3 秒超时)
- 一键应用预设或单独配置
- 需求覆盖: 需求 3.1-3.8, 6.1-6.4
- 实现状态: ✅ 完成
- 核心功能:
- ZIP 格式备份包,包含
manifest.json - 可选:数据库导出(mysqldump)、项目文件(glob 模式)、vhost 配置、日志
- SHA256 文件完整性校验
- Tauri 事件进度通知
- 部分失败容错处理
- ZIP 格式备份包,包含
- 需求覆盖: 需求 4.1-4.10
- 实现状态: ✅ 完成
- 核心功能:
- 备份包预览(manifest 解析、文件统计)
- SHA256 完整性验证
- 端口冲突检测与自动分配
- 配置文件还原、数据库 SQL 执行
- 进度通知与错误汇总
- env_parser.rs: .env 文件可靠读写,保留注释和空行(Property 9, 10)
- backup_manifest.rs: Manifest 序列化/反序列化(Property 11, 12)
- 测试覆盖: 77 个测试全部通过(74 单元测试 + 3 集成测试),包括属性测试(proptest)
- 错误处理: 统一使用
Result<T, String>或Result<T, Box<dyn Error>>。暴露给前端的 Command 必须将错误转换为String。 - 异步处理: 涉及 Docker 或文件 IO 的操作必须使用
async/await。 - 测试:
- 单元测试:放在源文件内的
#[cfg(test)] mod tests { ... }模块中 - 集成测试:放在
src-tauri/tests/integration/目录下 - 纯函数模块(env_parser、backup_manifest、config_generator)使用
proptest进行属性测试 - 标签格式:
// Feature: env-config-and-backup, Property N: {property_text} - 运行测试:
cargo test
- 单元测试:放在源文件内的
- 模块注册:
- 新增引擎模块需在
engine/mod.rs中声明pub mod xxx; - 新增命令子模块需在
commands/mod.rs中声明并 re-export - 新增的
#[tauri::command]函数需在lib.rs的invoke_handler中注册
- 新增引擎模块需在
- 状态管理: 目前使用
ref和reactive进行局部状态管理。 - 样式: 严格遵循 Tailwind CSS v4 规范。在组件内使用
@apply时必须在<style scoped>中声明@reference "tailwindcss";。 - 交互: 所有后端调用必须经过
invoke封装,并处理loading和error状态。 - 类型定义: 前端 TypeScript 类型需与 Rust 后端的 Serialize/Deserialize 结构体对应,定义在
src/types/目录下。 - 测试:
- 测试框架: Vitest + @vue/test-utils
- 测试位置: 与被测试代码同级目录下的
__tests__/文件夹 - 文件命名:
{模块名}.spec.ts - 运行测试:
npm run test或npm run test:run - 详细规范参见:doc/guides/TESTING_GUIDE.md
系统仅识别以 ps- 为前缀的容器。
- 过滤逻辑位于
src-tauri/src/docker/manager.rs。
- 位置:
src-tauri/src/engine/env_parser.rs - 功能:可靠读写
.env文件,保留注释和空行 - 特性:
- 支持带引号的值(单引号/双引号)
- 支持行内注释(
#) - 支持空行和纯注释行
- 往返一致性保证(parse → format → parse)
- 位置:
src-tauri/src/engine/config_generator.rs - 功能:根据 GUI 输入生成
.env和docker-compose.yml - 特性:
- 端口冲突检测
- 保留用户自定义变量
- 使用
${VAR}插值语法生成 Compose 文件 - 创建 dnmp 风格的目录结构(services/、data/、logs/)
- 位置:
src-tauri/src/engine/mirror_manager.rs - 功能:统一管理 Docker、APT、Composer、NPM 镜像源
- 特性:
- 5 个预设方案
- 单个类别独立配置
- 3 秒超时连接测试
- 位置:
src-tauri/src/engine/backup_engine.rs - 功能:生成包含 manifest 的 ZIP 备份包
- 特性:
- SHA256 文件完整性校验
- 可选:数据库导出、项目文件、vhost 配置、日志
- Tauri 事件进度通知
- 部分失败容错处理
- 位置:
src-tauri/src/engine/restore_engine.rs - 功能:解析备份包并还原环境
- 特性:
- 备份预览(manifest 解析)
- SHA256 完整性验证
- 端口冲突检测与自动分配
- 配置文件、数据库、项目文件还原
- 位置:
src-tauri/src/engine/backup_manifest.rs - 功能:记录备份元数据和文件校验和
- 特性:
- serde_json 序列化/反序列化
- 必需字段验证(version、timestamp、services)
- 往返一致性保证
项目文档统一存放在 doc/ 目录下,按以下规则分类:
- 用途: 系统架构、设计决策、技术方案
- 示例:
ARCHITECTURE.md - 何时使用: 记录重要的架构决策和技术方案
- 用途: 用户指南、开发指南、快速参考
- 示例:
TESTING_GUIDE.md- 测试指南MIRROR_GUIDE.md- 镜像源配置指南QUICK_REFERENCE.md- 快速参考
- 何时使用: 编写面向用户或开发者的操作指南
- 用途: 开发日志、Bug 修复记录、历史决策
- 命名格式:
YYYY-MM-DD_标题.md - 示例:
2026-04-25_DOCKER_COMPOSE_COMPATIBILITY_FIX.md2026-04-20_FIX_VERSION_KEY_MATCHING.md
- 何时使用:
- Bug 修复记录
- 功能实施历史
- 重要问题排查过程
- 每日开发日志
- 用途: 功能实施总结、优化进度、测试结果、问题修复记录,更新文档时不需要更新此目录下的文档
- 示例:
2026-04-17_IMPLEMENTATION_SUMMARY.md- 实施总结2026-04-23_TEST_RESULTS_REPORT.md- 测试结果报告2026-04-17_VERSION_SCOPE.md- 版本范围定义YYYY-MM-DD_*.md- 按日期归档的历史文档
- 何时使用:
- 功能完成后的实施总结
- 阶段性进度报告
- 测试和验证结果
- Bug 修复记录
- 所有需要归档的文档
- 用途: 文档目录和导航
- 维护: 新增文档后更新此索引
README.md- 项目介绍和快速开始CHANGELOG.md- 版本变更日志AGENTS.md- AI Agent 开发指南(本文档)
-
命名规范:
- 使用英文文件名
- 单词间用下划线分隔
- 历史文档使用日期前缀:
YYYY-MM-DD_标题.md
-
内容结构:
- 使用 Markdown 格式
- 包含清晰的标题层级
- 添加代码示例时使用语法高亮
- 重要信息使用引用块或列表
-
语言:
- 技术文档使用中文
- 代码注释使用中文
- 变量名和函数名使用英文
-
更新原则:
- 修改代码后及时更新相关文档
- Bug 修复后记录到
doc/history/ - 新功能完成后编写实施总结到
doc/history/(带日期前缀) - 所有文档最终都归档到
doc/history/
如果你被分派了新任务,请遵循以下流程:
- 理解 Scope: 确认是前端 UI 调整还是后端 Rust 逻辑变更。
- 安全检查: 涉及 Docker 修改的操作应先调用
check_docker指令。 - 权限校验: 若新增了 Tauri 插件调用,请务必更新
src-tauri/capabilities/default.json。 - TDD 流程:
- 优先编写单元测试
- 纯函数模块使用 proptest 进行属性测试
- 运行
cargo test确保所有测试通过
- 类型同步: 修改 Rust 数据结构后,同步更新
src/types/中的 TypeScript 类型定义。
✅ 环境可视化配置 - 完整实现需求 1.1-1.9 ✅ 统一镜像源管理 - 完整实现需求 2.1-2.7 ✅ 环境备份 - 完整实现需求 3.1-3.8, 6.1-6.4 ✅ 环境恢复 - 完整实现需求 4.1-4.10 ✅ 基础设施模块 - env_parser、backup_manifest、测试框架
核心定位: PHP-Stack v0.1.0 是一个环境配置管理与迁移工具,专注于:
- ✅ 可视化配置生成(替代手动编辑 .env 和 docker-compose.yml)
- ✅ 镜像源统一管理(加速国内开发体验)
- ✅ 环境备份与恢复(快速迁移开发环境到新机器)
不包含的功能(未来版本可能考虑):
- ❌ 软件管理中心(多版本一键安装)- 用户需自行准备 Docker 镜像
- ❌ 虚拟主机管理(Nginx 站点配置)- 用户需手动配置 Nginx
设计理念:
- 轻量级: 专注于配置管理和环境迁移,不做复杂的容器编排
- 透明性: 生成的配置文件完全可见可编辑,不隐藏任何细节
- 兼容性: 与 dnmp 等项目保持兼容,便于团队协作
- 目标:完善 restore_engine.rs 中的 mysqldump 执行逻辑
- 当前状态:✅ 核心框架已实现,数据库导出为占位符
- 待完善:
- 完整的 mysqldump 执行(使用 bollard exec API)
- 更智能的环境差异处理
- 事务性恢复(失败时回滚)
- 优先级: 低(当前版本可使用手动方式恢复数据库)
- 稳定优先: v0.1.0 作为内测发布版,重点是稳定性和用户体验优化
- Bug 修复: 优先处理用户反馈的问题和边界情况
- 性能优化: 大文件备份的流式处理、增量备份支持
- 文档完善: 用户手册、常见问题、最佳实践指南
- 国际化: 如需支持多语言,可添加 i18n 支持