run.sh 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227
  1. #!/bin/bash
  2. # CRMEB Docker 开发环境管理脚本
  3. SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
  4. cd "$SCRIPT_DIR"
  5. # 配置文件(可自定义,默认 docker-compose.yml)
  6. COMPOSE_FILE="${COMPOSE_FILE:-docker-compose.yml}"
  7. # 颜色定义
  8. RED='\033[0;31m'
  9. GREEN='\033[0;32m'
  10. YELLOW='\033[1;33m'
  11. NC='\033[0m'
  12. # 帮助信息
  13. show_help() {
  14. echo -e "${GREEN}CRMEB Docker 管理脚本${NC}"
  15. echo ""
  16. echo "用法: $0 [选项]"
  17. echo ""
  18. echo "选项:"
  19. echo " install 安装并启动(清理数据,首次部署)"
  20. echo " start 启动容器"
  21. echo " restart 重启容器"
  22. echo " stop 停止容器"
  23. echo " delete 删除容器和数据"
  24. echo " logs 查看日志"
  25. echo " -h, --help 显示帮助"
  26. echo ""
  27. echo "环境变量:"
  28. echo " COMPOSE_FILE 指定 compose 文件 (默认: docker-compose.yml)"
  29. echo ""
  30. echo "示例:"
  31. echo " $0 install # 使用默认配置"
  32. echo " COMPOSE_FILE=docker-compose.build.yml $0 install # 使用其他配置"
  33. echo " $0 start # 启动服务"
  34. echo " $0 logs # 查看日志"
  35. }
  36. # 检查 docker-compose 是否可用
  37. check_docker() {
  38. if ! command -v docker-compose &> /dev/null; then
  39. echo -e "${RED}错误: docker-compose 未安装${NC}"
  40. exit 1
  41. fi
  42. if [ ! -f "$COMPOSE_FILE" ]; then
  43. echo -e "${RED}错误: 配置文件 $COMPOSE_FILE 不存在${NC}"
  44. exit 1
  45. fi
  46. }
  47. # 清理数据
  48. cleanup() {
  49. echo -e "${YELLOW}=== 清理旧数据 ===${NC}"
  50. # 删除 install.lock 文件
  51. if [ -f "../../crmeb/public/install.lock" ]; then
  52. echo "删除 install.lock..."
  53. rm -f ../../crmeb/public/install.lock
  54. fi
  55. # 删除 MySQL 数据目录内容
  56. if [ -d "mysql/data" ] && [ -n "$(ls -A mysql/data 2>/dev/null)" ]; then
  57. echo "删除 MySQL 数据..."
  58. rm -rf mysql/data/*
  59. fi
  60. # 删除 runtime 目录内容
  61. if [ -d "../../crmeb/runtime" ] && [ -n "$(ls -A ../../crmeb/runtime 2>/dev/null)" ]; then
  62. echo "删除 runtime 缓存..."
  63. rm -rf ../../crmeb/runtime/*
  64. fi
  65. # 设置目录权限为 777
  66. echo "设置目录权限..."
  67. chmod -R 777 ../../crmeb/runtime
  68. chmod -R 777 ../../crmeb/public
  69. chmod 777 ../../crmeb/.env 2>/dev/null
  70. chmod 777 ../../crmeb/.version 2>/dev/null
  71. chmod 777 ../../crmeb/.constant 2>/dev/null
  72. }
  73. # 清理网络
  74. cleanup_network() {
  75. echo "清理可能存在的冲突网络..."
  76. # 删除可能冲突的网络(docker-compose 默认使用目录名_app_net)
  77. for net in $(docker network ls --format "{{.Name}}" | grep -E "(app_net|docker_app_net|crmeb_app_net)"); do
  78. echo "删除网络: $net"
  79. docker network rm "$net" 2>/dev/null
  80. done
  81. # 清理未使用的网络
  82. docker network prune -f 2>/dev/null
  83. }
  84. # 安装(清理数据并启动)
  85. do_install() {
  86. check_docker
  87. echo -e "${YELLOW}=== 停止旧容器 ===${NC}"
  88. docker-compose -f "$COMPOSE_FILE" down 2>/dev/null
  89. cleanup
  90. # 清理网络
  91. cleanup_network
  92. echo -e "${YELLOW}=== 安装并启动 Docker 环境 ===${NC}"
  93. docker-compose -f "$COMPOSE_FILE" up -d
  94. echo ""
  95. echo -e "${GREEN}=== 安装完成 ===${NC}"
  96. echo "配置文件: $COMPOSE_FILE"
  97. echo "访问地址: http://localhost:8011"
  98. echo "查看日志: $0 logs"
  99. }
  100. # 启动
  101. do_start() {
  102. check_docker
  103. cleanup_network
  104. echo -e "${YELLOW}=== 启动容器 ===${NC}"
  105. docker-compose -f "$COMPOSE_FILE" up -d
  106. echo ""
  107. echo -e "${GREEN}=== 启动完成 ===${NC}"
  108. echo "配置文件: $COMPOSE_FILE"
  109. echo "访问地址: http://localhost:8011"
  110. }
  111. # 重启
  112. do_restart() {
  113. check_docker
  114. echo -e "${YELLOW}=== 重启容器 ===${NC}"
  115. docker-compose -f "$COMPOSE_FILE" restart
  116. echo ""
  117. echo -e "${GREEN}=== 重启完成 ===${NC}"
  118. }
  119. # 停止
  120. do_stop() {
  121. check_docker
  122. echo -e "${YELLOW}=== 停止容器 ===${NC}"
  123. docker-compose -f "$COMPOSE_FILE" down
  124. echo -e "${GREEN}=== 已停止 ===${NC}"
  125. }
  126. # 删除
  127. do_delete() {
  128. check_docker
  129. echo -e "${YELLOW}=== 删除容器和数据 ===${NC}"
  130. docker-compose -f "$COMPOSE_FILE" down -v
  131. rm -rf mysql/data/* 2>/dev/null
  132. rm -rf ../../crmeb/runtime/* 2>/dev/null
  133. rm -f ../../crmeb/public/install.lock 2>/dev/null
  134. echo -e "${GREEN}=== 已删除 ===${NC}"
  135. }
  136. # 查看日志
  137. do_logs() {
  138. check_docker
  139. docker-compose -f "$COMPOSE_FILE" logs -f
  140. }
  141. # 交互式菜单
  142. show_menu() {
  143. echo ""
  144. echo " 1、安装并启动"
  145. echo " 2、启动容器"
  146. echo " 3、重启容器"
  147. echo " 4、停止容器"
  148. echo " 5、删除容器和数据"
  149. echo " 6、查看日志"
  150. echo " 7、查看帮助"
  151. echo " 8、退出"
  152. echo ""
  153. read -p "请选择操作 (1-8): " choice
  154. echo ""
  155. case $choice in
  156. 1) do_install ;;
  157. 2) do_start ;;
  158. 3) do_restart ;;
  159. 4) do_stop ;;
  160. 5) do_delete ;;
  161. 6) do_logs ;;
  162. 7) show_help; show_menu ;;
  163. 8) echo "已退出"; exit 0 ;;
  164. *) echo "无效选择,请重试"; show_menu ;;
  165. esac
  166. }
  167. # 主逻辑
  168. if [ $# -eq 0 ]; then
  169. # 无参数时显示交互式菜单
  170. show_menu
  171. else
  172. case "$1" in
  173. install)
  174. do_install
  175. ;;
  176. start)
  177. do_start
  178. ;;
  179. restart)
  180. do_restart
  181. ;;
  182. stop)
  183. do_stop
  184. ;;
  185. delete)
  186. do_delete
  187. ;;
  188. logs)
  189. do_logs
  190. ;;
  191. -h|--help)
  192. show_help
  193. ;;
  194. *)
  195. show_help
  196. exit 1
  197. ;;
  198. esac
  199. fi