-
Notifications
You must be signed in to change notification settings - Fork 47
Expand file tree
/
Copy pathstart-containers.sh
More file actions
executable file
·146 lines (123 loc) · 3.86 KB
/
start-containers.sh
File metadata and controls
executable file
·146 lines (123 loc) · 3.86 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
#!/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}"