。此IoT代理旨在作为Ultralight与上下文代理的NGSI接口之间的桥接工具。
它基于IoT Agent Node.js Library构建。有关FIWARE IoT Agents框架的更多一般信息、其架构和常见交互模型,可在该库的GitHub仓库中找到。
本项目是FIWARE的一部分。更多信息请查看FIWARE目录中的IoT Agents条目。
IoT代理必须实例化并连接到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" - "IOTA_CB_PORT=1026" - "IOTA_NORTH_PORT=4061" - "IOTA_REGISTRY_TYPE=mongodb" - "IOTA_MONGO_HOST=mongodb" - "IOTA_MONGO_PORT=27017" - "IOTA_MONGO_DB=iotagent-ul" - "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协议IoT设备流量的端口IOTA_PROVIDER_URL - 注册命令时传递给上下文代理的URL,当上下文代理向设备发出命令时用作转发URL所有IoT代理通用参数的完整覆盖说明,请参见IoT Agent库安装指南的配置部分。
Ultralight IoT代理本身的更多设置(如MQTT、AMQP和HTTP的特定配置),可在Ultralight 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/iotaul/
完整说明可在Dockerfile本身中找到。
Docker镜像中的IoT代理可以使用相关的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)调度,因为编排工具可能需要寻找一个有足够可用核心的节点,而不是多个节点上的小资源。
如需了解更多关于高性能场景中系统和Node.js配置的详细信息,请参考安装指南。
如果使用MongoDB作为数据持久化机制(即IOTA_REGISTRY_TYPE=mongodb),设备和服务组详细信息将从数据库中检索。IoT代理数据库的默认名称是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 等镜像仓库
无需登录使用专属域名加速
需要其他帮助?请查看我们的 常见问题 或 官方QQ群: 13763429