Skip to content

升级与备份 ​

版本固定 ​

生产环境必须固定镜像标签,不要用 latest:

  • latest 会随仓库推送变化,同一份编排在不同时间拉到的镜像不同
  • 出问题无法确定运行版本
  • 回滚时没有明确目标

docker-compose.yml 中指定:

bash
TAG=1.0.3

记录当前部署版本:

bash
echo "$(date '+%Y-%m-%d %H:%M')  镜像=$(grep -m1 'iotlcm-admin-svr:' docker-compose.yml)" >> deploy-history.log

升级 ​

bash
# 1. 备份(不要跳过,见下节)
./backup.sh

# 2. 拉新镜像
vi docker-compose.yml    # 修改镜像 TAG
docker compose pull

# 3. 更新
docker compose up -d

# 4. 验证
docker compose ps
docker compose logs --tail=50 admin-svr

滚动更新单个服务减少中断:

bash
docker compose up -d --no-deps admin-svr

回滚 ​

bash
vi docker-compose.yml    # TAG 改回旧版本
docker compose pull
docker compose up -d

数据库变更不能随代码回滚

若新版本含数据库结构变更,回滚代码后数据库仍是新结构。升级前确认变更可逆,或保留升级前的完整备份。

数据库重建 ​

schema/ 脚本只在 data/mysql 为空时执行:

情况是否需要重建
升级应用镜像否
修改 config/否,重启对应服务即可
修改 schema/ 脚本是(会丢数据)
首次初始化失败是
bash
docker compose down
sudo rm -rf ./data/mysql
docker compose up -d

生产环境禁止清空 data/mysql

生产数据必须通过数据库工具单独备份与迁移,不能依赖 schema 重建。

备份 ​

备份脚本 ​

bash
#!/bin/bash
set -euo pipefail
cd "$(dirname "$0")"

STAMP=$(date '+%Y%m%d-%H%M%S')
DEST="./backups/${STAMP}"
mkdir -p "$DEST"

echo "[1/3] 导出数据库..."
docker compose exec -T mysql sh -c \
  'exec mysqldump -uroot -p"$MYSQL_ROOT_PASSWORD" --single-transaction --routines --triggers --events db_iotlcm' \
  | gzip > "${DEST}/db_iotlcm.sql.gz"

echo "[2/3] 备份配置..."
tar czf "${DEST}/config.tar.gz" config/ docker-compose.yml

echo "[3/3] 备份上传文件..."
tar czf "${DEST}/upload.tar.gz" data/upload/ 2>/dev/null || echo "  上传目录为空,跳过"

echo "完成:${DEST}"
ls -lh "$DEST"
bash
chmod +x backup.sh && ./backup.sh

只备份数据库 ​

bash
docker compose exec -T mysql sh -c \
  'exec mysqldump -uroot -p"$MYSQL_ROOT_PASSWORD" --single-transaction db_iotlcm' \
  | gzip > "db_iotlcm-$(date +%Y%m%d).sql.gz"

恢复 ​

bash
gunzip -c db_iotlcm-20260101.sql.gz | \
  docker compose exec -T mysql sh -c \
  'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD" db_iotlcm'

备份内容与优先级 ​

内容位置重要性
数据库MySQL 容器内 db_iotlcm最高,业务数据全部在此
配置config/ + docker-compose.yml高,丢失需重新配置
上传文件data/upload/中,附件与图片
Redis 数据data/redis/低,缓存可重建
RabbitMQ 队列data/rabbitmq/低,未消费消息会丢失
日志data/logs/低,排障用

备份策略 ​

场景频率保留
生产每日一次 + 升级前30 天
试用有数据变更时7 天

备份文件应转存到异机或对象存储,不要与数据库同盘。

日志清理 ​

日志写在 data/logs/ 下按服务分目录,应用侧已按小时轮转({Y-m-d-H}.log)。清理旧日志:

bash
# 删除 7 天前的日志
find ./data/logs -name '*.log' -mtime +7 -delete

建议配置 cron 定期执行:

cron
0 3 * * * root find /path/to/iotlcm/deploy/data/logs -name '*.log' -mtime +7 -delete

监控 ​

基础组件自带端点:

服务端点
RabbitMQhttp://<host>:15672 管理界面
Consulhttp://<host>:8500/ui
MySQLdocker compose exec mysql mysqladmin status

建议告警指标:

  • MySQL 连接数与磁盘使用率
  • Redis 内存使用率
  • RabbitMQ 队列积压(iotlcm.batch.execute、iotlcm.app.business)
  • worker-svr 全量同步任务失败数

iotLCM 文档中心