9. 部署与运行
IoT Gateway 支持多种部署方式,包括本地开发环境、容器化部署和云平台部署。本文档将详细介绍各种部署方式的步骤和注意事项。
Iotgateway 网关


9.1 环境要求
9.1.1 硬件要求
| 配置项 | 最低要求 | 推荐要求 |
|---|---|---|
| CPU | 1 核 | 2 核或以上 |
| 内存 | 1 GB | 4 GB 或以上 |
| 磁盘空间 | 10 GB | 50 GB 或以上 |
| 网络 | 100 Mbps | 1 Gbps 或以上 |
9.1.2 软件要求
| 软件 | 版本 | 用途 |
|---|---|---|
| .NET 6.0 SDK | 6.0.100 或以上 | 开发和构建 |
| .NET 6.0 Runtime | 6.0.0 或以上 | 运行应用 |
| 数据库 | SQLite 3.0+ / MySQL 5.7+ / PostgreSQL 10+ / Oracle 11g+ | 数据存储 |
| MQTT 服务器 | MQTT 3.1.1 或 5.0 兼容 | 消息通信 |
| Docker | 20.10.0 或以上 | 容器化部署 |
| Docker Compose | 1.29.0 或以上 | 多容器部署 |
9.2 本地开发环境部署
9.2.1 开发环境准备
-
安装 .NET 6.0 SDK
-
按照安装向导完成安装
-
验证安装:
dotnet --version
-
安装开发工具
-
Visual Studio 2022 或更高版本
-
或 Visual Studio Code + C# 扩展
-
-
克隆代码仓库
git clone <repository-url> cd iotgateway -
还原 NuGet 包
dotnet restore
9.2.2 运行应用
9.2.2.1 使用 Visual Studio 运行
-
打开
IoTGateway.sln解决方案 -
设置
IoTGateway为启动项目 -
点击 "启动" 按钮或按 F5
-
应用将在浏览器中打开,默认地址:http://localhost:518
9.2.2.2 使用命令行运行
# 进入主项目目录
cd IoTGateway
# 运行应用
dotnet run
# 或指定环境变量
dotnet run --environment Development
9.3 发布与部署
9.3.1 发布应用
9.3.1.1 使用 Visual Studio 发布
-
右键点击
IoTGateway项目 -
选择 "发布"
-
选择发布目标(文件夹、IIS、Azure 等)
-
配置发布设置
-
点击 "发布" 按钮
9.3.1.2 使用命令行发布
# 发布到文件夹
dotnet publish IoTGateway/IoTGateway.csproj -c Release -o ./publish
# 发布到特定运行时
dotnet publish IoTGateway/IoTGateway.csproj -c Release -o ./publish --runtime linux-x64 --self-contained false
# 发布为自包含应用
dotnet publish IoTGateway/IoTGateway.csproj -c Release -o ./publish --runtime linux-x64 --self-contained true
9.3.2 部署到 Windows Server
9.3.2.1 使用 IIS 部署
-
安装 IIS
-
打开 "服务器管理器"
-
点击 "添加角色和功能"
-
选择 "Web 服务器 (IIS)"
-
按照向导完成安装
-
-
安装 .NET Core Hosting Bundle
-
选择 ".NET Core Runtime" 下的 ".NET Core Hosting Bundle"
-
按照安装向导完成安装
-
创建 IIS 网站
-
打开 "Internet Information Services (IIS) 管理器"
-
右键点击 "网站",选择 "添加网站"
-
配置网站名称、物理路径(指向发布后的文件夹)和端口
-
点击 "确定"
-
-
配置应用池
-
右键点击新创建的网站,选择 "管理网站" > "高级设置"
-
设置 "应用池" 为 ".NET Core AppPool"(如果不存在,需要创建)
-
右键点击应用池,选择 "高级设置"
-
设置 ".NET CLR 版本" 为 "无托管代码"
-
-
启动网站
-
右键点击网站,选择 "启动"
-
在浏览器中访问网站地址
-
9.3.2.2 使用 Windows 服务部署
-
安装 NSSM (Non-Sucking Service Manager)
-
解压到合适的目录
-
创建 Windows 服务
nssm install IoTGateway -
配置服务
-
在 NSSM 配置界面中,设置:
-
Path: 指向发布后的
IoTGateway.exe文件 -
Startup directory: 指向发布后的文件夹
-
Arguments: 可选的命令行参数
-
-
点击 "Install service"
-
-
启动服务
nssm start IoTGateway
9.3.3 部署到 Linux Server
9.3.3.1 安装 .NET 6.0 Runtime
Ubuntu/Debian
sudo apt-get update
sudo apt-get install -y apt-transport-https
sudo apt-get update
sudo apt-get install -y dotnet-runtime-6.0
CentOS/RHEL
sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm
sudo yum install -y dotnet-runtime-6.0
9.3.3.2 部署应用
-
复制发布文件
# 使用 SCP 复制文件到服务器 scp -r ./publish user@server:/opt/iotgateway -
创建服务文件
sudo nano /etc/systemd/system/iotgateway.service -
配置服务文件
[Unit] Description=IoT Gateway After=network.target [Service] WorkingDirectory=/opt/iotgateway ExecStart=/usr/bin/dotnet IoTGateway.dll Restart=always RestartSec=10 SyslogIdentifier=iotgateway User=www-data Environment=ASPNETCORE_ENVIRONMENT=Production [Install] WantedBy=multi-user.target -
启动服务
sudo systemctl daemon-reload sudo systemctl enable iotgateway sudo systemctl start iotgateway -
查看服务状态
sudo systemctl status iotgateway -
查看日志
sudo journalctl -fu iotgateway
9.4 容器化部署
9.4.1 Docker 部署
9.4.1.1 构建 Docker 镜像
-
创建 Dockerfile
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base WORKDIR /app EXPOSE 518 EXPOSE 1888 FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build WORKDIR /src COPY ["IoTGateway/IoTGateway.csproj", "IoTGateway/"] COPY ["IoTGateway.DataAccess/IoTGateway.DataAccess.csproj", "IoTGateway.DataAccess/"] COPY ["IoTGateway.Model/IoTGateway.Model.csproj", "IoTGateway.Model/"] COPY ["IoTGateway.ViewModel/IoTGateway.ViewModel.csproj", "IoTGateway.ViewModel/"] COPY ["Plugins/Plugin/Plugin.csproj", "Plugins/Plugin/"] COPY ["Plugins/PluginInterface/PluginInterface.csproj", "Plugins/PluginInterface/"] RUN dotnet restore "IoTGateway/IoTGateway.csproj" COPY . . WORKDIR "/src/IoTGateway" RUN dotnet build "IoTGateway.csproj" -c Release -o /app/build FROM build AS publish RUN dotnet publish "IoTGateway.csproj" -c Release -o /app/publish FROM base AS final WORKDIR /app COPY --from=publish /app/publish . ENTRYPOINT ["dotnet", "IoTGateway.dll"] -
构建镜像
docker build -t iotgateway . -
运行容器
# 运行容器 docker run -d -p 518:518 -p 1888:1888 --name iotgateway iotgateway # 挂载配置文件 docker run -d -p 518:518 -p 1888:1888 -v $(pwd)/appsettings.json:/app/appsettings.json --name iotgateway iotgateway # 挂载数据目录 docker run -d -p 518:518 -p 1888:1888 -v $(pwd)/data:/app/data --name iotgateway iotgateway
9.4.2 Docker Compose 部署
9.4.2.1 创建 docker-compose.yml 文件
version: '3.8'
services:
iotgateway:
build: .
ports:
- "518:518"
- "1888:1888"
environment:
- ASPNETCORE_ENVIRONMENT=Production
volumes:
- ./data:/app/data
- ./appsettings.json:/app/appsettings.json
depends_on:
- mqtt
- mysql
restart: always
mqtt:
image: eclipse-mosquitto:2.0
ports:
- "1883:1883"
- "9001:9001"
volumes:
- ./mosquitto/config/mosquitto.conf:/mosquitto/config/mosquitto.conf
- ./mosquitto/data:/mosquitto/data
- ./mosquitto/log:/mosquitto/log
restart: always
mysql:
image: mysql:8.0
ports:
- "3306:3306"
environment:
- MYSQL_ROOT_PASSWORD=your-root-password
- MYSQL_DATABASE=iotgateway
- MYSQL_USER=iotgateway
- MYSQL_PASSWORD=your-password
volumes:
- ./mysql/data:/var/lib/mysql
- ./mysql/init:/docker-entrypoint-initdb.d
restart: always
9.4.2.2 运行 Docker Compose
# 启动服务
docker-compose up -d
# 查看服务状态
docker-compose ps
# 查看日志
docker-compose logs -f
# 停止服务
docker-compose down
9.5 云平台部署
9.5.1 部署到 Azure
-
创建 Azure App Service
-
登录 Azure 门户
-
点击 "创建资源"
-
搜索 "Web App"
-
点击 "创建"
-
配置应用名称、订阅、资源组等
-
选择 ".NET 6" 作为运行时栈
-
点击 "查看 + 创建"
-
点击 "创建"
-
-
部署应用
-
可以使用以下方式部署:
-
Azure DevOps 管道
-
GitHub Actions
-
Azure CLI
-
Visual Studio 直接发布
-
-
-
配置应用设置
-
在 Azure 门户中,进入 App Service
-
点击 "配置" > "应用设置"
-
添加必要的环境变量和连接字符串
-
9.5.2 部署到 AWS
-
创建 AWS Elastic Beanstalk 环境
-
登录 AWS 管理控制台
-
打开 Elastic Beanstalk 服务
-
点击 "创建环境"
-
选择 "Web 服务器环境"
-
配置环境名称、平台(.NET Core on Linux)
-
上传发布后的应用包
-
点击 "创建环境"
-
-
配置环境变量
-
在 Elastic Beanstalk 控制台中,进入环境
-
点击 "配置" > "软件"
-
在 "环境属性" 中添加必要的环境变量
-
9.5.3 部署到阿里云
-
创建阿里云 ECS 实例
-
登录阿里云控制台
-
打开 ECS 服务
-
点击 "创建实例"
-
配置实例规格、镜像(选择 Ubuntu 或 CentOS)
-
设置网络和安全组
-
点击 "创建实例"
-
-
部署应用
-
连接到 ECS 实例
-
安装 .NET 6.0 Runtime
-
上传发布后的应用文件
-
配置系统服务
-
启动应用
-
9.6 配置与优化
9.6.1 配置数据库连接
修改 appsettings.json 文件中的数据库连接配置:
{
"Connections": [
{
"Name": "Default",
"DBType": "mysql",
"Value": "Server=localhost;Database=iotgateway;User=root;Password=your-password;"
}
]
}
9.6.2 配置 MQTT 服务器
修改 appsettings.json 文件中的 MQTT 配置:
{
"SystemConfig": {
"MqttIp": "localhost",
"MqttPort": 1883,
"MqttUName": "user",
"MqttUPwd": "password"
}
}
9.6.3 性能优化
-
配置 Kestrel 服务器
// 在 Program.cs 中配置 .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); webBuilder.UseKestrel(options => { // 设置最大请求体大小 options.Limits.MaxRequestBodySize = 52428800; // 50 MB // 设置请求超时时间 options.Limits.RequestHeadersTimeout = TimeSpan.FromMinutes(1); }); }); -
优化数据库连接
{ "Connections": [ { "Name": "Default", "DBType": "mysql", "Value": "Server=localhost;Database=iotgateway;User=root;Password=your-password;Connection Timeout=30;Max Pool Size=100;" } ] } -
启用缓存
// 在 Startup.cs 中配置 public void ConfigureServices(IServiceCollection services) { // 启用内存缓存 services.AddMemoryCache(); // 或使用分布式缓存 services.AddDistributedRedisCache(options => { options.Configuration = "localhost:6379"; options.InstanceName = "iotgateway:"; }); }
9.7 监控与维护
9.7.1 应用监控
-
使用 Application Insights
-
注册 Application Insights 资源
-
添加 Application Insights SDK 到项目
-
配置连接字符串
-
查看监控数据
-
-
使用 Prometheus 和 Grafana
-
安装 Prometheus 和 Grafana
-
配置 Prometheus 采集端点
-
创建 Grafana 仪表盘
-
查看监控数据
-
9.7.2 日志管理
-
配置日志级别
{ "Logging": { "LogLevel": { "Default": "Information", "Microsoft.AspNetCore": "Warning" } } } -
使用 ELK Stack
-
安装 Elasticsearch、Logstash 和 Kibana
-
配置 Logstash 收集日志
-
在 Kibana 中查看和分析日志
-
9.7.3 定期维护
-
数据库备份
-
定期备份数据库
-
测试备份恢复
-
存储备份到安全位置
-
-
应用更新
-
定期更新应用版本
-
测试更新后的应用
-
制定回滚计划
-
-
系统更新
-
定期更新操作系统和依赖
-
安装安全补丁
-
监控系统资源使用情况
-
9.8 常见部署问题与解决方案
9.8.1 端口被占用
问题:应用启动失败,提示端口已被占用
解决方案:
-
检查端口占用情况:
netstat -ano | findstr :518(Windows)或lsof -i :518(Linux) -
关闭占用端口的进程
-
或修改应用配置,使用其他端口
9.8.2 数据库连接失败
问题:应用无法连接到数据库
解决方案:
-
检查数据库连接字符串是否正确
-
检查数据库服务是否运行
-
检查数据库用户权限
-
检查网络连接
9.8.3 驱动加载失败
问题:驱动无法加载,提示找不到驱动文件
解决方案:
-
检查驱动文件是否存在于
drivers/net6.0目录 -
检查驱动文件权限
-
检查驱动依赖是否完整
9.8.4 MQTT 连接失败
问题:应用无法连接到 MQTT 服务器
解决方案:
-
检查 MQTT 服务器地址和端口是否正确
-
检查 MQTT 用户名和密码是否正确
-
检查 MQTT 服务器是否运行
-
检查网络连接
文档版本 :1.0 更新日期 :2025-11-29 编写人员:辉为科技