| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227 |
- #!/bin/bash
- # CRMEB Docker 开发环境管理脚本
- SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
- cd "$SCRIPT_DIR"
- # 配置文件(可自定义,默认 docker-compose.yml)
- COMPOSE_FILE="${COMPOSE_FILE:-docker-compose.yml}"
- # 颜色定义
- RED='\033[0;31m'
- GREEN='\033[0;32m'
- YELLOW='\033[1;33m'
- NC='\033[0m'
- # 帮助信息
- show_help() {
- echo -e "${GREEN}CRMEB Docker 管理脚本${NC}"
- echo ""
- echo "用法: $0 [选项]"
- echo ""
- echo "选项:"
- echo " install 安装并启动(清理数据,首次部署)"
- echo " start 启动容器"
- echo " restart 重启容器"
- echo " stop 停止容器"
- echo " delete 删除容器和数据"
- echo " logs 查看日志"
- echo " -h, --help 显示帮助"
- echo ""
- echo "环境变量:"
- echo " COMPOSE_FILE 指定 compose 文件 (默认: docker-compose.yml)"
- echo ""
- echo "示例:"
- echo " $0 install # 使用默认配置"
- echo " COMPOSE_FILE=docker-compose.build.yml $0 install # 使用其他配置"
- echo " $0 start # 启动服务"
- echo " $0 logs # 查看日志"
- }
- # 检查 docker-compose 是否可用
- check_docker() {
- if ! command -v docker-compose &> /dev/null; then
- echo -e "${RED}错误: docker-compose 未安装${NC}"
- exit 1
- fi
- if [ ! -f "$COMPOSE_FILE" ]; then
- echo -e "${RED}错误: 配置文件 $COMPOSE_FILE 不存在${NC}"
- exit 1
- fi
- }
- # 清理数据
- cleanup() {
- echo -e "${YELLOW}=== 清理旧数据 ===${NC}"
- # 删除 install.lock 文件
- if [ -f "../../crmeb/public/install.lock" ]; then
- echo "删除 install.lock..."
- rm -f ../../crmeb/public/install.lock
- fi
- # 删除 MySQL 数据目录内容
- if [ -d "mysql/data" ] && [ -n "$(ls -A mysql/data 2>/dev/null)" ]; then
- echo "删除 MySQL 数据..."
- rm -rf mysql/data/*
- fi
- # 删除 runtime 目录内容
- if [ -d "../../crmeb/runtime" ] && [ -n "$(ls -A ../../crmeb/runtime 2>/dev/null)" ]; then
- echo "删除 runtime 缓存..."
- rm -rf ../../crmeb/runtime/*
- fi
- # 设置目录权限为 777
- echo "设置目录权限..."
- chmod -R 777 ../../crmeb/runtime
- chmod -R 777 ../../crmeb/public
- chmod 777 ../../crmeb/.env 2>/dev/null
- chmod 777 ../../crmeb/.version 2>/dev/null
- chmod 777 ../../crmeb/.constant 2>/dev/null
- }
- # 清理网络
- cleanup_network() {
- echo "清理可能存在的冲突网络..."
-
- # 删除可能冲突的网络(docker-compose 默认使用目录名_app_net)
- for net in $(docker network ls --format "{{.Name}}" | grep -E "(app_net|docker_app_net|crmeb_app_net)"); do
- echo "删除网络: $net"
- docker network rm "$net" 2>/dev/null
- done
-
- # 清理未使用的网络
- docker network prune -f 2>/dev/null
- }
- # 安装(清理数据并启动)
- do_install() {
- check_docker
-
- echo -e "${YELLOW}=== 停止旧容器 ===${NC}"
- docker-compose -f "$COMPOSE_FILE" down 2>/dev/null
-
- cleanup
-
- # 清理网络
- cleanup_network
-
- echo -e "${YELLOW}=== 安装并启动 Docker 环境 ===${NC}"
- docker-compose -f "$COMPOSE_FILE" up -d
-
- echo ""
- echo -e "${GREEN}=== 安装完成 ===${NC}"
- echo "配置文件: $COMPOSE_FILE"
- echo "访问地址: http://localhost:8011"
- echo "查看日志: $0 logs"
- }
- # 启动
- do_start() {
- check_docker
- cleanup_network
- echo -e "${YELLOW}=== 启动容器 ===${NC}"
- docker-compose -f "$COMPOSE_FILE" up -d
- echo ""
- echo -e "${GREEN}=== 启动完成 ===${NC}"
- echo "配置文件: $COMPOSE_FILE"
- echo "访问地址: http://localhost:8011"
- }
- # 重启
- do_restart() {
- check_docker
- echo -e "${YELLOW}=== 重启容器 ===${NC}"
- docker-compose -f "$COMPOSE_FILE" restart
- echo ""
- echo -e "${GREEN}=== 重启完成 ===${NC}"
- }
- # 停止
- do_stop() {
- check_docker
- echo -e "${YELLOW}=== 停止容器 ===${NC}"
- docker-compose -f "$COMPOSE_FILE" down
- echo -e "${GREEN}=== 已停止 ===${NC}"
- }
- # 删除
- do_delete() {
- check_docker
- echo -e "${YELLOW}=== 删除容器和数据 ===${NC}"
- docker-compose -f "$COMPOSE_FILE" down -v
- rm -rf mysql/data/* 2>/dev/null
- rm -rf ../../crmeb/runtime/* 2>/dev/null
- rm -f ../../crmeb/public/install.lock 2>/dev/null
- echo -e "${GREEN}=== 已删除 ===${NC}"
- }
- # 查看日志
- do_logs() {
- check_docker
- docker-compose -f "$COMPOSE_FILE" logs -f
- }
- # 交互式菜单
- show_menu() {
- echo ""
- echo " 1、安装并启动"
- echo " 2、启动容器"
- echo " 3、重启容器"
- echo " 4、停止容器"
- echo " 5、删除容器和数据"
- echo " 6、查看日志"
- echo " 7、查看帮助"
- echo " 8、退出"
- echo ""
- read -p "请选择操作 (1-8): " choice
- echo ""
-
- case $choice in
- 1) do_install ;;
- 2) do_start ;;
- 3) do_restart ;;
- 4) do_stop ;;
- 5) do_delete ;;
- 6) do_logs ;;
- 7) show_help; show_menu ;;
- 8) echo "已退出"; exit 0 ;;
- *) echo "无效选择,请重试"; show_menu ;;
- esac
- }
- # 主逻辑
- if [ $# -eq 0 ]; then
- # 无参数时显示交互式菜单
- show_menu
- else
- case "$1" in
- install)
- do_install
- ;;
- start)
- do_start
- ;;
- restart)
- do_restart
- ;;
- stop)
- do_stop
- ;;
- delete)
- do_delete
- ;;
- logs)
- do_logs
- ;;
- -h|--help)
- show_help
- ;;
- *)
- show_help
- exit 1
- ;;
- esac
- fi
|