保姆级教程:在CentOS 7上用Docker Compose一键部署EdgeX Foundry 3.1(含虚拟设备服务)

EdgeX Foundry作为开源物联网边缘计算框架,正在成为工业4.0和智能设备管理的核心技术栈。本文将带您完成从零开始在企业级CentOS 7环境部署EdgeX 3.1的全过程,特别针对需要快速搭建原型系统的开发者,提供包含虚拟设备服务的完整解决方案。

1. 环境准备与系统优化

在开始部署前,我们需要对CentOS 7进行基础环境配置。许多部署失败案例都源于忽视了这个准备阶段。

系统基础配置:

# 设置永久主机名
sudo hostnamectl set-hostname edgex-gateway
echo "127.0.0.1 edgex-gateway" | sudo tee -a /etc/hosts

# 关闭并禁用防火墙(测试环境)
sudo systemctl stop firewalld
sudo systemctl disable firewalld

# 禁用SELinux(需要重启生效)
sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

网络时间协议(NTP)配置: 边缘计算对时间同步有严格要求,建议配置:

sudo yum install -y chrony
sudo systemctl enable chronyd
sudo systemctl start chronyd
chronyc sources  # 验证时间源

提示:生产环境应考虑保留防火墙规则,仅开放EdgeX所需端口(4000,4800,8500等)

2. Docker环境深度配置

EdgeX 3.1要求Docker 19.03+版本,我们采用阿里云镜像加速安装:

Docker CE安装:

# 卸载旧版本
sudo yum remove -y docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine

# 设置仓库
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 安装特定版本
sudo yum install -y docker-ce-19.03.15 docker-ce-cli-19.03.15 containerd.io

优化Docker配置: 创建/etc/docker/daemon.json:

{
  "registry-mirrors": ["https://gcctk8ld.mirror.aliyuncs.com"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m",
    "max-file": "3"
  },
  "storage-driver": "overlay2",
  "storage-opts": [
    "overlay2.override_kernel_check=true"
  ]
}

应用配置并验证:

sudo systemctl enable docker
sudo systemctl restart docker
docker info | grep -E 'Storage Driver|Registry Mirrors'

3. Docker Compose定制化安装

EdgeX的完整部署需要docker-compose 1.25+版本:

二进制安装方式:

sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

# 验证安装
docker-compose --version

常用Compose命令备忘:

命令作用使用场景
up -d后台启动首次部署
ps查看状态日常检查
logs -f跟踪日志故障排查
stop停止服务维护期间
down删除容器环境重置

4. EdgeX Foundry核心部署流程

4.1 获取部署工具包

使用官方compose-builder工具生成定制化配置:

git clone https://github.com/edgexfoundry/edgex-compose.git
cd edgex-compose
git checkout v3.1  # 明确指定版本

4.2 生成带虚拟设备的配置文件

进入compose-builder目录执行:

make gen ds-virtual no-secty

关键参数说明:

  • ds-virtual:包含虚拟设备服务
  • no-secty:非安全模式(适合测试环境)

生成的文件结构:

edgex-compose/
├── compose-builder/
│   ├── docker-compose.yml  # 主配置文件
│   ├── add-device-virtual.yml  # 虚拟设备扩展
│   └── ...其他组件定义

4.3 网络配置调整

编辑生成的docker-compose.yml,确保服务可被外部访问:

services:
  consul:
    ports:
      - "8500:8500"
  edgex-ui-go:
    ports:
      - "4000:4000"
  # 其他服务端口配置...

注意:生产环境应配置自定义网络而非使用默认bridge

4.4 启动EdgeX服务栈

分步启动更利于问题排查:

# 先拉取所有镜像
docker compose pull

# 启动核心服务(不包含设备服务)
docker compose up -d core-command core-data core-metadata

# 确认核心服务运行正常后再启动其他
docker compose up -d

验证服务状态:

docker compose ps

健康服务应显示为"running"状态。

5. 虚拟设备服务验证

5.1 Consul配置中心访问

浏览器访问:

http://<服务器IP>:8500

在Consul界面应看到:

  • 所有EdgeX服务注册状态
  • 配置键值存储
  • 健康检查状态

5.2 EdgeX控制台操作

访问地址:

http://<服务器IP>:4000

虚拟设备验证步骤:

  1. 导航到"Device Services"确认device-virtual状态
  2. 检查"Devices"列表中的虚拟设备
  3. 使用"Command"标签页测试设备数据读取

5.3 命令行测试示例

通过curl测试设备服务:

# 获取设备列表
curl -s http://localhost:59881/api/v3/device/all | jq .

# 读取虚拟设备数据
curl -s http://localhost:59881/api/v3/device/name/Random-Integer-Device/command/RandomValue | jq .

6. 常见问题解决方案

Q1: 容器启动后立即退出

# 查看具体日志
docker compose logs -f device-virtual

Q2: 端口冲突处理

# 查找占用端口的进程
sudo netstat -tulnp | grep 8500

# 在compose文件中修改端口映射
ports:
  - "8501:8500"  # 主机端口:容器端口

Q3: 镜像拉取失败

# 尝试单独拉取问题镜像
docker pull edgexfoundry/device-virtual:3.1.0

# 或更换镜像源
docker compose --env-file .env pull

性能优化建议:

  • 为Docker分配至少4GB内存
  • 使用SSD存储提高IO性能
  • 对核心服务配置资源限制:
services:
  core-data:
    deploy:
      resources:
        limits:
          cpus: '1'
          memory: 512M

7. 进阶配置技巧

7.1 数据持久化配置

默认配置数据不持久化,添加卷配置:

services:
  redis:
    volumes:
      - edgex-redis-data:/data
volumes:
  edgex-redis-data:

7.2 日志收集方案

配置ELK栈收集日志:

services:
  core-data:
    logging:
      driver: "syslog"
      options:
        syslog-address: "tcp://logstash:5044"
        tag: "edgex-core-data"

7.3 自定义设备服务集成

添加新设备服务的通用流程:

  1. 将设备服务镜像添加到compose文件
  2. 配置服务依赖项
  3. 定义设备配置档案
  4. 通过REST API注册设备

在项目实践中,我们发现合理配置资源限制和日志策略可以显著提高EdgeX在资源受限环境中的稳定性。对于需要频繁重启服务的场景,建议使用docker compose restart而非完整的down/up循环,这可以保持网络配置不变。

更多推荐