mirror of
https://github.com/opsre/LiteOps.git
synced 2026-02-06 23:21:31 +08:00
146 lines
3.9 KiB
Bash
Executable File
146 lines
3.9 KiB
Bash
Executable File
#!/bin/bash
|
||
|
||
# 颜色定义
|
||
RED='\033[0;31m'
|
||
GREEN='\033[0;32m'
|
||
YELLOW='\033[0;33m'
|
||
BLUE='\033[0;34m'
|
||
PURPLE='\033[0;35m'
|
||
CYAN='\033[0;36m'
|
||
NC='\033[0m' # 无颜色
|
||
|
||
# 设置变量
|
||
CONTAINER_IMAGE="liteops/liteops:[最新版本]"
|
||
CONTAINER_NAME="liteops"
|
||
MYSQL_CONTAINER="liteops-mysql"
|
||
MYSQL_VERSION="8"
|
||
MYSQL_PASSWORD="1234567xx"
|
||
MYSQL_PORT="3306"
|
||
NETWORK_NAME="liteops-network"
|
||
|
||
# 打印带颜色的信息
|
||
print_info() {
|
||
echo -e "${BLUE}[INFO]${NC} $1"
|
||
}
|
||
|
||
print_success() {
|
||
echo -e "${GREEN}[SUCCESS]${NC} $1"
|
||
}
|
||
|
||
print_warning() {
|
||
echo -e "${YELLOW}[WARNING]${NC} $1"
|
||
}
|
||
|
||
print_error() {
|
||
echo -e "${RED}[ERROR]${NC} $1"
|
||
}
|
||
|
||
print_step() {
|
||
echo -e "\n${PURPLE}=== $1 ===${NC}"
|
||
}
|
||
|
||
# 等待MySQL就绪的函数
|
||
wait_for_mysql() {
|
||
local max_attempts=30
|
||
local attempt=1
|
||
|
||
print_info "等待MySQL服务完全启动..."
|
||
|
||
while [ $attempt -le $max_attempts ]; do
|
||
if docker exec $MYSQL_CONTAINER mysqladmin ping -uroot -p$MYSQL_PASSWORD --silent >/dev/null 2>&1; then
|
||
print_success "MySQL服务已就绪 (尝试次数: $attempt)"
|
||
return 0
|
||
fi
|
||
|
||
print_info "MySQL还未就绪,等待中... (尝试 $attempt/$max_attempts)"
|
||
sleep 2
|
||
attempt=$((attempt + 1))
|
||
done
|
||
|
||
print_error "MySQL在 $((max_attempts * 2)) 秒内未能就绪"
|
||
return 1
|
||
}
|
||
|
||
# 导入SQL文件的函数
|
||
import_sql_with_retry() {
|
||
local max_attempts=3
|
||
local attempt=1
|
||
|
||
while [ $attempt -le $max_attempts ]; do
|
||
print_info "尝试导入初始化数据 (尝试 $attempt/$max_attempts)..."
|
||
|
||
if docker exec -i $MYSQL_CONTAINER mysql -uroot -p$MYSQL_PASSWORD liteops < liteops_init.sql; then
|
||
print_success "初始化数据导入成功"
|
||
return 0
|
||
else
|
||
print_warning "初始化数据导入失败,尝试 $attempt/$max_attempts"
|
||
if [ $attempt -lt $max_attempts ]; then
|
||
print_info "等待5秒后重试..."
|
||
sleep 5
|
||
fi
|
||
attempt=$((attempt + 1))
|
||
fi
|
||
done
|
||
|
||
print_error "初始化数据导入失败,已尝试 $max_attempts 次"
|
||
return 1
|
||
}
|
||
|
||
# 创建Docker网络(如果不存在)
|
||
print_step "创建Docker网络"
|
||
if ! docker network inspect $NETWORK_NAME >/dev/null 2>&1; then
|
||
print_info "创建Docker网络: $NETWORK_NAME"
|
||
docker network create $NETWORK_NAME
|
||
print_success "网络创建成功"
|
||
else
|
||
print_info "网络 $NETWORK_NAME 已存在,跳过创建"
|
||
fi
|
||
|
||
# 停止并删除已存在的容器
|
||
print_step "清理已存在的容器"
|
||
print_info "停止并删除已存在的容器..."
|
||
docker stop $CONTAINER_NAME $MYSQL_CONTAINER 2>/dev/null || true
|
||
docker rm $CONTAINER_NAME $MYSQL_CONTAINER 2>/dev/null || true
|
||
print_success "容器清理完成"
|
||
|
||
# 启动MySQL容器
|
||
print_step "启动MySQL容器"
|
||
print_info "启动MySQL $MYSQL_VERSION 容器..."
|
||
docker run -d \
|
||
--name $MYSQL_CONTAINER \
|
||
--network $NETWORK_NAME \
|
||
-p $MYSQL_PORT:3306 \
|
||
-e MYSQL_ROOT_PASSWORD=$MYSQL_PASSWORD \
|
||
-e MYSQL_DATABASE=liteops \
|
||
mysql:$MYSQL_VERSION
|
||
|
||
# 等待MySQL完全就绪
|
||
if ! wait_for_mysql; then
|
||
print_error "MySQL启动失败,退出部署"
|
||
exit 1
|
||
fi
|
||
|
||
# 初始化数据库
|
||
print_step "初始化数据库"
|
||
if ! import_sql_with_retry; then
|
||
print_error "数据库初始化失败,退出部署"
|
||
exit 1
|
||
fi
|
||
print_success "数据库初始化完成"
|
||
|
||
# 启动应用容器
|
||
print_step "启动应用容器"
|
||
print_info "启动LiteOps容器(Docker in Docker模式)..."
|
||
docker run -d \
|
||
--name $CONTAINER_NAME \
|
||
--network $NETWORK_NAME \
|
||
--privileged \
|
||
-p 80:80 \
|
||
-p 8900:8900 \
|
||
$CONTAINER_IMAGE
|
||
|
||
print_step "部署完成"
|
||
print_success "LiteOps已成功部署!"
|
||
print_info "前端访问地址: ${CYAN}http://localhost${NC}"
|
||
print_info "后端API地址: ${CYAN}http://localhost:8900/api/${NC}"
|
||
print_info "MySQL端口映射: ${CYAN}$MYSQL_PORT${NC}" |