#!/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. 检查镜像 echo -e "${YELLOW}6. 检查应用镜像...${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}" # 7. 检查部署目录 echo -e "${YELLOW}7. 检查部署目录...${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 # 8. 测试网络连通性 echo -e "${YELLOW}8. 测试网络连通性...${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 # 9. 显示部署信息 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}网络: proxy${NC}" echo -e "${YELLOW}Docker Compose: ${COMPOSE_CMD}${NC}" echo -e "${GREEN}检查完成,可以开始部署!${NC}" echo -e "${YELLOW}运行部署命令: ./deploy.sh ${DEPLOY_DIR}${NC}"