。该IoT Agent旨在作为JSON与上下文代理的NGSI接口之间的桥梁。
它基于IoT Agent Node.js库构建。有关FIWARE IoT Agents框架的更多 general信息、架构和常见交互模型,可在该库的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-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" # 用于配置IoT Agent和接收上下文代理更新的端口 - "IOTA_REGISTRY_TYPE=mongodb" # IoT设备信息的存储类型(内存或数据库) - "IOTA_MONGO_HOST=mongodb" # MongoDB的主机名 - "IOTA_MONGO_PORT=27017" # MongoDB监听的端口 - "IOTA_MONGO_DB=iotagent-json" # MongoDB中使用的数据库名 - "IOTA_HTTP_PORT=7896" # IoT Agent监听HTTP设备流量的端口 - "IOTA_PROVIDER_URL=[***]" # 注册命令时传递给上下文代理的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 - 用于更新上下文的上下文代理主机名IOTA_CB_PORT - 上下文代理监听更新上下文的端口IOTA_NORTH_PORT - 用于配置IoT Agent和接收上下文代理上下文更新的端口IOTA_REGISTRY_TYPE - IoT设备信息存储位置(内存或数据库)IOTA_MONGO_HOST - MongoDB主机名(用于存储设备和服务信息)IOTA_MONGO_PORT - MongoDB监听的端口IOTA_MONGO_DB - MongoDB中使用的数据库名IOTA_HTTP_PORT - IoT Agent监听HTTP IoT设备流量的端口IOTA_PROVIDER_URL - 注册命令时传递给上下文代理的URL,上下文代理向设备发送命令时用作转发URL所有IoT Agent通用参数的完整覆盖项在IoT Agent库安装指南的配置部分中描述。
JSON IoT Agent本身的更多设置(如MQTT、AMQP和HTTP的特定配置)可在JSON 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/iotajson/
完整说明可在Dockerfile本身中找到。
Docker镜像中的IoT Agent可通过关联的pm2镜像在pm2进程管理器中运行:
consoledocker run --name iotagent -d fiware/iotagent-json:<tag>-pm2
也可通过关联的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标志运行IoTAgent - 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及更高版本中可用。
此外,可能需要向Kubernetes请求更多资源(如多个核心),这可能比调度多个请求1个核心(或更少)的容器更难(Kubernetes可将这些容器调度到多个节点,而不必寻找一个有足够可用核心的节点)。
有关高性能场景中系统和Node.js配置的更多详细信息,请参阅安装指南。
如果使用MongoDB作为数据持久化机制(即IOTA_REGISTRY_TYPE=mongodb),设备和服务组详细信息将从数据库检索。IoT Agent数据库的默认名称为iotagentjson。可通过创建适当的索引优化数据库访问。
例如:
consoledocker exec <mongodb容器名称> 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