Iotgateway技术手册-9. 部署与运行

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 开发环境准备

  1. 安装 .NET 6.0 SDK

  2. 安装开发工具

    • Visual Studio 2022 或更高版本

    • 或 Visual Studio Code + C# 扩展

  3. 克隆代码仓库

    复制代码
    git clone <repository-url>
    cd iotgateway
  4. 还原 NuGet 包

    复制代码
    dotnet restore

9.2.2 运行应用

9.2.2.1 使用 Visual Studio 运行
  1. 打开 IoTGateway.sln 解决方案

  2. 设置 IoTGateway 为启动项目

  3. 点击 "启动" 按钮或按 F5

  4. 应用将在浏览器中打开,默认地址: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 发布
  1. 右键点击 IoTGateway 项目

  2. 选择 "发布"

  3. 选择发布目标(文件夹、IIS、Azure 等)

  4. 配置发布设置

  5. 点击 "发布" 按钮

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 部署
  1. 安装 IIS

    • 打开 "服务器管理器"

    • 点击 "添加角色和功能"

    • 选择 "Web 服务器 (IIS)"

    • 按照向导完成安装

  2. 安装 .NET Core Hosting Bundle

  3. 创建 IIS 网站

    • 打开 "Internet Information Services (IIS) 管理器"

    • 右键点击 "网站",选择 "添加网站"

    • 配置网站名称、物理路径(指向发布后的文件夹)和端口

    • 点击 "确定"

  4. 配置应用池

    • 右键点击新创建的网站,选择 "管理网站" > "高级设置"

    • 设置 "应用池" 为 ".NET Core AppPool"(如果不存在,需要创建)

    • 右键点击应用池,选择 "高级设置"

    • 设置 ".NET CLR 版本" 为 "无托管代码"

  5. 启动网站

    • 右键点击网站,选择 "启动"

    • 在浏览器中访问网站地址

