146 lines
3.6 KiB
Bash
146 lines
3.6 KiB
Bash
|
|
#!/usr/bin/env bash
|
|||
|
|
set -euo pipefail
|
|||
|
|
|
|||
|
|
# 天普零碳园区智慧能源管理平台 - 快速启动脚本
|
|||
|
|
|
|||
|
|
GREEN='\033[0;32m'
|
|||
|
|
YELLOW='\033[1;33m'
|
|||
|
|
RED='\033[0;31m'
|
|||
|
|
NC='\033[0m'
|
|||
|
|
|
|||
|
|
log_info() { echo -e "${GREEN}[INFO]${NC} $1"; }
|
|||
|
|
log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
|
|||
|
|
log_error() { echo -e "${RED}[ERROR]${NC} $1"; }
|
|||
|
|
|
|||
|
|
# 检查前置依赖
|
|||
|
|
check_prerequisites() {
|
|||
|
|
log_info "检查前置依赖..."
|
|||
|
|
|
|||
|
|
if ! command -v docker &> /dev/null; then
|
|||
|
|
log_error "未找到 Docker,请先安装 Docker: https://docs.docker.com/get-docker/"
|
|||
|
|
exit 1
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
if ! docker compose version &> /dev/null && ! docker-compose version &> /dev/null; then
|
|||
|
|
log_error "未找到 Docker Compose,请先安装 Docker Compose"
|
|||
|
|
exit 1
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
log_info "前置依赖检查通过"
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
# 确定 docker compose 命令
|
|||
|
|
get_compose_cmd() {
|
|||
|
|
if docker compose version &> /dev/null; then
|
|||
|
|
echo "docker compose"
|
|||
|
|
else
|
|||
|
|
echo "docker-compose"
|
|||
|
|
fi
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
# 初始化环境变量
|
|||
|
|
init_env() {
|
|||
|
|
if [ ! -f .env ]; then
|
|||
|
|
log_warn ".env 文件不存在,从模板创建..."
|
|||
|
|
if [ -f .env.example ]; then
|
|||
|
|
cp .env.example .env
|
|||
|
|
log_warn "已创建 .env 文件,请根据实际情况修改配置"
|
|||
|
|
log_warn "当前使用默认配置启动,生产环境请务必修改密码和密钥"
|
|||
|
|
else
|
|||
|
|
log_error "未找到 .env.example 模板文件"
|
|||
|
|
exit 1
|
|||
|
|
fi
|
|||
|
|
else
|
|||
|
|
log_info ".env 文件已存在"
|
|||
|
|
fi
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
# 启动服务
|
|||
|
|
start_services() {
|
|||
|
|
local compose_cmd
|
|||
|
|
compose_cmd=$(get_compose_cmd)
|
|||
|
|
|
|||
|
|
log_info "启动服务..."
|
|||
|
|
$compose_cmd up -d
|
|||
|
|
|
|||
|
|
log_info "等待服务就绪..."
|
|||
|
|
|
|||
|
|
# 等待数据库就绪
|
|||
|
|
local retries=30
|
|||
|
|
while [ $retries -gt 0 ]; do
|
|||
|
|
if docker exec tianpu_db pg_isready -U tianpu -d tianpu_ems &> /dev/null; then
|
|||
|
|
log_info "数据库已就绪"
|
|||
|
|
break
|
|||
|
|
fi
|
|||
|
|
retries=$((retries - 1))
|
|||
|
|
sleep 2
|
|||
|
|
done
|
|||
|
|
|
|||
|
|
if [ $retries -eq 0 ]; then
|
|||
|
|
log_error "数据库启动超时"
|
|||
|
|
exit 1
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
# 等待后端就绪
|
|||
|
|
retries=30
|
|||
|
|
while [ $retries -gt 0 ]; do
|
|||
|
|
if docker exec tianpu_backend curl -sf http://localhost:8000/health &> /dev/null; then
|
|||
|
|
log_info "后端服务已就绪"
|
|||
|
|
break
|
|||
|
|
fi
|
|||
|
|
retries=$((retries - 1))
|
|||
|
|
sleep 2
|
|||
|
|
done
|
|||
|
|
|
|||
|
|
if [ $retries -eq 0 ]; then
|
|||
|
|
log_error "后端服务启动超时"
|
|||
|
|
exit 1
|
|||
|
|
fi
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
# 初始化数据
|
|||
|
|
init_data() {
|
|||
|
|
log_info "初始化数据库..."
|
|||
|
|
docker exec tianpu_backend python scripts/init_db.py || {
|
|||
|
|
log_warn "数据库初始化跳过(可能已初始化)"
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
log_info "写入种子数据..."
|
|||
|
|
docker exec tianpu_backend python scripts/seed_data.py || {
|
|||
|
|
log_warn "种子数据写入跳过(可能已存在)"
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
# 打印访问信息
|
|||
|
|
print_info() {
|
|||
|
|
echo ""
|
|||
|
|
echo "============================================="
|
|||
|
|
echo " 天普零碳园区智慧能源管理平台 启动完成"
|
|||
|
|
echo "============================================="
|
|||
|
|
echo ""
|
|||
|
|
echo " 前端页面: http://localhost:3000"
|
|||
|
|
echo " 后端 API: http://localhost:8000"
|
|||
|
|
echo " API 文档: http://localhost:8000/docs"
|
|||
|
|
echo ""
|
|||
|
|
echo " 默认账号: admin"
|
|||
|
|
echo " 默认密码: admin123"
|
|||
|
|
echo ""
|
|||
|
|
echo " 请在首次登录后修改默认密码"
|
|||
|
|
echo "============================================="
|
|||
|
|
echo ""
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
# 主流程
|
|||
|
|
main() {
|
|||
|
|
log_info "天普零碳园区智慧能源管理平台 - 快速启动"
|
|||
|
|
echo ""
|
|||
|
|
|
|||
|
|
check_prerequisites
|
|||
|
|
init_env
|
|||
|
|
start_services
|
|||
|
|
init_data
|
|||
|
|
print_info
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
main "$@"
|