# Urban Lifeline Docker 部署指南

## 目录结构

```
docker/
├── docker-compose.yml          # 总控 compose 文件
├── Makefile                    # 构建管理脚本
├── .env.example                # 环境变量模板
├── README.md                   # 本文档
│
├── infra/                      # Level 1: 基础设施
│   └── docker-compose.yml      # Nacos, MinIO, Jitsi Meet
│
├── urbanLifeline/
│   ├── serv/                   # Level 2: 后端服务
│   │   ├── docker-compose.yml
│   │   ├── Dockerfile.base     # 基础镜像
│   │   ├── Dockerfile.template # 服务镜像模板
│   │   └── start.sh            # 启动脚本
│   │
│   └── web/                    # Level 3: 前端服务
│       ├── docker-compose.yml
│       ├── Dockerfile
│       └── nginx/              # Nginx 配置
│           ├── nginx.conf
│           └── conf.d/
│
├── dify/                       # Dify AI 平台（独立管理）
│   └── docker-compose.yaml
│
├── volumes/                    # 数据卷目录
│   ├── nacos/
│   ├── minio/
│   ├── jitsi/
│   └── logs/
│
└── output/                     # 镜像导出目录
```

## 快速开始

### 1. 准备环境

```bash
# 复制环境变量配置
cp .env.example .env

# 编辑配置（根据实际环境修改）
vim .env
```

### 2. 编译项目

```bash
# 编译所有后端服务
make compile-serv

# 编译所有前端项目
make compile-web

# 或者一次性编译所有
make full-build
```

### 3. 构建镜像

```bash
# 构建基础镜像（首次需要）
make build-base

# 构建所有镜像
make build-all

# 或者单独构建
make build-gateway
make build-system
make build-web
```

### 4. 启动服务

```bash
# 启动所有服务
make up

# 或者分层启动
make up-infra    # 先启动基础设施
make up-serv     # 再启动后端服务
make up-web      # 最后启动前端
```

### 5. 查看状态

```bash
# 查看服务状态
make status

# 查看日志
make logs

# 查看特定服务日志
docker compose logs -f gateway
```

## 服务层级

### Level 1: 基础设施 (infra)
- **Nginx**: 反向代理 + 前端静态资源 (80/443)
- **Nacos**: 服务注册与配置中心 (8848)
- **MinIO**: 对象存储服务 (9000/9001)
- **Jitsi Meet**: 视频会议服务 (8280)

### Level 2: 后端服务 (serv)
启动顺序: gateway → system → file → auth → ai → workcase

| 服务 | 端口 | 说明 |
|------|------|------|
| gateway | 8080 | API 网关 |
| system | 8082 | 系统服务 |
| file | 8084 | 文件服务 |
| auth | 8081 | 认证服务 |
| ai | 8090 | AI 服务 |
| workcase | 8088 | 工单服务 |

### Level 3: 前端应用 (web)
前端静态资源已打包到 Nginx 镜像中，由 infra 层的 Nginx 服务提供：
- /platform - 管理平台
- /workcase - 工单系统

## 常用命令

```bash
# 构建
make build-all          # 构建所有镜像
make build-gateway      # 构建单个服务

# 运行
make up                 # 启动所有
make up-infra           # 只启动基础设施
make down               # 停止所有

# 导出
make save-all           # 导出所有镜像
make save-gateway       # 导出单个镜像

# 清理
make clean              # 清理构建产物
make clean-images       # 清理 Docker 镜像
```

## 单独管理子服务

每个子目录都有独立的 docker-compose.yml，可以单独管理：

```bash
# 只管理基础设施
cd infra
docker compose up -d nacos
docker compose logs -f nacos

# 只管理后端服务
cd urbanLifeline/serv
docker compose up -d gateway
docker compose restart system
```

## 镜像导出与部署

```bash
# 导出所有镜像
make save-all

# 镜像文件在 output/ 目录
ls -la output/

# 在目标服务器加载镜像
docker load -i urban-lifeline-gateway_20251228_120000.tar
docker load -i urban-lifeline-web_20251228_120000.tar
```

## 注意事项

1. **首次部署**需要先构建基础镜像: `make build-base`
2. **MySQL** 需要在宿主机或单独容器中运行，配置 `MYSQL_HOST`
3. **Dify** 有独立的 docker-compose，在 `dify/` 目录单独管理
4. 修改 `.env` 后需要重启服务才能生效
5. 生产环境建议配置 SSL 证书
