142 lines
4.2 KiB
Bash
142 lines
4.2 KiB
Bash
#!/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 ""
|
||
|