。此IoT Agent设计为Ultralight与上下文broker的NGSI接口之间的桥梁。
它基于IoT Agent Node.js Library构建。有关FIWARE IoT Agents框架的更多一般信息、其架构和常见交互模型,可在该库的GitHub仓库中找到。
该项目是FIWARE的一部分。更多信息请查看FIWARE目录中的IoT Agents条目。
IoT Agent必须实例化并连接到Orion Context Broker实例,下面提供一个docker-compose示例文件。
如果IOTA_REGISTRY_TYPE=mongodb,则还需要MongoDB数据库实例——下面的示例假设主机系统中有/data目录用于存放数据库文件,请根据自己的配置修改挂载卷。
ymlversion: "3.1" volumes: mongodb: ~ services: iot-agent: image: fiware/iotagent-ul hostname: iot-agent container_name: fiware-iot-agent depends_on: - mongodb expose: - "4061" - "7896" ports: - "4061:4061" - "7896:7896" environment: - "IOTA_CB_HOST=orion" # 上下文broker的主机名 - "IOTA_CB_PORT=1026" # 上下文broker监听的端口 - "IOTA_NORTH_PORT=4061" # 用于配置IoT Agent和接收上下文broker更新的端口 - "IOTA_REGISTRY_TYPE=mongodb" # IoT设备信息存储类型(内存或数据库) - "IOTA_MONGO_HOST=mongodb" # MongoDB主机名 - "IOTA_MONGO_PORT=27017" # MongoDB监听端口 - "IOTA_MONGO_DB=iotagent-ul" # MongoDB中使用的数据库名 - "IOTA_HTTP_PORT=7896" # IoT Agent监听HTTP设备流量的端口 - "IOTA_PROVIDER_URL=[***]" # 注册命令时传递给上下文broker的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 Agent Docker容器由如下环境变量驱动:
IOTA_CB_HOST - 用于更新上下文的上下文broker主机名IOTA_CB_PORT - 上下文broker监听更新上下文的端口IOTA_NORTH_PORT - 用于配置IoT Agent和接收上下文broker上下文更新的端口IOTA_REGISTRY_TYPE - IoT设备信息存储方式(内存或数据库)IOTA_MONGO_HOST - MongoDB主机名(用于存储设备和服务信息)IOTA_MONGO_PORT - MongoDB监听端口IOTA_MONGO_DB - MongoDB中使用的数据库名IOTA_HTTP_PORT - IoT Agent监听HTTP设备流量的端口IOTA_PROVIDER_URL - 注册命令时传递给上下文broker的URL,上下文broker向设备发送命令时使用的转发URL所有IoT Agent通用参数的完整覆盖项在IoT Agent Library的安装指南的配置部分描述。
Ultralight IoT Agent特有的更多设置(如MQTT、AMQP和HTTP的特定配置)可在Ultralight IoT Agent的安装指南中找到。
与此镜像关联的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/iotaul/
完整说明可在Dockerfile本身中找到。
Docker镜像中的IoT Agent可通过关联的pm2镜像在pm2进程管理器中运行:
consoledocker run --name iotagent -d fiware/iotagent-ul:<tag>-pm2
也可通过关联的distroless镜像在无发行版容器中运行:
consoledocker run --name iotagent -d fiware/iotagent-ul:<tag>-distroless
作为通过环境变量传递敏感信息的替代方式,可在某些敏感环境变量后附加_FILE,使初始化脚本从容器内的文件加载这些变量的值。特别是,这可用于从/run/secrets/<secret_name>文件加载Docker secrets中的密码。例如:
consoledocker run --name iotagent -e IOTA_AUTH_PASSWORD_FILE=/run/secrets/password -d fiware/iotagent-ul
目前支持_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设置假设多个用户共享系统,这些设置限制每个用户使用的资源数量。默认设置对于高性能服务器通常很低,应进行增加。在高性能场景下,我们建议对IoTAgent-UL服务器的ulimit进行如下调整:
consoleulimit -n 65535 # nofile: 最大打开文件描述符数(大多数系统不允许设置此值) ulimit -c unlimited # core: 创建的核心文件最大大小 ulimit -l unlimited # memlock: 可锁定到内存的最大大小
如果仅进行轻量测试和开发,可忽略这些设置,系统仍能正常工作。
要在容器中设置ulimit,需使用以下附加--ulimit标志运行IoTAgent-UL Docker容器:
consoledocker run --ulimit nofile=65535:65535 --ulimit core=***:*** --ulimit memlock=***:*** \ --name iotagent -d fiware/iotagent-ul
由于“unlimited”不被支持作为值,此处将core和memlock值设为100 GB。如果系统RAM超过100 GB,应增加此值以匹配系统可用RAM。
注意:
--ulimit标志仅在Docker 1.6及更高版本支持。然而,请求更多资源(如多个核心)可能使编排工具(Docker Engine或Kubernetes)更难调度,相比多个请求1个核心(或更少)的容器(可调度到多个节点,不必寻找有足够可用核心的单个节点)。
如需了解更多高性能场景下系统和node.js配置的详细信息,请参考安装指南。
如果使用MongoDB作为数据持久化机制(即IOTA_REGISTRY_TYPE=mongodb),设备和服务组详情从数据库检索。IoT Agent数据库的默认名称为iotagentul。可通过创建适当的索引优化数据库访问。
例如:
consoledocker exec <mongo-db-container-name> mongo --eval ' conn = new Mongo(); db = conn.getDB("iotagentul"); 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 等镜像仓库
无需登录使用专属域名