# 泉友米车友会 - 部署说明

版本: 0.0.1

## 🚀 快速部署（推荐）

### Windows 用户

```cmd
# 1. 构建镜像
build.bat

# 2. 启动服务
docker-compose up -d

# 3. 初始化管理员
docker exec -it quanyoumi-app sh
node init-admin.js
```

### Linux/Mac 用户

```bash
# 1. 构建镜像
chmod +x build.sh
./build.sh

# 2. 启动服务
docker-compose up -d

# 3. 初始化管理员
docker exec -it quanyoumi-app sh
node init-admin.js
```

## 📝 部署前准备

### 1. 修改配置文件

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

```yaml
environment:
  - DB_PASSWORD=your_mysql_password        # 修改数据库密码
  - JWT_SECRET=your_jwt_secret_key         # 修改JWT密钥（随机字符串）
  - AMAP_KEY=your_amap_key                 # 填入高德地图Key
```

同时修改 MySQL 服务的密码：

```yaml
db:
  environment:
    - MYSQL_ROOT_PASSWORD=your_mysql_password  # 与上面保持一致
```

### 2. 获取高德地图 Key

1. 访问 https://console.amap.com/
2. 注册/登录账号
3. 创建应用，选择 Web 端（JS API）
4. 复制 Key 填入配置

## 🔧 详细步骤

### 步骤 1: 构建 Docker 镜像

镜像包含前端（Vue3）和后端（Node.js），版本号 0.0.1。

**Windows:**
```cmd
build.bat
```

**Linux/Mac:**
```bash
chmod +x build.sh
./build.sh
```

### 步骤 2: 启动服务

使用 docker-compose 启动完整环境（应用+MySQL+MinIO）：

```bash
docker-compose up -d
```

查看启动状态：
```bash
docker-compose ps
```

查看日志：
```bash
docker-compose logs -f app
```

### 步骤 3: 初始化数据库

数据库会自动初始化（使用 database.sql），等待约 30 秒。

检查数据库是否就绪：
```bash
docker-compose logs db | grep "ready for connections"
```

### 步骤 4: 创建管理员账号

进入应用容器：
```bash
docker exec -it quanyoumi-app sh
```

运行初始化脚本：
```bash
node init-admin.js
```

按提示输入：
- 用户名（例如：admin）
- 密码（至少6位）
- 确认密码

退出容器：
```bash
exit
```

### 步骤 5: 访问应用

- **前端页面**: http://localhost:3000
- **后台管理**: http://localhost:3000/admin/login
- **MinIO 控制台**: http://localhost:9001 (minioadmin/minioadmin)

## 📦 镜像信息

- **镜像名称**: quanyoumi-app
- **版本**: 0.0.1
- **基础镜像**: node:18-alpine
- **大小**: 约 200MB
- **包含内容**: 
  - 前端构建产物（Vue3 + Vant4）
  - 后端服务（Node.js + Express）
  - 依赖包（仅生产环境）

## 🔍 验证部署

### 1. 检查服务状态

```bash
docker-compose ps
```

应该看到 3 个服务都是 Up 状态：
- quanyoumi-app
- quanyoumi-db
- quanyoumi-minio

### 2. 检查应用日志

```bash
docker-compose logs app
```

应该看到：
```
服务器运行在 http://localhost:3000
运行模式: 生产环境（前后端一体）
```

### 3. 测试访问

浏览器访问 http://localhost:3000，应该能看到首页。

## 🛠️ 常见问题

### 问题 1: 端口被占用

错误信息：`port is already allocated`

解决方法：
```bash
# 修改 docker-compose.yml 中的端口映射
ports:
  - "3001:3000"  # 改为其他端口
```

### 问题 2: 数据库连接失败

错误信息：`ECONNREFUSED` 或 `Access denied`

解决方法：
1. 检查数据库是否启动：`docker-compose ps db`
2. 检查密码是否一致（app 和 db 的密码要相同）
3. 等待数据库完全启动（约 30 秒）

### 问题 3: 前端页面空白

解决方法：
1. 检查浏览器控制台是否有错误
2. 确认后端 API 是否正常：访问 http://localhost:3000/api/activities
3. 重新构建镜像：`docker-compose build --no-cache`

### 问题 4: 图片上传失败

解决方法：
1. 检查 MinIO 是否运行：`docker-compose ps minio`
2. 访问 MinIO 控制台创建 bucket：http://localhost:9001
3. 检查环境变量配置是否正确

## 🔄 更新应用

```bash
# 1. 停止服务
docker-compose down

# 2. 拉取最新代码
git pull

# 3. 重新构建
docker-compose build --no-cache

# 4. 启动服务
docker-compose up -d
```

## 🗑️ 清理

### 停止服务（保留数据）
```bash
docker-compose down
```

### 完全清理（删除数据）
```bash
docker-compose down -v
```

### 删除镜像
```bash
docker rmi quanyoumi-app:0.0.1
```

## 📊 生产环境建议

1. **使用反向代理**
   - 推荐使用 Nginx 或 Caddy
   - 配置 HTTPS 证书
   - 设置域名

2. **修改默认密码**
   - MySQL root 密码
   - MinIO 访问密钥
   - JWT 密钥（长随机字符串）

3. **数据备份**
   - 定期备份 MySQL 数据
   - 备份 MinIO 存储
   - 备份上传文件

4. **监控告警**
   - 配置日志收集
   - 设置资源监控
   - 配置告警通知

5. **安全加固**
   - 限制数据库外部访问
   - 使用防火墙规则
   - 定期更新镜像

## 📞 技术支持

如有问题，请查看：
1. 应用日志：`docker-compose logs app`
2. 数据库日志：`docker-compose logs db`
3. MinIO 日志：`docker-compose logs minio`

或联系技术支持团队。
