-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdeploy.sh
More file actions
309 lines (249 loc) · 7 KB
/
Copy pathdeploy.sh
File metadata and controls
309 lines (249 loc) · 7 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
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
#!/bin/bash
# 🚀 发票OCR系统Docker部署脚本
# 镜像: kis2show/get_invoice_done:latest | 用户权限: 100:100
# 使用方法: ./deploy.sh [start|stop|restart|pull|logs|status]
set -e
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# 项目配置
PROJECT_NAME="invoice-ocr-system"
COMPOSE_FILE="docker-compose.yml"
# 日志函数
log_info() {
echo -e "${BLUE}[INFO]${NC} $1"
}
log_success() {
echo -e "${GREEN}[SUCCESS]${NC} $1"
}
log_warning() {
echo -e "${YELLOW}[WARNING]${NC} $1"
}
log_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# 检查Docker是否安装
check_docker() {
if ! command -v docker &> /dev/null; then
log_error "Docker未安装,请先安装Docker"
exit 1
fi
if ! command -v docker-compose &> /dev/null; then
log_error "Docker Compose未安装,请先安装Docker Compose"
exit 1
fi
log_info "Docker环境检查通过"
}
# 创建必要的目录
create_directories() {
log_info "创建必要的目录..."
mkdir -p data
mkdir -p invoices/pdf
mkdir -p invoices/imge
mkdir -p invoices/unrecognized
mkdir -p logs
log_success "目录创建完成"
}
# 拉取最新镜像
pull_image() {
log_info "拉取最新镜像: kis2show/get_invoice_done:latest..."
docker pull kis2show/get_invoice_done:latest
log_success "镜像拉取完成"
}
# 设置目录权限
setup_permissions() {
log_info "设置目录权限 (用户ID: 100)..."
# 检查是否为root用户或有sudo权限
if [[ $EUID -eq 0 ]]; then
chown -R 100:100 data invoices logs 2>/dev/null || true
chmod -R 755 data invoices logs 2>/dev/null || true
log_success "权限设置完成 (root用户)"
elif sudo -n true 2>/dev/null; then
sudo chown -R 100:100 data invoices logs 2>/dev/null || true
sudo chmod -R 755 data invoices logs 2>/dev/null || true
log_success "权限设置完成 (sudo)"
else
log_warning "无法自动设置权限,请手动执行:"
echo " sudo chown -R 100:100 data invoices logs"
echo " sudo chmod -R 755 data invoices logs"
fi
}
# 启动服务
start_service() {
log_info "启动发票OCR系统..."
create_directories
setup_permissions
# 启动主服务
docker-compose up -d invoice-ocr
log_success "服务启动完成"
log_info "🌐 Web界面地址: http://localhost:8000"
log_info "📚 API文档: http://localhost:8000/docs"
log_info "💚 健康检查: http://localhost:8000/health"
# 等待服务启动
log_info "等待服务启动..."
sleep 10
# 检查服务状态
check_health
}
# 启动服务(包含管理界面)
start_with_admin() {
log_info "启动发票OCR系统(包含管理界面)..."
create_directories
# 启动所有服务
docker-compose --profile admin up -d
log_success "服务启动完成"
log_info "Web界面地址: http://localhost:8000"
log_info "数据库管理界面: http://localhost:8080"
log_info "健康检查: http://localhost:8000/health"
# 等待服务启动
log_info "等待服务启动..."
sleep 10
# 检查服务状态
check_health
}
# 停止服务
stop_service() {
log_info "停止发票OCR系统..."
docker-compose down
log_success "服务已停止"
}
# 重启服务
restart_service() {
log_info "重启发票OCR系统..."
stop_service
sleep 2
start_service
}
# 查看日志
show_logs() {
log_info "显示服务日志..."
docker-compose logs -f invoice-ocr
}
# 检查服务状态
check_status() {
log_info "检查服务状态..."
echo "=== Docker容器状态 ==="
docker-compose ps
echo -e "\n=== 服务健康状态 ==="
check_health
echo -e "\n=== 资源使用情况 ==="
docker stats --no-stream $(docker-compose ps -q)
}
# 健康检查
check_health() {
local max_attempts=30
local attempt=1
while [ $attempt -le $max_attempts ]; do
if curl -f -s http://localhost:8000/health > /dev/null 2>&1; then
log_success "服务健康检查通过"
# 获取服务信息
local health_info=$(curl -s http://localhost:8000/health)
echo "健康状态: $health_info"
return 0
fi
log_warning "健康检查失败,重试中... ($attempt/$max_attempts)"
sleep 2
((attempt++))
done
log_error "服务健康检查失败"
return 1
}
# 清理资源
cleanup() {
log_info "清理Docker资源..."
# 停止并删除容器
docker-compose down --volumes --remove-orphans
# 删除镜像(可选)
read -p "是否删除Docker镜像? (y/N): " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
docker-compose down --rmi all
log_success "镜像已删除"
fi
log_success "清理完成"
}
# 备份数据
backup_data() {
log_info "备份数据..."
local backup_dir="backup_$(date +%Y%m%d_%H%M%S)"
mkdir -p "$backup_dir"
# 备份数据库
if [ -f "data/invoices.db" ]; then
cp data/invoices.db "$backup_dir/"
log_success "数据库备份完成"
fi
# 备份发票文件
if [ -d "invoices" ]; then
cp -r invoices "$backup_dir/"
log_success "发票文件备份完成"
fi
log_success "备份完成: $backup_dir"
}
# 显示帮助信息
show_help() {
echo "发票OCR系统Docker部署脚本"
echo ""
echo "使用方法:"
echo " $0 [命令]"
echo ""
echo "可用命令:"
echo " start 启动服务"
echo " start-admin 启动服务(包含管理界面)"
echo " stop 停止服务"
echo " restart 重启服务"
echo " pull 拉取最新镜像"
echo " logs 查看日志"
echo " status 检查状态"
echo " cleanup 清理资源"
echo " backup 备份数据"
echo " help 显示帮助"
echo ""
echo "示例:"
echo " $0 start # 启动服务"
echo " $0 start-admin # 启动服务(包含管理界面)"
echo " $0 logs # 查看日志"
echo " $0 status # 检查状态"
}
# 主函数
main() {
# 检查Docker环境
check_docker
# 处理命令行参数
case "${1:-help}" in
"start")
start_service
;;
"start-admin")
start_with_admin
;;
"stop")
stop_service
;;
"restart")
restart_service
;;
"pull")
pull_image
;;
"logs")
show_logs
;;
"status")
check_status
;;
"cleanup")
cleanup
;;
"backup")
backup_data
;;
"help"|*)
show_help
;;
esac
}
# 执行主函数
main "$@"