# Simple Todo `simple-todo` 是一个前后端分离的待办/后台管理模板项目。后端基于 AgileBoot 的 Spring Boot 分层架构改造,前端包含 Web 管理端和 Taro 多端应用,根目录提供 Docker Compose 用于本地依赖启动和生产部署。 ## 项目架构 ### 原仓库地址 当前项目是在以下开源项目基础上改造: - 后端原仓库: - Web 前端原仓库: - Web UI 上游项目: ### 目录结构 ```text simple-todo ├── backend # Spring Boot 后端 │ ├── agileboot-admin # 后台管理接口启动模块 │ ├── agileboot-api # 开放接口模块 │ ├── agileboot-common # 通用工具与基础能力 │ ├── agileboot-domain # 业务领域模块 │ ├── agileboot-infrastructure # 基础设施、配置、集成能力 │ └── sql # 初始化 SQL ├── frontend │ ├── web # Vite + Vue 3 Web 管理端 │ └── app # Taro + Vue 3 多端应用 ├── docs # 项目开发约定 ├── docker-compose.yml # MySQL、Redis、后端、Web 编排 └── .env.example # Docker Compose 环境变量示例 ``` ## 基础环境 - JDK 8+ - Maven 3.8+,也可以直接使用 `backend/mvnw` 或 `backend/mvnw.cmd` - Node.js 22+,推荐配合 Corepack 使用 pnpm - pnpm,Dockerfile 中使用 `pnpm@11.1.3` - Docker Desktop 或 Docker Engine + Docker Compose ## 开发启动步骤 ### 1. 准备环境变量 Docker Compose 在项目根目录执行时会自动读取 `.env`。可以从示例文件复制: ```bash cp .env.example .env ``` Windows PowerShell: ```powershell Copy-Item .env.example .env ``` `.env.example` 默认把 MySQL 和 Redis 映射到宿主机 `3306`、`6379`,与后端 `application-dev.yml` 的本地开发配置保持一致。 ### 2. 启动 MySQL 和 Redis ```bash docker compose up -d mysql redis ``` 首次启动 MySQL 容器时,Compose 会把 `backend/sql/agileboot.sql` 挂载到 `/docker-entrypoint-initdb.d/01-agileboot.sql`,由 MySQL 镜像自动初始化数据库。 如果数据库卷已经存在,初始化 SQL 不会重复执行。需要重建本地数据时可以执行: ```bash docker compose down -v docker compose up -d mysql redis ``` `docker compose down -v` 会删除本地 MySQL 和 Redis 数据卷,请确认不需要保留本地数据后再执行。 ### 3. 启动后端 Windows PowerShell: ```powershell cd backend .\mvnw.cmd -pl agileboot-admin spring-boot:run ``` macOS / Linux: ```bash cd backend ./mvnw -pl agileboot-admin spring-boot:run ``` 后端默认地址: ```text http://localhost:8080 ``` 接口文档地址: ```text http://localhost:8080/swagger-ui/index.html http://localhost:8080/v3/api-docs ``` ### 4. 启动 Web 管理端 ```bash cd frontend pnpm install pnpm dev:web ``` `frontend/web/.env.development` 默认配置: ```env VITE_PORT=80 VITE_APP_BASE_API=/dev-api ``` Web 开发服务默认地址: ```text http://localhost:80 ``` 如果 80 端口被占用,可以修改 `frontend/web/.env.development` 中的 `VITE_PORT`。 ### 5. 启动 App 端,可选 ```bash cd frontend pnpm dev:app:weapp ``` H5 模式: ```bash cd frontend pnpm dev:app:h5 ``` ## 部署步骤 生产部署推荐使用根目录的 Docker Compose。它会启动 MySQL、Redis、后端服务和 Web Nginx 服务。 ### 1. 准备生产环境变量 ```bash cp .env.example .env ``` 按实际环境修改 `.env`,至少建议调整: ```env MYSQL_ROOT_PASSWORD=请替换为强密码 MYSQL_DATABASE=todo_agileboot_pure MYSQL_APP_USERNAME=todo_app MYSQL_APP_PASSWORD=请替换为强密码 MYSQL_PORT=13306 REDIS_PASSWORD=请替换为强密码 REDIS_PORT=16379 APP_PORT=8080 WEB_PORT=8081 JAVA_OPTS=-Xms256m -Xmx512m ``` 生产环境建议把 `MYSQL_PORT`、`REDIS_PORT` 改成非默认宿主机端口,例如上面的 `13306`、`16379`。这两个变量只影响宿主机暴露端口,不影响容器内部端口;后端容器仍通过 Compose 内部网络访问 MySQL `3306` 和 Redis `6379`。 如果数据库和 Redis 只给后端容器使用,建议进一步通过服务器防火墙限制这些端口的外部访问,或按实际部署需要移除 `docker-compose.yml` 中 MySQL/Redis 的 `ports` 暴露配置。 不要提交真实生产 `.env` 文件。 ### 2. 构建并启动完整服务 ```bash docker compose --profile prod up -d --build ``` Compose 会执行以下构建: - `backend/Dockerfile`:使用 Maven 构建 `agileboot-admin`,运行 Spring Boot Jar。 - `frontend/web/Dockerfile`:构建 Web 静态文件,并用 Nginx 提供访问。 Web 容器中的 Nginx 会把 `/prod-api/` 代理到 Compose 内部的后端服务 `app:8080`。 ### 3. 访问服务 默认访问地址: ```text Web:http://localhost:8081 后端:http://localhost:8080 ``` 如果修改了 `.env` 中的 `WEB_PORT` 或 `APP_PORT`,以实际端口为准。 ### 4. 常用运维命令 查看服务状态: ```bash docker compose --profile prod ps ``` 查看后端日志: ```bash docker compose --profile prod logs -f app ``` 查看 Web 日志: ```bash docker compose --profile prod logs -f web ``` 停止服务: ```bash docker compose --profile prod down ``` 停止并删除数据卷: ```bash docker compose --profile prod down -v ``` `down -v` 会删除数据库和 Redis 数据,生产环境谨慎使用。