# 简化版 Docker 部署指南

这是一个简化的 Docker 部署方案，直接使用已经打包好的 jar 包和 dist 文件，无需在容器内重新构建。

## 📁 目录结构

```
deploy/
├── docker-compose.yml          # Docker Compose 配置文件
├── backend/                    # 后端部署目录
│   ├── Dockerfile             # 后端 Dockerfile
│   └── ruoyi-admin.jar        # 【需要放置】后端 jar 包
├── frontend/                   # 前端部署目录
│   ├── Dockerfile             # 前端 Dockerfile
│   ├── nginx.conf             # Nginx 配置文件
│   └── dist/                  # 【需要放置】前端打包文件
└── sql/                        # 【可选】数据库初始化脚本
    └── ry_20xx.sql
```

## 🚀 快速部署步骤

### 1. 准备文件

将以下文件上传到服务器的 `deploy` 目录：

```bash
# 1. 将后端 jar 包放到 backend 目录
deploy/backend/ruoyi-admin.jar

# 2. 将前端 dist 文件夹放到 frontend 目录
deploy/frontend/dist/

# 3. （可选）将数据库初始化脚本放到 sql 目录
deploy/sql/ry_20xx.sql
```

### 2. 修改配置

编辑 `docker-compose.yml`，根据需要修改以下配置：

```yaml
# MySQL 配置
environment:
  MYSQL_ROOT_PASSWORD: password      # 修改为你的密码
  MYSQL_DATABASE: ry-vue            # 数据库名称

# 端口配置（如果端口冲突，可以修改）
ports:
  - "3306:3306"  # MySQL
  - "6379:6379"  # Redis
  - "8080:8080"  # 后端
  - "8081:80"    # 前端
```

### 3. 启动服务

```bash
# 进入 deploy 目录
cd deploy

# 启动所有服务
docker-compose up -d

# 查看服务状态
docker-compose ps

# 查看日志
docker-compose logs -f
```

### 4. 访问应用

- **前端地址**: `http://your-server-ip:8081/ashai-wecom-test`
- **后端 API**: `http://your-server-ip:8080`
- **默认账号**: admin / admin123

## 📝 常用命令

```bash
# 启动所有服务
docker-compose up -d

# 停止所有服务
docker-compose down

# 重启某个服务
docker-compose restart backend
docker-compose restart frontend

# 查看服务日志
docker-compose logs -f backend
docker-compose logs -f frontend

# 查看服务状态
docker-compose ps

# 进入容器
docker exec -it wecom-backend sh
docker exec -it wecom-frontend sh

# 重新构建并启动
docker-compose up -d --build

# 停止并删除所有容器、网络、数据卷
docker-compose down -v
```

## 🔄 更新部署

### 更新后端

```bash
# 1. 停止后端服务
docker-compose stop backend

# 2. 替换 jar 包
cp new-ruoyi-admin.jar backend/ruoyi-admin.jar

# 3. 重新构建并启动
docker-compose up -d --build backend
```

### 更新前端

```bash
# 1. 停止前端服务
docker-compose stop frontend

# 2. 替换 dist 文件
rm -rf frontend/dist
cp -r new-dist frontend/dist

# 3. 重新构建并启动
docker-compose up -d --build frontend
```

## 🔧 配置说明

### 后端配置

后端使用 `--spring.profiles.active=prod` 启动，确保你的 jar 包中包含正确的生产环境配置：

- 数据库连接：`jdbc:mysql://mysql:3306/ry-vue`
- Redis 连接：`redis://redis:6379`

如果需要修改配置，可以通过环境变量或重新打包 jar。

### 前端配置

前端通过 Nginx 提供服务，配置文件在 [frontend/nginx.conf](frontend/nginx.conf)：

- 访问路径：`/ashai-wecom-test`
- API 代理：`/ashai-wecom-test/prod-api/` → `http://backend:8080/`

### 数据库初始化

首次启动时，如果 `sql` 目录中有 `.sql` 文件，MySQL 会自动执行这些脚本。

如果需要手动导入：

```bash
# 复制 SQL 文件到容器
docker cp ry_20xx.sql wecom-mysql:/tmp/

# 进入 MySQL 容器
docker exec -it wecom-mysql bash

# 导入数据库
mysql -uroot -ppassword ry-vue < /tmp/ry_20xx.sql
```

## 🌐 集成到现有 Nginx（80 端口）

如果服务器 80 端口已有 Nginx，可以添加反向代理配置：

```nginx
# 在你的 Nginx 配置中添加
location /ashai-wecom-test {
    proxy_pass http://localhost:8081/ashai-wecom-test;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
}
```

然后重启 Nginx：

```bash
nginx -t
nginx -s reload
```

## 🐛 故障排查

### 1. 后端无法连接数据库

```bash
# 检查 MySQL 是否启动
docker-compose ps mysql

# 查看 MySQL 日志
docker-compose logs mysql

# 检查网络连接
docker exec -it wecom-backend ping mysql
```

### 2. 前端无法访问后端 API

```bash
# 检查后端是否启动
docker-compose ps backend

# 查看后端日志
docker-compose logs backend

# 测试后端接口
curl http://localhost:8080/
```

### 3. 前端页面 404

```bash
# 检查 dist 文件是否正确放置
docker exec -it wecom-frontend ls -la /usr/share/nginx/html/ashai-wecom-test

# 查看 Nginx 日志
docker-compose logs frontend

# 检查 Nginx 配置
docker exec -it wecom-frontend cat /etc/nginx/conf.d/default.conf
```

### 4. 端口被占用

```bash
# 查看端口占用
netstat -tulpn | grep 8080
netstat -tulpn | grep 8081

# 修改 docker-compose.yml 中的端口映射
ports:
  - "8082:8080"  # 改为其他端口
```

### 5. 容器启动失败

```bash
# 查看详细日志
docker-compose logs -f

# 检查容器状态
docker-compose ps

# 重新构建
docker-compose down
docker-compose up -d --build
```

## 📊 数据持久化

所有数据都通过 Docker 卷持久化：

- `mysql_data`: MySQL 数据
- `redis_data`: Redis 数据
- `upload_data`: 文件上传目录

即使删除容器，数据也不会丢失。如需完全清理：

```bash
docker-compose down -v
```

## 🔒 安全建议

1. **修改默认密码**：修改 MySQL root 密码和应用管理员密码
2. **限制端口访问**：使用防火墙限制数据库端口的外部访问
3. **使用 HTTPS**：在生产环境配置 SSL 证书
4. **定期备份**：定期备份数据库和上传文件

## 📈 性能优化

1. **调整 JVM 参数**：在 [backend/Dockerfile](backend/Dockerfile) 中添加 JVM 参数
2. **配置 Nginx 缓存**：已在 [frontend/nginx.conf](frontend/nginx.conf) 中配置
3. **数据库优化**：根据实际情况调整 MySQL 配置

## 💡 提示

- 首次启动可能需要等待 1-2 分钟，等待数据库初始化
- 确保服务器有足够的内存（建议至少 2GB）
- 生产环境建议使用外部数据库，而不是容器内的数据库
