【YFIOs】Docker方式部署

说明

为实现 YFIOs 物联网平台的快速交付与轻量化部署,同时兼顾系统运行性能、业务数据安全与运维便捷性,平台采用模块化分层架构拆分部署:独立部署 MySQL、TDengine 两大数据库核心组件;业务整体打包为一体化 YFIOs Docker 镜像,内置 Redis、EMQX、Nginx、PM2、前端静态资源及后端服务。下文以 Ubuntu 22.4 服务器环境为例,详细讲解 YFIOs 物联网平台的标准落地部署流程。

准备工作

在开始部署前,请先在 Ubuntu 22.04 服务器中安装 Docker 及 Docker Compose 环境。

bash 复制代码
# 更新系统软件源
sudo apt update

# 安装 Docker
sudo apt install -y docker.io

# 安装 Docker Compose
sudo apt install -y docker-compose

# 启动 Docker 服务并设置开机自启
sudo systemctl start docker
sudo systemctl enable docker

# 验证安装是否成功(查看版本信息)
docker -v
docker-compose -v

为了便于快速安装,还需要配置国内镜像加速

bash 复制代码
# 写入国内多镜像加速源
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": [
    "https://docker.1ms.run",
    "https://docker.mirrors.sjtug.sjtu.edu.cn",
    "https://hub-mirror.c.163.com"
  ]
}
EOF

# 配置公共 DNS(解决网络超时问题)
echo 'nameserver 223.5.5.5' | sudo tee /etc/resolv.conf > /dev/null

# 重启相关服务使配置生效
sudo systemctl daemon-reload
sudo systemctl restart systemd-resolved
sudo systemctl restart docker

1 MySQL 8.0 部署

1.1 创建MySQL 8.0项目总文件夹

我们统一把所有文件放在一个文件夹里,方便管理。

bash 复制代码
# 创建文件夹并进入该文件夹
mkdir -p ~/yfios-mysql && cd ~/yfios-mysql
MySQL 8.0整体目录结构
复制代码
yfios-mysql/
├── data/                 # 数据库数据目录(自动生成)
├── docker-compose.yml    # Docker 服务配置
└── init-sql/             # 数据库初始化脚本
    ├── 00-init-db.sql    # 库与用户创建(第一个执行)
    ├── yf_company.sql
    ├── yf_device.sql
    ├── yf_ram.sql
    └── 其他业务表脚本

1.2 准备 docker-compose.yml 文件

进入 ~/yfios-mysql 目录后,可通过以下任意一种方式获取 docker-compose.yml:

方式 1:从官方压缩包中提取(推荐)

从下载地址获取完整配置包:https://www.yfios.net/download/deploy/mysql_config_files.rar

下载完成后解压,直接将 docker-compose.yml 复制到 ~/yfios-mysql/ 目录下即可。

方式 2:手动创建并编辑
bash 复制代码
运行
nano docker-compose.yml

粘贴以下内容:

yaml 复制代码
version: '3.8'
services:
  mysql8-yfios:
    image: mysql:8.0
    container_name: mysql8-yfios
    restart: always
    ports:
      - "13306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: yfsoft1018#mysql
      MYSQL_INITDB_CHARSET: utf8mb4
      MYSQL_INITDB_COLLATION: utf8mb4_0900_ai_ci
      TZ: Asia/Shanghai
    volumes:
      - ./data:/var/lib/mysql
      - ./init-sql:/docker-entrypoint-initdb.d
    command:
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_0900_ai_ci
      --default-authentication-plugin=mysql_native_password
    networks:
      - yfios-network

networks:
  yfios-network:
    driver: bridge

保存并退出:

Ctrl+O → 回车 → Ctrl+X

1.3 创建数据库初始化脚本文件夹

bash 复制代码
mkdir init-sql

将之前下载的mysql_config_files.rar压缩包解压,把包内所有 SQL 脚本(包括 00-init-db.sql 及全部 yf_xxx.sql 业务表文件)统一复制到 init-sql 目录中。

若尚未下载mysql_config_files.rar压缩文件,可通过以下地址获取:https://www.yfios.net/download/deploy/mysql_config_files.rar

下载并解压后,将压缩包内 init-sql 目录下的全部 SQL 文件,复制到 ~/yfios-mysql/init-sql/ 目录即可。

数据库初始化脚本目录结构
复制代码
init-sql/             # 数据库初始化脚本
    ├── 00-init-db.sql    # 库与用户创建(第一个执行)
    ├── yf_company.sql
    ├── yf_device.sql
    ├── yf_ram.sql
    └── 其他业务表脚本

1.4 启动 MySQL 容器

bash 复制代码
# 进入项目目录
cd ~/yfios-mysql
# 后台运行 
sudo docker-compose up -d