9.3.2.2 使用 Windows 服务部署
  1. 安装 NSSM (Non-Sucking Service Manager)

  2. 创建 Windows 服务

    复制代码
    nssm install IoTGateway
  3. 配置服务

    • 在 NSSM 配置界面中,设置:

      • Path: 指向发布后的 IoTGateway.exe 文件

      • Startup directory: 指向发布后的文件夹

      • Arguments: 可选的命令行参数

    • 点击 "Install service"

  4. 启动服务

    复制代码
    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 部署应用
  1. 复制发布文件

    复制代码
    # 使用 SCP 复制文件到服务器
    scp -r ./publish user@server:/opt/iotgateway
  2. 创建服务文件

    复制代码
    sudo nano /etc/systemd/system/iotgateway.service
  3. 配置服务文件

    复制代码
    [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
  4. 启动服务

    复制代码
    sudo systemctl daemon-reload
    sudo systemctl enable iotgateway
    sudo systemctl start iotgateway
  5. 查看服务状态

    复制代码
    sudo systemctl status iotgateway
  6. 查看日志

    复制代码
    sudo journalctl -fu iotgateway

9.4 容器化部署

9.4.1 Docker 部署

9.4.1.1 构建 Docker 镜像
  1. 创建 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"]
  2. 构建镜像

    复制代码
    docker build -t iotgateway .
  3. 运行容器

    复制代码
    # 运行容器
    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

  1. 创建 Azure App Service

    • 登录 Azure 门户

    • 点击 "创建资源"

    • 搜索 "Web App"

    • 点击 "创建"

    • 配置应用名称、订阅、资源组等

    • 选择 ".NET 6" 作为运行时栈

    • 点击 "查看 + 创建"

    • 点击 "创建"

  2. 部署应用

    • 可以使用以下方式部署:

      • Azure DevOps 管道

      • GitHub Actions

      • Azure CLI

      • Visual Studio 直接发布

  3. 配置应用设置

    • 在 Azure 门户中,进入 App Service

    • 点击 "配置" > "应用设置"

    • 添加必要的环境变量和连接字符串

9.5.2 部署到 AWS

  1. 创建 AWS Elastic Beanstalk 环境

    • 登录 AWS 管理控制台

    • 打开 Elastic Beanstalk 服务

    • 点击 "创建环境"

    • 选择 "Web 服务器环境"

    • 配置环境名称、平台(.NET Core on Linux)

    • 上传发布后的应用包

    • 点击 "创建环境"

  2. 配置环境变量

    • 在 Elastic Beanstalk 控制台中,进入环境

    • 点击 "配置" > "软件"

    • 在 "环境属性" 中添加必要的环境变量

9.5.3 部署到阿里云

  1. 创建阿里云 ECS 实例

    • 登录阿里云控制台

    • 打开 ECS 服务

    • 点击 "创建实例"

    • 配置实例规格、镜像(选择 Ubuntu 或 CentOS)

    • 设置网络和安全组

    • 点击 "创建实例"

  2. 部署应用

    • 连接到 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 性能优化

  1. 配置 Kestrel 服务器

    复制代码
    // 在 Program.cs 中配置
    .ConfigureWebHostDefaults(webBuilder =>
    {
        webBuilder.UseStartup<Startup>();
        webBuilder.UseKestrel(options =>
        {
            // 设置最大请求体大小
            options.Limits.MaxRequestBodySize = 52428800; // 50 MB
            // 设置请求超时时间
            options.Limits.RequestHeadersTimeout = TimeSpan.FromMinutes(1);
        });
    });
  2. 优化数据库连接

    复制代码
    {
      "Connections": [
        {
          "Name": "Default",
          "DBType": "mysql",
          "Value": "Server=localhost;Database=iotgateway;User=root;Password=your-password;Connection Timeout=30;Max Pool Size=100;"
        }
      ]
    }
  3. 启用缓存

    复制代码
    // 在 Startup.cs 中配置
    public void ConfigureServices(IServiceCollection services)
    {
        // 启用内存缓存
        services.AddMemoryCache();
        
        // 或使用分布式缓存
        services.AddDistributedRedisCache(options =>
        {
            options.Configuration = "localhost:6379";
            options.InstanceName = "iotgateway:";
        });
    }

9.7 监控与维护

9.7.1 应用监控

  1. 使用 Application Insights

    • 注册 Application Insights 资源

    • 添加 Application Insights SDK 到项目

    • 配置连接字符串

    • 查看监控数据

  2. 使用 Prometheus 和 Grafana

    • 安装 Prometheus 和 Grafana

    • 配置 Prometheus 采集端点

    • 创建 Grafana 仪表盘

    • 查看监控数据

9.7.2 日志管理

  1. 配置日志级别

    复制代码
    {
      "Logging": {
        "LogLevel": {
          "Default": "Information",
          "Microsoft.AspNetCore": "Warning"
        }
      }
    }
  2. 使用 ELK Stack

    • 安装 Elasticsearch、Logstash 和 Kibana

    • 配置 Logstash 收集日志

    • 在 Kibana 中查看和分析日志

9.7.3 定期维护

  1. 数据库备份

    • 定期备份数据库

    • 测试备份恢复

    • 存储备份到安全位置

  2. 应用更新

    • 定期更新应用版本

    • 测试更新后的应用

    • 制定回滚计划

  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 编写人员:辉为科技

相关推荐
小新软件园3 天前
PrintPage 打印 绿色版发票打印工具 批量打印 多维度设置更实用
windows·电脑·开源软件
仰科网关5 天前
基于VFbox协议转换网关实现储能设备与电力管理平台的IEC61850标准通信应用案例
网关·modbus·iec61850·vfbox·规约转换器
模型时代6 天前
欧盟寻求开源软件重建技术栈实现数字独立
开源软件
亿坊电商6 天前
【家政服务】小程序+APP(项目源码),三端无缝协同系统解析!
小程序·开源软件
捷米特网关模块通讯7 天前
Profinet 转 SAE J1939 工业数据采集网关 实现故障诊断 商用车运维效率提升案例
网关·西门子plc·工业自动化·伺服电机·profinet通讯
千桐科技7 天前
qData 数据中台开源版 v1.1.1 发布:动态游标同步技术上线,SQL Server 2008 全面支持
开源软件·sql server·工程化·数据同步·数据中台·qdata·动态游标
UpYoung!8 天前
【VMware 17】虚拟化软件——VMware 17 Pro 详细图文完全教程:桌面虚拟化的行业标杆
开源软件·vmware·虚拟化·虚拟化工具·运维必备·虚拟化平台·vmvare 17
一条咸鱼_SaltyFish9 天前
远程鉴权中心设计:HTTP 与 gRPC 的技术决策与实践
开发语言·网络·网络协议·程序人生·http·开源软件·个人开发
一条咸鱼_SaltyFish9 天前
WebFlux vs MVC:Gateway集成若依框架的技术选型之争
java·开发语言·微服务·gateway·mvc·开源软件·webflux
拆房老料9 天前
实战复盘:自研 Office / PDF 文档处理平台的高坑预警与 AI Agent 时代架构思考
人工智能·架构·pdf·编辑器·开源软件