# 串口-MQTT 转发网关 Docker部署指南

本文档提供了使用Docker和Docker Compose部署串口-MQTT转发网关应用程序的详细指南。

## 前提条件

在开始之前，请确保您已安装以下软件并处于运行状态：

- [Docker](https://www.docker.com/get-started) - 请确保Docker守护进程已启动
- [Docker Compose](https://docs.docker.com/compose/install/)

### 启动Docker守护进程

如果遇到`Cannot connect to the Docker daemon at unix:///Users/xxx/.docker/run/docker.sock`错误，请确保Docker守护进程已启动：

**在macOS上**：
- 打开Docker Desktop应用
- 等待Docker图标在菜单栏中变为绿色，表示守护进程已启动

**在Linux上**：
```bash
sudo systemctl start docker
```

**在Windows上**：
- 打开Docker Desktop应用
- 或通过命令行启动Docker服务：
```bash
net start docker
```

## 快速开始

### 方法1：使用Docker Compose（推荐）

1. 确保您在项目根目录下（包含`docker-compose.yml`文件的目录）

2. 运行以下命令构建并启动服务：

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

这将：
- 构建Docker镜像（包括前端和后端）
- 创建并启动容器
- 将容器的5000端口映射到主机的5000端口

3. 访问应用程序

打开浏览器并访问：`http://localhost:5000`

### 方法2：仅使用Docker

如果您不想使用Docker Compose，可以直接使用Docker命令：

1. 构建镜像：

```bash
docker build -t serial-mqtt-gateway .
```

2. 运行容器：

```bash
docker run -d -p 5000:5000 --name serial-mqtt-gateway serial-mqtt-gateway
```

## 配置串口访问

如果您需要在Docker容器中访问主机的串口设备，请按照以下步骤操作：

1. 编辑`docker-compose.yml`文件，取消相关设备映射的注释并根据实际情况修改：

```yaml
devices:
  - /dev/ttyUSB0:/dev/ttyUSB0  # 修改为您实际的串口设备路径
```

2. 重启服务：

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

## 连接到外部MQTT代理

如果您需要连接到外部MQTT代理，可以通过以下方式配置：

1. 在应用程序的Web界面中配置MQTT连接参数
2. 或者修改`docker-compose.yml`文件，添加网络配置（如果MQTT代理也在Docker中运行）

## 查看日志

要查看应用程序的日志，可以使用以下命令：

```bash
docker-compose logs -f
```

## 停止和重启服务

### 停止服务

```bash
docker-compose down
```

### 重启服务

```bash
docker-compose restart
```

## 常见问题排查

1. **端口冲突**：如果端口5000已被占用，可以修改`docker-compose.yml`文件中的端口映射：

```yaml
ports:
  - "8080:5000"  # 将容器的5000端口映射到主机的8080端口
```

2. **串口访问权限**：确保您有足够的权限访问主机上的串口设备

3. **构建失败**：如果构建过程中遇到问题，请检查是否有网络连接问题或依赖项安装失败

## 注意事项

- 生产环境中建议配置适当的环境变量来增强安全性
- 对于高可用性部署，可以考虑使用Docker Swarm或Kubernetes
- 定期更新Docker镜像以获取最新的安全补丁

## 许可证

[在此添加许可证信息]