等待 10~20 秒,MySQL 会自动:

  1. 创建 root 账号
  2. 创建数据库 yfios-platform-db
  3. 创建用户 yfios 并授权
  4. 自动导入所有 init-sql 下的 sql 文件
  5. 字符集全部为 utf8mb4,排序规则 utf8mb4_0900_ai_ci

如果发现数据表没有创建,可以执行如下指令:

bash 复制代码
# 进入MySQL部署目录
cd ~/yfios-mysql  

# 停止并删除当前MySQL容器
sudo docker-compose down  

# 彻底删除旧数据库数据(必须执行,才能重新初始化)
sudo rm -rf ./data  

# 重新创建并启动MySQL容器,自动重新执行所有SQL脚本
sudo docker-compose up -d  

# 查看最后100行日志,检查是否初始化成功、有无报错
sudo docker logs mysql8-yfios --tail=100  

1.5 验证是否部署成功

bash 复制代码
# 查看容器运行状态
sudo docker ps
# 查看容器日志(看到ready for connections 说明数据库启动完成)
sudo docker logs mysql8-yfios
# 连接数据库
sudo docker exec -it mysql8-yfios mysql -P 13306 -u yfios -p'yfsoft1018#mysql'
# 查看数据库
show databases;
# 切换到 yfios-platform-db 数据库
use `yfios-platform-db`;
# 查看数据表
show tables;

2 TDengine 3.3.6 部署

2.1 创建 TDengine 3.3.6 项目总文件夹

我们创建tdengine文件夹,方便管理。

bash 复制代码
# 创建文件夹并进入该文件夹
mkdir -p ~/tdengine && cd ~/tdengine
TDengine 整体目录结构
plaintext 复制代码
tdengine/
├── data/                 # 时序数据库数据目录(自动生成)
└── docker-compose.yml    # Docker 服务配置

2.2 准备 docker-compose.yml 文件

进入~/tdengine 目录后,可通过以下任意一种方式获取 docker-compose.yml:

方式 1:从官方压缩包中提取(推荐)

从下载地址获取完整配置包:https://www.yfios.net/download/deploy/tdengine_config_files.rar

下载完成后解压,直接将 docker-compose.yml 复制到 ~/tdengine/ 目录下即可。

方式 2:手动创建并编辑 docker-compose.yml 文件
bash 复制代码
运行
nano docker-compose.yml

粘贴以下内容:

yaml 复制代码
version: '3'
services:
  tdengine:
    image: tdengine/tdengine:3.3.6.0
    container_name: tdengine
    restart: always
    ports:
      - "16030:6030"
      - "16041:6041"
    volumes:
      - ./data:/var/lib/taos

保存并退出:

Ctrl+O → 回车 → Ctrl+X

2.3 启动 tdengine 容器

一键启动tdengine容器

bash 复制代码
# 进入项目目录
cd ~/tdengine
# 后台运行
sudo docker-compose up -d

等待 10~20 秒,手动创建数据库和修改默认密码

bash 复制代码
# 创建业务数据库(原默认密码:taosdata)
sudo docker exec -it tdengine taos -s "CREATE DATABASE IF NOT EXISTS yfios_iot_db;"

# 修改密码
# 1. 进入容器并打开 taos 客户端
sudo docker exec -it tdengine taos

# 2. 在 taos 提示符下执行修改密码 SQL(注意末尾的分号)
ALTER USER root PASS 'yfsoft1018#taos';

# 3. 退出
exit;

# 使用指定的用户名 + 密码登录 TDengine,再创建数据库。
sudo docker exec -it tdengine taos -u root -pyfsoft1018#taos -s "CREATE DATABASE IF NOT EXISTS yfios_iot_db;"

# 查看所有TDengine数据库
sudo docker exec -it tdengine taos -u root -pyfsoft1018#taos -s "SHOW DATABASES;"

# 重启dengin
sudo docker restart tdengine

# 验证是否成功
curl -u root:yfsoft1018#taos -d "show databases;" http://127.0.0.1:16041/rest/sql

3 YFIOs 2.0.0 部署

3.1 创建项目文件夹

为保障数据持久化与日志可追溯,独立创建 YFIOs 项目专属目录,将业务数据、运行日志挂载至容器外部宿主机存储,脱离镜像生命周期独立保存,便于长期归档、备份与运维管理。

bash 复制代码
# 创建文件夹
mkdir -p ~/yfios
mkdir -p ~/yfios/data
mkdir -p ~/yfios/logs
mkdir -p ~/yfios/data/upload/firmware
mkdir -p ~/yfios/data/download/image/user
mkdir -p ~/yfios/data/download/image/company
chmod -R 777 ~/yfios/data
chmod -R 777 ~/yfios/logs
cd ~/yfios
目录结构
plaintext 复制代码
yfios/
├── data/
│   ├── upload/
│   │   └── firmware/        # 设备固件上传目录
│   └── download/
│       └── image/
│           ├── user/        # 用户图片存储
│           └── company/     # 企业图片存储
└── logs/                    # 系统运行日志目录

