198 lines
6.8 KiB
Bash
Raw Normal View History

#!/bin/bash
# 检查环境变量配置文件
if [ ! -f "./.env" ]; then
echo "❌ 配置文件 .env 不存在,请先创建配置文件"
echo "💡 可以复制 .env.example 为 .env 并修改配置"
exit 1
fi
echo "📁 使用 .env 配置文件Docker Compose 将自动加载环境变量"
echo "=== Docker 镜像仓库登录 ==="
docker login --username=yunjichaobiao --password hub.jishe.com registry.cn-qingdao.aliyuncs.com
echo "=== 采集端一键启动脚本 ==="
# 检查htpasswd是否安装
if ! command -v htpasswd &> /dev/null; then
echo "❌ htpasswd 未安装,正在安装..."
if command -v apt &> /dev/null; then
sudo apt update && sudo apt install -y apache2-utils
elif command -v yum &> /dev/null; then
sudo yum install -y httpd-tools
else
echo "❌ 无法自动安装htpasswd请手动安装后重试"
exit 1
fi
fi
# 创建认证配置
echo "🔐 创建Pulsar基本认证配置..."
mkdir -p ./pulsar/auth
htpasswd -cmb ./pulsar/auth/.htpasswd \${PULSAR_ADMIN_USER} \${PULSAR_ADMIN_PASSWORD}
echo "✅ 认证配置完成 - 用户名: \${PULSAR_ADMIN_USER}, 密码: \${PULSAR_ADMIN_PASSWORD}"
# 创建数据目录
echo "📁 创建数据目录..."
sudo mkdir -p /mnt/dockerdata/appservice/{pulsar,redis,mysql,iotdb,adminapi}
sudo mkdir -p /mnt/dockerdata/appservice/pulsar/{zookeeper-data,bookkeeper-data,pulsar-data}
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/pulsar/
# 创建本地目录的软链接(如果不存在)
echo "🔗 创建本地目录链接..."
mkdir -p ./pulsar/{zookeeper-data,bookkeeper-data,pulsar-data,auth}
mkdir -p ./redis/{outdata,conf}
mkdir -p ./mysql/{conf,log,data}
mkdir -p ./iotdb/{conf,data,logs}
mkdir -p ./adminapi/{conf,logs}
# 修复MySQL目录权限
echo "🔧 修复MySQL目录权限..."
sudo chown -R 1000:1000 ./mysql/data
sudo chown -R 1000:1000 ./mysql/log
sudo chmod -R 755 ./mysql/data
sudo chmod -R 755 ./mysql/log
sudo chmod -R 755 ./adminapi/logs
# 第一步启动IoTDB独立服务获取配置
echo "🚀 第一步启动IoTDB独立服务获取配置..."
docker compose -f docker-compose-iotdb-standalone.yml up -d
# 等待IoTDB启动完成
echo "⏳ 等待IoTDB服务启动完成..."
sleep 10
# 第二步:拷贝配置目录
echo "📁 第二步拷贝IoTDB配置目录..."
docker cp iotdb-standalone:/iotdb/conf ./iotdb
echo "✅ IoTDB配置目录拷贝完成"
# 第三步:修改时间戳精度配置
echo "⚙️ 第三步修改IoTDB时间戳精度配置..."
if [ -f "./iotdb/conf/iotdb-system.properties" ]; then
# 检查是否已经包含配置
if ! grep -q "timestamp_precision=ns" ./iotdb/conf/iotdb-system.properties; then
# 添加换行和说明
echo "" >> ./iotdb/conf/iotdb-system.properties
echo "# ms 毫秒 us 微秒 ns 纳秒" >> ./iotdb/conf/iotdb-system.properties
echo "timestamp_precision=ns" >> ./iotdb/conf/iotdb-system.properties
echo "✅ 时间戳精度配置已添加timestamp_precision=ns"
else
echo " 时间戳精度配置已存在"
fi
else
echo "❌ 配置文件不存在,请检查配置目录"
fi
# 第四步停止IoTDB独立服务
echo "🛑 第四步停止IoTDB独立服务..."
docker compose -f docker-compose-iotdb-standalone.yml down
# 第五步清理IoTDB数据目录保留配置目录
echo "🧹 第五步清理IoTDB数据目录保留配置目录..."
sudo rm -rf ./iotdb/data/*
sudo rm -rf ./iotdb/logs/*
echo "✅ IoTDB数据目录已清理配置目录已保留"
# MySQL配置检查
#echo "⚙️ 检查MySQL配置..."
#if [ ! -d "./mysql/init" ]; then
# echo "❌ MySQL初始化脚本目录不存在请检查"
# exit 1
#fi
#
#if [ ! -f "./mysql/init/init-db.sql" ]; then
# echo "❌ MySQL初始化脚本不存在请检查"
# exit 1
#fi
#
#echo "✅ MySQL配置检查通过"
sleep 15
# 启动主服务
echo "第六步:🚀 启动 部署主脚本 ..."
# 检查是否是Pulsar重启
if [ -d "./pulsar/zookeeper-data" ] && [ "$(ls -A ./pulsar/zookeeper-data)" ]; then
echo "⚠️ 检测到Pulsar数据目录已存在可能是重启操作"
echo "🧹 清理Pulsar状态数据以确保正常启动..."
# 停止可能运行的服务
docker compose down
# 清理Pulsar状态数据保留数据目录
echo "清理Zookeeper状态..."
sudo rm -rf ./pulsar/zookeeper-data/*
echo "清理BookKeeper状态..."
sudo rm -rf ./pulsar/bookkeeper-data/*
echo "清理Pulsar broker状态..."
sudo rm -rf ./pulsar/pulsar-data/*
echo "✅ Pulsar状态数据已清理"
sleep 5
fi
docker compose up -d
# 等待IoTDB启动完成
echo "⏳ 等待IoTDB服务启动完成..."
sleep 10
# 设置IoTDB密码
echo "第七步:🔐 设置IoTDB root用户密码..."
docker exec -i iotdb-standalone /bin/bash << 'EOF'
# 等待IoTDB完全启动
echo "等待IoTDB服务就绪..."
sleep 10
echo "IoTDB服务已就绪开始设置密码和创建数据库..."
# 使用非交互式方式创建表模型数据库
echo "CREATE DATABASE jisheiotdata;" | ./start-cli.sh -h iotdb-standalone -sql_dialect table
# 使用非交互式方式设置密码
echo "ALTER USER root SET PASSWORD '\${IOTDB_ROOT_PASSWORD}';" | ./start-cli.sh -h iotdb-standalone
# 等待一下再执行确认密码
sleep 2
echo "\${IOTDB_ROOT_PASSWORD}" | ./start-cli.sh -h iotdb-standalone
echo "IoTDB密码设置完成"
EOF
echo "✅ IoTDB密码设置完成 - 用户名: root, 密码: \${IOTDB_ROOT_PASSWORD}"
echo ""
echo "🎉 Pulsar 基本认证集群启动完成!"
echo ""
echo "📋 连接信息:"
echo " Pulsar Broker: \${SERVER_IP}:\${PULSAR_BROKER_PORT}"
echo " Pulsar Admin: http://\${SERVER_IP}:\${PULSAR_ADMIN_PORT}"
echo " IoTDB: \${SERVER_IP}:\${IOTDB_PORT} (root/\${IOTDB_ROOT_PASSWORD})"
echo " Redis: \${SERVER_IP}:6379"
echo " MySQL: \${SERVER_IP}:\${MYSQL_PORT}"
echo " Admin API: http://\${SERVER_IP}:\${ADMIN_API_PORT}"
echo " Admin UI: http://\${SERVER_IP}:\${ADMIN_WEB_PORT}"
echo " 用户名: \${PULSAR_ADMIN_USER}"
echo " 密码: \${PULSAR_ADMIN_PASSWORD}"
echo ""
echo "🔧 常用命令:"
echo " 查看状态: docker compose ps"
echo " 查看日志: docker compose logs -f"
echo " 停止服务: docker compose down"
echo ""
echo "🧪 测试连接:"
echo " Pulsar: curl -u \${PULSAR_ADMIN_USER}:\${PULSAR_ADMIN_PASSWORD} http://\${SERVER_IP}:\${PULSAR_ADMIN_PORT}/admin/v2/clusters"
echo " Redis: redis-cli -h \${SERVER_IP} -p 6379 ping"
echo " MySQL: mysql -h \${SERVER_IP} -P \${MYSQL_PORT} -u root -p\${MYSQL_ROOT_PASSWORD} -e 'SELECT 1'"
echo " IoTDB: docker exec -it iotdb-standalone ./start-cli.sh -h iotdb-standalone -u root -p Lixiao@1980"
echo ""
echo "🎯 等待服务启动完成..."
echo "⏳ 请等待几分钟让所有服务完全启动"