Files
2026-05-26 11:54:24 +08:00

233 lines
5.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Simple Todo
`simple-todo` 是一个前后端分离的待办/后台管理模板项目。后端基于 AgileBoot 的 Spring Boot 分层架构改造,前端包含 Web 管理端和 Taro 多端应用,根目录提供 Docker Compose 用于本地依赖启动和生产部署。
## 项目架构
### 原仓库地址
当前项目是在以下开源项目基础上改造:
- 后端原仓库:<https://github.com/valarchie/AgileBoot-Back-End>
- Web 前端原仓库:<https://github.com/valarchie/agileboot-front-end-pure>
- Web UI 上游项目:<https://github.com/pure-admin/vue-pure-admin>
### 目录结构
```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
- pnpmDockerfile 中使用 `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
Webhttp://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 数据,生产环境谨慎使用。