Files
server/pre-deploy-check.sh
2025-11-01 15:24:04 +08:00

137 lines
4.5 KiB
Bash
Executable File

#!/bin/bash
# 部署前检查脚本
set -e
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
echo -e "${GREEN}=== 数字档案系统部署前检查 ===${NC}"
# 检查参数
if [ $# -eq 0 ]; then
echo -e "${RED}用法: $0 <部署目录>${NC}"
exit 1
fi
DEPLOY_DIR=$1
# 1. 检查Docker环境
echo -e "${YELLOW}1. 检查Docker环境...${NC}"
if ! command -v docker &> /dev/null; then
echo -e "${RED}错误: Docker未安装${NC}"
exit 1
fi
echo -e "${GREEN}Docker版本: $(docker --version)${NC}"
# 2. 检查Docker Compose
echo -e "${YELLOW}2. 检查Docker Compose...${NC}"
if docker compose version &> /dev/null; then
COMPOSE_CMD="docker compose"
elif command -v docker-compose &> /dev/null; then
COMPOSE_CMD="docker-compose"
else
echo -e "${RED}错误: Docker Compose未安装${NC}"
exit 1
fi
echo -e "${GREEN}使用命令: ${COMPOSE_CMD}${NC}"
# 3. 检查proxy网络
echo -e "${YELLOW}3. 检查proxy网络...${NC}"
if ! docker network ls | grep -q proxy; then
echo -e "${RED}错误: proxy网络不存在${NC}"
echo -e "${YELLOW}请创建网络: docker network create proxy${NC}"
exit 1
fi
echo -e "${GREEN}proxy网络存在${NC}"
# 4. 检查MySQL容器
echo -e "${YELLOW}4. 检查MySQL容器...${NC}"
MYSQL_CONTAINER=$(docker network inspect proxy --format '{{range .Containers}}{{.Name}} {{end}}' | tr ' ' '\n' | grep -i mysql | head -1 || true)
if [ -z "$MYSQL_CONTAINER" ]; then
echo -e "${RED}错误: proxy网络中未找到MySQL容器${NC}"
echo -e "${YELLOW}请确保MySQL容器已启动并连接到proxy网络${NC}"
exit 1
fi
echo -e "${GREEN}找到MySQL容器: ${MYSQL_CONTAINER}${NC}"
# 5. 检查Redis容器
echo -e "${YELLOW}5. 检查Redis容器...${NC}"
REDIS_CONTAINER=$(docker network inspect proxy --format '{{range .Containers}}{{.Name}} {{end}}' | tr ' ' '\n' | grep -i redis | head -1 || true)
if [ -z "$REDIS_CONTAINER" ]; then
echo -e "${RED}错误: proxy网络中未找到Redis容器${NC}"
echo -e "${YELLOW}请确保Redis容器已启动并连接到proxy网络${NC}"
exit 1
fi
echo -e "${GREEN}找到Redis容器: ${REDIS_CONTAINER}${NC}"
# 6. 检查Elasticsearch容器
echo -e "${YELLOW}6. 检查Elasticsearch容器...${NC}"
ES_CONTAINER=$(docker network inspect proxy --format '{{range .Containers}}{{.Name}} {{end}}' | tr ' ' '\n' | grep -i elasticsearch | head -1 || true)
if [ -z "$ES_CONTAINER" ]; then
echo -e "${RED}错误: proxy网络中未找到Elasticsearch容器${NC}"
echo -e "${YELLOW}请确保Elasticsearch容器已启动并连接到proxy网络${NC}"
exit 1
fi
echo -e "${GREEN}找到Elasticsearch容器: ${ES_CONTAINER}${NC}"
# 7. 检查镜像
echo -e "${YELLOW}7. 检查应用镜像...${NC}"
if ! docker images | grep -q digital-archive; then
echo -e "${RED}错误: digital-archive镜像不存在${NC}"
echo -e "${YELLOW}请先运行: ./build.sh${NC}"
exit 1
fi
echo -e "${GREEN}digital-archive镜像存在${NC}"
# 8. 检查部署目录
echo -e "${YELLOW}8. 检查部署目录...${NC}"
if [ -d "$DEPLOY_DIR" ]; then
echo -e "${YELLOW}部署目录已存在: ${DEPLOY_DIR}${NC}"
read -p "是否继续部署到现有目录? (y/N): " -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
echo -e "${YELLOW}部署已取消${NC}"
exit 0
fi
else
echo -e "${GREEN}创建新部署目录: ${DEPLOY_DIR}${NC}"
fi
# 9. 测试网络连通性
echo -e "${YELLOW}9. 测试网络连通性...${NC}"
if docker run --rm --network proxy alpine ping -c 1 mysql &> /dev/null; then
echo -e "${GREEN}可以连接MySQL容器${NC}"
else
echo -e "${RED}无法连接MySQL容器${NC}"
exit 1
fi
if docker run --rm --network proxy alpine ping -c 1 redis &> /dev/null; then
echo -e "${GREEN}可以连接Redis容器${NC}"
else
echo -e "${RED}无法连接Redis容器${NC}"
exit 1
fi
if docker run --rm --network proxy alpine ping -c 1 elasticsearch &> /dev/null; then
echo -e "${GREEN}可以连接Elasticsearch容器${NC}"
else
echo -e "${RED}无法连接Elasticsearch容器${NC}"
exit 1
fi
# 10. 显示部署信息
echo -e "${GREEN}=== 部署信息 ===${NC}"
echo -e "${YELLOW}部署目录: ${DEPLOY_DIR}${NC}"
echo -e "${YELLOW}MySQL容器: ${MYSQL_CONTAINER}${NC}"
echo -e "${YELLOW}Redis容器: ${REDIS_CONTAINER}${NC}"
echo -e "${YELLOW}Elasticsearch容器: ${ES_CONTAINER}${NC}"
echo -e "${YELLOW}网络: proxy${NC}"
echo -e "${YELLOW}Docker Compose: ${COMPOSE_CMD}${NC}"
echo -e "${GREEN}检查完成,可以开始部署!${NC}"
echo -e "${YELLOW}运行部署命令: ./deploy.sh ${DEPLOY_DIR}${NC}"