JiShe.IOT.Admin/DockerComposeShells/start-service-sub.sh
2025-11-20 17:14:58 +08:00

142 lines
4.2 KiB
Bash
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# =========================
# 服务订阅模式一键启动脚本
# =========================
set -euo pipefail
ROOT_DIR="$(cd "$(dirname "$0")" && pwd)"
cd "$ROOT_DIR"
# 1. 校验 .env
if [ ! -f "./.env" ]; then
echo "❌ 配置文件 .env 不存在,请先创建(可复制 .env.example。"
exit 1
fi
echo "📁 检查 .env 并规范换行符..."
if command -v dos2unix >/dev/null 2>&1; then
dos2unix -q ./.env || true
else
sed -i 's/\r$//' ./.env 2>/dev/null || perl -pi -e 's/\r$//' ./.env 2>/dev/null || true
fi
# 2. 加载环境变量
set -a
. ./.env
set +a
# 3. 校验关键变量
required_vars=(
IOTDB_PORT
IOTDB_ROOT_PASSWORD
REDIS_PORT
MYSQL_PORT
MYSQL_ROOT_PASSWORD
ADMIN_API_PORT
ADMIN_WEB_PORT
)
missing_vars=()
for var in "${required_vars[@]}"; do
if [ -z "${!var:-}" ]; then
missing_vars+=("$var")
fi
done
if [ ${#missing_vars[@]} -ne 0 ]; then
echo "❌ 以下环境变量未设置: ${missing_vars[*]}"
echo "💡 请在 .env 中补充这些变量后重试。"
exit 1
fi
# 4. 登录镜像仓库(如已登录可忽略错误)
echo "=== Docker 镜像仓库登录(若已登录可忽略提示) ==="
docker login --username=yunjichaobiao --password hub.jishe.com registry.cn-qingdao.aliyuncs.com || true
# 5. 创建宿主机数据目录
echo "📁 创建数据目录..."
sudo mkdir -p /mnt/dockerdata/appservice/{redis/{outdata,conf},mysql/{conf,log,data},iotdb/{conf,data,logs},adminapi/{conf,logs}}
sudo chown -R 10000:0 /mnt/dockerdata/appservice/iotdb || true
echo "🔗 创建本地目录链接..."
mkdir -p ./redis/{outdata,conf}
mkdir -p ./mysql/{conf,log,data}
mkdir -p ./iotdb/{conf,data,logs}
mkdir -p ./adminapi/{conf,logs}
# 6. 修复权限
echo "🔧 修复 MySQL / Admin 日志目录权限..."
sudo chown -R 1000:1000 ./mysql/data ./mysql/log || true
sudo chmod -R 755 ./mysql/data ./mysql/log
sudo chmod -R 755 ./adminapi/logs || true
# 7. 启动订阅模式初始化栈
echo "🚀 第一步:启动服务订阅初始化栈 (docker-compose-service_sub_init.yml)"
docker compose -f docker-compose-service_sub_init.yml up -d
echo "⏳ 等待 IoTDB 容器启动..."
sleep 15
# 8. 拷贝 IoTDB 配置
echo "📁 拷贝 IoTDB 配置目录..."
docker cp iotdb-standalone:/iotdb/conf ./iotdb
# 9. 设置时间戳精度
CONFIG_FILE=./iotdb/conf/iotdb-system.properties
echo "⚙️ 配置 IoTDB 时间戳精度..."
if [ -f "$CONFIG_FILE" ]; then
if ! grep -q "timestamp_precision=ns" "$CONFIG_FILE"; then
{
echo ""
echo "# ms 毫秒 / us 微秒 / ns 纳秒"
echo "timestamp_precision=ns"
} >> "$CONFIG_FILE"
echo "✅ 已追加 timestamp_precision=ns"
else
echo " timestamp_precision=ns 已存在"
fi
else
echo "⚠️ 未找到 $CONFIG_FILE,请确认 IoTDB 配置是否拷贝成功。"
fi
# 10. 清理 IoTDB 数据文件(保留 conf
echo "🧹 清理 IoTDB 本地数据/日志目录..."
sudo rm -rf ./iotdb/data/* ./iotdb/logs/* || true
# 11. 设置 IoTDB root 密码
echo "🔐 设置 IoTDB root 密码..."
docker exec -i iotdb-standalone /bin/bash << EOF
echo "等待 IoTDB 完全就绪..."
sleep 10
echo "ALTER USER root SET PASSWORD '${IOTDB_ROOT_PASSWORD}';" | ./start-cli.sh -h iotdb-standalone
EOF
echo "✅ IoTDB 密码设置完成"
# 12. 关闭初始化栈
echo "🛑 停止初始化栈..."
docker compose -f docker-compose-service_sub_init.yml down
echo "⏳ 等待 30 秒..."
sleep 30
# 13. 启动服务订阅模式正式栈
echo "🚀 最终启动docker-compose_service_sub.yml"
docker compose -f docker-compose_service_sub.yml up -d
echo ""
echo "🎉 服务订阅模式环境启动完成!"
echo "📋 关键连接信息:"
echo " IoTDB RPC: localhost:${IOTDB_PORT} (root/${IOTDB_ROOT_PASSWORD})"
echo " Redis: localhost:${REDIS_PORT}"
echo " MySQL: localhost:${MYSQL_PORT}"
echo " Admin API: http://localhost:${ADMIN_API_PORT}"
echo " Admin UI : http://localhost:${ADMIN_WEB_PORT}"
echo ""
echo "🔧 常用命令:"
echo " 查看状态 : docker compose -f docker-compose_service_sub.yml ps"
echo " 查看日志 : docker compose -f docker-compose_service_sub.yml logs -f"
echo " 停止服务 : docker compose -f docker-compose_service_sub.yml down"
echo ""