。此IoT代理旨在作为JSON与上下文代理的NGSI接口之间的桥梁。
它基于IoT Agent Node.js Library构建。有关FIWARE IoT Agents框架的更多一般信息、架构和常见交互模型,可在该库的GitHub仓库中找到。
本项目是FIWARE的一部分。更多信息请查看FIWARE目录中的IoT Agents条目。
该镜像提供了一个基于JSON协议的IoT代理,能够通过MQTT、HTTP、AMQP等多种传输方式接收IoT设备数据,并将其转换为NGSI格式与上下文代理(如Orion Context Broker)交互。主要用于构建IoT系统中设备与上下文管理平台之间的通信桥梁,实现设备数据的标准化接入和管理。
适用于需要将基于JSON协议的IoT设备数据接入FIWARE生态系统的场景,例如:
IoT代理必须实例化并连接到Orion Context Broker实例,以下是一个示例docker-compose文件。
如果设置IOTA_REGISTRY_TYPE=mongodb,则还需要MongoDB数据库实例——下方示例假设主机系统中有/data目录用于存储数据库文件,请根据实际配置修改挂载卷。
ymlversion: "3.1" volumes: mongodb: ~ services: iot-agent: image: fiware/iotagent-json hostname: iot-agent container_name: fiware-iot-agent depends_on: - mongodb expose: - "4041" - "7896" ports: - "4041:4041" - "7896:7896" environment: - "IOTA_CB_HOST=orion" - "IOTA_CB_PORT=1026" - "IOTA_NORTH_PORT=4041" - "IOTA_REGISTRY_TYPE=mongodb" - "IOTA_MONGO_HOST=mongodb" - "IOTA_MONGO_PORT=27017" - "IOTA_MONGO_DB=iotagent-json" - "IOTA_HTTP_PORT=7896" - "IOTA_PROVIDER_URL=[***]" mongodb: image: mongo:4.2 hostname: mongodb container_name: db-mongo ports: - "27017:27017" command: --bind_ip_all --smallfiles volumes: - mongodb:/data orion: image: fiware/orion hostname: orion container_name: fiware-orion depends_on: - mongodb expose: - "1026" ports: - "1026:1026" command: -dbhost mongodb
许多设置可通过Docker环境变量配置。典型的IoT代理Docker容器由以下环境变量驱动:
IOTA_CB_HOST - 用于更新上下文的上下文代理主机名IOTA_CB_PORT - 上下文代理监听上下文更新的端口IOTA_NORTH_PORT - 用于配置IoT代理和接收上下文代理更新的端口IOTA_REGISTRY_TYPE - IoT设备信息的存储方式(内存或数据库)IOTA_MONGO_HOST - MongoDB主机名(用于存储设备和服务信息)IOTA_MONGO_PORT - MongoDB监听端口IOTA_MONGO_DB - MongoDB中使用的数据库名称IOTA_HTTP_PORT - IoT代理监听HTTP设备流量的端口IOTA_PROVIDER_URL - 注册命令时传递给上下文代理的URL,用于上下文代理向设备下发命令时的转发地址所有IoT代理通用参数的完整覆盖说明,可参见IoT Agent Library的安装指南中的配置部分。
JSON IoT代理特有的设置(如MQTT、AMQP和HTTP的特定配置),可参见JSON IoT代理的安装指南。
与此镜像关联的Dockerfile可通过多种方式构建镜像:
Dockerfile从GitHub获取代码库的最新版本(build-arg为可选):consoledocker build -t iot-agent . --build-arg DOWNLOAD=latest
DOWNLOAD=stable获取最新稳定版本:consoledocker build -t iot-agent . --build-arg DOWNLOAD=stable
DOWNLOAD=<version>下载特定版本:consoledocker build -t iot-agent . --build-arg DOWNLOAD=1.7.0
要从GitHub仓库的自定义fork下载代码,需在docker build命令中添加GITHUB_ACCOUNT、GITHUB_REPOSITORY和SOURCE_BRANCH参数(默认master):
consoledocker build -t iot-agent . \ --build-arg GITHUB_ACCOUNT=<你的账户> \ --build-arg GITHUB_REPOSITORY=<你的仓库> \ --build-arg SOURCE_BRANCH=<你的分支> \ --target=distroless|pm2|slim
若需直接从本地源码构建,可将现有Dockerfile复制到仓库根目录,并修改为复制本地源码:
DockerfileCOPY . /opt/iotajson/
完整说明可参见Dockerfile本身。
Docker镜像中的IoT代理可通过pm2进程管理器运行,使用关联的pm2镜像:
consoledocker run --name iotagent -d fiware/iotagent-json:<tag>-pm2
也可在distroless容器中运行,使用关联的distroless镜像:
consoledocker run --name iotagent -d fiware/iotagent-json:<tag>-distroless
作为通过环境变量传递敏感信息的替代方案,可在部分敏感环境变量后附加_FILE,使初始化脚本从容器内的文件加载这些变量的值。特别是,这可用于从存储在/run/secrets/<secret_name>文件中的Docker Secrets加载密码。例如:
consoledocker run --name iotagent -e IOTA_AUTH_PASSWORD_FILE=/run/secrets/password -d fiware/iotagent-json
目前,支持_FILE后缀的变量包括:
IOTA_AUTH_USERIOTA_AUTH_PASSWORDIOTA_AUTH_CLIENT_IDIOTA_AUTH_CLIENT_SECRETIOTA_MONGO_USERIOTA_MONGO_PASSWORDIOTA_MQTT_KEYIOTA_MQTT_USERNAMEIOTA_MQTT_PASSWORDIOTA_AMQP_USERNAMEIOTA_AMQP_PASSWORDLinux系统的默认ulimit设置假设多个用户共享系统,这些设置限制了每个用户的资源使用。默认设置对于高性能服务器通常过低,应进行调整。在高性能场景下,建议对IoT Agent - JSON服务器调整以下ulimit设置:
consoleulimit -n 65535 # nofile: 最大打开文件描述符数(多数系统不允许设置此值) ulimit -c unlimited # core: 创建的核心文件的最大大小 ulimit -l unlimited # memlock: 可锁定到内存中的最大大小
若仅进行轻量测试和开发,可忽略这些设置,系统仍能正常工作。
要在容器中设置ulimit,需使用以下额外的--ulimit标志运行IoT Agent - JSON Docker容器:
consoledocker run --ulimit nofile=65535:65535 --ulimit core=***:*** --ulimit memlock=***:*** \ --name iotagent -d fiware/iotagent-json
由于“unlimited”不被支持,此处将core和memlock值设置为100 GB。若系统RAM超过100 GB,应增加此值以匹配可用RAM。
注意:
--ulimit标志仅在Docker 1.6及以上版本支持。
有关高性能场景下系统和Node.js配置的更多详细信息,请参阅安装指南。
若使用MongoDB作为数据持久化机制(即IOTA_REGISTRY_TYPE=mongodb),设备和服务组详情将从数据库检索。IoT代理数据库的默认名称为iotagentjson。可通过创建适当的索引优化数据库访问。
例如:
consoledocker exec <mongo-db-container-name> mongo --eval ' conn = new Mongo(); db = conn.getDB("iotagentjson"); db.createCollection("devices"); db.devices.createIndex({"_id.service": 1, "_id.id": 1, "_id.type": 1}); db.devices.createIndex({"_id.type": 1}); db.devices.createIndex({"_id.id": 1}); db.createCollection("groups"); db.groups.createIndex({"_id.resource": 1, "_id.apikey": 1, "_id.service": 1}); db.groups.createIndex({"_id.type": 1});' > /dev/null
数据库名称可通过IOTA_MONGO_DB环境变量修改。若使用其他数据库,请修改上述conn.getDB()语句。
来自真实用户的反馈,见证轩辕镜像的优质服务
免费版仅支持 Docker Hub 加速,不承诺可用性和速度;专业版支持更多镜像源,保证可用性和稳定速度,提供优先客服响应。
免费版仅支持 docker.io;专业版支持 docker.io、gcr.io、ghcr.io、registry.k8s.io、nvcr.io、quay.io、mcr.microsoft.com、docker.elastic.co 等。
当返回 402 Payment Required 错误时,表示流量已耗尽,需要充值流量包以恢复服务。
通常由 Docker 版本过低导致,需要升级到 20.x 或更高版本以支持 V2 协议。
先检查 Docker 版本,版本过低则升级;版本正常则验证镜像信息是否正确。
使用 docker tag 命令为镜像打上新标签,去掉域名前缀,使镜像名称更简洁。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
在 Linux 系统配置镜像加速服务
在 Docker Desktop 配置镜像加速
Docker Compose 项目配置加速
Kubernetes 集群配置 Containerd
在宝塔面板一键配置镜像加速
Synology 群晖 NAS 配置加速
飞牛 fnOS 系统配置镜像加速
极空间 NAS 系统配置加速服务
爱快 iKuai 路由系统配置加速
绿联 NAS 系统配置镜像加速
QNAP 威联通 NAS 配置加速
Podman 容器引擎配置加速
HPC 科学计算容器配置加速
ghcr、Quay、nvcr 等镜像仓库
无需登录使用专属域名加速
需要其他帮助?请查看我们的 常见问题 或 官方QQ群: 13763429