deploy.sh 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250
  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. echo "开始设置宿主机挂载目录权限..."
  43. # 定义需要授权的宿主机目录列表(根据你的 compose 挂载路径填写)
  44. MOUNT_DIRS=(
  45. "./projects/www" # PHP 代码目录(对应容器 /var/www/html)
  46. #"./mysql/data" # MySQL 数据目录
  47. #"./mysql/conf" # MySQL 配置目录
  48. "./mysql/init" # MySQL 初始化脚本目录
  49. #"./redis/data" # redis 数据目录
  50. #"./redis/conf/redis.conf" # redis 配置目录
  51. #"./nginx/conf" # nginx 配置目录
  52. #"./nginx/logs" # nginx 日志目录
  53. # 其他容器的挂载目录(如有),按实际路径添加
  54. )
  55. # 循环给每个目录设置 777 权限
  56. for dir in "${MOUNT_DIRS[@]}"; do
  57. # 检查目录是否存在,不存在则创建
  58. if [ ! -d "$dir" ]; then
  59. mkdir -p "$dir"
  60. echo "创建目录:$dir"
  61. fi
  62. # 设置权限
  63. chmod -R 777 "$dir"
  64. echo "已授权目录:$dir(权限 777)"
  65. done
  66. echo "宿主机挂载目录授权完成..."
  67. # 自动检测系统架构
  68. ARCH=$(uname -m)
  69. case "$ARCH" in
  70. x86_64)
  71. ARCH_SUFFIX="amd64"
  72. ;;
  73. aarch64|arm64)
  74. ARCH_SUFFIX="arm64"
  75. ;;
  76. *)
  77. echo -e "${RED}错误: 不支持的架构 $ARCH${NC}"
  78. exit 1
  79. ;;
  80. esac
  81. echo -e "${GREEN}✓ 检测到系统架构: $ARCH ($ARCH_SUFFIX)${NC}"
  82. echo ""
  83. # 加载镜像
  84. echo -e "${YELLOW}加载镜像...${NC}"
  85. # 优先加载带架构后缀的镜像,其次尝试通用名称
  86. if [ -f "./images/mysql-image-${ARCH_SUFFIX}.tar" ]; then
  87. docker load -i "./images/mysql-image-${ARCH_SUFFIX}.tar"
  88. echo -e "${GREEN}✓ MySQL 镜像加载完成 (${ARCH_SUFFIX})${NC}"
  89. elif [ -f "./images/mysql-image.tar" ]; then
  90. docker load -i ./images/mysql-image.tar
  91. echo -e "${GREEN}✓ MySQL 镜像加载完成${NC}"
  92. else
  93. echo -e "${YELLOW}⚠ 未找到 MySQL 镜像文件${NC}"
  94. fi
  95. if [ -f "./images/redis-image-${ARCH_SUFFIX}.tar" ]; then
  96. docker load -i "./images/redis-image-${ARCH_SUFFIX}.tar"
  97. echo -e "${GREEN}✓ Redis 镜像加载完成 (${ARCH_SUFFIX})${NC}"
  98. elif [ -f "./images/redis-image.tar" ]; then
  99. docker load -i redis-image.tar
  100. echo -e "${GREEN}✓ Redis 镜像加载完成${NC}"
  101. else
  102. echo -e "${YELLOW}⚠ 未找到 Redis 镜像文件${NC}"
  103. fi
  104. if [ -f "./images/nginx-image-${ARCH_SUFFIX}.tar" ]; then
  105. docker load -i "./images/nginx-image-${ARCH_SUFFIX}.tar"
  106. echo -e "${GREEN}✓ Nginx 镜像加载完成 (${ARCH_SUFFIX})${NC}"
  107. elif [ -f "./images/nginx-image.tar" ]; then
  108. docker load -i ./images/nginx-image.tar
  109. echo -e "${GREEN}✓ Nginx 镜像加载完成${NC}"
  110. fi
  111. if [ -f "./images/php-fpm-mysql-7.4-${ARCH_SUFFIX}.tar" ]; then
  112. docker load -i "./images/php-fpm-mysql-7.4-${ARCH_SUFFIX}.tar"
  113. echo -e "${GREEN}✓ php-fpm-mysql-7.4 镜像加载完成 (${ARCH_SUFFIX})${NC}"
  114. elif [ -f "./images/php-fpm-mysql-7.4.tar" ]; then
  115. docker load -i ./images/php-fpm-mysql-7.4.tar
  116. echo -e "${GREEN}✓ Nginx 镜像加载完成${NC}"
  117. fi
  118. # if [ -f "minio-image-${ARCH_SUFFIX}.tar" ]; then
  119. # docker load -i "minio-image-${ARCH_SUFFIX}.tar"
  120. # echo -e "${GREEN}✓ MinIO 镜像加载完成 (${ARCH_SUFFIX})${NC}"
  121. # elif [ -f "minio-image.tar" ]; then
  122. # docker load -i minio-image.tar
  123. # echo -e "${GREEN}✓ MinIO 镜像加载完成${NC}"
  124. # fi
  125. echo ""
  126. # 停止已存在的容器(如果有)
  127. echo -e "${YELLOW}停止旧容器(如果存在)...${NC}"
  128. $COMPOSE_CMD down 2>/dev/null || true
  129. # 启动服务
  130. echo -e "${YELLOW}启动服务...${NC}"
  131. $COMPOSE_CMD up -d
  132. echo ""
  133. echo -e "${GREEN}等待 MySQL 启动完成...${NC}"
  134. sleep 15
  135. # 初始化 MySQL 数据库
  136. if [ -f "./mysql/init/mysql-init.sql" ]; then
  137. # echo ""
  138. # echo -e "${YELLOW}执行 MySQL 初始化脚本...${NC}"
  139. # # 等待 MySQL 完全就绪(兼容所有系统)
  140. # COUNTER=0
  141. # MAX_RETRIES=30
  142. # while [ $COUNTER -lt $MAX_RETRIES ]; do
  143. # if docker exec mysql mysqladmin ping -h localhost -uroot -pZskk@2025 --silent &> /dev/null; then
  144. # echo ""
  145. # echo -e "${GREEN}✓ MySQL 已就绪${NC}"
  146. # break
  147. # fi
  148. # echo -n "."
  149. # sleep 1
  150. # COUNTER=$((COUNTER + 1))
  151. # done
  152. # if [ $COUNTER -eq $MAX_RETRIES ]; then
  153. # echo ""
  154. # echo -e "${RED}✗ MySQL 启动超时${NC}"
  155. # exit 1
  156. # fi
  157. # echo ""
  158. # # 执行初始化脚本
  159. # docker exec -i mysql mysql -uroot -pZskk@2025 pacsonline < ./mysql/init/mysql-init.sql
  160. # if [ $? -eq 0 ]; then
  161. # echo -e "${GREEN}✓ MySQL 初始化完成${NC}"
  162. # else
  163. # echo -e "${RED}✗ MySQL 初始化失败${NC}"
  164. # fi
  165. echo ""
  166. echo -e "${GREEN}MySQL 将在首次启动时自动执行初始化脚本${NC}"
  167. echo ""
  168. else
  169. echo -e "${YELLOW}未找到 mysql-init.sql 文件,跳过数据库初始化${NC}"
  170. fi
  171. # 检查服务状态
  172. echo ""
  173. echo "=========================================="
  174. echo " 服务状态"
  175. echo "=========================================="
  176. $COMPOSE_CMD ps
  177. echo ""
  178. echo "=========================================="
  179. echo " 部署完成!"
  180. echo "=========================================="
  181. echo ""
  182. echo -e "${GREEN}MySQL 连接信息:${NC}"
  183. echo " 主机: localhost"
  184. echo " 端口: 3306"
  185. echo " 数据库: pacsonline"
  186. echo " 用户: pacsonline"
  187. echo " 密码: zskk@2025"
  188. echo " Root 密码: Zskk@2025"
  189. echo ""
  190. echo -e "${GREEN}Redis 连接信息:${NC}"
  191. echo " 主机: localhost"
  192. echo " 端口: 6379"
  193. echo " 密码: zskk@2025"
  194. echo ""
  195. # echo -e "${GREEN}MinIO 连接信息:${NC}"
  196. # echo " API 地址: http://localhost:9000"
  197. # echo " 控制台: http://localhost:9001"
  198. # echo " 用户名: admin"
  199. # echo " 密码: zskk8888"
  200. # echo ""
  201. echo -e "${YELLOW}查看日志:${NC}"
  202. echo " MySQL: $COMPOSE_CMD logs -f mysql"
  203. echo " Redis: $COMPOSE_CMD logs -f redis"
  204. echo " php-fpm: $COMPOSE_CMD logs -f php-fpm"
  205. echo " nginx: $COMPOSE_CMD logs -f nginx"
  206. echo ""
  207. echo -e "${YELLOW}停止服务:${NC}"
  208. echo " $COMPOSE_CMD stop"
  209. echo ""
  210. echo -e "${YELLOW}重启服务:${NC}"
  211. echo " $COMPOSE_CMD restart"
  212. echo ""
  213. echo -e "${YELLOW}删除服务:${NC}"
  214. echo " $COMPOSE_CMD down"
  215. echo ""