213 lines
5.8 KiB
Bash
Executable File
213 lines
5.8 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Docker服务管理脚本
|
|
|
|
COMPOSE_FILE="docker-compose-full.yml"
|
|
|
|
# 颜色定义
|
|
GREEN='\033[0;32m'
|
|
RED='\033[0;31m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
NC='\033[0m' # No Color
|
|
|
|
show_help() {
|
|
echo "=================================================="
|
|
echo "🐳 Docker服务管理脚本"
|
|
echo "=================================================="
|
|
echo ""
|
|
echo "用法: ./docker-manage.sh [命令]"
|
|
echo ""
|
|
echo "可用命令:"
|
|
echo " start 启动所有服务"
|
|
echo " stop 停止所有服务"
|
|
echo " restart 重启所有服务"
|
|
echo " status 查看服务状态"
|
|
echo " logs [服务] 查看日志 (可选指定服务名)"
|
|
echo " health 检查健康状态"
|
|
echo " clean 停止并删除所有容器和卷"
|
|
echo " rebuild 重新构建并启动"
|
|
echo " shell [服务] 进入容器shell"
|
|
echo ""
|
|
echo "服务名称:"
|
|
echo " mysql, redis, opensearch, opensearch-dashboards, bookstore-app"
|
|
echo ""
|
|
}
|
|
|
|
start_services() {
|
|
echo -e "${BLUE}🚀 启动所有Docker服务...${NC}"
|
|
docker-compose -f $COMPOSE_FILE up -d
|
|
echo ""
|
|
echo -e "${GREEN}✅ 服务启动完成!${NC}"
|
|
echo ""
|
|
show_status
|
|
}
|
|
|
|
stop_services() {
|
|
echo -e "${YELLOW}⏸️ 停止所有Docker服务...${NC}"
|
|
docker-compose -f $COMPOSE_FILE stop
|
|
echo -e "${GREEN}✅ 服务已停止${NC}"
|
|
}
|
|
|
|
restart_services() {
|
|
echo -e "${YELLOW}🔄 重启所有Docker服务...${NC}"
|
|
docker-compose -f $COMPOSE_FILE restart
|
|
echo -e "${GREEN}✅ 服务重启完成${NC}"
|
|
echo ""
|
|
show_status
|
|
}
|
|
|
|
show_status() {
|
|
echo -e "${BLUE}📊 服务状态:${NC}"
|
|
docker-compose -f $COMPOSE_FILE ps
|
|
}
|
|
|
|
show_logs() {
|
|
if [ -z "$1" ]; then
|
|
echo -e "${BLUE}📜 查看所有服务日志 (Ctrl+C 退出):${NC}"
|
|
docker-compose -f $COMPOSE_FILE logs -f
|
|
else
|
|
echo -e "${BLUE}📜 查看 $1 服务日志 (Ctrl+C 退出):${NC}"
|
|
docker-compose -f $COMPOSE_FILE logs -f $1
|
|
fi
|
|
}
|
|
|
|
check_health() {
|
|
echo -e "${BLUE}🏥 检查服务健康状态:${NC}"
|
|
echo ""
|
|
|
|
# 检查MySQL
|
|
echo -n "MySQL: "
|
|
if docker exec bookstore-mysql mysqladmin ping -h localhost -uroot -p123456 2>/dev/null | grep -q "mysqld is alive"; then
|
|
echo -e "${GREEN}✅ Healthy${NC}"
|
|
else
|
|
echo -e "${RED}❌ Unhealthy${NC}"
|
|
fi
|
|
|
|
# 检查Redis
|
|
echo -n "Redis: "
|
|
if docker exec bookstore-redis redis-cli -a 123456 --no-auth-warning ping 2>/dev/null | grep -q PONG; then
|
|
echo -e "${GREEN}✅ Healthy${NC}"
|
|
else
|
|
echo -e "${RED}❌ Unhealthy${NC}"
|
|
fi
|
|
|
|
# 检查OpenSearch
|
|
echo -n "OpenSearch: "
|
|
OPENSEARCH_STATUS=$(curl -s http://localhost:9200/_cluster/health 2>/dev/null | python3 -c "import sys, json; print(json.load(sys.stdin)['status'])" 2>/dev/null)
|
|
if [ "$OPENSEARCH_STATUS" = "green" ] || [ "$OPENSEARCH_STATUS" = "yellow" ]; then
|
|
echo -e "${GREEN}✅ $OPENSEARCH_STATUS${NC}"
|
|
else
|
|
echo -e "${RED}❌ Unhealthy${NC}"
|
|
fi
|
|
|
|
# 检查应用
|
|
echo -n "Application: "
|
|
APP_STATUS=$(curl -s http://localhost:8845/fiction/actuator/health 2>/dev/null | python3 -c "import sys, json; print(json.load(sys.stdin)['status'])" 2>/dev/null)
|
|
if [ "$APP_STATUS" = "UP" ]; then
|
|
echo -e "${GREEN}✅ UP${NC}"
|
|
else
|
|
echo -e "${RED}❌ $APP_STATUS${NC}"
|
|
fi
|
|
|
|
echo ""
|
|
echo -e "${BLUE}🌐 访问URL:${NC}"
|
|
echo "应用首页: http://localhost:8845/fiction/index"
|
|
echo "健康检查: http://localhost:8845/fiction/actuator/health"
|
|
echo "Prometheus: http://localhost:8845/fiction/actuator/prometheus"
|
|
echo "OpenSearch: http://localhost:9200"
|
|
echo "OpenSearch面板: http://localhost:5601"
|
|
echo ""
|
|
echo -e "${BLUE}📊 数据库连接:${NC}"
|
|
echo "MySQL: localhost:23306 (root/123456)"
|
|
echo "Redis: localhost:26379 (密码: 123456)"
|
|
}
|
|
|
|
clean_services() {
|
|
echo -e "${RED}⚠️ 警告: 这将删除所有容器、网络和卷!${NC}"
|
|
read -p "确定要继续吗? (yes/no): " confirm
|
|
if [ "$confirm" = "yes" ]; then
|
|
echo -e "${YELLOW}🧹 清理所有Docker资源...${NC}"
|
|
docker-compose -f $COMPOSE_FILE down -v
|
|
echo -e "${GREEN}✅ 清理完成${NC}"
|
|
else
|
|
echo "已取消"
|
|
fi
|
|
}
|
|
|
|
rebuild_services() {
|
|
echo -e "${YELLOW}🔨 重新构建并启动服务...${NC}"
|
|
|
|
# 打包应用
|
|
echo "1. 打包应用..."
|
|
mvn clean package -DskipTests
|
|
|
|
# 重启服务
|
|
echo "2. 重启Docker服务..."
|
|
docker-compose -f $COMPOSE_FILE up -d --force-recreate
|
|
|
|
echo -e "${GREEN}✅ 重建完成${NC}"
|
|
echo ""
|
|
show_status
|
|
}
|
|
|
|
enter_shell() {
|
|
if [ -z "$1" ]; then
|
|
echo -e "${RED}❌ 请指定服务名${NC}"
|
|
echo "可用服务: mysql, redis, opensearch, bookstore-app"
|
|
exit 1
|
|
fi
|
|
|
|
CONTAINER_NAME="bookstore-$1"
|
|
if [ "$1" = "bookstore-app" ]; then
|
|
CONTAINER_NAME="bookstore-app"
|
|
fi
|
|
|
|
echo -e "${BLUE}🐚 进入 $CONTAINER_NAME 容器...${NC}"
|
|
docker exec -it $CONTAINER_NAME sh || docker exec -it $CONTAINER_NAME bash
|
|
}
|
|
|
|
# 主逻辑
|
|
case "$1" in
|
|
start)
|
|
start_services
|
|
;;
|
|
stop)
|
|
stop_services
|
|
;;
|
|
restart)
|
|
restart_services
|
|
;;
|
|
status)
|
|
show_status
|
|
;;
|
|
logs)
|
|
show_logs $2
|
|
;;
|
|
health)
|
|
check_health
|
|
;;
|
|
clean)
|
|
clean_services
|
|
;;
|
|
rebuild)
|
|
rebuild_services
|
|
;;
|
|
shell)
|
|
enter_shell $2
|
|
;;
|
|
help|--help|-h)
|
|
show_help
|
|
;;
|
|
*)
|
|
if [ -z "$1" ]; then
|
|
show_help
|
|
else
|
|
echo -e "${RED}❌ 未知命令: $1${NC}"
|
|
echo ""
|
|
show_help
|
|
exit 1
|
|
fi
|
|
;;
|
|
esac
|