08ea5fbe98
添加用户管理视图、API和状态管理文件
350 lines
8.6 KiB
Markdown
350 lines
8.6 KiB
Markdown
# CI/CD部署文档
|
||
|
||
## 架构概览
|
||
|
||
本项目采用Forgejo + Woodpecker CI + Docker Registry的CI/CD架构,通过docker-compose进行容器化部署。
|
||
|
||
```
|
||
┌─────────────────────────────────────────────────────────────┐
|
||
│ Forgejo (代码仓库) │
|
||
│ Woodpecker CI (CI/CD) │
|
||
│ Docker Registry (镜像仓库) │
|
||
└─────────────────────────────────────────────────────────────┘
|
||
↓
|
||
构建Docker镜像并推送
|
||
↓
|
||
┌─────────────────────────────────────────────────────────────┐
|
||
│ docker-compose 部署 │
|
||
├─────────────────────────────────────────────────────────────┤
|
||
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
|
||
│ │ API容器 │ │ Admin容器 │ │ UniApp容器 │ │
|
||
│ │ (Spring Boot) │ │ (Nginx) │ │ (Nginx) │ │
|
||
│ └──────────────┘ └──────────────┘ └──────────────┘ │
|
||
│ ┌──────────────┐ │
|
||
│ │ PostgreSQL │ │
|
||
│ └──────────────┘ │
|
||
└─────────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
## 项目结构
|
||
|
||
```
|
||
everything-is-suitable/
|
||
├── everything-is-suitable-api/ # Spring Boot API
|
||
│ ├── Dockerfile # API镜像构建文件
|
||
│ └── pom.xml # Maven配置
|
||
├── everything-is-suitable-admin/ # Vue 3 Admin
|
||
│ ├── Dockerfile # Admin镜像构建文件
|
||
│ ├── nginx.conf # Nginx配置
|
||
│ └── package.json # npm配置
|
||
├── everything-is-suitable-uniapp/ # UniApp移动端
|
||
│ ├── Dockerfile # UniApp镜像构建文件
|
||
│ ├── nginx.conf # Nginx配置
|
||
│ └── package.json # npm配置
|
||
├── docker-compose.yml # 生产环境部署编排
|
||
└── .woodpecker.yml # Woodpecker CI配置
|
||
```
|
||
|
||
## 本地开发
|
||
|
||
### 前置要求
|
||
|
||
- Docker 20.10+
|
||
- Docker Compose 2.0+
|
||
- Node.js 20+
|
||
- Java 21+
|
||
- Maven 3.9+
|
||
|
||
### 启动开发环境
|
||
|
||
```bash
|
||
# 启动数据库
|
||
docker-compose up -d postgres
|
||
|
||
# 启动API
|
||
cd everything-is-suitable-api
|
||
mvn spring-boot:run -Dspring-boot.run.profiles=local
|
||
|
||
# 启动Admin
|
||
cd ../everything-is-suitable-admin
|
||
npm run dev
|
||
|
||
# 启动UniApp
|
||
cd ../everything-is-suitable-uniapp
|
||
npm run dev:h5
|
||
```
|
||
|
||
## CI/CD流程
|
||
|
||
### Woodpecker CI流水线
|
||
|
||
Woodpecker CI在每次代码提交时自动执行以下步骤:
|
||
|
||
1. **代码检查**
|
||
- API: `mvn spotless:check`
|
||
- Admin: `npm run lint`
|
||
- UniApp: `npm run lint`
|
||
|
||
2. **单元测试**
|
||
- API: `mvn test`
|
||
- Admin: `npm run test`
|
||
- UniApp: `npm run test`
|
||
|
||
3. **E2E测试**
|
||
- Admin: `npm run test:e2e`
|
||
- UniApp: `npm run test:e2e`
|
||
|
||
4. **构建Docker镜像**
|
||
- 推送到Docker Registry
|
||
- 标签: `latest` 和 `${CI_COMMIT_SHA:0:8}`
|
||
|
||
5. **部署**
|
||
- SSH连接到部署服务器
|
||
- 拉取最新镜像
|
||
- 重启容器
|
||
|
||
### Woodpecker Secrets配置
|
||
|
||
在Forgejo仓库设置中配置以下Secrets:
|
||
|
||
| Secret名称 | 说明 | 示例 |
|
||
|-----------|------|------|
|
||
| `DOCKER_REGISTRY` | Docker Registry地址 | `registry.example.com` |
|
||
| `DOCKER_USERNAME` | Docker用户名 | `your-username` |
|
||
| `DOCKER_PASSWORD` | Docker密码 | `your-password` |
|
||
| `SSH_PRIVATE_KEY` | SSH私钥 | `-----BEGIN RSA PRIVATE KEY-----...` |
|
||
| `DEPLOY_HOST` | 部署服务器地址 | `deploy.example.com` |
|
||
| `DEPLOY_USER` | 部署服务器用户名 | `deploy` |
|
||
| `DEPLOY_PATH` | 部署路径 | `/opt/everything-is-suitable` |
|
||
|
||
## 生产部署
|
||
|
||
### 1. 准备部署环境
|
||
|
||
```bash
|
||
# 安装Docker和Docker Compose
|
||
curl -fsSL https://get.docker.com | sh
|
||
sudo usermod -aG docker $USER
|
||
|
||
# 创建部署目录
|
||
mkdir -p /opt/everything-is-suitable
|
||
cd /opt/everything-is-suitable
|
||
|
||
# 复制配置文件
|
||
cp docker-compose.yml .
|
||
cp .env.example .env
|
||
```
|
||
|
||
### 2. 配置环境变量
|
||
|
||
编辑 `.env` 文件:
|
||
|
||
```bash
|
||
# 数据库密码
|
||
POSTGRES_PASSWORD=your_secure_password
|
||
|
||
# Docker Registry配置
|
||
DOCKER_REGISTRY=registry.example.com
|
||
DOCKER_USERNAME=your-username
|
||
DOCKER_PASSWORD=your-password
|
||
```
|
||
|
||
### 3. 启动服务
|
||
|
||
```bash
|
||
# 拉取镜像
|
||
docker-compose pull
|
||
|
||
# 启动所有服务
|
||
docker-compose up -d
|
||
|
||
# 查看服务状态
|
||
docker-compose ps
|
||
|
||
# 查看日志
|
||
docker-compose logs -f
|
||
```
|
||
|
||
### 4. 验证部署
|
||
|
||
```bash
|
||
# 检查API健康状态
|
||
curl http://localhost:8080/actuator/health
|
||
|
||
# 检查Admin页面
|
||
curl http://localhost/
|
||
|
||
# 检查UniApp页面
|
||
curl http://localhost:8081/
|
||
```
|
||
|
||
## 服务端口
|
||
|
||
| 服务 | 端口 | 说明 |
|
||
|------|------|------|
|
||
| Admin | 80 | 管理后台 |
|
||
| API | 8080 | 后端API |
|
||
| UniApp | 8081 | 移动端H5 |
|
||
| PostgreSQL | 5432 | 数据库 |
|
||
|
||
## 常用命令
|
||
|
||
### Docker Compose
|
||
|
||
```bash
|
||
# 启动所有服务
|
||
docker-compose up -d
|
||
|
||
# 停止所有服务
|
||
docker-compose down
|
||
|
||
# 重启服务
|
||
docker-compose restart
|
||
|
||
# 查看日志
|
||
docker-compose logs -f [service-name]
|
||
|
||
# 查看服务状态
|
||
docker-compose ps
|
||
|
||
# 更新镜像并重启
|
||
docker-compose pull && docker-compose up -d
|
||
```
|
||
|
||
### 容器管理
|
||
|
||
```bash
|
||
# 查看运行中的容器
|
||
docker ps
|
||
|
||
# 查看容器日志
|
||
docker logs -f [container-id]
|
||
|
||
# 进入容器
|
||
docker exec -it [container-id] sh
|
||
|
||
# 重启容器
|
||
docker restart [container-id]
|
||
```
|
||
|
||
## 监控和日志
|
||
|
||
### 日志查看
|
||
|
||
```bash
|
||
# API日志
|
||
docker-compose logs -f api
|
||
|
||
# Admin日志
|
||
docker-compose logs -f admin
|
||
|
||
# UniApp日志
|
||
docker-compose logs -f uniapp
|
||
|
||
# 数据库日志
|
||
docker-compose logs -f postgres
|
||
|
||
# 所有服务日志
|
||
docker-compose logs -f
|
||
```
|
||
|
||
### 健康检查
|
||
|
||
```bash
|
||
# 检查所有服务健康状态
|
||
docker-compose ps
|
||
|
||
# 检查API健康端点
|
||
curl http://localhost:8080/actuator/health
|
||
|
||
# 检查数据库连接
|
||
docker-compose exec postgres pg_isready -U postgres
|
||
```
|
||
|
||
## 备份和恢复
|
||
|
||
### 数据库备份
|
||
|
||
```bash
|
||
# 备份数据库
|
||
docker-compose exec postgres pg_dump -U postgres everything_is_suitable > backup.sql
|
||
|
||
# 恢复数据库
|
||
docker-compose exec -T postgres psql -U postgres everything_is_suitable < backup.sql
|
||
```
|
||
|
||
### 数据卷备份
|
||
|
||
```bash
|
||
# 备份PostgreSQL数据卷
|
||
docker run --rm -v everything-is-suitable_postgres_data:/data -v $(pwd):/backup alpine tar czf /backup/postgres_data_backup.tar.gz -C /data .
|
||
|
||
# 恢复PostgreSQL数据卷
|
||
docker run --rm -v everything-is-suitable_postgres_data:/data -v $(pwd):/backup alpine tar xzf /backup/postgres_data_backup.tar.gz -C /data
|
||
```
|
||
|
||
## 故障排查
|
||
|
||
### 容器无法启动
|
||
|
||
```bash
|
||
# 查看容器日志
|
||
docker-compose logs [service-name]
|
||
|
||
# 检查容器状态
|
||
docker-compose ps
|
||
|
||
# 检查资源使用
|
||
docker stats
|
||
```
|
||
|
||
### 网络问题
|
||
|
||
```bash
|
||
# 检查网络连接
|
||
docker network ls
|
||
docker network inspect everything-is-suitable_app-network
|
||
|
||
# 测试容器间连接
|
||
docker-compose exec api ping postgres
|
||
```
|
||
|
||
### 性能问题
|
||
|
||
```bash
|
||
# 查看资源使用
|
||
docker stats
|
||
|
||
# 查看容器资源限制
|
||
docker inspect [container-id] | grep -A 10 Memory
|
||
```
|
||
|
||
## 安全建议
|
||
|
||
1. **修改默认密码**
|
||
- 修改PostgreSQL密码
|
||
|
||
2. **网络隔离**
|
||
- 使用Docker网络隔离服务
|
||
- 只暴露必要的端口
|
||
|
||
3. **定期更新**
|
||
- 定期更新Docker镜像
|
||
- 更新依赖包
|
||
|
||
4. **备份策略**
|
||
- 定期备份数据库
|
||
- 备份配置文件
|
||
|
||
5. **监控告警**
|
||
- 配置Prometheus监控
|
||
- 配置Grafana仪表盘
|
||
- 设置告警规则
|
||
|
||
## 扩展阅读
|
||
|
||
- [Docker Compose文档](https://docs.docker.com/compose/)
|
||
- [Woodpecker CI文档](https://woodpecker-ci.org/docs/)
|
||
- [Spring Boot Docker部署](https://spring.io/guides/topicals/spring-boot-docker/)
|
||
- [Nginx配置指南](https://nginx.org/en/docs/)
|