deploy.sh 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. #!/usr/bin/env bash
  2. # 部署脚本 - 一键部署 MySQL 和 Redis
  3. # 使用方法: chmod +x deploy.sh && ./deploy.sh
  4. # 支持系统: Ubuntu/Debian/CentOS/RHEL/国产 Linux/macOS
  5. set -e
  6. # 检查 Bash 版本
  7. if [ -z "$BASH_VERSION" ] || [ "${BASH_VERSION%%.*}" -lt 3 ]; then
  8. echo "错误: 需要 Bash 3.0 或更高版本"
  9. exit 1
  10. fi
  11. echo "=========================================="
  12. echo " zskk pacsonline 部署脚本"
  13. echo "=========================================="
  14. echo ""
  15. # 颜色定义
  16. GREEN='\033[0;32m'
  17. YELLOW='\033[1;33m'
  18. RED='\033[0;31m'
  19. NC='\033[0m' # No Color
  20. # 检查 Docker 是否安装
  21. if ! command -v docker &> /dev/null; then
  22. echo -e "${RED}错误: Docker 未安装,请先安装 Docker${NC}"
  23. exit 1
  24. fi
  25. echo -e "${GREEN}✓ Docker 已安装${NC}"
  26. # 检查 Docker Compose 是否可用
  27. if docker compose version &> /dev/null; then
  28. COMPOSE_CMD="docker compose"
  29. echo -e "${GREEN}✓ Docker Compose V2 可用${NC}"
  30. elif command -v docker-compose &> /dev/null; then
  31. COMPOSE_CMD="docker-compose"
  32. echo -e "${GREEN}✓ Docker Compose V1 可用${NC}"
  33. else
  34. echo -e "${RED}错误: Docker Compose 未安装${NC}"
  35. exit 1
  36. fi
  37. echo ""
  38. echo "=========================================="
  39. echo " 开始部署..."
  40. echo "=========================================="
  41. echo ""
  42. # 自动检测系统架构
  43. ARCH=$(uname -m)
  44. case "$ARCH" in
  45. x86_64)
  46. ARCH_SUFFIX="amd64"
  47. ;;
  48. aarch64|arm64)
  49. ARCH_SUFFIX="arm64"
  50. ;;
  51. *)
  52. echo -e "${RED}错误: 不支持的架构 $ARCH${NC}"
  53. exit 1
  54. ;;
  55. esac
  56. echo -e "${GREEN}✓ 检测到系统架构: $ARCH ($ARCH_SUFFIX)${NC}"
  57. echo ""
  58. # 加载镜像
  59. echo -e "${YELLOW}加载镜像...${NC}"
  60. # 优先加载带架构后缀的镜像,其次尝试通用名称
  61. if [ -f "./images/mysql-image-${ARCH_SUFFIX}.tar" ]; then
  62. docker load -i "./images/mysql-image-${ARCH_SUFFIX}.tar"
  63. echo -e "${GREEN}✓ MySQL 镜像加载完成 (${ARCH_SUFFIX})${NC}"
  64. elif [ -f "./images/mysql-image.tar" ]; then
  65. docker load -i ./images/mysql-image.tar
  66. echo -e "${GREEN}✓ MySQL 镜像加载完成${NC}"
  67. else
  68. echo -e "${YELLOW}⚠ 未找到 MySQL 镜像文件${NC}"
  69. fi
  70. if [ -f "./images/redis-image-${ARCH_SUFFIX}.tar" ]; then
  71. docker load -i "./images/redis-image-${ARCH_SUFFIX}.tar"
  72. echo -e "${GREEN}✓ Redis 镜像加载完成 (${ARCH_SUFFIX})${NC}"
  73. elif [ -f "./images/redis-image.tar" ]; then
  74. docker load -i redis-image.tar
  75. echo -e "${GREEN}✓ Redis 镜像加载完成${NC}"
  76. else
  77. echo -e "${YELLOW}⚠ 未找到 Redis 镜像文件${NC}"
  78. fi
  79. if [ -f "./images/nginx-image-${ARCH_SUFFIX}.tar" ]; then
  80. docker load -i "./images/nginx-image-${ARCH_SUFFIX}.tar"
  81. echo -e "${GREEN}✓ Nginx 镜像加载完成 (${ARCH_SUFFIX})${NC}"
  82. elif [ -f "./images/nginx-image.tar" ]; then
  83. docker load -i ./images/nginx-image.tar
  84. echo -e "${GREEN}✓ Nginx 镜像加载完成${NC}"
  85. fi
  86. if [ -f "./images/php-fpm-mysql-7.4-${ARCH_SUFFIX}.tar" ]; then
  87. docker load -i "./images/php-fpm-mysql-7.4-${ARCH_SUFFIX}.tar"
  88. echo -e "${GREEN}✓ php-fpm-mysql-7.4 镜像加载完成 (${ARCH_SUFFIX})${NC}"
  89. elif [ -f "./images/php-fpm-mysql-7.4.tar" ]; then
  90. docker load -i ./images/php-fpm-mysql-7.4.tar
  91. echo -e "${GREEN}✓ Nginx 镜像加载完成${NC}"
  92. fi
  93. # if [ -f "minio-image-${ARCH_SUFFIX}.tar" ]; then
  94. # docker load -i "minio-image-${ARCH_SUFFIX}.tar"
  95. # echo -e "${GREEN}✓ MinIO 镜像加载完成 (${ARCH_SUFFIX})${NC}"
  96. # elif [ -f "minio-image.tar" ]; then
  97. # docker load -i minio-image.tar
  98. # echo -e "${GREEN}✓ MinIO 镜像加载完成${NC}"
  99. # fi
  100. echo ""
  101. # 停止已存在的容器(如果有)
  102. echo -e "${YELLOW}停止旧容器(如果存在)...${NC}"
  103. $COMPOSE_CMD down 2>/dev/null || true
  104. # 启动服务
  105. echo -e "${YELLOW}启动服务...${NC}"
  106. $COMPOSE_CMD up -d
  107. echo ""
  108. echo -e "${GREEN}等待 MySQL 启动完成...${NC}"
  109. sleep 15
  110. # 初始化 MySQL 数据库
  111. if [ -f "mysql-init.sql" ]; then
  112. echo ""
  113. echo -e "${YELLOW}执行 MySQL 初始化脚本...${NC}"
  114. # 等待 MySQL 完全就绪(兼容所有系统)
  115. COUNTER=0
  116. MAX_RETRIES=30
  117. while [ $COUNTER -lt $MAX_RETRIES ]; do
  118. if docker exec mysql8_deploy mysqladmin ping -h localhost -uroot -Zskk@2025 --silent &> /dev/null; then
  119. echo ""
  120. echo -e "${GREEN}✓ MySQL 已就绪${NC}"
  121. break
  122. fi
  123. echo -n "."
  124. sleep 1
  125. COUNTER=$((COUNTER + 1))
  126. done
  127. if [ $COUNTER -eq $MAX_RETRIES ]; then
  128. echo ""
  129. echo -e "${RED}✗ MySQL 启动超时${NC}"
  130. exit 1
  131. fi
  132. echo ""
  133. # 执行初始化脚本
  134. docker exec -i mysql8_deploy mysql -uroot -Zskk@2025 pacsonline < mysql-init.sql
  135. if [ $? -eq 0 ]; then
  136. echo -e "${GREEN}✓ MySQL 初始化完成${NC}"
  137. else
  138. echo -e "${RED}✗ MySQL 初始化失败${NC}"
  139. fi
  140. else
  141. echo -e "${YELLOW}未找到 mysql-init.sql 文件,跳过数据库初始化${NC}"
  142. fi
  143. # 检查服务状态
  144. echo ""
  145. echo "=========================================="
  146. echo " 服务状态"
  147. echo "=========================================="
  148. $COMPOSE_CMD ps
  149. echo ""
  150. echo "=========================================="
  151. echo " 部署完成!"
  152. echo "=========================================="
  153. echo ""
  154. echo -e "${GREEN}MySQL 连接信息:${NC}"
  155. echo " 主机: localhost"
  156. echo " 端口: 3306"
  157. echo " 数据库: pacsonline"
  158. echo " 用户: pacsonline"
  159. echo " 密码: zskk@2025"
  160. echo " Root 密码: Zskk@2025"
  161. echo ""
  162. echo -e "${GREEN}Redis 连接信息:${NC}"
  163. echo " 主机: localhost"
  164. echo " 端口: 6379"
  165. echo " 密码: zskk@2025"
  166. echo ""
  167. # echo -e "${GREEN}MinIO 连接信息:${NC}"
  168. # echo " API 地址: http://localhost:9000"
  169. # echo " 控制台: http://localhost:9001"
  170. # echo " 用户名: admin"
  171. # echo " 密码: zskk8888"
  172. # echo ""
  173. echo -e "${YELLOW}查看日志:${NC}"
  174. echo " MySQL: $COMPOSE_CMD logs -f mysql"
  175. echo " Redis: $COMPOSE_CMD logs -f redis"
  176. echo " php-fpm: $COMPOSE_CMD logs -f php-fpm"
  177. echo " nginx: $COMPOSE_CMD logs -f nginx"
  178. echo ""
  179. echo -e "${YELLOW}停止服务:${NC}"
  180. echo " $COMPOSE_CMD stop"
  181. echo ""
  182. echo -e "${YELLOW}重启服务:${NC}"
  183. echo " $COMPOSE_CMD restart"
  184. echo ""
  185. echo -e "${YELLOW}删除服务:${NC}"
  186. echo " $COMPOSE_CMD down"
  187. echo ""