mirror of
https://gitee.com/NexIoT/Universal-IoT-Java.git
synced 2026-08-31 02:29:22 +08:00
103 lines
3.3 KiB
Bash
103 lines
3.3 KiB
Bash
#!/bin/bash
|
|
|
|
# Docker 快速启动脚本
|
|
set -e
|
|
|
|
echo "🚀 启动 IoT 平台 Docker 服务..."
|
|
|
|
# 统一脚本路径与仓库根路径,保证任意位置执行都正确
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
REPO_ROOT="$(cd "${SCRIPT_DIR}/.." && pwd)"
|
|
|
|
# 检查 Docker 是否运行
|
|
if ! docker info > /dev/null 2>&1; then
|
|
echo "❌ Docker 未运行,请先启动 Docker"
|
|
exit 1
|
|
fi
|
|
|
|
# 检查 Docker Compose 是否可用
|
|
if ! docker-compose version > /dev/null 2>&1; then
|
|
echo "❌ Docker Compose 不可用,请检查安装"
|
|
exit 1
|
|
fi
|
|
|
|
# 创建必要的目录
|
|
echo "📁 创建必要的目录..."
|
|
mkdir -p "${SCRIPT_DIR}/logs"
|
|
mkdir -p "${SCRIPT_DIR}/mysql/conf" "${SCRIPT_DIR}/mysql/init"
|
|
|
|
# 检查配置文件
|
|
if [ ! -f "${SCRIPT_DIR}/.env" ]; then
|
|
echo "📝 创建 .env 文件..."
|
|
cp "${SCRIPT_DIR}/env.example" "${SCRIPT_DIR}/.env"
|
|
echo "✅ .env 文件已创建,请根据需要修改配置"
|
|
fi
|
|
|
|
# 自动构建(如未构建)
|
|
echo "🛠 检查并构建前后端..."
|
|
|
|
if [ ! -d "${REPO_ROOT}/cn-universal-web/target/cn-universal-web" ] && [ -f "${REPO_ROOT}/cn-universal-web/target/cn-universal-web.tar.gz" ]; then
|
|
echo "📦 检测到后端产物 cn-universal-web.tar.gz,正在解压..."
|
|
(
|
|
cd "${REPO_ROOT}/cn-universal-web/target" && tar -xzf cn-universal-web.tar.gz
|
|
)
|
|
fi
|
|
|
|
if [ ! -d "${REPO_ROOT}/cn-universal-web/target/cn-universal-web" ]; then
|
|
echo "🔨 后端未构建,开始执行 Maven Reactor 构建..."
|
|
(
|
|
cd "${REPO_ROOT}"
|
|
echo "📦 构建并安装依赖模块 (Reactor -am)..."
|
|
mvn -q -T 1C -DskipTests -pl cn-universal-web -am install
|
|
echo "📦 打包 cn-universal-web..."
|
|
mvn -q -DskipTests -pl cn-universal-web package
|
|
)
|
|
fi
|
|
|
|
# 构建前端(如未构建产物)
|
|
if [ ! -d "${REPO_ROOT}/cn-universal-web-ui/dist" ]; then
|
|
echo "🔨 前端未构建,开始执行 NPM 构建..."
|
|
(cd "${REPO_ROOT}/cn-universal-web-ui" && npm ci && npm run build)
|
|
fi
|
|
|
|
# 构建镜像并启动服务
|
|
echo "🔧 构建镜像并启动服务..."
|
|
SKIP_FRONTEND=0
|
|
if ! docker pull --quiet nginx:alpine >/dev/null 2>&1; then
|
|
echo "⚠️ 无法从 Docker Hub 拉取 nginx:alpine,前端镜像可能无法构建。将仅启动后端与基础服务。"
|
|
SKIP_FRONTEND=1
|
|
fi
|
|
|
|
if [ "$SKIP_FRONTEND" -eq 1 ]; then
|
|
(cd "${SCRIPT_DIR}" && docker-compose up -d --build backend mysql redis emqx adminer)
|
|
else
|
|
(cd "${SCRIPT_DIR}" && docker-compose up -d --build)
|
|
fi
|
|
|
|
# 等待服务启动
|
|
echo "⏳ 等待服务启动..."
|
|
sleep 10
|
|
|
|
# 检查服务状态
|
|
echo "📊 服务状态:"
|
|
(cd "${SCRIPT_DIR}" && docker-compose ps)
|
|
|
|
# 显示访问信息
|
|
echo ""
|
|
echo "🌐 服务访问地址:"
|
|
echo " 前端界面: http://localhost:80"
|
|
echo " 后端 API: http://localhost:9092"
|
|
echo " EMQX 管理: http://localhost:18083 (admin/public)"
|
|
echo " 数据库管理: http://localhost:8081"
|
|
echo ""
|
|
echo "📋 常用命令:"
|
|
echo " 查看日志: (cd docker && docker-compose logs -f)"
|
|
echo " 停止服务: (cd docker && docker-compose down)"
|
|
echo " 重启服务: (cd docker && docker-compose restart)"
|
|
echo " 查看状态: (cd docker && docker-compose ps)"
|
|
if [ "$SKIP_FRONTEND" -eq 1 ]; then
|
|
echo "⚠️ 已跳过前端。原因:无法访问 Docker Hub。后端接口: http://localhost:9092"
|
|
fi
|
|
echo ""
|
|
echo "✅ 服务启动完成!"
|