3.2 下载yfios镜像文件

进入项目目录 ~/yfios,通过以下任意一种方式获取 YFIOs 2.0.0 离线 Docker 镜像,并放置到当前目录yfios/。

方式 1:通过官网直接下载(推荐)
方式 2:通过百度网盘下载盘

https://pan.baidu.com/s/1bCGD0nrNeZPNOIekSAMtUw?pwd=63yf

提取码: 63yf

3.3 加载yfios镜像文件

bash 复制代码
# 进入yfios目录
cd ~/yfios

# 解压镜像文件
sudo gunzip yfios-2.0.0-docker.tar.gz 

# 加载镜像文件(约30秒)
sudo docker load -i yfios-2.0.0-docker.tar

3.4 启动YFIOs容器

假设当前 Ubuntu 服务器内网 IP 为 192.168.1.192,且本机已完成 MySQL、TDengine 服务部署并正常启动。执行以下命令,即可快速启动 YFIOs 业务容器。

bash 复制代码
sudo docker run -d \
  --name yfios-platform \
  --restart always \
  -p 80:80 \
  -p 1883:1883 \
  -p 8083:8083 \
  -p 18083:18083 \
  -p 6379:6379 \
  --add-host=host.docker.internal:host-gateway \
  -e MQTT_MQTT_TCP="mqtt://192.168.1.197:1883" \
  -e MQTT_EMQX_MQTT_WS="ws://192.168.1.197:8083" \
  -e RDB_MYSQL_IOT_HOST="192.168.1.197" \
  -e RDB_MYSQL_IOT_PORT="13306" \
  -e RDB_MYSQL_IOT_USERNAME="root" \
  -e RDB_MYSQL_IOT_PASSWORD="yfsoft1018#mysql" \
  -e RDB_MYSQL_IOT_DATABASE="yfios-platform-db" \
  -e RTB_TDENGINE_HOST="192.168.1.197" \
  -e RTB_TDENGINE_PORT="16041" \
  -e RTB_TDENGINE_USER="root" \
  -e RTB_TDENGINE_PASSWD="yfsoft1018#taos" \
  -e RTB_TDENGINE_DATABASENAME="yfios_iot_db" \
  -v ~/yfios/data:/app/data \
  -v ~/yfios/logs:/app/logs \
  yfios:2.0.0
bash 复制代码
# 查看当前运行容器状
sudo docker ps
bash 复制代码
# 关闭并删除容器
sudo docker rm -f yfios-platform

4. 服务访问验证(YFIOs + EMQX)

YFIOs 平台已内置 EMQX 消息服务器:

  • MQTT_TCP:对应 EMQX 设备 TCP 接入端口(1883)
  • MQTT_EMQX_MQTT_WS:对应 EMQX WebSocket 接入端口(8083)

以上为设备接入必填参数,可根据现场实际网络环境自行调整。

等待服务初始化约十几秒后,浏览器访问前端地址:

4.1 YFIOs 平台访问

http://192.168.1.197/

若正常展示系统登录界面,即代表 YFIOs 平台部署完成。

  • 默认登录账号: admin
  • 默认登录密码:yf123456
4.2 EMQX 管理控制服务访问

http://192.168.1.197:18083/

若可正常进入控制台登录页面,即代表 EMQX 服务部署正常。

  • 默认管理账号:admin
  • 默认管理密码:public
相关推荐
小猿姐2 小时前
Clickhouse Kubernetes Operator 实测:哪种方案更适合生产?
运维·数据库·kubernetes
岳来2 小时前
Docker 的 --privileged 特权模式学习
docker·容器·--privileged
彩色的黑'''2 小时前
[root@localhost ~]#,Linux系统的命令提示符为啥现在变成-bash-4.2#了,哪里设置的
linux·运维·bash
树下水月2 小时前
文件分片上传接口(Easyswoole)被nginx拦截,并返回状态码400和408的抓包排查过程
运维·nginx
南境十里·墨染春水3 小时前
linux学习进展 shell编程
linux·运维·学习
goyeer4 小时前
【ITIL4】32服务实践 - 问题管理(Problem Management)
linux·运维·服务器·企业数字化·it管理·itil·it治理
cen__y5 小时前
Linux11(网络编程)
linux·运维·服务器·c语言·网络·网络协议·tcp/ip
脑子加油站5 小时前
k8s-持久化存储
云原生·容器·kubernetes·k8s-持久化存储
CableTech_SQH5 小时前
商业地产和高端酒店该怎么选综合布线解决方案?
运维·服务器·网络