08ea5fbe98
添加用户管理视图、API和状态管理文件
8.6 KiB
8.6 KiB
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+
启动开发环境
# 启动数据库
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在每次代码提交时自动执行以下步骤:
-
代码检查
- API:
mvn spotless:check - Admin:
npm run lint - UniApp:
npm run lint
- API:
-
单元测试
- API:
mvn test - Admin:
npm run test - UniApp:
npm run test
- API:
-
E2E测试
- Admin:
npm run test:e2e - UniApp:
npm run test:e2e
- Admin:
-
构建Docker镜像
- 推送到Docker Registry
- 标签:
latest和${CI_COMMIT_SHA:0:8}
-
部署
- 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. 准备部署环境
# 安装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 文件:
# 数据库密码
POSTGRES_PASSWORD=your_secure_password
# Docker Registry配置
DOCKER_REGISTRY=registry.example.com
DOCKER_USERNAME=your-username
DOCKER_PASSWORD=your-password
3. 启动服务
# 拉取镜像
docker-compose pull
# 启动所有服务
docker-compose up -d
# 查看服务状态
docker-compose ps
# 查看日志
docker-compose logs -f
4. 验证部署
# 检查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
# 启动所有服务
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
容器管理
# 查看运行中的容器
docker ps
# 查看容器日志
docker logs -f [container-id]
# 进入容器
docker exec -it [container-id] sh
# 重启容器
docker restart [container-id]
监控和日志
日志查看
# 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
健康检查
# 检查所有服务健康状态
docker-compose ps
# 检查API健康端点
curl http://localhost:8080/actuator/health
# 检查数据库连接
docker-compose exec postgres pg_isready -U postgres
备份和恢复
数据库备份
# 备份数据库
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
数据卷备份
# 备份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
故障排查
容器无法启动
# 查看容器日志
docker-compose logs [service-name]
# 检查容器状态
docker-compose ps
# 检查资源使用
docker stats
网络问题
# 检查网络连接
docker network ls
docker network inspect everything-is-suitable_app-network
# 测试容器间连接
docker-compose exec api ping postgres
性能问题
# 查看资源使用
docker stats
# 查看容器资源限制
docker inspect [container-id] | grep -A 10 Memory
安全建议
-
修改默认密码
- 修改PostgreSQL密码
-
网络隔离
- 使用Docker网络隔离服务
- 只暴露必要的端口
-
定期更新
- 定期更新Docker镜像
- 更新依赖包
-
备份策略
- 定期备份数据库
- 备份配置文件
-
监控告警
- 配置Prometheus监控
- 配置Grafana仪表盘
- 设置告警规则