CRMEB/help/docker/run.sh
2026-03-23 14:57:47 +08:00

228 lines
5.6 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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