| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215 |
- #!/usr/bin/env bash
- # 部署脚本 - 一键部署 MySQL 和 Redis
- # 使用方法: chmod +x deploy.sh && ./deploy.sh
- # 支持系统: Ubuntu/Debian/CentOS/RHEL/国产 Linux/macOS
- set -e
- # 检查 Bash 版本
- if [ -z "$BASH_VERSION" ] || [ "${BASH_VERSION%%.*}" -lt 3 ]; then
- echo "错误: 需要 Bash 3.0 或更高版本"
- exit 1
- fi
- echo "=========================================="
- echo " zskk pacsonline 部署脚本"
- echo "=========================================="
- echo ""
- # 颜色定义
- GREEN='\033[0;32m'
- YELLOW='\033[1;33m'
- RED='\033[0;31m'
- NC='\033[0m' # No Color
- # 检查 Docker 是否安装
- if ! command -v docker &> /dev/null; then
- echo -e "${RED}错误: Docker 未安装,请先安装 Docker${NC}"
- exit 1
- fi
- echo -e "${GREEN}✓ Docker 已安装${NC}"
- # 检查 Docker Compose 是否可用
- if docker compose version &> /dev/null; then
- COMPOSE_CMD="docker compose"
- echo -e "${GREEN}✓ Docker Compose V2 可用${NC}"
- elif command -v docker-compose &> /dev/null; then
- COMPOSE_CMD="docker-compose"
- echo -e "${GREEN}✓ Docker Compose V1 可用${NC}"
- else
- echo -e "${RED}错误: Docker Compose 未安装${NC}"
- exit 1
- fi
- echo ""
- echo "=========================================="
- echo " 开始部署..."
- echo "=========================================="
- echo ""
- # 自动检测系统架构
- ARCH=$(uname -m)
- case "$ARCH" in
- x86_64)
- ARCH_SUFFIX="amd64"
- ;;
- aarch64|arm64)
- ARCH_SUFFIX="arm64"
- ;;
- *)
- echo -e "${RED}错误: 不支持的架构 $ARCH${NC}"
- exit 1
- ;;
- esac
- echo -e "${GREEN}✓ 检测到系统架构: $ARCH ($ARCH_SUFFIX)${NC}"
- echo ""
- # 加载镜像
- echo -e "${YELLOW}加载镜像...${NC}"
- # 优先加载带架构后缀的镜像,其次尝试通用名称
- if [ -f "./images/mysql-image-${ARCH_SUFFIX}.tar" ]; then
- docker load -i "./images/mysql-image-${ARCH_SUFFIX}.tar"
- echo -e "${GREEN}✓ MySQL 镜像加载完成 (${ARCH_SUFFIX})${NC}"
- elif [ -f "./images/mysql-image.tar" ]; then
- docker load -i ./images/mysql-image.tar
- echo -e "${GREEN}✓ MySQL 镜像加载完成${NC}"
- else
- echo -e "${YELLOW}⚠ 未找到 MySQL 镜像文件${NC}"
- fi
- if [ -f "./images/redis-image-${ARCH_SUFFIX}.tar" ]; then
- docker load -i "./images/redis-image-${ARCH_SUFFIX}.tar"
- echo -e "${GREEN}✓ Redis 镜像加载完成 (${ARCH_SUFFIX})${NC}"
- elif [ -f "./images/redis-image.tar" ]; then
- docker load -i redis-image.tar
- echo -e "${GREEN}✓ Redis 镜像加载完成${NC}"
- else
- echo -e "${YELLOW}⚠ 未找到 Redis 镜像文件${NC}"
- fi
- if [ -f "./images/nginx-image-${ARCH_SUFFIX}.tar" ]; then
- docker load -i "./images/nginx-image-${ARCH_SUFFIX}.tar"
- echo -e "${GREEN}✓ Nginx 镜像加载完成 (${ARCH_SUFFIX})${NC}"
- elif [ -f "./images/nginx-image.tar" ]; then
- docker load -i ./images/nginx-image.tar
- echo -e "${GREEN}✓ Nginx 镜像加载完成${NC}"
- fi
- if [ -f "./images/php-fpm-mysql-7.4-${ARCH_SUFFIX}.tar" ]; then
- docker load -i "./images/php-fpm-mysql-7.4-${ARCH_SUFFIX}.tar"
- echo -e "${GREEN}✓ php-fpm-mysql-7.4 镜像加载完成 (${ARCH_SUFFIX})${NC}"
- elif [ -f "./images/php-fpm-mysql-7.4.tar" ]; then
- docker load -i ./images/php-fpm-mysql-7.4.tar
- echo -e "${GREEN}✓ Nginx 镜像加载完成${NC}"
- fi
- # if [ -f "minio-image-${ARCH_SUFFIX}.tar" ]; then
- # docker load -i "minio-image-${ARCH_SUFFIX}.tar"
- # echo -e "${GREEN}✓ MinIO 镜像加载完成 (${ARCH_SUFFIX})${NC}"
- # elif [ -f "minio-image.tar" ]; then
- # docker load -i minio-image.tar
- # echo -e "${GREEN}✓ MinIO 镜像加载完成${NC}"
- # fi
- echo ""
- # 停止已存在的容器(如果有)
- echo -e "${YELLOW}停止旧容器(如果存在)...${NC}"
- $COMPOSE_CMD down 2>/dev/null || true
- # 启动服务
- echo -e "${YELLOW}启动服务...${NC}"
- $COMPOSE_CMD up -d
- echo ""
- echo -e "${GREEN}等待 MySQL 启动完成...${NC}"
- sleep 15
- # 初始化 MySQL 数据库
- if [ -f "mysql-init.sql" ]; then
- echo ""
- echo -e "${YELLOW}执行 MySQL 初始化脚本...${NC}"
- # 等待 MySQL 完全就绪(兼容所有系统)
- COUNTER=0
- MAX_RETRIES=30
- while [ $COUNTER -lt $MAX_RETRIES ]; do
- if docker exec mysql8_deploy mysqladmin ping -h localhost -uroot -Zskk@2025 --silent &> /dev/null; then
- echo ""
- echo -e "${GREEN}✓ MySQL 已就绪${NC}"
- break
- fi
- echo -n "."
- sleep 1
- COUNTER=$((COUNTER + 1))
- done
- if [ $COUNTER -eq $MAX_RETRIES ]; then
- echo ""
- echo -e "${RED}✗ MySQL 启动超时${NC}"
- exit 1
- fi
- echo ""
- # 执行初始化脚本
- docker exec -i mysql8_deploy mysql -uroot -Zskk@2025 pacsonline < mysql-init.sql
- if [ $? -eq 0 ]; then
- echo -e "${GREEN}✓ MySQL 初始化完成${NC}"
- else
- echo -e "${RED}✗ MySQL 初始化失败${NC}"
- fi
- else
- echo -e "${YELLOW}未找到 mysql-init.sql 文件,跳过数据库初始化${NC}"
- fi
- # 检查服务状态
- echo ""
- echo "=========================================="
- echo " 服务状态"
- echo "=========================================="
- $COMPOSE_CMD ps
- echo ""
- echo "=========================================="
- echo " 部署完成!"
- echo "=========================================="
- echo ""
- echo -e "${GREEN}MySQL 连接信息:${NC}"
- echo " 主机: localhost"
- echo " 端口: 3306"
- echo " 数据库: pacsonline"
- echo " 用户: pacsonline"
- echo " 密码: zskk@2025"
- echo " Root 密码: Zskk@2025"
- echo ""
- echo -e "${GREEN}Redis 连接信息:${NC}"
- echo " 主机: localhost"
- echo " 端口: 6379"
- echo " 密码: zskk@2025"
- echo ""
- # echo -e "${GREEN}MinIO 连接信息:${NC}"
- # echo " API 地址: http://localhost:9000"
- # echo " 控制台: http://localhost:9001"
- # echo " 用户名: admin"
- # echo " 密码: zskk8888"
- # echo ""
- echo -e "${YELLOW}查看日志:${NC}"
- echo " MySQL: $COMPOSE_CMD logs -f mysql"
- echo " Redis: $COMPOSE_CMD logs -f redis"
- echo " php-fpm: $COMPOSE_CMD logs -f php-fpm"
- echo " nginx: $COMPOSE_CMD logs -f nginx"
- echo ""
- echo -e "${YELLOW}停止服务:${NC}"
- echo " $COMPOSE_CMD stop"
- echo ""
- echo -e "${YELLOW}重启服务:${NC}"
- echo " $COMPOSE_CMD restart"
- echo ""
- echo -e "${YELLOW}删除服务:${NC}"
- echo " $COMPOSE_CMD down"
- echo ""
|