#!/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 " MinIO: $COMPOSE_CMD logs -f minio" 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 ""