367 lines
6.9 KiB
Markdown
367 lines
6.9 KiB
Markdown
|
|
# 🐳 WWJCloud Docker 部署指南
|
|||
|
|
|
|||
|
|
## 📋 目录结构
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
wwjcloud-nsetjs/
|
|||
|
|
├── docker-compose.yml # 生产环境配置
|
|||
|
|
├── docker-compose.dev.yml # 开发环境配置(仅MySQL+Redis)
|
|||
|
|
├── wwjcloud-nest/
|
|||
|
|
│ ├── Dockerfile # NestJS后端镜像
|
|||
|
|
│ ├── .dockerignore # Docker忽略文件
|
|||
|
|
│ └── admin/
|
|||
|
|
│ ├── Dockerfile # Admin前端镜像
|
|||
|
|
│ ├── nginx.conf # Nginx配置
|
|||
|
|
│ └── .dockerignore # Docker忽略文件
|
|||
|
|
└── sql/
|
|||
|
|
└── wwjcloud.sql # 数据库初始化脚本
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 🚀 快速开始
|
|||
|
|
|
|||
|
|
### 方式1:完整部署(推荐用于测试)
|
|||
|
|
|
|||
|
|
启动所有服务(MySQL + Redis + NestJS + Admin):
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 构建并启动所有服务
|
|||
|
|
docker-compose up -d --build
|
|||
|
|
|
|||
|
|
# 查看服务状态
|
|||
|
|
docker-compose ps
|
|||
|
|
|
|||
|
|
# 查看日志
|
|||
|
|
docker-compose logs -f
|
|||
|
|
|
|||
|
|
# 停止所有服务
|
|||
|
|
docker-compose down
|
|||
|
|
|
|||
|
|
# 停止并删除数据卷(⚠️ 会清空数据库)
|
|||
|
|
docker-compose down -v
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
访问地址:
|
|||
|
|
- **Admin管理面板**: http://localhost
|
|||
|
|
- **NestJS API**: http://localhost:3000
|
|||
|
|
- **MySQL**: localhost:3306
|
|||
|
|
- **Redis**: localhost:6379
|
|||
|
|
|
|||
|
|
### 方式2:开发模式(仅基础设施)
|
|||
|
|
|
|||
|
|
只启动MySQL和Redis,本地运行NestJS和Admin:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 启动MySQL和Redis
|
|||
|
|
docker-compose -f docker-compose.dev.yml up -d
|
|||
|
|
|
|||
|
|
# 本地启动NestJS
|
|||
|
|
cd wwjcloud-nest
|
|||
|
|
npm install
|
|||
|
|
npm run start:dev
|
|||
|
|
|
|||
|
|
# 本地启动Admin(新终端)
|
|||
|
|
cd wwjcloud-nest/admin
|
|||
|
|
npm install
|
|||
|
|
npm run dev
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
访问地址:
|
|||
|
|
- **Admin管理面板**: http://localhost:5173
|
|||
|
|
- **NestJS API**: http://localhost:3000
|
|||
|
|
|
|||
|
|
## 📊 服务详情
|
|||
|
|
|
|||
|
|
### 1. MySQL 数据库
|
|||
|
|
|
|||
|
|
```yaml
|
|||
|
|
容器名: wwjcloud-mysql
|
|||
|
|
端口: 3306
|
|||
|
|
数据库: wwjcloud
|
|||
|
|
用户: wwjcloud
|
|||
|
|
密码: wwjcloud123
|
|||
|
|
Root密码: root123456
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**连接字符串**:
|
|||
|
|
```
|
|||
|
|
mysql://wwjcloud:wwjcloud123@localhost:3306/wwjcloud
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2. Redis 缓存
|
|||
|
|
|
|||
|
|
```yaml
|
|||
|
|
容器名: wwjcloud-redis
|
|||
|
|
端口: 6379
|
|||
|
|
密码: redis123456
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**连接字符串**:
|
|||
|
|
```
|
|||
|
|
redis://:redis123456@localhost:6379
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 3. NestJS 后端
|
|||
|
|
|
|||
|
|
```yaml
|
|||
|
|
容器名: wwjcloud-nestjs
|
|||
|
|
端口: 3000
|
|||
|
|
健康检查: http://localhost:3000/health
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**环境变量**:
|
|||
|
|
- `NODE_ENV`: production
|
|||
|
|
- `DB_HOST`: mysql
|
|||
|
|
- `DB_PORT`: 3306
|
|||
|
|
- `REDIS_HOST`: redis
|
|||
|
|
- `REDIS_PORT`: 6379
|
|||
|
|
|
|||
|
|
### 4. Admin 前端
|
|||
|
|
|
|||
|
|
```yaml
|
|||
|
|
容器名: wwjcloud-admin
|
|||
|
|
端口: 80
|
|||
|
|
Web服务器: Nginx
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**特性**:
|
|||
|
|
- Vue Router History模式
|
|||
|
|
- API自动代理到NestJS后端
|
|||
|
|
- Gzip压缩
|
|||
|
|
- 静态资源缓存
|
|||
|
|
|
|||
|
|
## 🔧 常用命令
|
|||
|
|
|
|||
|
|
### 查看日志
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 查看所有服务日志
|
|||
|
|
docker-compose logs -f
|
|||
|
|
|
|||
|
|
# 查看特定服务日志
|
|||
|
|
docker-compose logs -f nestjs-backend
|
|||
|
|
docker-compose logs -f admin-frontend
|
|||
|
|
docker-compose logs -f mysql
|
|||
|
|
docker-compose logs -f redis
|
|||
|
|
|
|||
|
|
# 查看最近100行日志
|
|||
|
|
docker-compose logs --tail=100 nestjs-backend
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 重启服务
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 重启所有服务
|
|||
|
|
docker-compose restart
|
|||
|
|
|
|||
|
|
# 重启特定服务
|
|||
|
|
docker-compose restart nestjs-backend
|
|||
|
|
docker-compose restart admin-frontend
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 进入容器
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 进入NestJS容器
|
|||
|
|
docker-compose exec nestjs-backend sh
|
|||
|
|
|
|||
|
|
# 进入MySQL容器
|
|||
|
|
docker-compose exec mysql bash
|
|||
|
|
docker-compose exec mysql mysql -u wwjcloud -pwwjcloud123 wwjcloud
|
|||
|
|
|
|||
|
|
# 进入Redis容器
|
|||
|
|
docker-compose exec redis redis-cli -a redis123456
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 清理资源
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 停止所有服务
|
|||
|
|
docker-compose down
|
|||
|
|
|
|||
|
|
# 停止并删除数据卷(⚠️ 会清空数据库)
|
|||
|
|
docker-compose down -v
|
|||
|
|
|
|||
|
|
# 删除所有镜像
|
|||
|
|
docker-compose down --rmi all
|
|||
|
|
|
|||
|
|
# 清理所有Docker资源
|
|||
|
|
docker system prune -a
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 🐛 故障排查
|
|||
|
|
|
|||
|
|
### 1. 服务启动失败
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 查看服务状态
|
|||
|
|
docker-compose ps
|
|||
|
|
|
|||
|
|
# 查看详细日志
|
|||
|
|
docker-compose logs nestjs-backend
|
|||
|
|
|
|||
|
|
# 检查健康状态
|
|||
|
|
docker inspect wwjcloud-nestjs | grep -A 10 Health
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2. 数据库连接失败
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 检查MySQL是否就绪
|
|||
|
|
docker-compose exec mysql mysqladmin ping -h localhost -u root -proot123456
|
|||
|
|
|
|||
|
|
# 查看MySQL日志
|
|||
|
|
docker-compose logs mysql
|
|||
|
|
|
|||
|
|
# 手动连接测试
|
|||
|
|
docker-compose exec mysql mysql -u wwjcloud -pwwjcloud123 -e "SHOW DATABASES;"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 3. Redis连接失败
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 检查Redis是否就绪
|
|||
|
|
docker-compose exec redis redis-cli -a redis123456 ping
|
|||
|
|
|
|||
|
|
# 查看Redis日志
|
|||
|
|
docker-compose logs redis
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 4. 前端无法访问后端API
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 检查Nginx配置
|
|||
|
|
docker-compose exec admin-frontend cat /etc/nginx/conf.d/default.conf
|
|||
|
|
|
|||
|
|
# 测试API代理
|
|||
|
|
curl http://localhost/adminapi/health
|
|||
|
|
|
|||
|
|
# 检查网络连接
|
|||
|
|
docker-compose exec admin-frontend ping nestjs-backend
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 🔒 安全配置
|
|||
|
|
|
|||
|
|
### 生产环境建议
|
|||
|
|
|
|||
|
|
1. **修改默认密码**:
|
|||
|
|
|
|||
|
|
编辑 `docker-compose.yml`:
|
|||
|
|
```yaml
|
|||
|
|
environment:
|
|||
|
|
MYSQL_ROOT_PASSWORD: your-strong-password
|
|||
|
|
MYSQL_PASSWORD: your-strong-password
|
|||
|
|
REDIS_PASSWORD: your-strong-password
|
|||
|
|
JWT_SECRET: your-super-secret-jwt-key
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
2. **使用环境变量文件**:
|
|||
|
|
|
|||
|
|
创建 `.env` 文件:
|
|||
|
|
```env
|
|||
|
|
MYSQL_ROOT_PASSWORD=your-strong-password
|
|||
|
|
MYSQL_PASSWORD=your-strong-password
|
|||
|
|
REDIS_PASSWORD=your-strong-password
|
|||
|
|
JWT_SECRET=your-super-secret-jwt-key
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
3. **启用HTTPS**:
|
|||
|
|
|
|||
|
|
修改 `nginx.conf` 添加SSL配置。
|
|||
|
|
|
|||
|
|
4. **限制网络访问**:
|
|||
|
|
|
|||
|
|
```yaml
|
|||
|
|
services:
|
|||
|
|
mysql:
|
|||
|
|
expose:
|
|||
|
|
- "3306"
|
|||
|
|
# 不使用 ports,只在内部网络暴露
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 📈 性能优化
|
|||
|
|
|
|||
|
|
### 1. 资源限制
|
|||
|
|
|
|||
|
|
```yaml
|
|||
|
|
services:
|
|||
|
|
nestjs-backend:
|
|||
|
|
deploy:
|
|||
|
|
resources:
|
|||
|
|
limits:
|
|||
|
|
cpus: '2'
|
|||
|
|
memory: 2G
|
|||
|
|
reservations:
|
|||
|
|
cpus: '1'
|
|||
|
|
memory: 1G
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2. 数据库优化
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 连接到MySQL
|
|||
|
|
docker-compose exec mysql mysql -u root -proot123456
|
|||
|
|
|
|||
|
|
# 查看慢查询
|
|||
|
|
SHOW VARIABLES LIKE 'slow_query%';
|
|||
|
|
|
|||
|
|
# 优化表
|
|||
|
|
OPTIMIZE TABLE your_table;
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 3. Redis优化
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 查看Redis信息
|
|||
|
|
docker-compose exec redis redis-cli -a redis123456 INFO
|
|||
|
|
|
|||
|
|
# 查看内存使用
|
|||
|
|
docker-compose exec redis redis-cli -a redis123456 INFO memory
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 📦 数据备份与恢复
|
|||
|
|
|
|||
|
|
### 备份数据库
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 备份MySQL
|
|||
|
|
docker-compose exec mysql mysqldump -u root -proot123456 wwjcloud > backup_$(date +%Y%m%d).sql
|
|||
|
|
|
|||
|
|
# 备份Redis
|
|||
|
|
docker-compose exec redis redis-cli -a redis123456 SAVE
|
|||
|
|
docker cp wwjcloud-redis:/data/dump.rdb ./redis_backup_$(date +%Y%m%d).rdb
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 恢复数据库
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 恢复MySQL
|
|||
|
|
docker-compose exec -T mysql mysql -u root -proot123456 wwjcloud < backup_20241004.sql
|
|||
|
|
|
|||
|
|
# 恢复Redis
|
|||
|
|
docker cp redis_backup_20241004.rdb wwjcloud-redis:/data/dump.rdb
|
|||
|
|
docker-compose restart redis
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 🎯 测试checklist
|
|||
|
|
|
|||
|
|
- [ ] MySQL容器启动成功
|
|||
|
|
- [ ] Redis容器启动成功
|
|||
|
|
- [ ] NestJS容器启动成功
|
|||
|
|
- [ ] Admin容器启动成功
|
|||
|
|
- [ ] 所有健康检查通过
|
|||
|
|
- [ ] 可以访问Admin管理面板 (http://localhost)
|
|||
|
|
- [ ] 可以访问NestJS API (http://localhost:3000)
|
|||
|
|
- [ ] Admin可以调用后端API
|
|||
|
|
- [ ] 登录功能正常
|
|||
|
|
- [ ] 数据库连接正常
|
|||
|
|
- [ ] Redis缓存正常
|
|||
|
|
|
|||
|
|
## 📞 获取帮助
|
|||
|
|
|
|||
|
|
如遇问题,请检查:
|
|||
|
|
1. Docker和Docker Compose版本
|
|||
|
|
2. 端口占用情况 (80, 3000, 3306, 6379)
|
|||
|
|
3. 容器日志 (`docker-compose logs`)
|
|||
|
|
4. 健康检查状态 (`docker-compose ps`)
|
|||
|
|
|